4. 3. 2软件系统的设计实现
由于使用反电势过零法实现电机的驱动,电机的控制将完全依赖于单片机的
控制程序。当电机高速运转时,转速最高可达60000r/min(本设计最高转速为
12000r/min),所以换相必须在很短的时间内完成。这就要求电机控制程序的算
法简单,精确并高效。
本系统控制软件的编制主要根据其欲完成的功能采用模块化结构设计,使之
具有较强的通用性和可移植性.控制软件分为主程序和中断服务子程序两大部分.
其中主程序包括:端口初始化子程序,电机启动判断子程序,软启动子程序,开环
调节子程序,闭环调节子程序;中断子程序包括8位,16位定时计数器溢出中断,
接收机脉冲捕获中断,功率保护中断等
该调速器对电机的控制是根据接收机发送来的信号的宽度来等比例的控制
电机的速度的。电机调速器接收到的接收机的信号是周期20ms.高电平的宽度
为lms-2ms,将1.1ms-1.9ms设置为调速范围。当脉冲输入小于900us时,认
为是无效信号。当接收脉冲大于1.9ms时,这时设置电机为最高转速。所以,调
速宽度为800us,程序使用单片机内部定时器作为检测调速信号的基准时钟。当
单片机工作在8MHz,定时器工作在8分频的模式下,定时器的精度为lush程序
检测控制信号可以达到较高的精度。
另外,航模在实际使用中经常会发生电池电压过高或过低、控制信号中断、
电机堵转等意外情况。电池电压过高或过低都可能导致控制板电路无法正常工
作。电机堵转可能造成电池与电机的烧毁。因此,作者在设计控制程序时加入了
如下保护措施:
1.在电机启动之前,程序首先检测电池的电压。如果电池电压过高或过低,
程序会发出警报。
2.程序通过一个定时器中断检测控制信号的输入情况。如果在一定时间内
没有信号输入,程序将自动关闭电机防止发生意外。
3.该单片机中没有看门狗功能,所以程序设计中对意外情况做计数累积处
理,正常后该计数器自动清零,连续不正常到一定次数程序自动复位。
下面我们分模块对程序功能进行描述:
4. 3. 2. 1主程序模块
系统上电后,首先配置所有MOSFET的控制端口为关断状态,接着进行部分
寄存器和存储单元的初始化,之后进入预定位阶段,这个阶段主要是调用beep
子程序,电机发出声音,表示电机上电准备工作完成,接下来等待电机启动指令
的输入,若没有有效的启动信号程序将在这里循环等待。若有有效的启动信号输
入,则进行启动初始化(主要是定时器和中断设置)。接下进入状态机来执行外
同步换相,这一阶段主要任务是:按默认时间发送PWM控制信号,并判断是否由
外同步状态切换至自同步状态。每个状态转换前检测过零信号有无,如果检测道
过零点就提前切换功率管的导通状态,如果检测不到就延时一段时间,再按照前
面说明的换向表依次导通各个功率管,每个状态保持的时间根据加速情况决定,
逐步的缩短每个状态的保持时间,提高逆变器的输出频率,保证电机在不失步的
前提下提高转子的转速。在每个状态都要完成延时两个时间:1,过零点到换相
点的延时;2,换相点到下一个过零点的时间。由于换相点的时间是计算得来的,
而到过零点的时间是变化的,所以在过零点到换相点这段时间处理周期检测子程
序,接收机脉冲捕获中断和其它运算子程序。主程序流程图如下。
4. 3. 2. 2中断程序
(1).接收机脉冲捕获中断
主要获取接收机信号的脉冲宽度。这个功能在整个程序中两个地方起到重要
作用:1,在启动时从检测到无效的接收机进好到连续检测到10个有效的接收机
信号,这样才认为这是有效的电机启动信号,否则继续等待。这就是主程序中的
启动判断。
2.当电机进入自同步阶段后实时检测出脉冲的宽度值,运算转换为占一空比
的值去配置PWM寄存器,对电机进行同步控制。图4.3.2.2.1为获取脉冲宽度
的接收机脉冲捕获中断的流程图。
(2).计数器比较匹配中断
该中断主要完成电机运行过程中对时间的控制。主要思想是过零点检测时,
首先由过零点检测子程序将过零点等待时间寄存器wt_comp_scan值写入该匹配
中断的控制寄存器中,间或处理一些耗时较少的子程序,等待该中断的产生。接
着一直检测过零点,一段固定的时间后没有检测到过零点,则按顺序换相。对于
检测到过零点,接着检测换相点,将时间计算子程序中的换相点等待寄存器
wt_FET_switch的值写入计数器中断匹配控制寄存器中,然后去做其它子程序的
处理,等待中断的到来。
4. 3. 2. 3子程序模块
(1).beep子程序
beep子程序也有两个功能:其一,完成电机的预定位。其二,让电机发出
鸣叫生,可以作为电机准备就绪的信号。这个程序主要通过同时打开A相的P型
MOSFET和B相的N型MOSFET,然后同时关断重复多次就可产生电机的鸣叫声。
ldi tempt, 128
beepes ApBn:clr tempt
out TCNTO, tempt
sbi PORTB, ApFET:ApFET on
sbi PORTB, BnFET;BnFET on
beep_pBn10:in tempt,TCNTO
cpi tempt,32
brne beep_ApBn10
cbi PORTB,ApFET
cbi PORTB,BnFET
ldi tempi,8
beep_ ApBn12: clr tempt
out TCNTO, tempt
beep_ ApBn13:in tempt,TCNTO
cpi tempt,255
brne beep_ApBn13
dec tempi
brne beep_ApE3n12
dec tempt
brne beep_ApBn
(2).周期检测子程序
该模块负责对电机运行一周的时间进行准确的测量,并对该周期值进行运算
分别得到过零检测时间,换相点检测时间等,为过零检测子程序,换相点检测子
程序准备。具体的原理是:状态机的六个状态代表电机转动时切换mosfet的六
个步骤,其顺序与换相表顺序相同。这六个状态是一直循环的,所以利用计数器
一,在状态机的每个状态6记录时间与上一个在状态6记录的时间进行减法运算
得到了电机转动一个周期的时间。
(3).时间计算子程序
该子程序是根据周期检测子程序得到的周期值进行运算。我们知道电机转动
一周有六个过零检测时间和六个换相点检测时间,共计12个。所以我们本来应
该将周期除以12得到30度的电角度去控制电机,考虑到首先用汇编语言实现除
以12比较麻烦,耗时较长,还有除12后得到的时间存在不能让我们准确检测到
过零点等因素,我们除以16可以得到22. 5的电角度去检测过零点,这样我们检
测到过零点的几率较大。对于换相点,我们如果采用22. 5度的电角度去换相,
降低电机的效率,所以我们用转动周期除以6Q得到5. 6的电角度,去补偿换相
点的电角度。这样我们的到过零点的电角度和换相点的电角度(也就是时间或计
数值),存入过零点等待时间寄存器wt_comp_scan和换相点等待寄存器
wt_FET_switch。以备其它程序使用
(4) .PWM计算子程序
该子程序完成的功能是将得到的外部控制脉冲的宽度经过计算转换为PWM
的占空比数值。我们知道外部控制脉冲的宽度是从1000us到2000us,我们利用
从1100us到1900us的800us作为调速范围,程序将这个范围除以8后为0到
100直接存入PWM寄存器作为占空比,直接对电机
(5).状态机模块
状态机模块是程序的核心部分,负责开环启动过程,闭环的加速减速操作,
以及在过程中检测脉冲输入信号,调节PWM占空比,进行过流检测,欠压检测,
在出现异常情况时直接复位单片机。
该模块的主要思想是:在每个状态都调用两次该计数器比较匹配中断,完成
反电势过零检测,检测到过零点然后关闭己经打开的MOSFET,然后按照换相表
顺序切换MOSFET的开关,依次循环。在每个状态的换相点检测时,有一段时间
时在延时等待,在这段时间里我们还用来做其它用途,比如进行脉冲输入信号的
检测,占空比的计算,周期检测等等。每个状态的流程图基本一致,如下图
4.3.2.3所示。不同的地方有以下几点:
1.在MOSFET开关切换点,是按照换相表进行的。尤其注意,先关后开的原
则,否则容易使同一对上下MOSFET同时打开,导致电流过大,烧毁调速器。
2.在切换开关等待时间时,完成的任务不同。 |