步进电机PWM控制程序设计论文.docx

上传人:b****8 文档编号:11453919 上传时间:2023-03-01 格式:DOCX 页数:22 大小:76.14KB
下载 相关 举报
步进电机PWM控制程序设计论文.docx_第1页
第1页 / 共22页
步进电机PWM控制程序设计论文.docx_第2页
第2页 / 共22页
步进电机PWM控制程序设计论文.docx_第3页
第3页 / 共22页
步进电机PWM控制程序设计论文.docx_第4页
第4页 / 共22页
步进电机PWM控制程序设计论文.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

步进电机PWM控制程序设计论文.docx

《步进电机PWM控制程序设计论文.docx》由会员分享,可在线阅读,更多相关《步进电机PWM控制程序设计论文.docx(22页珍藏版)》请在冰豆网上搜索。

步进电机PWM控制程序设计论文.docx

步进电机PWM控制程序设计论文

 

沈阳工程学院

课程设计

 

设计题目:

步进电机PWM控制程序设计

 

 

1.设计主要内容及要求;

1)研究步进电机PWM控制及利用DSP实现的方法。

2)编写步进电机控制程序。

3)调试程序,观察结果。

2.对设计论文撰写内容、格式、字数的要求;

(1).课程设计论文是体现和总结课程设计成果的载体,一般不应少于3000字。

(2).学生应撰写的内容为:

中文摘要和关键词、目录、正文、参考文献等。

课程设计论文的结构及各部分内容要求可参照《沈阳工程学院毕业设计(论文)撰写规范》执行。

应做到文理通顺,内容正确完整,书写工整,装订整齐。

(3).论文要求打印,打印时按《沈阳工程学院毕业设计(论文)撰写规范》的要求进行打印。

(4).课程设计论文装订顺序为:

封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、参考文献。

3.时间进度安排;

顺序

阶段日期

计划完成内容

备注

1

7月2日

教师讲解题目,学生查阅相关资料

2

7月3日

确定步进电机控制算法以及程序流程

3

7月4日

编写程序

4

7月5日

调试程序

5

7月6日

撰写论文,程序验收

 

沈阳工程学院

步进电机PWM控制课程设计成绩评定表

 

指导教师评审意见

评价

内容

具体要求

权重

评分

加权分

调研

论证

能独立查阅文献,收集资料;能制定课程设计方案和日程安排。

0.1

5

4

3

2

工作能

力态度

工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作,

0.2

5

4

3

2

工作量

按期圆满完成规定的设计任务,工作量饱满,难度适宜。

0.2

5

4

3

2

说明书

的质量

说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。

0.5

5

4

3

2

指导教师评审成绩

(加权分合计乘以12)

加权分合计

指导教师签名:

年月日

评阅教师评审意见

评价

内容

具体要求

权重

评分

加权分

查阅

文献

查阅文献有一定广泛性;有综合归纳资料的能力

0.2

5

4

3

2

工作量

工作量饱满,难度适中。

0.5

5

4

3

2

说明书

的质量

说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。

0.3

5

4

3

2

评阅教师评审成绩

(加权分合计乘以8)

加权分合计

评阅教师签名:

年月日

课程设计总评成绩

引言

目前各种控制系统、通信系统、网络系统、仪器仪表等都以微处理器为核心。

几十年来,随着大规模集成电路技术的不断发展,微处理器的性能越来越高、体积越来越小、系列越来越多。

微处理器从过去单纯的中央处理单元,发展到将众多外围设备集成到片内形成单片机,由过去的8位机,发展到16位、32位机。

由于大规模集成电路技术的突破,DSP控制器的价格已和普通单片机接近,但其性能远远超过了普通单片机。

DSP控制器由DSP(DigitalSignalProcessor,数字信号处理器)发展而来,其突出特点就是采用多组总线技术实现并行机构,有独立的加法器和乘法器,有灵活的寻址方式,从而可以非常快速地实现复杂算法。

而此次是步进电机PWM控制程序设计,采用全步四相四拍控制方式,用四个控制接口为四个引脚,按一定的频率循环置高电平即可使步进电机转动。

而用户可以通过修改定时器1的周期以及PWM的比较功能调整电机运行方向与状态。

 

 

 

1设计任务描述

1.1设计题目

步进电机PWM控制程序设计

1.2设计目的

(1)掌握LaunchCodeComposerStudio使用方法。

(2)掌握直流电机PWM控制原理。

(3)学会用C语言编写程序。

1.3设计要求

(1)研究直流电机PWM控制及利用DSP实现的方法。

(2)编写直流电机控制程序。

(3)调试程序,观察结果。

1.4发挥部分

自由发挥

 

2设计思路

步进电机采用全步四相四拍的控制方式,其接口为EVA的PWM1,PWM2,PWM3,PWM4引脚。

它们分别为步进电机四相的控制端。

按照一定频率循环置高电平即可使步进电机转动。

用定时器设置周期中断,作为PWM的频率,比较寄存器里边设置两组数,作为PWM的脉宽。

当定时器中断次数达到某个值时,可以改变比较寄存器中的值,从而改变PWM的脉宽,即改变高低电平的占空比,进而改变电动机的转速。

令此程序循环进行下去就能实现电动速度的连续变化。

可以通过修改定时器1的周期以及PWM的比较功能调整电机运行方向与状态,

 

 

 

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:

声明了系统的存储器配置与程序各段的连接关系。

9.2812.gel:

系统初始化

10.*.h:

各个源文件的头文件

11.rts2800.l:

库函数文件

4.2头文件

#include"DSP281x_Device.h"//DSP281x头文件

DSP281x头文件包括很多子文件:

#include"DSP281x_SysCtrl.h"//SystemControl/PowerModes

#include"DSP281x_DevEmu.h"//DeviceEmulationRegisters

#include"DSP281x_Xintf.h"//ExternalInterfaceRegisters

#include"DSP281x_CpuTimers.h"//32-bitCPUTimers

#include"DSP281x_PieCtrl.h"//PIEControlRegisters

#include"DSP281x_PieVect.h"//PIEVectorTable

#include"DSP281x_Spi.h"//SPIRegisters

#include"DSP281x_Sci.h"//SCIRegisters

#include"DSP281x_Mcbsp.h"//McBSPRegisters

#include"DSP281x_ECan.h"//EnhancedeCANRegisters

#include"DSP281x_Gpio.h"//GeneralPurposeI/ORegisters

#include"DSP281x_Ev.h"//EventManagerRegisters

#include"DSP281x_Adc.h"//ADCRegisters

#include"DSP281x_XIntrupt.h"//ExternalInterrupts

#include"DSP281x_DefaultISR.h"//DefaultISR

4.3初始化

4.3.1DSP28_EV.c:

包含了事件管理器初始化。

voidInitEv(void){//设置GPIO

EALLOW;

GpioMuxRegs.GPAMUX.all=0x00ff;

EDIS;//初始化定时器控制寄存器(EVA)

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;//连续递增/递减计数,定时器使能,关闭比较使能

//使能产生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.2us

EvaRegs.COMCONA.all=0xA600;

}

4.3.2DSP28_PieCtrl.c:

PIE中断初始化。

voidInitPieCtrl(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.PIEIER9.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=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.3DSP28_SysCtrl.c:

系统初始化。

voidInitSysCtrl(void){

Uint16i;

EALLOW;

//关闭看门狗

SysCtrlRegs.WDCR=0x0068;

//初始化PLL

SysCtrlRegs.PLLCR=0xA;

//等待PLL上锁

for(i=0;i<5000;i++){}

SysCtrlRegs.HISPCP.all=0x0001;

SysCtrlRegs.LOSPCP.all=0x0002;

//Peripheralclockenablessetfortheselectedperipherals.

SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;

EDIS;

}

voidKickDog(void)

{

EALLOW;

SysCtrlRegs.WDKEY=0x0055;

SysCtrlRegs.WDKEY=0x00AA;

EDIS;

}

4.3.42812.gel:

系统初始化

4.3.5DSP28_PieVect.c:

PIE中断矢量表初始化。

4.4实验主程序系统的初始化及使能

voidmain(void)

{

/*初始化系统*/

InitSysCtrl();

/*关中断*/

DINT;

IER=0x0000;

IFR=0x0000;

*p_ceselect=0x6;//打开ce3空间

for(i=0;i<0x100;i++);

*p_iodisable=0x1;//IO空间始能

for(i=0;i<0x100;i++);

/*初始化PIE控制寄存器*/

InitPieCtrl();

/*初始化PIE矢量表*/

InitPieVectTable();

/*初始化EV*/

InitEv();

//重新分配中断服务的中断向量

EALLOW;

PieVectTable.T1PINT=&eva_timer1_isr;//定时器1计数中断

EDIS;

//初始化变量

EvaTimer1InterruptCount=0;

//使能PIE组2中断4--T1PINT

PieCtrl.PIEIER2.all=M_INT4;

//使能CPU中断

IER|=M_INT2;

EINT;

ERTM;

for(;;)

{

KickDog();

}}

4.5定时器1的设置与PWM的比较功能和比较方式控制

//初始化定时器控制寄存器(EVA)

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;//连续递增/递减计数,定时器使能,关闭比较使能

//使能产生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.2us

EvaRegs.COMCONA.all=0xA600;

4.6PWM控制设置与中断

//EVGP1周期中断

interruptvoideva_timer1_isr(void)

{

EvaTimer1InterruptCount++;

if((EvaRegs.CMPR1>=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=EvaRegs.CMPR1-0x500;

if(Direct2==1)

EvaRegs.CMPR2=EvaRegs.CMPR2+0x500;

else

EvaRegs.CMPR1=EvaRegs.CMPR2-0x500;

//使能中断

EvaRegs.EVAIMRA.bit.T1PINT=1;

//清除中断标志

EvaRegs.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)使用快速二极管1N4007完成保护功能,以免电机换向时烧毁电机;

5)使用50Ω限流电阻(半步运行时电流约为0.2A,小于电机电源额定电流);

6)电机电源/地之间跨接电容,电机地与数字地之间采用磁珠连接共地;

步进电机在这个实验中选择的是M35SP-7N,其步进角为7.5°,是一种单极性

的步进电机。

它的结构如下图所示:

实际使用时,公共端1与2是短接在一起做为电源输入,一共五个抽头。

控制每个绕组的两个抽头来实现对步进电机的控制。

步进电机的控制一般分为四相四拍与四相八拍两种方式,其中前者称为全步,后者称为半步。

5.2.步进电机的驱动接口:

步进电机的控制接口为EVA的PWM1、PWM2、PWM3、PWM4引脚。

它们分别为步进电机四相的控制端。

按一定的频率循环置高电平即可使可使步进电机转动。

引脚与步进电机的线圈对应关系如下图所示:

在步进电机为四相四拍时,其正转顺序为A->B->C->D->A,在控制器中

CNTL[3:

0]的输出依次为:

0x8->0x4->0x2->0x1.

其反转的顺序为A->D->C->B->A,在控制器中CNTL[3:

0]的输出依次为:

0x8->0x1->0x2->0x4。

6设计程序

#include"DSP28_Device.h"

/*定义扩展总线存储器空间页地址寄存器地址为0x004020*/

volatileunsignedint*p_ceselect=(volatileunsignedint*)0x004020;

/*定义交通灯IO口的地址为0x80000*/

volatileunsignedint*p_iodisable=(volatileunsignedint*)0x080007;

//子函数声明

interruptvoideva_timer1_isr(void);

//全局中断计数变量

intDirect1=0;

intDirect2=0;

Uint32EvaTimer1InterruptCount;

Uint32i;

voidmain(void)

{

/*初始化系统*/

InitSysCtrl();

/*关中断*/

DINT;

IER=0x0000;

IFR=0x0000;

*p_ceselect=0x6;//打开ce3空间

for(i=0;i<0x100;i++);

*p_iodisable=0x1;//IO空间始能

for(i=0;i<0x100;i++);

/*初始化PIE控制寄存器*/

InitPieCtrl();

/*初始化PIE矢量表*/

InitPieVectTable();

/*初始化EV*/

InitEv();

//重新分配中断服务的中断向量

EALLOW;

PieVectTable.T1PINT=&eva_timer1_isr;//定时器1计数中断

EDIS;

//初始化变量

EvaTimer1InterruptCount=0;

//使能PIE组2中断4--T1PINT

PieCtrl.PIEIER2.all=M_INT4;

//使能CPU中断

IER|=M_INT2;

EINT;

ERTM;

for(;;)

{

KickDog();

}

}

/**********************************************/

//EVGP1周期中断

/**********************************************/

interruptvoideva_timer1_isr(void)

{

EvaTimer1InterruptCount++;

if((EvaRegs.CMPR1>=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=EvaRegs.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