《基于DSP的步进电机控制模块设计(共18页).doc》由会员分享,可在线阅读,更多相关《基于DSP的步进电机控制模块设计(共18页).doc(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上DSP基础与应用系统设计课程设计课程设计报告题目:姓 名: 吴清清 院 系: 电力学院 专业: 电子科学与技术 学 号: 指导教师: 谭联 完成时间: 2016 年 12 月 31 日摘要电动机控制是工业自动化进程中一个相当重要的组成部分,随着工业自动控制对电动机控制产品需求的不断增加,现代电动机控制技术也变得越来越重要,微处理器已经广泛用于电动机控制领域。由于处理数据量的增加和对实时性的要求不断提高,传统的基于单片机的控制策略越来越不能满足需要,随着数字信号处理器(DSP)的迅速发展及性价比的不断提高,数字信号处理器应用于电动机控制领域已经成为一种趋势。因此研究DS
2、P在控制系统中的应用也有重要的意义。关键词:电动机控制;步进电动机;数字信号处理器;控制系统目录专心-专注-专业1 课程设计题目、内容与要求 1.1 设计内容利用DSP设计一个步进电机控制模块。掌握使用DSP的扩展I/O端口控制外围设备信息的方法。掌握使用 DSP 通用计时器的控制原理及中断服务程序的编程方法。了解步进电机的控制方法。1.2 具体要求(1)完成硬件各部分的设计(2)软件部分的设计。2.步进电机的介绍2.1步进电机的概念步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当
3、步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。2.2步进电机的原理当电流流过定子绕组时,定子绕组产生一矢量磁场。该磁场会带动转子旋转一角度,使得转子的一对磁场方向与定子的磁场方向一致。当定子的矢量磁场旋转一个角度。转子也随着该磁场转一个角度。每输入一个电脉冲,电动机转动一个角度前进一步。它输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。改变绕组通电的顺序,电机就会反转。所以可用控制脉冲数量、频率及电动机各相绕组的通电顺序来
4、控制步进电机的转动。2.3步进电机的分类目前常用的有三种步进电动机:(1)反应式步进电动机(VR)。反应式步进电动机结构简单,生产成本低,步距角小;但动态性能差。(2)永磁式步进电动机(PM)。永磁式步进电动机出力大,动态性能好;但步距角大。(3)混合式步进电动机(HB)。混合式步进电动机综合了反应式、永磁式步进电动机两者的优点,它的步距角小,出力大,动态性能好,是目前性能最高的步进电动机。它有时也称作永磁感应子式步进电动机3 系统设计 3.1 DSP芯片的选择本次课程设计选用的芯片为TMS320F28335DSP芯片。TMS320F28335型TI公司的一款TMS320C28X系列浮点DSP
5、控制器。与以往的定点DSP相比,该器件的精度高,成本低, 功耗小,性能高,外设高,数据以及程序大,A/D转换更精确快速等。TMS320F28335具有150MHz的高速处理能力,具备32位浮 点处理单元,6个DMA通道支持ADC、McBSP和 EMIF,有多达18路的PWM输出,其中有6路为TI特有的更高精度的PWM输出 (HRPWM),12位16通道ADC。得益于其,用户可快速编写控制算法而无需在处理小数操作上耗费过多的时间和精力,与前代DSC相比,平均性能提高50%,并与定点C28x控制器,从而简化软件开发, 缩短开发周期,降低。F2833X在保持150MHz时钟速率不变的情况下,新型F2
6、833X浮点控制器与TI前代领先控制器相比,性能平均提高50%。与作用相当的32位定点技术相比,快速转换(FFT)等复杂计算算法采用新技术后性能提升了一倍之多。3.2系统框图图1步进电机设计原理3.3 步进电机的DSP控制3.3.1 芯片在电机控制中的应用DSP器件具有较高的集成度,具有比单片机更快的CPU,更大容量的存储器,内置有波特率发生器和FIFO缓冲器,提供高速、同步串口和标准异步串口。最为突出的是,DSP器件精简的指令系统(大多数指令能在一个指令周期内完成)、独立的程序和数据空间等使其具有高速的数据运算能力。采用基于DSP的电机专用集成电路的另一个好处是,可以降低对传感器等外围器件的
7、要求。而且,DSP控制器能自接以动态控制方式运行,无需依赖于过去查寻图表的方式。在高速控制中,使用DSP可进行通常的位检测和逻辑运算以及高速数据传送。随着价格的日益下降,性能不断提高,采用DSP器件代替单片机来控制电机将成为电机控制的发展趋势。 DSP用于电机控制有很多好处: (1)执行高级运算,减少力矩纹波,从而低振动、长寿命; (2)高级运算使得谐波小,很容易满足国家标准要求,降低滤波器成本;(3)提供无传感器运算,省去位置和速度传感器; (4)减少查询表,降低内存需求; (5)实时产生平滑的、近乎完美的参考模型,获得好的性能; (6)控制逆变器,产生高精度PWM输出; (7)提供单片控制
8、系统。 3.3.2 步进电机的DSP控制原理 DSP事件管理器的比较单元总共可以产生12路PWM脉冲,算上通用定时器的比较操作总共可以提供16路PWM。每个步进电机需要2路PWM,一路用于转向控制,一路用于步进控制。步进电机的驱动电路是根据控制信号工作的,在步进电机的DSP控制中,控制信号是由DSP产生的。其基本控制作用如下: (1)换相顺序 步进电机的通电换相顺序是严格按照步进电机的工作方式进行的,通常把通电换相这一过程称为“脉冲分配”。例如,三相步进电动机的单三拍工作方式,其各相通电的顺序为ABC,通电控制脉冲必须严格地按照这一顺序的分别控制A,B,C相的通电和断电。 (2)步进电机的转向
9、 通过前面介绍的步进电动机的原理我们已经知道按给定的工作方式正序通电换相步进电机就正转;如果按反序通电换相,则电机就反转。例如四相步进电动机工作在单四拍方式,通电换相的正序是ABCD,电动机就正转,如果按反序ADCB,电动机就反转。 (3)步进电机的速度 如果给步进电动机发一个控制脉冲,它就转一个步距角,再发一个脉冲,它会再转一个步距角。两个脉冲的间隔时间越短,步进电机就转得越快,因此,脉冲的频率决定了步进电机的转速。 4.硬件电路设计驱动电路TMS320F28335M外部存储器时钟电路复位电路JTAG仿真接口图2.系统控制硬件框图4.1驱动电路4.1.1 驱动器的选择 设计中,执行元件选用的
10、是两相混合步进电机,故可用CPLD和L298 两芯片可方便地组成步进电动机控制驱动器,其中CPLD是步进电动机控制器(包括环形分配器),L298 是双H 桥式驱动器。它们所组成的微处理器至双桥式步进电动机的接口的优点是,需要的元件很少,从而使得装配成本低,可靠性高和占空间小。并且通过软件开发,可以简化和减轻微型计算机的负担。(1)L298芯片的介绍L298N 为SGS-THOMSON Microelectronics 所出产的双全桥步进电机专用驱动芯片( Dual Full-BridgeDriver ) ,内部包含4信道逻辑驱动电路,是一种二相和四相步进电机的专用驱动器,可同时驱动2个二相或1
11、个四相步进电机,内含二个H-Bridge 的高电压、大电流双全桥式驱动器,接收标准TTL 逻辑准位信号,可驱动46V、2A 以下的步进电机,且可以直接透过电源来调节输出电压;此芯片可直接由单片机的IO 端口来提供模拟时序信号,。L298N 之接脚如图9 所示,Pin1 和Pin15 可与电流侦测用电阻连接来控制负载的电路; OUTl、OUT2 和OUT3、OUT4 之间分别接2 个步进电机;input1input4 输入控制电位来控制电机的正反转;Enable 则控制电机停转。4.2时钟电路TMS320F28335上有一个基于PLL电路的片上时钟模块,为CPU及外设提供时钟有两种方式:一种是用
12、外部的时钟源,将其连接到XTAL1引脚上或者XCLKIN引脚上,XTAL2接地;另一种是使用振荡器产生时钟,用30MHz的晶体和两个20PF的电容组成的电路分别连接到XTAL1和XTAL2引脚上,XCLKIN引脚接地。我们常用第二种来产生时钟。此时钟将通过一个内部PLL锁相环电路,进行倍频。由于F28335的最大工作频率是150M,所以倍频值最大是5。其中倍频值由PLLCR的低四位和PLLSTS的第7、8位来决定。时钟电路如下:图3.时钟电路4.3复位电路设计TMS320F28335芯片具有复位操作功能。引脚RS 为复位电平输入引脚,此引脚 输入低电平时复位有效。RS 是不可屏蔽的外部中断,并
13、具有最高优先级,可以在上电 或芯片工作的任何时候进行复位,以便把TMS320F28335 芯片置为初始状态。通常在 上电之后,系统的振荡器处于不稳定的起振工作阶段,芯片也就处在未知状态,因此, 在每次上电之后都应使芯片处于复位状态,即使RS 引脚电平为低。 本次设计采用的复位电路由3.3V 电源接通DSP 的RST 引脚,达到复位的目的。图4.复位电路4.4外部存储器设计我们在芯片外扩展了64K*16 位的存储器,存储器占用的地址空间共有256K,因此片外存储器实际占用的地址是0x-0x,其他的部分暂时没有使用,如果有特殊需要,可以最多放置512K 的存储器。片外扩展的存储器型号是IS61LV
14、6416,这种器件可以按照8 位或16 位的方式使用,它的电平可以和通常的3.3V 器件连接。存储器与DSP 连接的示意图如下所示。图5.存储器与DSP连接的示意图外扩的存储器可以实现随机访问,这部分映射空间可以在DSP上电复位后的任何时候访问,此时不需要对DSP做任何初始化。如果需要这部分存储器在高速的状态下运行,需要修改DSP的存储器等待状态。具体设置DSP的存储器和数值可以参考TMX320F28335数据手册。一般来说,为保证存储器的稳定读写,当DSP在最高速状态运行时,只需要1个软件等待状态。4.5JTAG 仿真接口JTAG 目标器件通过专用的仿真端口支持仿真,此端口由仿真器直接访问并
15、提供仿真功能。JTAG 接口电路为仿真器与微机的接口电路,便于系统进行在线调试。在仿真器和JTAG 目标系统之间提供高质量的信号是极为重要的,用户必须提供正确的信号缓冲,测试时钟输入以及多处理器的内部连接,以确保仿真器和目标系统良好工作。为了便于DSP 写入程序,设计了JTAG 仿真接口。如图3-10 所示:电路与DSP 的TMS,TDI,TDO,TCK,EMU0,TRST ,EMU1 的引脚相连组成JTAG 仿真接口。TMS 引脚带内部上拉的JTAG 方式选择,该串行控制输入在TCK 的上升沿锁存到TAP 控制器中。TDI 引脚带内部上拉JTAG 测试数据输入,在TCK 的上升沿从TDI 输
16、入的数据的锁存到选定的寄存器中。TDO 为JTAG 扫描输出,测试数据输出,在TCK的下降沿,选定寄存器的内容被移出到TDO 的引脚。TCK 为带内部上拉的JTAG 测试时钟。EMU0 带内部上拉仿真器IO 引脚,当TRST 引脚被拉高时,该引脚用作仿真器的中断,通过JTAG 扫描可定义为IO 引脚;TRST 引脚带内部下拉的JTAG 的测试复位,当TRST 拉高时,扫描控制系统的控制控制器运行,若该引脚未接或低电平时,控制器运行在功能方式,并且测试复位信号无效。EMU1 仿真器引脚,该引脚禁止所有的输出,当TRST 引脚拉高时,该引脚用作来自或到仿真器的中断。相反,该引脚为OFF 引脚。图6
17、. JTAG 仿真电路5程序设计5.1流程图(1)中断程序中断服务程序开始根据标志计数器加1或减1,从0-7 共8 拍送计数器相应的控制字到步进电机驱动器中断服务程序结束图7中断程序(2)主程序开始初始化:DSP 时钟初始化中断寄存器、定时器初始化ICETEK-CTR,步进电机使能键盘检测键盘输入“9”?关闭ICETEK-CTR 使用设备键盘输入4 或6 控制方向? 退出计数器计数方向,反向送控制字图8主程序5.2程序见附录一6实验现象可以看到显示/控制模块上的电机指针在转动,使用“4”和“6”键可控制其转动方向。7.总结本次设计主要研究基于DSP的步进电动机控制系统的实现和设计。论文的主要工
18、作总结如下:(1)系统总体方案设计:选取TI公司的TMS320F28335DSP作为控制核心。(2)在硬件控制系统方面,详细讨论步进电机的DSP控制方法,完成了电机驱动、按键控制、PWM产生以及各种外围电路等单元的设计和调试,极大地简化了系统组成,提高系统的运行速度。 (3)在软件控制系统方面,详细讨论了该控制系统的组织体系结构,设计了控制单元的软件系统,完成了系统的电机控制等流程图。 (4)步进电动机控制系统研究:本人认真研究和分析了步进电动机控制系统的基本概念、原理,构建了DSP控制系统,使我对步进电动机控制系统有了深入的理解。本论文针对DSP控制步进电动机采用了硬件分配脉冲的方式,改善控
19、制性能。8.参考文献1 王念旭.DSP基础和应用系统设计M .北京航空航天大学出版社,2002.附录:#include DSP2833x_Device.h #include DSP2833x_Examples.h interrupt void cpu_timer0_isr(void);void Delay(unsigned int nTime);void Gpio_select(void);void error(int);void program_stop();void Gpio_PortA(void);void Gpio_PortB(void);void Gpio_PortF(void);v
20、oid Gpio_PortDEG(void);char ConvertScanToChar(unsigned char cScanCode);#define T46uS0x0d40/键盘#define SCANCODE_0 0x70#define SCANCODE_1 0x69#define SCANCODE_2 0x72#define SCANCODE_3 0x7A#define SCANCODE_4 0x6B#define SCANCODE_5 0x73#define SCANCODE_6 0x74#define SCANCODE_7 0x6C#define SCANCODE_8 0x75
21、#define SCANCODE_9 0x7D/CTR REG#define CTRGR *(int *)0x#define CTRLCDCMDR *(int *)0x#define CTRKEY *(int *)0x#define CTRLCDCR *(int *)0x#define CTRCLKEY *(int *)0x#define CTRLCDLCR *(int *)0x#define CTRLCDRCR *(int *)0x#define CTRLA *(int *)0x#define CTRLR *(int *)0xunsigned int uWork;int jishu=0;un
22、signed int uWork,nCount,nSpeedCount;unsigned int pwm18= 0x8e,0x8c,0x8d,0x89,0x8b,0x83,0x87,0x86 ;unsigned int pwm28= 0x86,0x87,0x83,0x8b,0x89,0x8d,0x8c,0x8e ;int nAddStep,nStep,uTimPrd0,nFlashLed;void main(void) int nCount=0; char cKey;unsigned int nScanCode;uTimPrd0=8; nSpeedCount=0; nFlashLed=64;/
23、初始化系统控制/ PLL,看门狗,使能化外围时钟/ This example function is found in the DSP281x_SysCtrl.c file. InitSysCtrl(); /初始化 GPIO: InitXintf16Gpio();/ 清除所有的中断和初始化PIE向量表/ 禁用CUP中断 DINT; InitPieCtrl(); / 禁用 CPU 中断和清除所有 CPU 中断标志 IER = 0x0000; IFR = 0x0000; InitPieVectTable(); EALLOW; / 需要写入EALLOW 寄存器 PieVectTable.TINT0
24、= &cpu_timer0_isr; EDIS; / 禁止写入受保护的T EALLOW 寄存器/ 初始化所有的外围设备 InitCpuTimers(); #if (CPU_FRQ_150MHZ)/ 配置CPU定时器 ConfigCpuTimer(&CpuTimer0, 150, );#endif#if (CPU_FRQ_100MHZ) ConfigCpuTimer(&CpuTimer0, 100, );#endifCpuTimer0Regs.PRD.all=0xffff;CpuTimer0Regs.TPR.all=0;CpuTimer0Regs.TIM.all=0;CpuTimer0Regs.
25、TPRH.all=0;CpuTimer0Regs.TCR.bit.TSS=1;CpuTimer0Regs.TCR.bit.SOFT=1;CpuTimer0Regs.TCR.bit.FREE=1;CpuTimer0Regs.TCR.bit.TRB=1;CpuTimer0Regs.TCR.bit.TIE=1;CpuTimer0.InterruptCount=0;StartCpuTimer0();/ 启用中断/启用 CPU INT1 连接到 CPU 定时器 0 IER |= M_INT1; PieCtrlRegs.PIEIER1.bit.INTx7 = 1; EINT; / 使能化全局中断 INTM
26、 ERTM; /使能化实时中断DBGM nStep=0; nAddStep=1; CTRGR=0x80;/ 初始化ICETEK-CTR CTRGR=0x0; CTRGR=0x80; CTRLR=0;/ 关闭东西方向的交通灯 CTRLR=0x40;/ 关闭南北方向的交通灯 CTRLR=0xc2;/开步进电机 uWork=CTRCLKEY; StartCpuTimer0(); while (1) if ( nCount=0 )nScanCode=CTRKEY;nScanCode&=0x0ff;uWork=CTRCLKEY;if ( nScanCode!=0 )if ( nScanCode=9 )b
27、reak;elsecKey=nScanCode;cKey=nScanCode;if ( cKey!=0 )switch ( cKey )case 4: nAddStep=1; break; /正向case 6: nAddStep=-1; break; /反向case 2: if ( uTimPrd02 )uTimPrd0-; break; /增速case 8: if ( uTimPrd016 )uTimPrd0+; break; /减速 interrupt void cpu_timer0_isr(void) CpuTimer0.InterruptCount+; /从组1中接收更多的中断 Pie
28、CtrlRegs.PIEACK.all = PIEACK_GROUP1; CpuTimer0Regs.TCR.bit.TIF = 1; CpuTimer0Regs.TCR.bit.TRB = 1; nSpeedCount+; nSpeedCount%=uTimPrd0; if ( nSpeedCount=0 ) CTRLR=pwm2nStep; nStep+=nAddStep; if ( nStep7 )nStep=0; nCount+;nCount%=nFlashLed; if ( nCount=0 )*(int *)0x =0x1; void Delay(unsigned int nDel
29、ay)int ii,jj,kk=0;for ( ii=0;iinDelay;ii+ )for ( jj=0;jj1024;jj+ )kk+; char ConvertScanToChar(unsigned char cScanCode)char cReturn;cReturn=0;switch ( cScanCode )case SCANCODE_0: cReturn=0; break;case SCANCODE_1: cReturn=1; break;case SCANCODE_2: cReturn=2; break;case SCANCODE_3: cReturn=3; break;case SCANCODE_4: cReturn=4; break;case SCANCODE_5: cReturn=5; break;case SCANCODE_6: cReturn=6; break;case SCANCODE_7: cReturn=7; break;case SCANCODE_8: cReturn=8; break;case SCANCODE_9: cReturn=9; break; return cReturn;
限制150内