1、直流电机PWM控制程序设计引 言目前各种控制系统、通信系统、网络系统、仪器仪表等都以微处理器为核心。几十年来,随着大规模集成电路技术的不断发展,微处理器的性能越来越高、体积越来越小、系列越来越多。微处理器从过去单纯的中央处理单元,发展到将众多外围设备集成到片内形成单片机,由过去的8位机,发展到16位、32位机。 由于大规模集成电路技术的突破,DSP控制器的价格已和普通单片机接近,但其性能远远超过了普通单片机。DSP控制器由DSP(Digital Signal Processor,数字信号处理器)发展而来,其突出特点就是采用多组总线技术实现并行机构,有独立的加法器和乘法器,有灵活的寻址方式,从而
2、可以非常快速地实现复杂算法。14直流电机PWM控制程序设计目 录课程设计任务书II直流电机PWM控制程序设计III引 言V1设计任务描述11.1设计题目11.2设计目的21.3设计要求21.4发挥部分22 设计思路23 设计方框图34 各部分程序设计44.1头文件44.2 初始化54.3 使能64.4定时器T3设置64.5 PWM与PIE设置75工作过程分析86 设计程序9小 结11致 谢12参考文献131设计任务描述1.1设计题目直流电机PWM控制程序设计1.2设计目的(1)掌握Launch Code Composer Studio使用方法。(2)掌握直流电机PWM控制原理。(3)学会用C语
3、言编写程序。1.3设计要求(1)研究直流电机PWM控制及利用DSP实现的方法。 (2)编写直流电机控制程序。(3)调试程序,观察结果。1.4发挥部分 自由发挥2 设计思路 用定时器设置周期中断,作为PWM的频率,比较寄存器里边设置两组数,作为PWM的脉宽。当定时器中断次数达到某个值时,可以改变比较寄存器中的值,从而改变PWM的脉宽,即改变高低电平的占空比,进而改变电动机的转速。令此程序循环进行下去就能实现电动速度的连续变化。程序的流程为首先进行初始化,并使能定时器中断,通过对程序的不断调用与循环来实现电机转速的连续调节 3 设计方框图程序初始化设定时钟频率选择复用引脚禁止看门狗定时器中断使能比
4、较寄存器PWM外接硬件电路4 各部分程序设计4.1头文件 #include DSP281x_Device.h /DSP281x头文件 DSP281x头文件包括很多子文件: #include DSP281x_SysCtrl.h / System Control/Power Modes #include DSP281x_DevEmu.h / Device Emulation Registers #include DSP281x_Xintf.h / External Interface Registers #include DSP281x_CpuTimers.h / 32-bit CPU Timer
5、s #include DSP281x_PieCtrl.h / PIE Control Registers #include DSP281x_PieVect.h / PIE Vector Table #include DSP281x_Spi.h / SPI Registers #include DSP281x_Sci.h / SCI Registers #include DSP281x_Mcbsp.h / McBSP Registers #include DSP281x_ECan.h / Enhanced eCAN Registers #include DSP281x_Gpio.h / Gene
6、ral Purpose I/O Registers #include DSP281x_Ev.h / Event Manager Registers #include DSP281x_Adc.h / ADC Registers #include DSP281x_XIntrupt.h / External Interrupts #include DSP281x_DefaultISR.h / DefaultISR4.2 初始化 void gptimer3_init(void); /T3初始化程序 void interrupt gptimer3_isr(void); /T3中断服务程序 void De
7、lay(unsigned int nTime); #define CTRGR * (int * )0x108000 /试验控制板参数 #define CTRGR * (int * )0x108007 unsigned int nCount; unsigned int datacnt,data2=0x4E,0x9B;/1-alpha=0.4;0.8,T3PR=0xC2=194/data中的值为PWM波形中保持低电平的时间,/可通过改变data中的值来改变PWM波形占空比void main(void)InitSysCtrl(); /系统初始化,PLL,时钟频率150MHz, /使能外设时钟,禁止W
8、DEALLOW;SysCtrlRegs.HISPCP.all=0x0003; /高速时钟的工作频率HSPCLK=25MHzEDIS;CTRGR=0x80; /初始化ICETEK-CTR实验板,使能电动机,关闭指示灯CTRGR=0x0; CTRGR=0x80;CTRGR=0; /关闭实验控制板东西方向的交通灯CTRGR=0x40; /关闭实验控制板南北方向的交通灯CTRGR=0xC0;CTRGR=0x81; /使能电动机EALLOW;4.3 使能 InitSysCtrl(); /系统初始化,PLL,时钟频率150MHz, /使能外设时钟,禁止WD CTRGR=0x81; /使能电动机 EvbRe
9、gs.COMCONB.all=0xA600; /使能比较输出PWM11EvbRegs.EVBIMRA.bit.T3PINT=1; /使能定时器3的周期中断EINT; /开总中断 4.4定时器T3设置for(;); /死循环,等待定时器3周期中断的产生void interrupt gptimer3_isr(void) /T3中断服务程序 nCount+;if (nCount=1000) nCount=1; datacnt+; if (datacnt=2) datacnt=0; EvbRegs.CMPR6=datadatacnt;EvbRegs.EVBIMRA.bit.T3PINT=1; /使能定
10、时器3的周中断EvbRegs.EVBIFRA.bit.T3PINT=1; /写1清除定时器1的周中断标志PieCtrlRegs.PIEACK.all=PIEACK_GROUP4; /清零PIEACK的第4组中断对于对应位(08)void gptimer3_init(void) /定时器T3中初始化程序EvbRegs.GPTCONB.all=0x0000; /无事件启动ADCEvbRegs.T3CON.all=0x1742; /T3连续增计数模式,128分频,使能比较,打开定时器EvbRegs.T3PR=0xc2; /定时器3周期=(T3PR+1)* 128/25 MHz=1ms /即产生的定频
11、PWM波形的频率位1kHzEvbRegs.T3CNT=0; /定时器计数器初值,从0开始计数EvbRegs.EVBIMRA.bit.T3PINT=1; /使能定时器3的周期中断EvbRegs.EVBIFRA.bit.T3PINT=1; /写1清除定时器1的周期中断标志4.5 PWM与PIE设置unsigned int datacnt,data2=0x4E,0x9B; /1-alpha=0.4;0.8,T3PR=0xC2=194 /data中的值为PWM波形中保持低电平的时间, /可通过改变data中的值来改变PWM波形占空比GpioMuxRegs.GPAMUX.all=0x0000; /PWM
12、5/GPIOA4设置I/O功能GPIOA4GpioMuxRegs.GPBMUX.all=0x00FF; /将PWM11/GPIOB4设置为PWM11功能EDIS;EvbRegs.ACTRB.all=0x0666; /空间矢量不动作,PWM11高电平有效EvbRegs.DBTCONB.all=0X0000; /禁止死区EvbRegs.COMCONB.all=0xA600; /使能比较输出PWM11EvbRegs.CMPR6=0x4E; /比较值gptimer3_init(); /T3中初始化程序DINT; /关闭总中断,清除中断标志,asm(setc INTM)IER=0x0000; /关闭外设
13、中断IFR=0x0000; /清中断标志InitPieCtrl(); /初始化PIE控制寄存器InitPieVectTable(); /初始化PIE中断向量表,DSP281x_PieVect.c.EALLOW;PieVectTable.T3PINT=&gptimer3_isr;/中断服务程序入口地址放入中断向量表EDIS; /依次使能各级中断:外设中相应中断位-PIE控制器-CPUPieCtrlRegs.PIEIER4.all=M_INT4; /GP定时器3使能位PIE第4组第4个,将其使能IER |= M_INT4; /PIE第4组对应CPU的可屏蔽中断4(INT4),将其使能(M_INT4
14、=8) 5工作过程分析程序中采用定时器T3周期中断产生固定频率的PWM波形,用来控制电动机转速。T3周期中断每发生10000次电动机转速改变一次,在本程序中电机始终为正转。当定时器产生周期中断时进入中断服务子程序gptimer3_isr( )。在gptimer3_isr( )中,判断中断次数,如中断数达到10000次,则改变比较寄存器的值,使得PWM脉宽改变,电机转速发生变化。因此,开始运行程序后,电机先以较慢的转速转动,经过10秒后,电动机转速变快,再经过10秒电动机转速又变慢,依次循环下去。程序外接电路如图5-1所示,将PWM的输出口与图中的1路相连接,就能实现对直流电动机的控制。图5-1
15、 直流电机电动控制硬件电路6 设计程序#include DSP281x_Device.h void gptimer3_init(void); void interrupt gptimer3_isr(void); void Delay(unsigned int nTime);#define CTRGR * (int * )0x108000 #define CTRGR * (int * )0x108007unsigned int nCount;unsigned int datacnt,data2=0x4E,0x9B; void main(void)InitSysCtrl(); EALLOW;Sys
16、CtrlRegs.HISPCP.all=0x0003; EDIS;CTRGR=0x80; CTRGR=0x0; CTRGR=0x80;CTRGR=0; CTRGR=0x40; CTRGR=0xC0;CTRGR=0x81; EALLOW;GpioMuxRegs.GPAMUX.all=0x0000; GpioMuxRegs.GPBMUX.all=0x00FF; EDIS;EvbRegs.ACTRB.all=0x0666; EvbRegs.DBTCONB.all=0X0000; EvbRegs.COMCONB.all=0xA600; EvbRegs.CMPR6=0x4E; gptimer3_init
17、(); DINT; IER=0x0000; IFR=0x0000; InitPieCtrl(); InitPieVectTable(); EALLOW;PieVectTable.T3PINT=&gptimer3_isrEDIS;PieCtrlRegs.PIEIER4.all=M_INT4; IER |= M_INT4; EINT; GpioDataRegs.GPADAT.bit.GPIOA4 =1;nCount=1; datacnt=0;for(;); CTRGR=0x0;CTRGR=0x80;CTRGR=0x0;exit(0);void interrupt gptimer3_isr(void
18、) nCount+;if (nCount=1000) nCount=1; datacnt+; if (datacnt=2) datacnt=0; EvbRegs.CMPR6=datadatacnt;EvbRegs.EVBIMRA.bit.T3PINT=1; EvbRegs.EVBIFRA.bit.T3PINT=1; PieCtrlRegs.PIEACK.all=PIEACK_GROUP4; void gptimer3_init(void) EvbRegs.GPTCONB.all=0x0000; EvbRegs.T3CON.all=0x1742EvbRegs.T3PR=0xc2; EvbRegs
19、.T3CNT=0; EvbRegs.EVBIMRA.bit.T3PINT=1; EvbRegs.EVBIFRA.bit.T3PINT=1; 小 结为期一周的DSP课程设计已经接近尾声了,感觉还是和以前的课程设计一样,过了充实的一周。本次课程设计其实不难,不需要我们实际动手去连接实物。只是通过教材来研究程序,设计程序。可是我们小组也遇到了不小的麻烦,由于实验室电脑上的软件不是很全面,头文件的问题困扰了我们两天的时间。我们不得不依照DSP281x_Device.h找到其中的各种子头文件。经过我们不断的调试程序,终于克服了这一难题。每天我们都很早的去教室,相互帮助尽早完成一个人的成果,然后其他人再接
20、上一个人的机器,没有人霸占机器好久,都互相谦让着,有时候我们都顾不上吃饭,第二天依旧如此。可以说为了这个课程设计,我们都付出了很多很多。即便后来成绩不一,但我们既然努力过,就不会后悔。 DSP这门学科在当今社会扮演着很重要的角色,我们所学的单片机与DSP很相像,但是我们所学的知识还尚且太浅,通过单片机与DSP课程设计我们就能发现单片机与DSP对现在的科学领域起着非常重要的作用,我们必须好好的去学习它们,争取对它们有更多的了解,这对我们今后的事业也有很大的帮助。我们的课程设计可以说是做一次少一次了,我们都很珍惜每一次机会。我们已经做过不少课程设计了,每做完一次都有不同的收获。课程设计丰富了我们的
21、知识,也锻炼了我们的设计能力。为我们将来的工作生活提供了有力的补给。 致 谢 这次课程设计对我来说是一件非常有意义的事情。它带给我的,不仅仅是完成一项设计而收获的开心和自豪,更是对我人生态度的培养。通过此次课设,使我们得以将课堂知识运用到实际的实践当中去,理论与实践相结合,才能得真知。这绝对是亘古不变的道理。查阅资料,请教同学,相互讨论,还好有老师和同学,一步一步的修改和讲解让我觉得非常的暖心。可能在以后步入社会以后这种感觉可能不复存在。所以我珍惜现在的每一次的设计。在这里要非常感谢吕勇军老师。每天都来实验室为同学们解答各种问题,当我们出错误的时候,吕老师都会在身边,所以我们感到非常的安心。这
22、也是一次跟老师更加近距离的学习机会。在这里还要感谢我同组的同学以及帮助我们的同学。在每天的课程设计中,都有你们的陪伴,在我有困难的时候,你们永远在我的身边。非常谢谢你们对我的帮助。 参考文献1 万山明.TMS320F281x DSP原理及应用实例M. 北京:北京航空航天大学出版社,2007.2 刘和平.数字信号处理器、结构及应用基础TMS320F28xM.北京:机械工业出版社,2007.3 苏奎峰. TMS320F281x DSP原理与开发.北京:电子工业出版社,2005.4 宁改娣.DSP控制器原理及应用M.北京:科学出版社,2009.5 三恒星科技. TMS320F281x DSP原理及应用实例M.北京:电子工业出版社,2009.6 张芳兰.TMS320C2xx用户指南M.北京:电子工业出版社,1999.7 百度