当前位置:首页 > 李江基于MSP430G2553单片机的直流电机PWM调速系统设计 - 图文
时间。公式如下:
tdead?Ttimer?d
式中tdead为死区时间,Ttimer为定时器的时钟周期,d为捕获/比较寄存器的差值。
常采用的生成PWM波方法有3 种:一是完全由模拟电路生成;二是由数字电路生成;三是由专用集成芯片生成。模拟方法电路复杂,硬件太多,抗干扰性能差,有温漂现象,系统可靠性低;数字方法按照不同的数字模型用计算机算出各切换点,将其存入内存,然后通过查表及必要的计算产生PWM波,该方法调频范围不宽。输出的PWM波1/4 轴不对称,会产生偶次谐波,低频区尤其严重;由专用集成芯片生成PWM 波的技术近年来被广泛采用,常用的有HEF4752,SLE4520,MA818,MA828,MA838 和MITEL公司研制的三相、单相PWM 产生器SA828,SA838系列芯片。它们多与微处理器连接,完成外围控制功能,但在系统构成上仍然较复杂,成本高。与上述方法相比,本系统的优点是显而易见的。
MSP430单片机是一种新型的单片机,具有超低功耗和适应工业应用的特点,用美国TI公司生产的MSP430系列单片机设计的直流电机的PWM调速系统结构简单,易于维护,性能价格比高,因而具有实用价值。
8 总结思考
本作品是以MSP430G2系列Launchpad开发平台为核心板,配上直流电机,以及自己设计的直流电机驱动模块,软件设计等等,利用单片机产生的PWM波的占空比的大小来调节直流电机的转速,本作品的特点是稳定性方面,采用了加速曲线的措施实现了较快的转速,同时保证系统的运行稳定。当然同时也发现了一些硬件和软件方面的问题,比如如果用TA中断来代替延时,程序就用跑飞,而用空循环就可以正常运行;再比如同样的程序,用IAR集成开发工具下载调试,电机就可以正常转动,而用CCS却不行。
参考文献
[1] 胡大可. MSP430系列FLASH型超低功耗16位单片机[M] . 北京: 北京航空航天大学出版社, 2001.
[2] 左玉兰,马宗龙. 直流电机调速系统的单片机控制[ J] . 集成电路应用, 1999.
12
[3] 王福瑞. 单片微机测控系统设计大全[ M] . 北京: 北京航空航天大学出版社, 1999.
[4] 陈国呈. PWM变频调速技术.北京:机械工业出版社,1998 [5] MSP430G2553 Data Sheet.
[6] 童诗白,华成英. 模拟电子技术基础(第四版),清华大学出版社,2006.01
附录
//程序清单
#include \void Timer_A0_init() {
TA0CTL=TASSEL_2+TACLR+MC_1;
//Timer_A计数器的时钟源选择辅助时钟SMCLK,选择增计数模式 TA0CCTL1=OUTMOD_7;//选择比较模式7
TA0CCR0=8000; //设置TA0CCR0初始值为8000
TA0CCR1=1000; //设置TA0CCR1初始值为1000,(CCR1/CCR0)代表占空比 }
void main( void ) {
WDTCTL = WDTPW + WDTHOLD;//关闭看门狗 P1DIR|=BIT2+BIT6; //设置P1.2和P1.6为输出方向 P1SEL|=BIT2+BIT6; //P1.2和P1.6作为PWM输出
P1DIR&=~(BIT3+BIT4); //P1.3和p1.4作为输入,按键改变PWM占空比 P1OUT|=(BIT3+BIT4);//P1.3和p1.4上拉输入 P1REN|=(BIT3+BIT4); //P1.3和p1.4上拉电阻使能 Timer_A0_init(); while(1) {
if (!(P1IN&BIT3)) //判断P1.3按键是否按下 {
13
_delay_cycles(10000);//延时消抖 if (!(P1IN&BIT3)) //判断P1.3按键是否按下 {
if (CCR1>=8000) CCR1=1000;//如果CCR1>=8000,CCR1赋值为1000 else CCR1+=1000;//否则CCR1=CCR1+1000 }
while(!(P1IN&BIT3)); //判断P1.3按键是否按下 _delay_cycles(10000);//延时 }
if (!(P1IN&BIT4)) //判断P1.4按键是否按下 {
_delay_cycles(10000);//延时消抖
if (!(P1IN&BIT4)) //判断P1.4按键是否按下 {
if (CCR1<=1000) //如果CCR1<=1000,CCR1赋值为1000 CCR1=8000;
else CCR1-=1000; //否则,CCR1=CCR1-1000 }
while(!(P1IN&BIT4)); //判断P1.4按键是否按下 _delay_cycles(10000); //延时 } } }
14
共分享92篇相关文档