ARM的步进电机细分控制报告_步进电机细分控制

其他范文 时间:2020-02-27 14:06:43 收藏本文下载本文
【www.daodoc.com - 其他范文】

ARM的步进电机细分控制报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“步进电机细分控制”。

基于ARM的步进电机细分驱动控制设计

一、ARM简介

ARM 公司是一家IP供应商,其核心业务是IP核以及相关工具的开发和设计。半导体厂商通过购买ARM公司的IP授权来生产自己的微处理器芯片。由此以来,处理器内核来自ARM公司、各芯片厂商结合自身已有的技术优势以及芯片的市场定位等因数使芯片设计最优化,从而产生了一大批高度集成、各据特色的SOC芯片。

ARM微处理器具有以下特点:采用RISC指令集、使用大量寄存器、ARM/THUMB指令支持、三/五级流水线具有低功耗、低成本、高性能等。

到目前为止,ARM公司的IP核已经由ARM7,ARM9发展到今天的ARM11版本,ARM微处理器及技术的应用已经广泛深入到国民经济的各个领域, 如工业控制领域、网络应用、消费类电子产品及成像和安全产品等领域。

鉴于ARM7所具备的强大功能完全可以满足本次设计要求,本次设计仍使用ARM7系列芯片。

二.步进电机细分控制方案

1、步进电机细分技术简介

细分驱动技术在七十年代中期由美国学者首次提出,基本原理是将绕组中的电流细分。由常规的矩形波供电改为阶梯波供电,此时绕组中的电流将按一定的阶梯顺序上升和下降,从而将每一自然步进行细分。步进电机细分控制的本质是通过对励磁绕组中的电流控制,使步进电机合成磁场为均匀离散化的圆形旋转磁场。采用细分驱动技术可以改善步进电机的运行品质,减少转矩波动、抑制振荡、降低噪音、提高步距分辨率。

2、硬件框图设计

系统总体硬件框图设计如图2-1所示:

0

图2-1总体设计框图

3、软件总体设计流程图

图2-2 软件设计流程图

4、步进电机

图2-3 28BYJ-48-5VDC步进电机

中间部分是转子,由一个永磁体组成,边上的是定子绕组。当定子的一个绕组通电时,将产生一个方向的电磁场,如果这个磁场的方向和转子磁场方向不在同一条直线上,那么定子和转子的磁场将产生一个扭力将定子扭转。依次改变绕组的磁场,就可以使步进电机正转或反转(比如通电次序为A->B->C->D正转,反之则反转)。而且按照通电顺序的不同,可分为单四拍(A-B-C-D)、双四拍(AB-BC-CD-DA)、单双八拍(A-AB-B-BC-C-CD-D-DA)三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。

由于步进电机的驱动电流较大,单片机不能直接驱动,一般都是使用ULN2003达林顿阵列驱动,当然,使用下拉电阻或三极管也是可以驱动的,只不过效果不是那么好,产生的扭力比较小。

5、电机驱动ULN2003简介

ULN2003 是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。输入5VTTL电平,输出可达500mA/50V。ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。

图2-4 ULN2003芯片引脚图

该电路的特点如下: ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路 直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。其接线图如下所示:

图2-5 步进电机驱动电路6、12864液晶显示简介

12864是128*64点阵液晶模块的点阵数简称。液晶屏类型:STN FSTN;模块显示效果:黄绿底黑字、蓝底白字、白底黑字;驱动方式:1/64 DUTY 1/9 BIAS;背光:LED白色、LED黄绿色;控制器:KS0108或兼容 ST7920 T6963C;数据总线:8 位并口/6800 方式 串口;工作温度:-20℃~+70℃;储藏温度:-30℃~+80℃;点阵格式:128 x 64;现实角度:6:00直视;基本用途:该点阵的屏显成本相对较低,适用于各类仪器,小型设备的显示领域。其接线图如下所示:

图2-6 12864液晶显示与LPC2131接口接线图

三、硬件电路图

图2-7 系统硬件电路图

四、总结

此次基于ARM的步进电机细分驱动控制设计,由于掌握知识及时间有限,我们目前只实现了对步进电机正反转控制以及三种运行方式(单四拍、双四拍、单双八拍)的选择控制,并且实现了在12864液晶显示屏上显示相关的信息。连接好硬件电路,上电复位,程序开始运行。此时步进电机不转动,按下启停键,步进电机开始转动,初始值设为正传,按反转键开始反转,再按正传键则开始正传。当按下加速键时电机开始加速,当按下减速键时电机开始减速。

当然,此次课程设计还存在很多问题,实现的功能较简单,这都需要以后不断加强相关知识的学习从而不断提高自己。

最后,感谢李红岩老师和黄梦涛老师的辛勤教诲。

五、心得体会

这次课程设计的硬件部分由我来完成,虽然不用焊接电路,但是在画硬件图的过程中仍遇到很多问题。例如对Protel软件的不熟悉,许多操作需要多次尝试,才能正确完成;还有就是在电路的连接过程中,由于自己的马虎,线路有错连和少连的现象。但是经过自己的不断努力,最终还是完成了任务。

通过这次课程设计,我从一开始对系统的不太熟悉,到能开发一个简单的系

统,在这整个过程中我学到了很多东西,掌握了一些常用的开发技能,也发现了大量的问题,有些在设计过程中已经解决,有些还有待今后慢慢学习。只要学习就会有更多的问题,有更多的难点,但也会有更多的收获。

在本次ARM课程设计训练中,不仅锻炼了自己的动手能力,也在向同学老师请教的过程中学到了不少东西,十分感谢老师和同学的帮助。通过本次课程设计,我最深的感触便是,许多东西都需要自己亲自去做去实践去学习,才能真正的弄懂,才能真正的学到东西。

在整个的设计和实践过程中,通过老师的指导和同学的帮助,我们组最终在最后时间完成了任务。通过这次课程设计,才知道自己需要学习的东西还有很多,下来之后一定得加紧学习。平常我们都只是在课堂上学习,通过这次课程设计,实现了从理论到实践的飞跃。增强了认识问题,分析问,解决问题的能力。

最后感谢老师对我们此次课设的耐心指导和帮助!

经过这次ARM课程设计,使我对这学期ARM课程做了全面的复习,并学会将其应用于实践,在这次基于ARM的步进电机细分控制中,我对于ARM、步进电机、液晶显示及相关软件都有了进一步的认识,也是我发现团队合作的重要性,更激起了我对于电子设计方面的热情。

不过,通过这次课程设计,我同样感受到了自身知识的缺乏,如不太熟悉使用上位机进行监控、ARM的掌握不够透彻、还不能脱离参考资料独立进行软硬件设计等,这些都需要我以后不断加强学习锻炼加以增强,这将对于我今后进一步的学习打下基础,我以后会不断根据自身缺点进行学习锻炼,使自己不断提高。最后,感谢老师的辛勤教诲!

六、参考文献

1.ARM嵌入式系统基础教程[第2版] 主编 周立功 北京航空航天大学出版社.2008 2.步进电动机及其驱动控制系统 主编 刘宝廷 哈尔滨工业大学出版社.1997

附录

#include“config.h” #define

MOTOA

1

// P0.10

#define

MOTOB

1

// P0.11

#define

MOTOC

1

// P0.12 #define

MOTOD

1

// P0.13 #define

key1

1

// 加速 #define

key2

1

// 减速 #define

key3

1

//正反转 #define

key4

1

//启停

#define

KEYCON 0x001e0000 // LED控制字 #define

MOTOCON 0x00003c00 // MOTO控制字

#define

GPIOSET(PIN)IO0SET = PIN

// 方便修改置位端口 #define

GPIOCLR(PIN)IO0CLR = PIN

// 方便修改清位端口 #define

RS

1

//P0.9 #define

SID

1

//P0.6 #define

E

1

//P0.4 #define

PSB

1

//P0.2并行或串行,选择低电平串行模式 #define

RST

1

//P1.25,复位脚

unsigned char DAT1[64]=“低速—单四拍A-B-C-D运行方式”;unsigned char DAT2[64]=“中速—双四拍AB-BC-CD-DA运行方式”;unsigned char DAT3[64]=“高速—单双八拍A-AB-B-BC-C-CD-D-DA运行方式”;unsigned char DAT4[64]=“低速反转—单四拍D-C-B-A运行方式”;unsigned char DAT5[64]=“中速反转—双四拍AD-DC-CB-BA运行方式”;unsigned char DAT6[64]=“高速反转—单双八拍D-CD-C-BC-B-AB-A-DA运行方式”;unsigned char DAT7[64]=“

”;unsigned char DAT8[64]=“步进电机细分控制测控1002班:刘怡楠&石娟利”;

void TransferCom(unsigned char data0);void TransferData(unsigned char data1);void delay(unsigned int m);void lcd_mesg(unsigned char *adder1);void SendByte(unsigned char Dbyte);void init(void);void LCD12864_init(void);void DelayNS(uint32 dly);void MOTO_Mode1(uint8 i);

// A-B-C-D void MOTO_Mode10(uint8 i);void MOTO_Mode2(uint8 i);

// AB-BC-CD-DA-AB void MOTO_Mode20(uint8 i);void MOTO_Mode3(uint8 i);

// A-AB-B-BC-C-CD-D-DA-A void MOTO_Mode30(uint8 i);

int main(void){

unsigned int t=0;//启停标志

unsigned int f=0;//正反转标志

unsigned int i=0;//电机运行模式标志

PINSEL0=0x00000000;

PINSEL1=0X00000000;

PINSEL2&=~(0x00000006);//设置所有I/O口为普通GPIO口

IO0DIR =MOTOCON;// 配置I/O输入输出方向

LCD12864_init();//液晶端口初始化

while((IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key4)!=0)

{ init();

lcd_mesg(DAT8);

//显示界面

}

while(1)

{

if(t==0)//电机停止

{ init();

lcd_mesg(DAT7);

IO0CLR=MOTOCON;

if((IO0PIN&key4)==0)t=!t;//key4控制启停转换

} else if(t==1)//电机启动

{ if((IO0PIN&key1)==0)//key1控制加速

{ if(i>=2)i=2;

else i++;

DelayNS(10);

}

if((IO0PIN&key2)==0)//key2控制减速

{ if(i

else i--;

DelayNS(10);

}

if((IO0PIN&key3)==0)f=!f;//key3控制正反转

if((IO0PIN&key4)==0)t=!t;

if(f==0)

//正转

{ if(i==0)MOTO_Mode1(10);//低速

else if(i==1)MOTO_Mode2(10);//中速

else if(i==2)MOTO_Mode3(10);//高速

}

else if(f==1)//反转

{ if(i==0)MOTO_Mode10(10);//低速

else if(i==1)MOTO_Mode20(10);//中速

else if(i==2)MOTO_Mode30(10);//高速

} }

}

return(0);}

void DelayNS(uint32 dly){ uint32 i;

for(;dly>0;dly--)

for(i=0;i

//单四拍A-B-C-D运行方式 {

while((IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key4)!=0)

{

init();

lcd_mesg(DAT1);//显示字符串DAT1

/* A */

GPIOSET(MOTOA);

DelayNS(i);

GPIOCLR(MOTOA);

/* B */

GPIOSET(MOTOB);

DelayNS(i);

GPIOCLR(MOTOB);

/* C */

GPIOSET(MOTOC);

DelayNS(i);

GPIOCLR(MOTOC);

/* D */

GPIOSET(MOTOD);

DelayNS(i);

GPIOCLR(MOTOD);

} } void MOTO_Mode10(uint8 i)

//单四拍D-C-B-A运行方式 {

while((IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key4)!=0)

{

init();

lcd_mesg(DAT4);

//显示字符串DAT4

/* D */

GPIOSET(MOTOD);

DelayNS(i);

GPIOCLR(MOTOD);

/* C */

GPIOSET(MOTOC);

DelayNS(i);

GPIOCLR(MOTOC);

/* B */

GPIOSET(MOTOB);

DelayNS(i);

GPIOCLR(MOTOB);

/* A */

GPIOSET(MOTOA);

DelayNS(i);

GPIOCLR(MOTOA);

} } void MOTO_Mode2(uint8 i)

//双四拍AB-BC-CD-DA运行方式 {

while((IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key4)!=0)

{

init();

lcd_mesg(DAT2);

//显示字符串DAT2

GPIOSET(MOTOA);

GPIOSET(MOTOB);

DelayNS(i);

GPIOCLR(MOTOA);

GPIOCLR(MOTOB);

/* BC */

GPIOSET(MOTOB);

GPIOSET(MOTOC);

DelayNS(i);

GPIOCLR(MOTOB);

GPIOCLR(MOTOC);

/* CD */

GPIOSET(MOTOC);

GPIOSET(MOTOD);

DelayNS(i);

GPIOCLR(MOTOC);

GPIOCLR(MOTOD);

/* DA */

GPIOSET(MOTOD);

GPIOSET(MOTOA);

DelayNS(i);

GPIOCLR(MOTOD);

GPIOCLR(MOTOA);

} } void MOTO_Mode20(uint8 i)

//双四拍AD-DC-CB-BA运行方式 {

while((IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key4)!=0)

{

init();

lcd_mesg(DAT5);

//显示字符串DAT5

GPIOSET(MOTOA);

GPIOSET(MOTOD);

DelayNS(i);

GPIOCLR(MOTOA);

GPIOCLR(MOTOD);

/* DC */

GPIOSET(MOTOD);

GPIOSET(MOTOC);

DelayNS(i);

GPIOCLR(MOTOD);

GPIOCLR(MOTOC);

/* CB */

GPIOSET(MOTOC);

GPIOSET(MOTOB);

DelayNS(i);

GPIOCLR(MOTOC);

GPIOCLR(MOTOB);

/* BA */

GPIOSET(MOTOB);

GPIOSET(MOTOA);

DelayNS(i);

GPIOCLR(MOTOB);

GPIOCLR(MOTOA);

} } void MOTO_Mode3(uint8 i)

//单双八拍A-AB-B-BC-C-CD-D-DA运行方式 {

while((IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key4)!=0)

{

init();

lcd_mesg(DAT3);

//显示字符串DAT3

/* A */

GPIOSET(MOTOA);

DelayNS(i);

GPIOCLR(MOTOA);

/* AB */

GPIOSET(MOTOA);

GPIOSET(MOTOB);

DelayNS(i);

GPIOCLR(MOTOA);

GPIOCLR(MOTOB);

/* B */

GPIOSET(MOTOB);

DelayNS(i);

GPIOCLR(MOTOB);

/* BC */

GPIOSET(MOTOB);

GPIOSET(MOTOC);

DelayNS(i);

GPIOCLR(MOTOB);

GPIOCLR(MOTOC);

/* C */

GPIOSET(MOTOC);

DelayNS(i);

GPIOCLR(MOTOC);

/* CD */

GPIOSET(MOTOC);

GPIOSET(MOTOD);

DelayNS(i);

GPIOCLR(MOTOC);

GPIOCLR(MOTOD);

/* D */

GPIOSET(MOTOD);

DelayNS(i);

GPIOCLR(MOTOD);

/* DA */

GPIOSET(MOTOD);

GPIOSET(MOTOA);

DelayNS(i);

GPIOCLR(MOTOD);

GPIOCLR(MOTOA);

} } void MOTO_Mode30(uint8 i)

//单双八拍D-CD-C-BC-B-AB-A-DA运行方式 {

while((IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key4)!=0)

{

init();

lcd_mesg(DAT6);

//显示字符串DAT6

/* D */

GPIOSET(MOTOD);

DelayNS(i);

GPIOCLR(MOTOD);

/* CD */

GPIOSET(MOTOC);

GPIOSET(MOTOD);

DelayNS(i);

GPIOCLR(MOTOC);

GPIOCLR(MOTOD);

/* C */

GPIOSET(MOTOC);

DelayNS(i);

GPIOCLR(MOTOC);

/* BC */

GPIOSET(MOTOB);

GPIOSET(MOTOC);

DelayNS(i);

GPIOCLR(MOTOB);

GPIOCLR(MOTOC);

/* B */

GPIOSET(MOTOB);

DelayNS(i);

GPIOCLR(MOTOB);

/* AB */

GPIOSET(MOTOA);

GPIOSET(MOTOB);

DelayNS(i);

GPIOCLR(MOTOA);

GPIOCLR(MOTOB);

/* A */

GPIOSET(MOTOA);

DelayNS(i);

GPIOCLR(MOTOA);

/* DA */

GPIOSET(MOTOD);

GPIOSET(MOTOA);

DelayNS(i);

GPIOCLR(MOTOD);

GPIOCLR(MOTOA);

} } void delay(unsigned int m){

unsigned int i,j;

for(i=0;i

for(j=0;j

//大于40ms的延时程序

IO0SET=PSB;//设置为串行工作方式

delay(1);

IO1CLR=RST;//复位

delay(1);

IO1SET=RST;//复位置高

delay(10);

TransferCom(0x30);//RE=0,G=0,图片显示关

delay(100);

TransferCom(0x0C);//D=1,显示开

delay(100);

TransferCom(0x01);//清屏

delay(10);

TransferCom(0x06);//模式设置,光标从右向左加1位移动

delay(100);} void lcd_mesg(unsigned char *adder1){ unsigned char i;

TransferCom(0x80);

delay(100);

for(i=0;i

{ TransferData(*adder1);

adder1++;

}

TransferCom(0x90);

delay(100);

for(i=32;i

{ TransferData(*adder1);

adder1++;

} } void SendByte(unsigned char Dbyte){ unsigned char i;

for(i=0;i

{ IO0CLR=E;

if((Dbyte&0x80)==0x80)IO0SET=SID;

else IO0CLR=SID;

Dbyte=Dbyte

IO0SET=E;

IO0CLR=E;

} }

void TransferCom(unsigned char data0){

IO0SET=RS;

SendByte(0xf8);

// 11111,RW=0,RS=1,0

SendByte(0xf0&data0);//高4位

SendByte(0xf0&data0

IO0CLR=RS;

} void TransferData(unsigned char data1){

IO0SET=RS;

SendByte(0xfa);

// 11111,RW=0,RS=1,0

SendByte(0xf0&data1);//高4位

SendByte(0xf0&data1

IO0CLR=RS;} void LCD12864_init(void){

IO0DIR|=(E|SID|RS);//设置为输出

IO0CLR=(E|SID|RS);

IO1DIR|=RST;

IO1CLR=RST;

//复位

delay(1);

IO1SET=RST;

//复位置高 }

步进电机角度控制设计教程

武汉理工大学《计算机控制技术》课程设计说明书目录摘要..................................................................................................................

三菱plc控制步进电机编程

三菱plc控制步进电机编程控制要求,PLC发出脉冲信号Y0和方向信号Y10,假设步进电机转一周需要plc发出1000个脉冲,且要求在1S 左右转动一周,现在要求步进电机正转5周,停5s,再反转5周,......

单片机课程设计任务书(步进电机控制)

湖北工程学院新技术学院课程设计任务书课程单片机原理及仿真课程设计题目单片机控制步进电机专业姓名学号主要内容、基本要求、主要参考资料等1、主要内容:根据单片机课程所......

步进电机简介

步进电机简介步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即......

步进电机实验报告

步进电机调速实验报告 班级: xx 姓名: xx 学号: xxx 指导老师: xx 步进电机调速实验报告一、实验目的及要求:1、熟悉步进电机的工作原理2、熟悉51系列单片机的工作原理及调试......

下载ARM的步进电机细分控制报告word格式文档
下载ARM的步进电机细分控制报告.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

热门文章
点击下载本文