步进电机控制系统的设计与仿真

上传人:s9****2 文档编号:560835532 上传时间:2023-02-02 格式:DOCX 页数:12 大小:195.15KB
返回 下载 相关 举报
步进电机控制系统的设计与仿真_第1页
第1页 / 共12页
步进电机控制系统的设计与仿真_第2页
第2页 / 共12页
步进电机控制系统的设计与仿真_第3页
第3页 / 共12页
步进电机控制系统的设计与仿真_第4页
第4页 / 共12页
步进电机控制系统的设计与仿真_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《步进电机控制系统的设计与仿真》由会员分享,可在线阅读,更多相关《步进电机控制系统的设计与仿真(12页珍藏版)》请在金锄头文库上搜索。

1、一、设计题目步进电机控制系统的设计与仿真二、设计要求 设计一个单片机四相步进电机控制系统,要求系统具有以下功能。(1) 用K0-K2作为通电方式选择键,K0为单四拍,K1为双四拍,K2为四相八拍。(2) K3-K4 作为启动和方向控制。( 3 )正转时红色指示灯亮,反转时黄色指示灯亮,不转时绿灯亮。( 4)可通过键盘设定步进电机步数给定值。(5)用三位 LED 数码管显示剩余工作步数三、系统总体框图与原理说明通过键盘模块设置步进电机的工作模式、步数以及正反转,同时用数码管模块显示 剩余工作步数,用 LED 灯模块显示步进电机的工作状态。4*4 键盘模块:采用外部中断的方式实时扫描键盘,判别按下

2、的键,并执行所按下 的键相应的操作,即输入步数、选择工作模式、正/反转、调速以及启动/停止等,由于 键数的限制,把一些键功能复用。用线反转法扫描键盘,即先在P2 口输出OxfO,二次 确认有按键按下后,逐行输出低电平,确认按键所在的列,便可知道所按下的是哪个键, 再返回对应的键值。数码管显示模块:采用定时中断的方式定时扫描一次显示,从而实现数码管的动态 显示,同时 P0 口需外接上拉电阻。本设计采用共阴数码管,故 0 到 9 的段码为: 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f四相步进电机模块:采用L298驱动芯片驱动电机,同时P1 口

3、驱动能力不够,需外 接上拉电阻,通过四个 LED 灯接在 P1.0 到 P1.3 口来观察电机的拍子。据分析可得到, 四 相 单 四 拍 : A-B-C-D ; 四 相 双 四 拍 : AB-BC-CD-DA ; 四 相 八 拍 : A-AB-B-BC-C-CD-D-DALED 灯模块:把红黄绿三个灯接在 P3 口上,在程序中通过置位复位来实现相应状 态的转换。图 1 为系统总体设计方框图,由单片机 AT89C51, L298 驱动芯片,四相步进电机, 7 段 LED 数码管等一些电路模块组成。图 1 系统总体框图四、硬件电路图此次我们所设计的是一个步进电机控制系统,主要由单片机AT89C51

4、、四相步进电机、7 段数码管、 LED 灯、 L298 驱动芯片及一些其他相关元件设计而成。可以通过键盘来控制 系统的输入步数、选择工作模式、正/反转、调速以及启动/停止工作。运转时,用 3 位 7 段数码管来输出生育工作步数。最后根据思路所设计出来的硬件电路图如下。ABC1D: TE= *=TB7-NndddP1.12P123P134-P1.+5P15P1.67P1.7FXTAL1PDD.H.DaPD.VAD1P口 2iADZXTAL2pnziH.DiP.臂RD*P口 iiADSPD.ADSpsdhePZ.Ii.HSP2Zf.H.inPSEMP23A11ALEPZ.tiAlZEAP25TA1

5、3P2J9A1 +P2.7/A15pinP3CTRXDP1.1P3.1iT:P1ZPMIHTDP13PlZlINTIP1.+P3.*iTDP15P35T1P1.6Pl.SliilF.P1.7P3.7/RD卫Pili37PtJM3SPD335PD.+ 4-PtJWZ3PDjS32PO.?21P2LIZZP2.1Z3P222 4-P232SP2.+26P2Z?P2.6盘P2.71 口P3LI11P3.11ZP3213P3311P3.+1SP3P3.617P3.T图 2 系统的硬件电路图五、程序流程图六、仿真说明上电后,电机步数为 0,默认为四相单四拍、正转的工作模式,红、绿灯亮,数码 管显示 0,

6、输入步数,数码管显示步数,选择工作模式,设置正/反转,相应的指示灯亮, 并启动后,绿灯灭,电动机开始按设定的模式工作,数码管显示剩余的工作步数,运行 时,可通过加速和减速按键进行电机的调速,按下停止按键后,电机停止工作,数码管 显示停止时剩余的工作步数,当步数减到 0 后,电机停止工作,数码管显示 0。 七、心得体会在设计的过程中,学会了很多东西,熟悉了步进电机控制系统的整体运行过程和总体 布局,掌握了该硬件电路的设计方法,掌握了步进电机控制系统程序的设计和调试,最大 的收获便是学会了如何把 C 语言应用于单片机得编程上,避免了汇编的低效率的缺点。附录:程序清单 #include #inclu

7、de#define uchar unsigned char#define uint unsigned int uchar code disp=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f; /共阴数码管显示码 uchar code table1=0x01,0x02,0x04,0x08, 0x08,0x04,0x02,0x01; /单四拍uchar code table2=0x03,0x06,0x0c,0x09, 0x09,0x0c,0x06,0x03; /双四拍uchar code table3=0x01,0x03,0x02,0x06,0

8、x04,0x0c,0x08,0x09, 0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01; /四相八拍uchar * p二NULL;/表指针uchar paishu=0,qibu=0,start=0;uint speed=100;/设置转速uint dat1=0,count=0; /拍数sbit weg二P30;/个位位选sbit wes=P31;/十位位选sbit web=P33;/百位位选sbit k31=P35;/正转指示灯sbit k32=P3飞;/反转指示灯sbit k4=P37;/停止指示灯void init() ;void display_3(uin

9、t dat);void Delay1ms(unsigned int count);uchar keybscan(void);uchar keyaction (void);/*1ms 延时子程序*/void Delay1ms(unsigned int count)unsigned int i,j; for(i=0;icount;i+)for(j=0;j100;j+);/*键盘扫描子程序*/uchar keybscan(void)uchar scode,rcode;P2=0xf0;if(P2&0xf0)!=0xf0)Delay1ms(1);if(P2&0xf0)!=0xf0) scode=0xfe

10、;while(scode&0x10)!=0)P2=scode; if(P2&0xf0)!=0xf0) rcode=(P2&0xf0); return(scode+rcode);else scode=(scode1)|0x01; return(0xfe);/无按键则返回/第一行第一列按键编码/第一行第二列按键编码/*返回键码子程序*/ uchar keyaction (void) switch(keybscan()case 0xfe :case 0xde :case 0xce :case 0xae :case 0x6e :return(#); break; return(0); break; r

11、eturn(1); break; return(2); break; return(3); break;case 0xdd :return(4);break;case 0xcd :return(5);break;case 0xad :return(6);break;case 0x6d :return(7);break;case 0xdb :return(8);break;case 0xcb :return(9);break;case 0xab :return(10); break;case 0x6b :return(11); break;case 0xd7 :return(12); break

12、;case 0xc7 :return(13); break;case 0xa7 :return(14); break;case 0x67 :return(15); break;/第四行第四列按键编码/*3 位数显示子程序*/void display_3(uint dat) P0=0;P0=dispdat/100%10; /3 位 web=0;Delay1ms(1); web=1;P0=0;P0=dispdat/10%10; /2 位 wes=0;Delay1ms(1);wes=1;P0=0;P0=dispdat%10; /1 位 weg=0;Delay1ms(1); weg=1;/*定时器 0

13、初始化子程序*/void init() TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1;ET0=1;TR0=1;/*定时器 0中断程序*/void timer0() interrupt 1 TH0=(65536-10000)/256; /每 10ms 扫描显示 TL0=(65536-10000)%256;display_3(count);/显示剩余步数/*外部中断 0 中断程序*/ int0()interrupt 0 using 0EA=0; /关中断if (start=0)switch(keyaction()case 0: dat1=dat1*10+0;count=dat1; break;case1:dat1=dat1*10+1;count=dat1; break;case2:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号