多路舵机控制PWM发生器的设计与Proteus仿真
3.2 软件设计
本系统使用的是单片机的定时器方式2,方式2又被称为8位初值自动重装定时器/计数器,THX被作为常数缓冲器,当TLX计数溢出时,在溢出标志TFX置1的同时,还会自动将THX中的常数重新装入TLX中,使TLX从初值开始重新计数,这样就避免了人为软件重装初值所带来的时间误差,从而提高了定时器的计数精度,因此,方式2特别适合用做对精度要求较高的脉冲信号发生器的设计。因为其计数器只有8位,故最多能装载的计数个数为28=256个,在12 MHz的晶振频率下,单次最多可计时256μs。系统软件可以基于Keil编写,proteus可直接调用Keil编译生成的.HEX(16进制)文件进行仿真,当Keil程序修改重新编译后,Proteus不用做任何改动,直接运行便可看到修改后的程序运行效果。
现以四路舵机控制为例来定义五个变量count,servo1,servo2,servo3,servo4。变量count用于对中断计数,servo1~4用于存储四个PWM信号的脉宽值,程序中使用0.05 ms的定时器周期,定时器每0.05 ms产生一次中断,同时变量count加1,当count加到400时,表示20 ms时间到,count归零重新计数,在每一次重新计数开始时,单片机的所有舵机控制I/O口置高,当count加到等于servo1时,控制舵机1的I/O口置低,这样就会产生一个周期为20 ms,脉冲宽度等于servo1×0.05 ms的PWM脉冲,其他三路与之类似。servo1~4的值可通过按键输入改变,因定时器周期为0.05 ms,故PWM可控脉宽步进值为0.05 ms,对应被控舵机的输出角度步进4.5°。如果需要更小的步进值,只需改变定时器周期和几个变量的值即可,如果需要更多路的PWM波输出,也仅需相应增加几个变量即可;如果需要更多按键来控制舵机输出转角,最好将按键接称阵列式,这样比较节省I/O口。经计算,当需要0.05 ms的计数周期时,应将THX和TLX都写入0xCE。设4个舵机的信号端口分别为IO1~IO4,其中断程序流程图如图3所示。
系统中的主程序包含定时器的设置与使能、按键检测、变量赋值等,在此不再赘述。
4 系统仿真
在Proteus中绘制好电路,同时设置好相关参数,然后运行程序,即可直观地看到程序执行结果,通过按键还可改变舵机的输出角度。舵机输出角度执行结果如图4所示。
通过系统中连接的示波器可以显示多路PWM波输出结果。其PWM波形如图5所示,图中的方格横向每格代表0.2 ms,纵向每格代表5 V。从示波器仿真结果来看,输出的四路PWM波与四个舵机输出转角相对应,其波形都非常好。
5 结语
本文通过在Proteus中对电路的设计和Keil中对软件的编写,用51单片机实现了多路PWM脉冲的输出,该系统具有硬件电路简单、软件可靠、资源节省等特点。可用于航模、机器人等设计制作过程中的舵机控制和辅助系统调试,也可以用于其他需要多路PWM脉冲的系统。
Proteus 仿真 设计 发生器 控制 PWM 路舵机 相关文章:
- 基于PROTEUS技术的ARM7显示系统设计与仿真实现(11-22)
- 单片机虚拟试验箱设计与研究(03-08)
- 基于PROTEUS软件的数字电压表印刷电路板设计(05-01)
- 基于51单片机的数字电压表仿真设计(05-29)
- Proteus在单片机教学和科技制作中的应用与实践(03-02)
- Proteus软件仿真与Keil的单片机系统设计(09-08)