基于DSP的步进电机控制模块设计教材.docx
- 文档编号:24471677
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:18
- 大小:59.96KB
基于DSP的步进电机控制模块设计教材.docx
《基于DSP的步进电机控制模块设计教材.docx》由会员分享,可在线阅读,更多相关《基于DSP的步进电机控制模块设计教材.docx(18页珍藏版)》请在冰豆网上搜索。
基于DSP的步进电机控制模块设计教材
《DSP基础与应用系统设计课程设计》课程设计报告
题目:
基于DSP的步进电机控制模块设计
姓名:
吴清清
院系:
电力学院
专 业:
电子科学与技术
学号:
201312309
指导教师:
谭联
完成时间:
2016年12月31日
摘要
电动机控制是工业自动化进程中一个相当重要的组成部分,随着工业自动控制对电动机控制产品需求的不断增加,现代电动机控制技术也变得越来越重要,微处理器已经广泛用于电动机控制领域。
由于处理数据量的增加和对实时性的要求不断提高,传统的基于单片机的控制策略越来越不能满足需要,随着数字信号处理器(DSP)的迅速发展及性价比的不断提高,数字信号处理器应用于电动机控制领域已经成为一种趋势。
因此研究DSP在控制系统中的应用也有重要的意义。
关键词:
电动机控制;步进电动机;数字信号处理器;控制系统
1课程设计题目、内容与要求
1.1设计内容
利用DSP设计一个步进电机控制模块。
掌握使用DSP的扩展I/O端口控制外围设备信息的方法。
掌握使用DSP通用计时器的控制原理及中断服务程序的编程方法。
了解步进电机的控制方法。
1.2具体要求
(1)完成硬件各部分的设计
(2)软件部分的设计。
2.步进电机的介绍
2.1步进电机的概念
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度。
可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
2.2步进电机的原理
当电流流过定子绕组时,定子绕组产生一矢量磁场。
该磁场会带动转子旋转一角度,使得转子的一对磁场方向与定子的磁场方向一致。
当定子的矢量磁场旋转一个角度。
转子也随着该磁场转一个角度。
每输入一个电脉冲,电动机转动一个角度前进一步。
它输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。
改变绕组通电的顺序,电机就会反转。
所以可用控制脉冲数量、频率及电动机各相绕组的通电顺序来控制步进电机的转动。
2.3步进电机的分类
目前常用的有三种步进电动机:
(1)反应式步进电动机(VR)。
反应式步进电动机结构简单,生产成本低,步距角小;但动态性能差。
(2)永磁式步进电动机(PM)。
永磁式步进电动机出力大,动态性能好;但步距角大。
(3)混合式步进电动机(HB)。
混合式步进电动机综合了反应式、永磁式步进电动机两者的优点,它的步距角小,出力大,动态性能好,是目前性能最高的步进电动机。
它有时也称作永磁感应子式步进电动机
3系统设计
3.1DSP芯片的选择
本次课程设计选用的芯片为TMS320F28335DSP芯片。
TMS320F28335型数字信号处理器TI公司的一款TMS320C28X系列浮点DSP控制器。
与以往的定点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时钟速率不变的情况下,新型F2833X浮点控制器与TI前代领先数字信号控制器相比,性能平均提高50%。
与作用相当的32位定点技术相比,快速傅立叶转换(FFT)等复杂计算算法采用新技术后性能提升了一倍之多。
3.2系统框图
图1步进电机设计原理
3.3步进电机的DSP控制
3.3.1芯片在电机控制中的应用
DSP器件具有较高的集成度,具有比单片机更快的CPU,更大容量的存储器,内置有波特率发生器和FIFO缓冲器,提供高速、同步串口和标准异步串口。
最为突出的是,DSP器件精简的指令系统(大多数指令能在一个指令周期内完成)、独立的程序和数据空间等使其具有高速的数据运算能力。
采用基于DSP的电机专用集成电路的另一个好处是,可以降低对传感器等外围器件的要求。
而且,DSP控制器能自接以动态控制方式运行,无需依赖于过去查寻图表的方式。
在高速控制中,使用DSP可进行通常的位检测和逻辑运算以及高速数据传送。
随着价格的日益下降,性能不断提高,采用DSP器件代替单片机来控制电机将成为电机控制的发展趋势。
DSP用于电机控制有很多好处:
(1)执行高级运算,减少力矩纹波,从而低振动、长寿命;
(2)高级运算使得谐波小,很容易满足国家标准要求,降低滤波器成本;
(3)提供无传感器运算,省去位置和速度传感器;
(4)减少查询表,降低内存需求;
(5)实时产生平滑的、近乎完美的参考模型,获得好的性能;
(6)控制逆变器,产生高精度PWM输出;
(7)提供单片控制系统。
3.3.2步进电机的DSP控制原理
DSP事件管理器的比较单元总共可以产生12路PWM脉冲,算上通用定时器的比较操作总共可以提供16路PWM。
每个步进电机需要2路PWM,一路用于转向控制,一路用于步进控制。
步进电机的驱动电路是根据控制信号工作的,在步进电机的DSP控制中,控制信号是由DSP产生的。
其基本控制作用如下:
(1)换相顺序
步进电机的通电换相顺序是严格按照步进电机的工作方式进行的,通常把通电换相这一过程称为“脉冲分配”。
例如,三相步进电动机的单三拍工作方式,其各相通电的顺序为A—B—C,通电控制脉冲必须严格地按照这一顺序的分别控制A,B,C相的通电和断电。
(2)步进电机的转向
通过前面介绍的步进电动机的原理我们已经知道按给定的工作方式正序通电换相步进电机就正转;如果按反序通电换相,则电机就反转。
例如四相步进电动机工作在单四拍方式,通电换相的正序是A—B—C—D,电动机就正转,如果按反序A—D—C—B,电动机就反转。
(3)步进电机的速度
如果给步进电动机发一个控制脉冲,它就转一个步距角,再发一个脉冲,它会再转一个步距角。
两个脉冲的间隔时间越短,步进电机就转得越快,因此,脉冲的频率决定了步进电机的转速。
4.硬件电路设计
驱动电路
TMS320F28335
M
外部存储器
时钟电路
复位电路
JTAG仿真接口
图2.系统控制硬件框图
4.1驱动电路
4.1.1驱动器的选择
设计中,执行元件选用的是两相混合步进电机,故可用CPLD和L298两芯片可方便地组成步进电动机控制驱动器,其中CPLD是步进电动机控制器(包括环形分配器),L298是双H桥式驱动器。
它们所组成的微处理器至双桥式步进电动机的接口的优点是,需要的元件很少,从而使得装配成本低,可靠性高和占空间小。
并且通过软件开发,可以简化和减轻微型计算机的负担。
(1)L298芯片的介绍
L298N为SGS-THOMSONMicroelectronics所出产的双全桥步进电机专用驱动芯片(DualFull-BridgeDriver),内部包含4信道逻辑驱动电路,是一种二相和四相步进电机的专用驱动器,可同时驱动2个二相或1个四相步进电机,内含二个H-Bridge的高电压、大电流双全桥式驱动器,接收标准TTL逻辑准位信号,可驱动46V、2A以下的步进电机,且可以直接透过电源来调节输出电压;此芯片可直接由单片机的IO端口来提供模拟时序信号,。
L298N之接脚如图9所示,Pin1和Pin15可与电流侦测用电阻连接来控制负载的电路;OUTl、OUT2和OUT3、OUT4之间分别接2个步进电机;input1~input4输入控制电位来控制电机的正反转;Enable则控制电机停转。
4.2时钟电路
TMS320F28335上有一个基于PLL电路的片上时钟模块,为CPU及外设提供时钟有两种方式:
一种是用外部的时钟源,将其连接到XTAL1引脚上或者XCLKIN引脚上,XTAL2接地;另一种是使用振荡器产生时钟,用30MHz的晶体和两个20PF的电容组成的电路分别连接到XTAL1和XTAL2引脚上,XCLKIN引脚接地。
我们常用第二种来产生时钟。
此时钟将通过一个内部PLL锁相环电路,进行倍频。
由于F28335的最大工作频率是150M,所以倍频值最大是5。
其中倍频值由PLLCR的低四位和PLLSTS的第7、8位来决定。
时钟电路如下:
图3.时钟电路
4.3复位电路设计
TMS320F28335芯片具有复位操作功能。
引脚RS为复位电平输入引脚,此引脚输入低电平时复位有效。
RS是不可屏蔽的外部中断,并具有最高优先级,可以在上电或芯片工作的任何时候进行复位,以便把TMS320F28335芯片置为初始状态。
通常在上电之后,系统的振荡器处于不稳定的起振工作阶段,芯片也就处在未知状态,因此,在每次上电之后都应使芯片处于复位状态,即使RS引脚电平为低。
本次设计采用的复位电路由3.3V电源接通DSP的RST引脚,达到复位的目的。
图4.复位电路
4.4外部存储器设计
我们在芯片外扩展了64K*16位的存储器,存储器占用的地址空间共有256K,因此片外存储器实际占用的地址是0x0100000-0x0110000,其他的部分暂时没有使用,如果有特殊需要,可以最多放置512K的存储器。
片外扩展的存储器型号是IS61LV6416,这种器件可以按照8位或16位的方式使用,它的电平可以和通常的3.3V器件连接。
存储器与DSP连接的示意图如下所示。
图5.存储器与DSP连接的示意图
外扩的存储器可以实现随机访问,这部分映射空间可以在DSP上电复位后的任何时候访问,此时不需要对DSP做任何初始化。
如果需要这部分存储器在高速的状态下运行,需要修改DSP的存储器等待状态。
具体设置DSP的存储器和数值可以参考TMX320F28335数据手册。
一般来说,为保证存储器的稳定读写,当DSP在最高速状态运行时,只需要1个软件等待状态。
4.5JTAG仿真接口
JTAG目标器件通过专用的仿真端口支持仿真,此端口由仿真器直接访问并提供仿真功能。
JTAG接口电路为仿真器与微机的接口电路,便于系统进行在线调试。
在仿真器和JTAG目标系统之间提供高质量的信号是极为重要的,用户必须提供正确的信号缓冲,测试时钟输入以及多处理器的内部连接,以确保仿真器和目标系统良好工作。
为了便于DSP写入程序,设计了JTAG仿真接口。
如图3-10所示:
电路与DSP的TMS,TDI,TDO,TCK,EMU0,TRST,EMU1的引脚相连组成JTAG仿真接口。
TMS引脚带内部上拉的JTAG方式选择,该串行控制输入在TCK的上升沿锁存到TAP控制器中。
TDI引脚带内部上拉JTAG测试数据输入,在TCK的上升沿从TDI输入的数据的锁存到选定的寄存器中。
TDO为JTAG扫描输出,测试数据输出,在TCK的下降沿,选定寄存器的内容被移出到TDO的引脚。
TCK为带内部上拉的JTAG测试时钟。
EMU0带内部上拉仿真器I/O引脚,当TRST引脚被拉高时,该引脚用作仿真器的中断,通过JTAG扫描可定义为I/O引脚;TRST引脚带内部下拉的JTAG的测试复位,当TRST拉高时,扫描控制系统的控制控制器运行,若该引脚未接或低电平时,控制器运行在功能方式,并且测试复位信号无效。
EMU1仿真器引脚,该引脚禁止所有的输出,当TRST引脚拉高时,该引脚用作来自或到仿真器的中断。
相反,该引脚为OFF引脚。
图6.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的步进电动机控制系统的实现和设计。
论文的主要工作总结如下:
(1)系统总体方案设计:
选取TI公司的TMS320F28335DSP作为控制核心。
(2)在硬件控制系统方面,详细讨论步进电机的DSP控制方法,完成了电机驱动、按键控制、PWM产生以及各种外围电路等单元的设计和调试,极大地简化了系统组成,提高系统的运行速度。
(3)在软件控制系统方面,详细讨论了该控制系统的组织体系结构,设计了控制单元的软件系统,完成了系统的电机控制等流程图。
(4)步进电动机控制系统研究:
本人认真研究和分析了步进电动机控制系统的基本概念、原理,构建了DSP控制系统,使我对步进电动机控制系统有了深入的理解。
本论文针对DSP控制步进电动机采用了硬件分配脉冲的方式,改善控制性能。
8.参考文献
[1]王念旭.DSP基础和应用系统设计[M].北京航空航天大学出版社,2002.
附录:
#include"DSP2833x_Device.h"
#include"DSP2833x_Examples.h"
interruptvoidcpu_timer0_isr(void);
voidDelay(unsignedintnTime);
voidGpio_select(void);
voiderror(int);
voidprogram_stop();
voidGpio_PortA(void);
voidGpio_PortB(void);
voidGpio_PortF(void);
voidGpio_PortDEG(void);
charConvertScanToChar(unsignedcharcScanCode);
#defineT46uS0x0d40
//键盘
#defineSCANCODE_00x70
#defineSCANCODE_10x69
#defineSCANCODE_20x72
#defineSCANCODE_30x7A
#defineSCANCODE_40x6B
#defineSCANCODE_50x73
#defineSCANCODE_60x74
#defineSCANCODE_70x6C
#defineSCANCODE_80x75
#defineSCANCODE_90x7D
//CTRREG
#defineCTRGR*(int*)0x208000
#defineCTRLCDCMDR*(int*)0x208001
#defineCTRKEY*(int*)0x208001
#defineCTRLCDCR*(int*)0x208002
#defineCTRCLKEY*(int*)0x208002
#defineCTRLCDLCR*(int*)0x208003
#defineCTRLCDRCR*(int*)0x208004
#defineCTRLA*(int*)0x208005
#defineCTRLR*(int*)0x208007
unsignedintuWork;
intjishu=0;
unsignedintuWork,nCount,nSpeedCount;
unsignedintpwm1[8]={0x8e,0x8c,0x8d,0x89,0x8b,0x83,0x87,0x86};
unsignedintpwm2[8]={0x86,0x87,0x83,0x8b,0x89,0x8d,0x8c,0x8e};
intnAddStep,nStep,uTimPrd0,nFlashLed;
voidmain(void)
{
intnCount=0;
charcKey;
unsignedintnScanCode;
uTimPrd0=8;nSpeedCount=0;nFlashLed=64;
//初始化系统控制
//PLL,看门狗,使能化外围时钟
//ThisexamplefunctionisfoundintheDSP281x_SysCtrl.cfile.
InitSysCtrl();
//初始化GPIO:
InitXintf16Gpio();
//清除所有的中断和初始化PIE向量表
//禁用CUP中断
DINT;
InitPieCtrl();
//禁用CPU中断和清除所有CPU中断标志
IER=0x0000;
IFR=0x0000;
InitPieVectTable();
EALLOW;//需要写入EALLOW寄存器
PieVectTable.TINT0=&cpu_timer0_isr;
EDIS;//禁止写入受保护的TEALLOW寄存器
//初始化所有的外围设备
InitCpuTimers();
#if(CPU_FRQ_150MHZ)
//配置CPU定时器
ConfigCpuTimer(&CpuTimer0,150,1000000000);
#endif
#if(CPU_FRQ_100MHZ)
ConfigCpuTimer(&CpuTimer0,100,1000000);
#endif
CpuTimer0Regs.PRD.all=0xffff;
CpuTimer0Regs.TPR.all=0;
CpuTimer0Regs.TIM.all=0;
CpuTimer0Regs.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();
//启用中断
//启用CPUINT1连接到CPU定时器0
IER|=M_INT1;
PieCtrlRegs.PIEIER1.bit.INTx7=1;
EINT;//使能化全局中断INTM
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)break;
else
{
cKey=nScanCode;
}
cKey=nScanCode;
if(cKey!
=0)
{
switch(cKey)
{
case4:
nAddStep=1;break;//正向
case6:
nAddStep=-1;break;//反向
case2:
if(uTimPrd0>2)uTimPrd0--;break;//增速
case8:
if(uTimPrd0<16)uTimPrd0++;break;//减速
}
}
}
}
}
}
interruptvoidcpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++;
//从组1中接收更多的中断
PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;
CpuTimer0Regs.TCR.bit.TIF=1;
CpuTimer0Regs.TCR.bit.TRB=1;
nSpeedCount++;nSpeedCount%=uTimPrd0;
if(nSpeedCount==0)
{
CTRLR=pwm2[nStep];
nStep+=nAddStep;
if(nStep<0)nStep=7;
elseif(nStep>7)nStep=0;
nCount++;nCount%=nFlashLed;
if(nCount==0)*(int*)0x180000^=0x1;
}
}
voidDelay(unsignedintnDelay)
{
intii,jj,kk=0;
for(ii=0;ii { for(jj=0;jj<1024;jj++) { kk++; } } } charConvertScanToChar(unsignedcharcScanCode) { charcReturn; cReturn=0; switch(cScanCode) { caseSCANCODE_0: cReturn='0';break; caseSCANCODE_1: cReturn='1';break; caseSCANCODE_2: cReturn='2';break; caseSCANCODE_3: cReturn='3';break; caseSCANCODE_4: cReturn='4';break; caseSCANCODE_5: cReturn='5';break; caseSCANCODE_6: cReturn='6';break; caseSCANCODE_7: cReturn='7';break; caseSCANCODE_8: cReturn='8';brea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DSP 步进 电机 控制 模块 设计 教材