基于80C19单片机伺服电机调速系统软硬件设计 以下是系统初始程序代码: CSEG AT 2080N
MAIN_START: DI;设置中断
LD SP, #0200H;设置堆栈,设置中断屏蔽寄存器
LDB INT_MASK,#04H ;允许CAPCOMP0中断 LDB INT_MASK,#60H ;允许PI和EXTINT中断
LDB WSR,#3EH ;映射64字节窗口至1F80H~1FBFH LDB PI_MASK_W0,#10H ;设置外设中断屏蔽寄存器对WG初始化 LD INT_MASK,#04H ;设置PWM载波周期 LD FMIN,#MIN_PREQ ;置变频器最低频率 LD FMAX,#MAX_FREQ ;置变频器最高频率
LD STEP,CLOCK_I ;置初始变频器频率(调置频率) LD STEP+2,CLOCK_I+2 ;=CLOCK_I/FMIN
MULUB FCOMMAND,FMIN,#6 ;初始节拍时间STEP=CLOCK_I/(6*FMIN) DIVN STEP,FCOMMAND ;置初始AMP值 MULU BAMP_PTR,FMIN,#8
MULU AMPLITUDE,TC,AMP[AMP_PTR] LD AMPLITUDE,AMPLITUDE+2
CLRB PHASE ;清除节拍计数器
LDB WSR,#3FH ;映射64字节窗口至1FC0H~1FFFH LD WG_RELOAD_W0,TC ;置PWM载波周期 EI
LDB INT_PEND1,#20H ;把下一个值置给WG_COMP LD WG_OUT_W0,#0106H ;按节拍5设置波形发生器的输出 LD WG_OUT_W0,#2106H ;设置同步位
LDB WG_PROTECT_W0,#05H ;允许WG输出,上升沿触发中断 LD WG_CON_W0,3400H ;方式3,无信号时间为0,启动计数器 LDB INT_PEND1,#20H ;把下一个值置给WG_COMPX LDB WSR,#3DH ;映射64字节窗口至1F40H~1F7H
LDB T1CONTROL_W0,#0C1H ;允许T1,向上计数,内部时钟,预分频系数为2 LDB CAPCOMPO_CON_W0,#44H ;比较方式,允许外设功能
- 35 -
基于80C19单片机伺服电机调速系统软硬件设计 ADD CAPCOMPO_TIME_W0,TIMER1,STEP ;设置中断周期 以下是各部分子程序的设计。
5.2.2 键处理程序设计
判断键盘中有无键按下:将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。流程如图5.3所示。
196MC单片机的P0、P1口用作键盘I/O口,键盘的列线接到P1口的P1.0~P1.3,键盘的行线接到P0口P0.4~P0.7。4根行线和4根列线形成16个相交点。
(1)检测当前是否有键被按下。检测的方法是P1.0—P1.3输出全“0”,读取P0.4—P0.7的状态,若P1.0—P1.3为全“1”,则无键闭合,否则有键闭合。
(2)去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。 (3)若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.0—P1.3按下述依次输出4种组合:
P1.0 —>11111110 键盘扫描 P1.1 —> 11111101 P1.2 —>1 1111011 P1.2 —>1 1110111
有键闭合 Y延时去键抖动 扫描键盘 找到闭合键 Y 计算键值 N 闭合键释放 Y建立有 效标志 返回 N
N 建立无 效标志 图5.3 按键扫描流程
(4)在每组行输出时读取时P0.4—P0.7,若全为“1”,则表示为“0”这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法将闭合键的行值和列值转换成所定义的键值。
- 36 -
基于80C19单片机伺服电机调速系统软硬件设计 (5)为了保证键每闭合一次CPU仅作一次处理,必须去除键释放时的抖动。 流程图如图5.4所示
???? ?(4 X 4)???= 0;???=?? ?? ?? =11111110B ?????,??????? ??????????,???????? ? ?????+4 ? ?? -1?? ??N ?? =0? Y ? ? ? ? ? Y ?????? ??? ? ? ? ??????? ??? ?=0? N 图5.4 键盘扫描程序流程图
各按键功能定义如表5.1所示:
表5.1 键盘功能定义表
按键 功能 按键 功能 S1 启动电机 S5 正反转切换 S2 停止电机 S6 保留 S3 输入转速 S4 输入确定 S7~S16 数字0~数字9 5.2.3 LED动态显示子程序
显示子程序主要是显示实时转速值和电动机运行状态。从整体的经济性考虑,本系统采用了1只四位一体的7段的LED管显示4位实时转速值。显示采用动态扫描,译码通过软件以查表的方式完成。
在采用动态显示方式时,要使得LED显示得比较均匀,又有足够的亮度,需要设置适当的扫描频率。当扫描频率在70Hz左右时,能够产生足够的图形和较好的显示效果。一般可以采用间隔10ms对LED进行动态扫描一次。
程序流程如图5.5所示。
- 37 -
基于80C19单片机伺服电机调速系统软硬件设计
???????????????????????????????????????????N???????Y??图5.5 动态显示流程
5.3 捕捉中断服务程序
捕获单元中断(CAPS)子程序的主要功能是完成位置传感器信号的检测,并对传感器信号(Sa, Sb, Sc)进行译码,根据正反转命令控制逆变桥的导通顺序,输出换相信号,捕捉中断服务程序流程如图5.6所示。 开始
判断正反转
正转换相反转换相
捕获转子位置捕获转子位置 设置指针,指设置指针,指 向正转位置表向反转位置表 NN已到表底?已到表底? YY 修改指针,指向修改指针,指向 正转位置表头反转位置表头
返回
图5.6 捕捉中断程序
- 38 -
基于80C19单片机伺服电机调速系统软硬件设计 在捕捉中断服务程序中,正反转控制程序是最关键的部分。
无刷直流电动机由静止不动到正常运转必须经历一个起动过程。与同步电动机不同的是,无刷直流电动机始终工作在有位置反馈的自同步状态。在电机启动的时候,必须知道其初始位置,否则不能确定电流的初始流向,导致电机启动不起来。所以在主程序初始化结束后,应事先读取捕获单元状态,为电机的启动提供最初的转子位置信息。捕获单元状态与逆变桥的控制信号关系如表5.2所示。
表5.2 捕获单元与逆桥的控制关系表
捕获单元状态 101 001 011 010 110 100 000 111 正向电动 Q6Q1 Q1Q2 Q2Q3 Q3Q4 Q4Q5 Q5Q6 正向制动 Q3Q4 Q4Q5 Q5Q6 Q6Q1 Q1Q2 Q2Q3 禁止 禁止 反向电动 Q3Q4 Q4Q5 Q5Q6 Q6Q1 Q1Q2 Q2Q3 反向制动 Q6Q1 Q1Q2 Q2Q3 Q3Q4 Q4Q5 Q5Q6 5.4 采样中断服务程序
当键盘输入启动控制命令时,系统启动定时器定时(采样周期100ms)并开放该中断,当键盘输入停止控制命令时,系统关定时器并关断中断。
采样定时中断服务程序流程如图5.7所示,该程序主要完成:读速度测量值并实时显示、启动A/D读电流反馈值、计算偏差、调控制算法等功能。
开始读速度信号,保存送显示缓冲区求偏差调PI算法计算控制量,写控制字返回图5.7 采样中断服务流程图
- 39 -