无刷直流电机控制器的软件设计(编辑修改稿)内容摘要:
K=0; TMOD=0x02,开定时器 0和 1中断,置 139us定时器初值 1TH1=31,TL1=128,置定时器 0的 278us 计数初值; TH0=0x00,TL0=0x00清零显示速度,开定时器 0;第二,只有当启动键按下时才能进入其他按键查询工作,电机才可能有正转、反转、加速、停止等工作状态,否则程序会一直查询启动键,直 到其被按下才进入下一个操作;第三,当 140MS 计时完成时,接收到来自中断服务程序中的 temp=1 的信号,开始计算速度值 sd,计算公式为sd=((count/12)/140)*1000(单位是转 /秒 ),并且将开始计算速度标志位 temp 置为0,计时计数变量 T0_count=0,霍尔改变次数计数变量 count=0。 正反转程序流程图 表 41 正转霍尔状态与控制字对应关系表 霍尔状态 101 100 110 010 011 001 hall 值 0x05 0x04 0x06 0x02 0x03 0x01 控制字 0x13 0x07 0x0d 0x1c 0x34 0x31 表 42 反转霍尔状态与控制字对应关系表 霍尔状态 101 001 011 010 110 100 hall 值 0x05 0x01 0x03 0x02 0x06 0x04 控制字 0x1c 0x0d 0x07 0x13 0x31 0x34 图 42 正转流程图 Z_ZHUAN() 通过 switch查询获得相应控制字赋给 P1口 开始 返回到主程序 南昌航空大学学士学位论文 16 定义变量 i=0,将两个值进行分离分别得到个、十位 开始 {switch(hall) { case 0x05: P1=0x13。 break。 case 0x04: P1=0x07。 break。 case 0x06: P1=0x0d。 break。 case 0x02: P1=0x1c。 break。 case 0x03: P1=0x34。 break。 case 0x01: P1=0x31。 break。 default: P1=0x15。 break。 } } 采用手动转电机转轴的方式确定电机转动的霍尔状态变换顺序,电机在 180176。 内霍尔状态改变六次,自定义电机逆时针转为正转,在正转子程序中, hall 是代表霍尔状态的变量,电机不停地转动,霍尔状态在不断的改变, hall 有 0x0 0x00x0 0x0 0x0 0x01 六个值。 通过不停地查询霍尔状态得到 hall 当前的值,再运用 switch~ case 语句查表获取控制字送到 P1 口低六位以控制功率管。 这样循环操作,以达到控制电机的转动和换相。 定义电机顺时针转为反转,反转原理与正转类似,只是控制字不同,具体可以参照表 42。 当有正转键按下时,置正转标志flag_z=1,有反转键按下时 置 flag_z=0,在工作子程序( G_ZUO())中判断若 flag_z=1,转到正转子程序执行,当 flag_z=0 时转到反转子程序执行。 显示子程序流程图 接 74ls48 芯片的四个输入端控制数码管的段选通, 输出电机控制字,经光耦隔离后到 ir2103 驱动芯片的输入端,控制功率管的导通, 接三个霍尔信号, 接蜂鸣器(起报警作用), 为 PWM 波的输出端, 接 74ls138 译码器的输入端,控制数码管的位选通。 给控制译码器的 P0口赋给相应的值 四位一体数码管显示相应的值 返回 四位数据显示完成否 ? N Y 南昌航空大学学士学位论文 17 图 43显示子程序流程图 表 43 74ls48 译码器真值表 分析:四位一体数码管显示比用八段数码管显示要简单,设定前两个数码管显示状态指示值(其中 11表示启动, 00表示停止, 01表示正转, 02表示反转, 03表示逐步加速, 04表示获取固定速度),后两位用来显示当前速度值(速度单 位是转 /秒)。 状态指示值和速度值通过参数的形式送来赋给形参 zhi_s、 sudu, tempdata[]是存放四位数据的数组,由 zhi_s/10 获得状态指示值的十位存放在 tempdata[0]中,由 (zhi_s%10)获得其位值存放在 tempdata[1]中;由 sudu/10 获得速度值的十位存放在 tempdata[2]中;由 sudu%10获得个位值存放在 tempdata[3]中。 通过查tablewe[]表获得位码 tablewe[i], 查 tempdata[]表获得段码 tempdata[i],令P0=tempwe[i]|tempdata[i]每显示完一位(如个位)变量 i 就加 1,以达到动态显示的效果。 十进制 输入 BI/RB0 输出 LT RBI DCBA a b c d e f g 0 H H 0000 H 1 1 1 1 1 1 0 1 H X 0001 H 0 1 1 0 0 0 0 2 H X 0010 H 1 1 0 1 1 0 1 3 H X 0011 H 1 1 1 1 0 0 1 4 H X 0100 H 0 1 1 0 0 1 1 5 H X 0101 H 1 0 1 1 0 1 1 6 H X 0110 H 0 0 1 1 1 1 1 7 H X 0111 H 1 1 1 0 0 0 0 8 H X 1000 H 1 1 1 1 1 1 1 9 H X 1001 H 1 1 1 0 0 1 1 南昌航空大学学士学位论文 18 图 44 正转状态显示图南昌航空大学学士学位论文 19 图 45 反转状态显示图 中断服务程序及其流程图 从换相过程中的转矩脉动角度来看, H_PWML_PWM 方式的转矩脉动最大,以及根据老师的建议,因此选择 H_PWML_PWM 方式进行调速控制。 定时器 0中断服务程序: void timer0( ) interrupt 1//278US 自动重装 { PWM=1。 TR1=1。 hall=0x07amp。 P2。 if(hall!=hall_1) { count++。 hall_1=hall。 } if(T0_count=504)T0_count++。 //140ms 未到 else temp=1。 } 定时器 1中断 服务程序: void timer1( ) interrupt 3//初始 139us { TR1=0。 t1=0。 if(PWMZK=31) { PWMZK=0。 } TH1=31PWMZK。 TL1=119PWMZK。 南昌航空大学学士学位论文 20 定时器 1 中断入口 定时器中断 0 入口 返回 定时满 140ms 否。 开定时器 1, PWM 波输出高,读取霍尔状态值 记录霍尔状态改变次数 ,并将当前状态值存在霍尔比较变量中 } 图 46 定时器 0 中断服务程序流程图 图 47 定时器 1 中断服务程序流程图 分析:用定时器 0和 1同时进行来获得周期一定(为 278US)的 pwm 波 ,用定时器 0作为 278us 的标尺,在定时器 0的中断服务程序中获取霍尔信号,获取霍尔状态值的方式是 P2amp。 0x07,即取 P2口的第三位,并比较其是否改变,记录改变次数存于霍尔状态改变否。 Y N N Y 定时次数 T0_count加 1 返回 关定时器 1, PWM 波的输出为低 重新赋给定时器 1计数初值 置 temp标志位为 1 南昌航空大学学士学位论文 21 count 中;测速方式是记录一定时间(本设计为 140ms)内霍尔状态改变的次数,根据电机转一圈改变霍尔状态 12次的规律可测出速度值,当定时器 0定时次数T0_count 值达到 504 次(即满 140ms)时令开始计算速度标志位 temp=1,进入到主程序中计算速度值。 定时器 1 的计数初值 TH1=31PWMZK, TL1=128PWMZK;当 变量PWMZK 的值发生改变时,定时器 1的定时时间也就发生改变,即 PWM 波输出高电平脉宽发生改变,这样就可以改变功率管的平均电压,从而改变其平均电流已达改变速度之效。 加速模块 介绍 if(s4==0) { delay(10)。 if(s4==0)PWMZK++。 } 图 48 加速子程序流程图 分析:若有加速键按下, PWMZK 值加 1,根据 定时器 1 赋计数初值的方式TH1=31PWMZK, TL1=128PWMZK 可知, pwm 波输出高电平时间就增长,功率管导通时间增长, 140ms 内霍尔信号改变的次数 count 值增大,速度值 sd随之增大,显示值就相应改变了,根据数码管显示可知速度改变的大小。 如下是加速前后的比较图 开始 返回 加速键按下 PWM 波高电平持续时间增长 南昌航空大学学士学位论文 22 图 49 未启动显示图 图 410 启动后显示图 图 411 加速后显示图 图 412 特定速度值键按下后显示图 if(s0==0) { delay(10)。 if((s0==0)amp。 amp。 (flag_z!=2)) { PWMZK=20。 flag_j=0。 } } 南昌航空大学学士学位论文 23 图 413 固定速度值程序流程 图 分析:任何加速状态的前提是处在正转或反转的情况下,因此必须 flag_z 标志要有效。 起初的加速键只能在较小程度上进行加速操作,为达到快速到一定转速的目的,本设计在按键设计部分增加了固定速度按键 S0,当该按键按下时,负责调节脉宽的变量 PWMZK 直接变为 20,定时器 1 就可以得到固定的计数初值,这样就能获得某个设定的转速,通过计算,可以得到此时相应的速度。 按键查询子程序及其流程图 独立按键查询程序比较简单,下面是一个按键的查询代码,其他键类似。 if(s2==0) { delay(10)。 if(s2==0)flag_z=1。 } 分析:按键查询子程序流程图如图 414,程序中,主要做的事就是判断按键是否按下,根据按下的键置相应的标志位,这样在工作子程序( G_ZUO())中根据相应的标志位转到对应的子程序中执行。 本设计中,正反转标志位使用同一个 flag_z,这样就避免了在反转程序中将正转标志位置 0,在正转程序中将反转标志位置 0,减小了出错概率。 当有停止键按下时,设定停止标志位,后进入相应的工作子程序。 开。无刷直流电机控制器的软件设计(编辑修改稿)
相关推荐
已连续数年名列世界首位,饲料生产已成为世界第二生产大国。 目前,畜牧业产值占农业产值已接近 30%,畜牧业在农业结构战略性调整、提高农业整体效益、促进农民增收、增加农民就业以及安全食品生产等方面起到了主导作用。 畜牧业已成为国民经济中的重要组成部分,成为农业和农村中的支柱产业。 我国现有的畜牧养殖模式中,最显著的特点是面广量小、分散生产。 广大农村仍处在“后院养殖”的状态,以规模小
15 天,可节约饲料 15 千克,每头猪可降低成本 27 元,改善猪肉 品质提高瘦肉率,每公斤增收1 元,按 90 公斤计每头猪实际增收 117 元,每头猪净利润 250 余元,产品上市以来,深受消费者欢迎,截至目前 95%瘦肉型猪都被运销外地市场。 技术的消化、吸收、创新和后续发能力 本项目采用引进不同杂交组合的二元母本与不同品种的优种公猪杂交生产出不同杂交组合的三元杂交商品猪,制定严格的程序
误差的相对值,电压互感器的精度可分为 , 等三级。 本次设计采用的电压互感器为 SPT204 型,额定输出电压为 20~20V。 2.电流互感器 测量高压线路的电流,或测量大电流不宜将仪表直接接入电路,而用一台有一定的电压比的升压变压器,即电流互感器将高压线路隔开。 电流互感器的一次侧额定电流的范围可为 5~25000,而次侧的电流均为 5A 或1A。 电流互感器存在变流比和相位俩种误差。
能提供相位超前的网络,因此,我们就可以把高通滤波器看成是一个微分网络。 其中的 值越大,相位超前也就越大,我们所获得的信号也就越近似于微分 信号。 我们在后面的无人机纵向飞行控制律的仿真中,一律取。 另外,积分环节也可以根据其定义 在软件中计算实现,其中, 可在软件中根据 CPU的计算频率得到。 由于积分是一个连续累加的过程,所以信号的积分值可能会达到一个很大的值,这会给系统带来意想不到的结果。
步进电动机转动的条件是:按照一定顺序对其励磁绕阻进行通电即可实现其转动,通电的相序不同,其转动的方向也会不一样。 因此在理论上我们可以制造出任何相序的步进电动机,但是由于制造工艺、制造价格等多方面因素限制,市场上一般售卖的步进电动机相序以二至五相的居多。 感应子式步进电机一般可以按照机座号和相许数量进行细致分类。 按照机座号可 分为:42BYG、 57BYG、 86BYG、 110BYG
t 是诱导日产液量的油井 ,气液比大于 150 应该选择基本的多级气锚 ; ③ 螺旋距是影响分气效果好或坏 的 重要参数之一。 根据不同的生产井应选择不同的 螺距 (在锚筒外 径 一定的条件下 )在一定条件下 , 合合理的螺距应是气液混合物进入锚筒内的流速大于液流流经泵阀孔径时流速的 20%为宜; ④ 对于油井腐蚀气体含量较高 , 螺钉装配螺旋叶片厚度不宜过小 , 应该在 毫米 以上; ⑤