1、步进电机PWM控制程序设计论文沈 阳 工 程 学 院课 程 设 计设计题目:步进电机PWM控制程序设计1.设计主要内容及要求;1)研究步进电机PWM控制及利用DSP实现的方法。2)编写步进电机控制程序。3)调试程序,观察结果。2.对设计论文撰写内容、格式、字数的要求;(1).课程设计论文是体现和总结课程设计成果的载体,一般不应少于3000字。(2).学生应撰写的内容为:中文摘要和关键词、目录、正文、参考文献等。课程设计论文的结构及各部分内容要求可参照沈阳工程学院毕业设计(论文)撰写规范执行。应做到文理通顺,内容正确完整,书写工整,装订整齐。(3).论文要求打印,打印时按沈阳工程学院毕业设计(论
2、文)撰写规范的要求进行打印。(4). 课程设计论文装订顺序为:封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、参考文献。3.时间进度安排;顺序阶段日期计 划 完 成 内 容备注17月2日教师讲解题目,学生查阅相关资料27月3日确定步进电机控制算法以及程序流程37月4日编写程序47月5日调试程序57月6日撰写论文,程序验收沈 阳 工 程 学 院步进电机PWM控制 课程设计成绩评定表指 导 教 师 评 审 意 见评价内容具 体 要 求权重评 分加权分调研论证能独立查阅文献,收集资料;能制定课程设计方案和日程安排。0.15432工作能力态度工作态度认真,遵守纪律,出勤情况是否良好,能够独
3、立完成设计工作, 0.25432工作量按期圆满完成规定的设计任务,工作量饱满,难度适宜。0.25432说明书的质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。0.55432指导教师评审成绩(加权分合计乘以12) 分加权分合计指 导 教 师 签 名: 年 月 日评 阅 教 师 评 审 意 见评价内容具 体 要 求权重评 分加权分查阅文献查阅文献有一定广泛性;有综合归纳资料的能力0.25432工作量工作量饱满,难度适中。0.55432说明书的质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完
4、备,书写工整规范。0.35432评阅教师评审成绩(加权分合计乘以8)分加权分合计评 阅 教 师 签 名: 年 月 日课 程 设 计 总 评 成 绩分引 言目前各种控制系统、通信系统、网络系统、仪器仪表等都以微处理器为核心。几十年来,随着大规模集成电路技术的不断发展,微处理器的性能越来越高、体积越来越小、系列越来越多。微处理器从过去单纯的中央处理单元,发展到将众多外围设备集成到片内形成单片机,由过去的8位机,发展到16位、32位机。 由于大规模集成电路技术的突破,DSP控制器的价格已和普通单片机接近,但其性能远远超过了普通单片机。DSP控制器由DSP(Digital Signal Process
5、or,数字信号处理器)发展而来,其突出特点就是采用多组总线技术实现并行机构,有独立的加法器和乘法器,有灵活的寻址方式,从而可以非常快速地实现复杂算法。而此次是步进电机PWM控制程序设计,采用全步四相四拍控制方式,用四个控制接口为四个引脚,按一定的频率循环置高电平即可使步进电机转动。而用户可以通过修改定时器1的周期以及PWM的比较功能调整电机运行方向与状态。1设计任务描述1.1设计题目步进电机PWM控制程序设计1.2设计目的(1)掌握Launch Code Composer Studio使用方法。(2)掌握直流电机PWM控制原理。(3)学会用C语言编写程序。1.3设计要求(1)研究直流电机PWM
6、控制及利用DSP实现的方法。 (2)编写直流电机控制程序。(3)调试程序,观察结果。1.4发挥部分 自由发挥2 设计思路步进电机采用全步四相四拍的控制方式,其接口为EVA的PWM1,PWM2,PWM3,PWM4引脚。它们分别为步进电机四相的控制端。按照一定频率循环置高电平即可使步进电机转动。用定时器设置周期中断,作为PWM的频率,比较寄存器里边设置两组数,作为PWM的脉宽。当定时器中断次数达到某个值时,可以改变比较寄存器中的值,从而改变PWM的脉宽,即改变高低电平的占空比,进而改变电动机的转速。令此程序循环进行下去就能实现电动速度的连续变化。可以通过修改定时器1的周期以及PWM的比较功能调整电
7、机运行方向与状态, 3 设计方框图4 各部分程序设计4.1 实验程序功能与结构说明 1. stepmotor.c:实验主程序,包含了系统初始化,步进电机控制,机调速等;2. DSP28_EV.c:包含了事件管理器初始化。3. DSP28_DefaultIsr.c:包含了异步串口接收中断服务程序。4. DSP28_GlobalVariableDefs.c:各个外设备全局变量定义。5. DSP28_PieCtrl.c:PIE 中断初始化。6. DSP28_PieVect.c: PIE 中断矢量表初始化。7. DSP28_SysCtrl.c:系统初始化。8. 2812.cmd: 声明了系统的存储器配
8、置与程序各段的连接关系。9. 2812.gel:系统初始化10. *.h:各个源文件的头文件11. rts2800.l:库函数文件4.2 头文件 #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 #in
9、clude DSP281x_CpuTimers.h / 32-bit CPU Timers #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 e
10、CAN Registers #include DSP281x_Gpio.h / General 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.3 初始化4.3.1 DSP28_EV.c:包含了事件管理器初始化。void InitEv(voi
11、d) /设置GPIO EALLOW;GpioMuxRegs.GPAMUX.all=0x00ff;EDIS; / 初始化定时器控制寄存器 (EV A) EvaRegs.GPTCONA.all = 0; /设置定时器1 / 设置定时器1的周期和比较; EvaRegs.T1PR = 0xffff; / 周期 / 中断使能 EvaRegs.EVAIMRA.bit.T1PINT = 1; EvaRegs.EVAIFRA.bit.T1PINT = 1; / 清除计数寄存器 EvaRegs.T1CNT = 0x0000; / 设置定时器控制寄存器; EvaRegs.T1CON.all = 0x1040;/连
12、续递增/递减计数,定时器使能,关闭比较使能 /使能产生PWM1-PWM4的比较功能EvaRegs.CMPR1 =0x0c00;EvaRegs.CMPR2 =0x3c00;/比较方式控制 /输出引脚1CMPR1-高有效 输出引脚2CMPR1-低有效 /输出引脚3CMPR2-高有效 输出引脚4CMPR2-低有效 /输出引脚5CMPR3-高有效 输出引脚6CMPR3-低有效 EvaRegs.ACTRA .all=0x0666;EvaRegs.DBTCONA.all=0x0Af8;/x/4,死区开,m=2,p=4,t=0.2usEvaRegs.COMCONA .all=0xA600; 4.3.2 DS
13、P28_PieCtrl.c:PIE中断初始化。void InitPieCtrl(void) PieCtrl.PIECRTL.bit.ENPIE = 0; / 清除所有PIE记录 PieCtrl.PIEIER1.all = 0; PieCtrl.PIEIER2.all = 0; PieCtrl.PIEIER3.all = 0; PieCtrl.PIEIER4.all = 0; PieCtrl.PIEIER5.all = 0; PieCtrl.PIEIER6.all = 0; PieCtrl.PIEIER7.all = 0; PieCtrl.PIEIER8.all = 0; PieCtrl.PIE
14、IER9.all = 0; PieCtrl.PIEIER10.all = 0; PieCtrl.PIEIER11.all = 0; PieCtrl.PIEIER12.all = 0; /清除所有PIE记录 PieCtrl.PIEIFR1.all = 0; PieCtrl.PIEIFR2.all = 0; PieCtrl.PIEIFR3.all = 0; PieCtrl.PIEIFR4.all = 0; PieCtrl.PIEIFR5.all = 0; PieCtrl.PIEIFR6.all = 0; PieCtrl.PIEIFR7.all = 0; PieCtrl.PIEIFR8.all =
15、0; PieCtrl.PIEIFR9.all = 0; PieCtrl.PIEIFR10.all = 0; PieCtrl.PIEIFR11.all = 0; PieCtrl.PIEIFR12.all = 0; / PIE使能: PieCtrl.PIECRTL.bit.ENPIE = 1; PieCtrl.PIEACK.all = 0xFFFF; 4.3.3 DSP28_SysCtrl.c:系统初始化。void InitSysCtrl(void) Uint16 i; EALLOW;/ 关闭看门狗 SysCtrlRegs.WDCR= 0x0068;/ 初始化 PLL SysCtrlRegs.PL
16、LCR = 0xA; / 等待 PLL 上锁 for(i= 0; i 5000; i+) SysCtrlRegs.HISPCP.all = 0x0001; SysCtrlRegs.LOSPCP.all = 0x0002; / Peripheral clock enables set for the selected peripherals. SysCtrlRegs.PCLKCR.bit.EVAENCLK=1; EDIS;void KickDog(void) EALLOW; SysCtrlRegs.WDKEY = 0x0055; SysCtrlRegs.WDKEY = 0x00AA; EDIS;
17、4.3.4 2812.gel:系统初始化4.3.5 DSP28_PieVect.c: PIE中断矢量表初始化。4.4 实验主程序系统的初始化及使能void main(void) /*初始化系统*/ InitSysCtrl(); /*关中断*/ DINT; IER = 0x0000; IFR = 0x0000; *p_ceselect =0x6 ;/打开ce3空间 for(i=0;i0x100;i+); *p_iodisable =0x1;/IO空间始能 for(i=0;i=0xfff3)|(EvaRegs.CMPR1=0x0011) Direct1=(Direct1=0)?1:0; if(Ev
18、aRegs.CMPR2=0xfff3)|(EvaRegs.CMPR2=0x0011) Direct2=(Direct2=0)?1:0; if(Direct1=1) EvaRegs.CMPR1=EvaRegs.CMPR1+0x500; else EvaRegs.CMPR1=EvaRegs.CMPR1-0x500; if(Direct2=1) EvaRegs.CMPR2=EvaRegs.CMPR2+0x500; else EvaRegs.CMPR1=EvaRegs.CMPR2-0x500; /使能中断 EvaRegs.EVAIMRA.bit.T1PINT = 1; /清除中断标志 EvaRegs.
19、EVAIFRA.all = BIT7; /中断应答接收更多的 PIE 组 2的中断 PieCtrl.PIEACK.all = PIEACK_GROUP2; 5工作过程分析5.1. 步进电机的驱动:图是单极性步进电机翻译/驱动的典型电路,图中的方块为驱动开关。针对SEED-DEC 中直流电机系统的动作要求,步进电机驱动电路设计思路如下:1) 电机采用 15V 直流电源供电;2) 4 路控制信号由 SEED-DTK_MBoard 提供,信号为 CMOS 标准电平,通过排线接入并下拉;3) 使用达灵顿管 TIP31C 代替 IRL540 作为电机驱动开关,基级串接 100电阻;4) 使用快速二极管
20、1N4007 完成保护功能,以免电机换向时烧毁电机;5) 使用 50 限流电阻(半步运行时电流约为 0.2A,小于电机电源额定电流);6) 电机电源/地之间跨接电容,电机地与数字地之间采用磁珠连接共地;步进电机在这个实验中选择的是 M35SP-7N,其步进角为 7.5,是一种单极性的步进电机。它的结构如下图所示:实际使用时,公共端 1 与 2 是短接在一起做为电源输入,一共五个抽头。控制每个绕组的两个抽头来实现对步进电机的控制。步进电机的控制一般分为四相四拍与四相八拍两种方式,其中前者称为全步,后者称为半步。5.2. 步进电机的驱动接口:步进电机的控制接口为 EVA 的 PWM1、PWM2、
21、PWM3、PWM4 引脚。它们分别为步进电机四相的控制端。按一定的频率循环置高电平即可使可使步进电机转动。引脚与步进电机的线圈对应关系如下图所示:在步进电机为四相四拍时,其正转顺序为 A-B-C-D-A,在控制器中CNTL3:0的输出依次为:0x8 - 0x4 - 0x2 - 0x1.其反转的顺序为 A-D -C-B-A,在控制器中 CNTL3:0的输出依次为:0x8 - 0x1 - 0x2 - 0x4。6 设计程序#include DSP28_Device.h/*定义扩展总线存储器空间页地址寄存器地址为0x004020*/volatile unsigned int* p_ceselect=(
22、volatile unsigned int *)0x004020;/*定义交通灯IO口的地址为0x80000*/volatile unsigned int* p_iodisable=(volatile unsigned int*)0x080007;/子函数声明interrupt void eva_timer1_isr(void);/全局中断计数变量int Direct1=0;int Direct2=0;Uint32 EvaTimer1InterruptCount;Uint32 i;void main(void) /*初始化系统*/InitSysCtrl(); /*关中断*/DINT;IER =
23、 0x0000;IFR = 0x0000;*p_ceselect =0x6 ;/打开ce3空间for(i=0;i0x100;i+);*p_iodisable =0x1;/IO空间始能 for(i=0;i=0xfff3)|(EvaRegs.CMPR1=0x0011) Direct1=(Direct1=0)?1:0; if(EvaRegs.CMPR2=0xfff3)|(EvaRegs.CMPR2=0x0011) Direct2=(Direct2=0)?1:0; if(Direct1=1) EvaRegs.CMPR1=EvaRegs.CMPR1+0x500; else EvaRegs.CMPR1=E
24、vaRegs.CMPR1-0x500; if(Direct2=1) EvaRegs.CMPR2=EvaRegs.CMPR2+0x500; else EvaRegs.CMPR2=EvaRegs.CMPR2-0x500; /使能中断 EvaRegs.EVAIMRA.bit.T1PINT = 1; /清除中断标志 EvaRegs.EVAIFRA.all = BIT7; /中断应答接收更多的 PIE 组 2的中断 PieCtrl.PIEACK.all = PIEACK_GROUP2; 小 结这一周的课设很快的就结束了。这次课设让我过了非常充实的一周,不仅学会了很多DSP的知识,加强了动手设计能力,而且还增加了和同学们的关系,一组里面的同学互相帮助,有问题的同学会的同学帮忙讲解,而大家都不会的
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1