基于51单片机的步进电机调速系统(含完整代码)

基于51单片机的步进电机调速系统(含完整代码)
基于51单片机的步进电机调速系统(含完整代码)

课程设计报告

设计题目:遥控小车

——基于51单片机的步进电机调速系统学院:

专业:

班级:

学号:

姓名:

电子邮件:

时间:

成绩:

指导教师:

华南农业大学

理学院应用物理系

课程设计(报告)任务书

学生姓名指导教师职称

学生学号

专业电子信息科学与技术

题目基于51单片机的步进电机调速系统(遥控小车)

任务与要求

1.设计并制作电路,利用单片计控制步进电机运转。

2.通过键盘可以不间断地设定改变电机的转速、转向。

3.利用显示器实时显示转速等参数。

4.扩展功能:可设定转动步数。

开始日期2014年3 月完成日期2014年3 月

1引言

步进电机是一种将电脉冲转化为角位移的执行机构。目前,步进机已经广泛应用于领域,例如工业生产中的机械臂的控制,照明装置和监控摄像机转动等。步进机在装置转动、精确位移方面有很重大的作用。

本系统是基于STC89C51 单片机的遥控小车。采用STC89C51单片机作为控制核心,通过ULN2003A驱动步进机(28BYJ-48)转动,由按键和显示屏1602组成人机交互模块,同时通过315M无线发射和接收模块向单片机输入控制信号,将整个系统固定于简易小车上,最终实现小车测试和远程遥控功能。基本达到预定的设计要求以及功能的扩展。

2系统的设计与理论分析

2.1系统总体设计

2.2理论分析

本设计分为两种工作模式:测试模式、遥控模式。在电路板上有一个带锁的开关进行设置。

测试模式工作时,通过控制小车上的按键进行加速、减速、反转、设置、步数增、步数减等按键,单片机扫描按键,通过软件控制液晶模块显示对应的转速、设置的速度和步数,同时控制步进机模块进行相应的转动。

步进机的是由ULN2003A达林顿管驱动,由单片机控制输入脉冲的频率来控制步进机的转速,单片机是通过程序查表对4个I/O口输出脉冲,本次设计采用的是两相四线减速步进机,步进角为5.625°,减速比为64:1,程序采用的是8拍查表,具有较好的扭矩。

遥控模式工作时,遥控部分五个按键分别输入前、后、左、右、暂停,单片机扫描按键,通过无线发射模块发射串行编码,小车的无线接收模块接收对应的编码,送至单片机进行解码,从而控制液晶模块的显示和步进机模块的工作,进而完成功能。

设定单通道无线收发模块通信协议为:

下降沿:1ms的高电平,随后500us的低电平。

起始位:4ms的高电平,随后4ms的低电平。

数据1:2ms的高电平,随后500us的低电平。

数据0:1ms的高电平,随后500us的低电平。

结束位:4ms的低电平。

发送指令程序为:{下降沿,起始位,3个数据位,结束位}

发送编码为:右转:000

前进:001

后退:010

左转:011

接收程序通过触发外部中断1来接受信号,当P3.3口收到下降沿信号是即开始接收数据。

3硬件系统设计

3.1总体电路图

3.2单片机最小系统

本次设计采用的是两相四线减速步进电机,步进角为5.625°,减速比为64:1采用ULN2003达林顿管驱动。

3.4液晶显示模块

液晶显示模块采用LCD1602显示屏。

3.6遥控器部分

4软件系统设计

4.1主函数

4.2遥控模式程序

4.3测试模式程序

4.4键盘扫描程序

5系统运行情况分析

打开小车开关后,按下“测试”按键,小车进入测试模式。连续按“加速”按键时,小车轮子转速明显变快;连续按“减速”按键时,小车轮子转速逐渐变慢;按“反转”按键轮子转速反向。按“设置”按键会看到液晶显示屏关标闪烁,按“设置”键使光标移动,按“+”、“-”设置小车速度和步数,再一次按“设置”键,小车会依照这顶要求行驶。

按“测试”按键使其弹起,测试小车进入遥控模式工作时,打开遥控器,分别按下“前”、“后”、“左”、“右”,小车会依照对应的方向行驶,按下“暂停”键时,小车停止。

由此,改系统基本达到设计要求及拓展功能的要求。

不过因为本设计采用的28BYJ-48步进机为减速步进机,转动的上限值比较下,导致小车的行驶效果较慢,这个问题可以通过课后改用其他型号计算机得以解决。

6总结与讨论

经过四个星期的单片机课程设计,终于完成了基于51单片机的步进电机调速系统的设计,基本达到设计要求。同时自己在该系统上扩展无线收发模块,将该系统拓展为遥控小车。在本次设计的过程中,我们组成员进行了热烈讨论及反复的斟酌、修改。首先对需要用到的元器件的参数进行充分的了解,然后在计算机上用Proteus进行了与Keil软件的联动仿真。确认仿真正确看是硬件的焊接与调试。在实验过程中,我们也遇到了许多问题,如步进机转动不起来、液晶屏显示乱码等,但是经过不断的探索、思考、验证,我们最终克服了种种困难,解决了所遇到的问题,成功地完成了这个课程设计。

在这个过程中,除了学习到关于本次设计的一些专业知识、电路焊接实践经验外,同时,大家的刻苦耐劳、团队合作的品质也得到了充分的锻炼。

图1 遥控小车

图2 遥控器

附2:参考文献

[1] 李朝青. 单片机原理及接口技术[M].第3版. 北京航空航天大学出版社, 2005.

[2] 杨素行. 模拟电子技术基础简明教程[M]. 第三版. 高等教育出版社, 2006.

A.庞明辕:电路焊接、单片机编程、电路调试、辅助完成设计报告。

B.杜烁:电路焊接、单片机编程、辅助方案改进、辅助完成设计报告。

C.汤安琪:电路焊接、数据采集、完成设计报告。

附4:元器件清单表格

评语:

成绩:

附:程序代码:

/**********************单片机课程设计C语言程序************************ 题目:基于步进机的小车

成员:汤安琪、庞明辕、杜烁。

日期:2014-3-1

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

#include

#define uchar unsigned char

#define uint unsigned int

sbit a = P1^0; //反向

sbit b = P1^1; //减速

sbit c = P1^2; //加速

sbit d = P1^3; //开关

sbit f = P1^4; //设置

sbit g = P1^5; //加

sbit h = P1^6; //减

sbitlcden = P3^7; //1602使能

sbitlcdrs = P3^6; //1602写命令/数据选择端

sbit trans = P3^3; //射频串行输入端

bitn,p;

uint step,time,flag,flag1,num,snum,setnum,stepnum,count,temp,sum,t,e,j,k,m;

uchar v0,v1,v2,count1,num1,temp1;

uchar code table1[] = {0x11,0x33,0x22,0x66,0x44,0xcc,0x88,0x99}; //左

uchar code table2[] = {0x11,0x99,0x88,0xcc,0x44,0x66,0x22,0x33}; //右

uchar code table3[] = {0x11,0x93,0x82,0xc6,0x44,0x6c,0x28,0x39}; //后

uchar code table4[] = {0x11,0x39,0x28,0x6c,0x44,0xc6,0x82,0x93}; //前

uchar code table5[] = {"SPEED: 000 r/h"};

uchar code table6[] = {"SET:000 STEP:000"};

/*------------------------------------------------

延时程序

------------------------------------------------*/

void delay(uint z)

{

uintx,y;

for(x=z;x>0;x--)

for(y=10;y>0;y--);

}

void delay1(uint z) //10us

{

uchara,b,x;

for(x=0;x

for(b=1;b>0;b--)

for(a=2;a>0;a--);

}

/*------------------------------------------------ LCD1602写命令程序

------------------------------------------------*/ voidwrite_com(uchar com)

{

lcdrs = 0;

P0 = com;

delay(5);

lcden = 1;

delay(5);

lcden = 0;

}

/*------------------------------------------------ LCD1602写数据程序

------------------------------------------------*/ voidwrite_dat(uchardat)

{

lcdrs = 1;

P0 = dat;

delay(5);

lcden = 1;

delay(5);

lcden = 0;

}

/*------------------------------------------------ 基于LCD1602的显示程序

------------------------------------------------*/ void display(ucharadd,uchardat)

{

uintbai,shi,ge;

bai = dat/100;

shi = (dat-(dat/100)*100)/10;

ge = dat%10;

write_com(0x80+add);

write_dat(0x30+bai);

write_dat(0x30+shi);

write_dat(0x30+ge);

}

/*------------------------------------------------

小车速度计算程序

------------------------------------------------*/

voidspeed_dis()

{

double n;

if(b == 0)

{

delay(5);

if(b==0)

{

while(!b);

time = time+10;

if(time>=300)

time=300;

}

}

if(c == 0)

{

delay(5);

if(c==0)

{

while(!c);

time = time-10;

if(time<=70)

time=70;

}

}

n = 15*time/1024;

count = 60*n;

}

/*------------------------------------------------

步数执行程序:进入设置模式设置步数,确认后执行。------------------------------------------------*/

voidsteprun()

{

uint m;

m=512*stepnum;

while(m--)

{

uchari;

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

{

P2 = table4[i];

delay1(time);

}

speed_dis();

display(7,count);

if(f==0)

break;

}

}

/*------------------------------------------------

转速设置程序:进入设置模式设置转速确认后执行。

------------------------------------------------*/

voidsetrun()

{

while (1)

{

uchari;

time=(setnum*1024/900);

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

{

P2 = table4[i];

delay(time);

}

if(f==0)

break;

}

}

/*------------------------------------------------

无线电接收解码程序

------------------------------------------------*/

void receive()

{

if(n==1)

{

while(trans==0);

t=0;

EX1=0; //在第一个下降沿关闭外部中断

while(trans==1);

if(t>35&&t<45)

{

t=0;

while(trans==0);

if(t>35&&t<45)

{

t=0;

while(trans==1);

if(t>5&&t<15) //数据0

v0=0;

if(t>15&&t<25) //数据1

v0=4;

while(trans==0);

t=0;

while(trans==1);

if(t>5&&t<15) //数据0

v1=0;

if(t>15&&t<25) //数据1

v1=2;

while(trans==0);

t=0;

while(trans==1);

if(t>5&&t<15) //数据0

v2=0;

if(t>15&&t<25) //数据1

v2=1;

while(trans==0);

t=0;

count1=v0+v1+v2;

switch(count1)

{

case 0:e=0;j=1;k=1;m=1;break; //000

case 1:e=1;j=0;k=1;m=1;break; //001

case 2:e=1;j=1;k=0;m=1;break; //010

case 3:e=1;j=1;k=1;m=0;break; //011

case 4:e=1;j=1;k=1;m=1;p=0;break; //100

}

}

}

}

n=0;

EX1=1;

}

/*------------------------------------------------

控制小车运行程序(前后左右),运行时显示小车的实时

速度。

------------------------------------------------*/ void run()

{

if(flag==0&&flag1==0)

{

if(j==0)

{

uchari,q;

p=1;

while(1)

{

if(n==1)

break;

for(q=0;q<128;q++)

{

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

{

P2 = table4[i];

delay1(time);

}

}

speed_dis();

display(7,count);

}

}

if(m==0)

{

uchari,q;

p=1;

while(1)

{

if(n==1)

break;

for(q=0;q<128;q++)

{

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

{

P2 = table1[i];

delay1(time);

}

}

speed_dis();

display(7,count);

}

}

if(k==0)

{

uchari,q;

p=1;

while(1)

{

if(n==1)

break;

for(q=0;q<128;q++)

{

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

{

P2 = table3[i];

delay1(time);

}

}

speed_dis();

display(7,count);

}

}

if(e==0)

{

uchari,q;

p=1;

while(1)

{

if(n==1)

break;

for(q=0;q<128;q++)

{

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

{

P2 = table2[i];

delay1(time);

}

}

speed_dis();

display(7,count);

}

}

} receive();

}

/*------------------------------------------------ 正转程序

------------------------------------------------*/ void forward()

{

uinti,q;

for(q=0;q<512;q++)

{

if(d==1||a==0)

break;

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

{

P2 = table4[i];

delay1(time);

}

speed_dis();

display(7,count);

}

}

/*------------------------------------------------ 反转程序

------------------------------------------------*/ void reverse()

{

uinti,q;

for(q=0;q<512;q++)

{

if(d==1||a==1)

break;

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

{

P2 = table3[i];

delay1(time);

}

speed_dis();

display(7,count);

}

}

/*------------------------------------------------ 小车停止状态下的测试程序

功能:b增加步进机脉冲周期

c减少步进机脉冲周期,

d为测试开关,

a为反转开关,

51单片机控制的步进电机C语言程序

我上周刚做的这个实验成功拉,给你参考一下吧这可是我当时辛辛苦苦编出来的啊,不过我用的是L298驱动的和ULN2003一样,你把它换成2003就行拉 #include unsigned char code table[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf 9,0x00,0xf1,0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0x00}; unsigned char temp,temp_old; unsigned char key; unsigned char i,j,k,m,s; void delay(int i) { for(m=i;m>0;m--) for(j=250;j>0;j--) for(k=10;k>0;k--); } void saomiao() { P3=0xff; P3_4=0; temp=P3; temp=temp&0x0f; if(temp!=0x0f) { for(i=50;i>0;i--)

for(j=200;j>0;j--); temp=P3; temp=temp&0x0f; if(temp!=0x0f) { temp=P3; temp=temp&0x0f; switch(temp) { case 0x0e: key=1; break; case 0x0d: key=2; break; case 0x0b: key=3; break; case 0x07: key=4; break; } temp=P3;

temp=temp&0x0f; while(temp!=0x0f) { temp=P3; temp=temp&0x0f; } } } P3=0xff; P3_5=0; temp=P3; temp=temp&0x0f; if(temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp&0x0f; if(temp!=0x0f) { temp=P3; temp=temp&0x0f; switch(temp)

51单片机实例程100讲全集

目录 目录 (1) 函数的使用和熟悉 (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1 口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (15) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0 口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0 口8 位LED流水点亮 (20) 实例29:用P0 、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (22) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 实例40:宏定义应用举例2 (29) 实例41:宏定义应用举例3 (30)

基于51单片机的步进电机控制-设计报告(说明书)及源程序

南京XX大学 指导老师:张X 课程设计基于51单片机的步进电机控制 机械电子工程学院 测控技术与仪器 XXXXX Xxx 2012年1年4日

步进电机控制系统 [摘要]本课程设计的内容是利用51单片机,达到控制步进电机的启 动、停止、正转、反转、两档速度和状态显示的目的,使步进电机控制更加灵活。步进电机驱动芯片采用ULN2803,ULN2803具有大电流、高电压,外电路简单等优点。利用四位数码管增设电机状态显示功能,各项数据更直观。实测结果表明,该控制系统达到了设计的要求。 关键字:步进电机、数码管、51单片机、ULN2803 一步进电机与驱动电路 1.1 什么是步进电机 步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时也可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 1.2 步进电机的种类 步进电机分永磁式(PM)、反应式(VR)、和混合式(HB)三种。永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为 0.72度。这种步进电机的应用最为广泛。 1.3 步进电机的特点 1.精度高一般的步进电机的精度为步进角的3-5%,且不累积。可在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反转控制及制动等,这是步进电动机最突出的优点 2.过载性好其转速不受负载大小的影响,不像普通电机,当负载加大时就会出现速度下降的情况,所以步进电机使用在对速度和位置都有严格要求的场合; 3.控制方便步进电机是以“步”为单位旋转的,数字特征比较明显,这样就给计算

51单片机新手入门实例详解

51单片机新手入门实例详解 1.硬件和软件准备 ●实验系统:EL89C单片机学习开发系统一套 ●电脑:具有标准串口的台式机或笔记本电脑,如果没有串口也可购 买一条USB转串口线代替 ●工具软件:Keil uVision2(用于编写和编译源程序、仿真调试); 光盘上非安装烧写软件,路径 \单片机EL89C\EL89C光盘\STC52单片机下载程序\stc-isp-v4.79-not-setup\STC_ISP_V483.exe (EL89C的编程控制烧写软件) 2.源程序编写和编译 EL89C的8个发光二极管负极通过限流电阻接入单片机的P1.0~P1.7端口,下面的范例程序可以使这8个发光二极管轮流点亮,形成流水灯效果。 我们使用的开发工具是Keil C51,是目前世界上最优秀、最强大的51单片机应用平台之一,它集编辑、编译、仿真调试于一体,支持汇编、C语言以及混合编程。同时具备功能强大的软件仿真和硬件仿真功能。 下面以一个简单的流水灯程序为例子来介绍Keil C51的使用方法: 2.1首先在硬盘上建立一个文件夹,命名为ledtest(当然可以是其他名字), 为方便程序的编写和调试,我们将调试过程中产生的文件都将放在这个目录中。 2.2启动Keil软件,点击菜单project,选择new project,然后选择你要保 存的路径,输入工程文件的名字,我们现在保存到刚才建立的ledtest目录中,工程文件命名为ledtest,然后点击保存。 2.3这时会弹出下面的对话框Select Device for Target,要求你为刚才的项 目选择一个CPU。我们选择Atmel的AT89C52,如图所示,选择AT89C52之后,右边一栏是对这个单片机的基本的说明,然后点击确定。

基于51单片机控制步进电机

单片机原理及系统课程设计 1 引言 步进电机又称为脉冲电动机或阶跃电动机,它是基于最基本的电磁感应作用,将电脉冲信号转变为角位移或线位移的开环控制元件。单片机控制的步进电机广泛地应用于工业自动控制、数控机床、组合机床、机器人、计算机外围设备、照相机,大型望远镜,卫星天线定位系统等等。 随着经济的发展,技术的进步和电子技术的发展,步进电机的应用领域更加广阔,同时也对步进电机的运行性能提出了更高的要求。 步进电机的原始模型起源于1830年至1860年,1870年前后开始以控制为目的的尝试,应用于氩弧灯的电极输送机构中,这被认为最早的步进电机。 1950年后期晶体管的发明也逐渐应用在步进电机上,对于数字化的控制变得更为容易。到20世纪60年代后期,在步进电机本体方面随着永磁材料的发展,各种实用性步进电机应运而生。步进电机往后经过不断改良,使得今日步进电机已广泛运用在需要高定位精度、高分解能、高响应性、信赖性等灵活控制性高的机械系统中。 在生产过程中要求自动化、省人力、效率高的机器中,我们很容易发现步进电机的踪迹,尤其以重视速度、位置控制、需要精确操作各项指令动作的灵活控制性场合步进电机用得最多。

2 设计方案与原理 4.1 设计方案 设计一个51单片机四相步进电机控制系统要求系统具有如下功能: (1)由I/O口产生的时序方波作为电机控制信号; (2)信号经过驱动芯片驱动电机的运转; (3)电机的状态通过键盘控制,包括正转,反转,加速,减速,停止和单步运行。 4.2 设计原理 步进电机实际上是一个数字\角度转换器,也是一个串行的数\模转换器。步进电机的基本控制包括启停控制、转向控制、速度控制、换向控制4个方面。从结构上看,步进电机分为三相、四相、五相等类型,本次设计的是四相电机。四相步进电机的工作方式有单四拍、双四拍和单双八拍三种。 在本次设计中,我们使用的是四相单八拍的工作方式。通过P1口给A,B,C,D四相依次输出高电平即可实现步进电机的旋转,通过控制两次输出的间隔,即可实现对步进电机的速度控制。 图 2.1 步进电机内部结构截图 根据步进电机的相关相序表我们可以正常的控制电机的步进运行。

基于AT89C51单片机的步进电动机控制系统设计

重庆科技大学 本科毕业论文 基于AT89C51单片机的步进电动机控制系统 设计 考生姓名: XXXXX X 准考证号: XXXXXXXXXXXX 专业层次:本科院(系):XXXXXXXXXXXXXXXXXXX 指导教师: XXXXXX 职称:讲师 重庆科技大学 二O一二年月日

基于AT89C51单片机的步进电动机控制系统 设计 考生姓名: XXXXXX 准考证号: XXXXXXXXXXXX 专业层次:本科 指导教师: XXXXXXX 院(系):机械与动力工程学院 重庆科技大学 二O一二年九月二十日

摘要 随着微电子和计算机技术的发展,步进电机的需求量与日俱增,它广泛用于打印机、电动玩具等消费类产品以及数控机床、工业机器人、医疗器械等机电产品中,其在各个国民经济领域都有应用。研究步进电机的控制系统,对提高控制精度和响应速度、节约能源等都具有重要意义。 步进电机是一种能将电脉冲信号转换成角位移或线位移的机电元件,步进电机控制系统主要由步进控制器,功率放大器及步进电机等组成。采用单片机控制,用软件代替上述步进控制器,使得线路简单,成本低,可靠性大大增加。软件编程可灵活产生不同类型步进电机励磁序列来控制各种步进电机的运行方式。 本设计是采用AT89C51单片机对步进电机的控制,通过I/O口输出的时序方波作为步进电机的控制信号,信号经过芯片ULN2003驱动步进电机。 实践证明,基于单片机控制的步进电机比传统的步进控制器具有更好的性能,更加简单、方便、可靠。本设计的主要研究对象就是开环伺服系统中最常用的执行器件——步进电机。 关键词:步进电机,单片机,正反转控制,键盘控制,LCD液晶显示

51单片机C语言编程基础与实例

基础知识:51单片机编程基础 单片机的外部结构: 1. DIP40双列直插; 2. P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)和地线GND(PIN20); 4. 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5. 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6. 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1. 四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2. 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一个串行通信接口;(SCON,SBUF) 4. 一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。 C语言编程基础: 1. 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2. 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3. ++var表示对变量var先增一;var—表示对变量后减一。 4. x |= 0x0f;表示为 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6. While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚) 代码

基于51系列单片机控制步进电机调速实验 (自动保存的)

基于51系列单片机控制步进电机调速实验 实验指导书 仇国庆编写 重庆邮电大学自动化学院 自动化专业实验中心 2009年2月

基于51系列单片机控制步进电机调速实验 实验目的及要求: 1、熟悉步进电机的工作原理 2、熟悉51系列单片机的工作原理及调试方法 3、设计基于51系列单片机控制的步进电机调速原理图(要求实现电机的速度反馈测量,测量方式:数字测量) 4、实现51系列单片机对步进电机的速度控制(步进电机由实验中心提供,具体型号42BYG )由按钮控制步进电机的启动与停止;实现加速、匀速、和减速控制。速度设定由键盘设定,步进电机的反馈速度由LED 数码管显示。 实验原理: 步进电机控制原理 一般电动机都是连续旋转,而步进电动却是一步一步转动的,故叫步进电动机。步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。因此步进电动机是一种把脉冲变为角度位移(或直线位移)的执行元件。步进电动机的转子为多极分布,定子上嵌有多相星形连接的控制绕组,由专门电源输入电脉冲信号,每输入一个脉冲信号,步进电动机的转子就前进一步。由于输入的是脉冲信号,输出的角位移是断续的,所 以又称为脉冲电动机。随着数字控制系统的发展,步进电动机的应用将 逐渐扩大。 步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来 进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由 脉冲信号频率决定。步进电机的驱动电路根据控制信号工作,控制信号 可以由单片机产生。 电机转子均匀分布着很多小齿,定子齿有三个励磁绕阻,其几 何轴线依次分别与转子齿轴线错开。0、1/3て、2/3て,(相邻 两转子齿轴线间的距离为齿距以て表示),即A与齿1相对齐, B与齿2向右错开1/3て,C与齿3向右错开2/3て,A'与齿5相对齐,(A'就是A,齿5就是齿1)下面是定转子的展开图:(图2所示)

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

51单片机控制四相步进电机解析

51单片机控制四相步进电机 2009年07月21日星期二 12:44 51单片机控制四相步进电机 2009-03-01 18:53 接触单片机快两年了,不过只是非常业余的兴趣,实践却不多,到现在还算是个初学者吧。这几天给自己的任务就是搞定步进电机的单片机控制。以前曾看过有关步进电机原理和控制的资料,毕竟自己没有做过,对其具体原理还不是很清楚。今天从淘宝网买了一个EPSON的UMX-1型步进电机,此步进电机为双极性四相,接线共有六根,外形如下 图所示: 详细内容: https://www.360docs.net/doc/ba985850.html,/31907887_d.h tml

拿到步进电机,根据以前看书对四相步进电机的了解,我对它进行了初步的测试,就是将5伏电源的正端接上最边上两根褐色的线,然后用5伏电源的地线分别和另外四根线(红、兰、白、橙)依次接触,发现每接触一下,步进电机便转动一个角度,来回五次,电机刚好转一圈,说明此步进电机的步进角度为360/(4×5)=18度。地线与四线接触的顺序相反,电机的转向也相反。 如果用单片机来控制此步进电机,则只需分别依次给四线一定时间的脉冲电流,电机便可连续转动起来。通过改变脉冲电流的时间间隔,就可以实现对转速的控制;通过改变给四

线脉冲电流的顺序,则可实现对转向的控制。所以,设计了如下电路图: C51程序代码为: 代码一 #include static unsigned int count; static unsigned int endcount; void delay(); void main(void)

51单片机控制步进电机程序及硬件电路图

#include static unsigned int count; //计数 static int step_index; //步进索引数,值为0-7 static bit turn; //步进电机转动方向 static bit stop_flag; //步进电机停止标志 static int speedlevel; //步进电机转速参数,数值越大速度越慢,最小值为1,速度最快static int spcount; //步进电机转速参数计数 void delay(unsigned int endcount); //延时函数,延时为endcount*0.5毫秒 void gorun(); //步进电机控制步进函数 void main(void) { count = 0; step_index = 0; spcount = 0; stop_flag = 0; P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0; EA = 1; //允许CPU中断 TMOD = 0x11; //设定时器0和1为16位模式1 ET0 = 1; //定时器0中断允许 TH0 = 0xFE;

TL0 = 0x0C; //设定时每隔0.5ms中断一次TR0 = 1; //开始计数 turn = 0; speedlevel = 2; delay(10000); speedlevel = 1; do{ speedlevel = 2; delay(10000); speedlevel = 1; delay(10000); stop_flag=1; delay(10000); stop_flag=0; }while(1); } //定时器0中断处理 void timeint(void) interrupt 1 { TH0=0xFE; TL0=0x0C; //设定时每隔0.5ms中断一次count++; spcount--; if(spcount<=0) { spcount = speedlevel; gorun(); } } void delay(unsigned int endcount) { count=0; do{}while(count

51单片机驱动步进电机的方法(详解)

51单片机驱动步进电机的方法2019.02 这款步进电机的驱动电压12V,步进角为7.5度. 一圈360 度, 需要48 个脉冲完成!!! 该步进电机有6根引线,排列次序如下:1:红色、2:红色、3:橙色、4:棕色、5:黄色、6:黑色。 采用51驱动ULN2003的方法进行驱动。 ULN2003的驱动直接用单片机系统的5V电压,可能力矩不是很大,大家可自行加大驱动电压到12V。 ;****************************************************************************** ;*************************步进电机的驱动*************************************** ; DESIGN BY BENLADN911 FOSC = 12MHz 2005.05.19

;--------------------------------------------------------------------------------- ; 步进电机的驱动信号必须为脉冲信号!!! 转动的速度和脉冲的频率成正比!!! ; 本步进电机步进角为7.5度. 一圈360 度, 需要48 个脉冲完成!!! ;--------------------------------------------------------------------------------- ; A组线圈对应P2.4 ; B组线圈对应P2.5 ; C组线圈对应P2.6 ; D组线圈对应P2.7 ; 正转次序: AB组--BC组--CD组--DA组(即一个脉冲,正转7.5 度) ;---------------------------------------------------------------------------------- ;----------------------------正转-------------------------- ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R3,#144 正转3 圈共144 脉冲 START: MOV R0,#00H START1: MOV P2,#00H MOV A,R0 MOV DPTR,#TABLE MOVC A,@A+DPTR JZ START 对A 的判断,当A = 0 时则转到START MOV P2,A LCALL DELAY INC R0 DJNZ R3,START1 MOV P2,#00H LCALL DELAY1 ;-----------------------------反转------------------------ MOV R3,#144 反转一圈共144 个脉冲 START2: MOV P2,#00H

51单片机50个实例代码

51单片机50个例程代码程序里有中断,串口等驱动,直接复制即可使用1-IO输出-点亮1个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.360docs.net/doc/ba985850.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 sbit LED=P1^0;// 用sbit 关键字定义LED到P1.0端口, //LED是自己任意定义且容易记忆的符号 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用bit位对单个端口赋值 LED=1; //将P1.0口赋值1,对外输出高电平 LED=0; //将P1.0口赋值0,对外输出低电平 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 2-IO输出-点亮1个LED灯方法2 /*-----------------------------------------------

名称:IO口高低电平控制 论坛:https://www.360docs.net/doc/ba985850.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用1个字节对单个端口赋值 P1 = 0xFF; //P1口全部为高电平,对应的LED灯全灭掉, //ff换算成二进制是1111 1111 P1 = 0xfe; //P1口的最低位点亮,可以更改数值是其他的灯点亮 //0xfe是16进制,0x开头表示16进制数, //fe换算成二进制是1111 1110 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 3-IO输出-点亮多个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.360docs.net/doc/ba985850.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的多个LED灯

最新51单片机控制四相步进电机电路图汇总

51单片机控制四相步进电机电路图

51单片机控制四相步进电机 接触单片机快两年了,不过只是非常业余的兴趣,实践却不多,到现在还算是个初学者吧。这几天给自己的任务就是搞定步进电机的单片机控制。以前曾看过有关步进电机原理和控制的资料,毕竟自己没有做过,对其具体原理还不是很清楚。今天从淘宝网买了一个EPSON的UMX-1型步进电机,此步进电机为双极性四相,接线共有六根,外形如下图所 示: 拿到步进电机,根据以前看书对四相步进电机的了解,我对它进行了初步的测试,就是将5伏电源的正端接上最边上两根褐色的线,然后用5伏电源的地线分别和另外四根线(红、兰、白、橙)依次接触,发现每接触一下,步进电机便转动一个角度,来回五次,电机刚好转一圈,说明此步进电机的步进角度为360/(4×5)=18度。地线与四线接触的顺序相反,电机的转向也相反。 如果用单片机来控制此步进电机,则只需分别依次给四线一定时间的脉冲电流,电机便可连续转动起来。通过改变脉冲电流的时间间隔,就可以实现对转速的控制;通过改变给四线脉冲电流的顺序,则可实现对转向的控制。所以,设计了如下电路图:

C51程序代码为: 代码一 #include static unsigned int count; static unsigned int endcount; void delay(); void main(void) { count = 0; P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0;

EA = 1; //允许CPU中断TMOD = 0x11; //设定时器0和1为16位模式1 ET0 = 1; //定时器0中断允许TH0 = 0xFC; TL0 = 0x18; //设定时每隔1ms中断一次 TR0 = 1; //开始计数 startrun: P1_3 = 0; P1_0 = 1; delay(); P1_0 = 0; P1_1 = 1; delay(); P1_1 = 0; P1_2 = 1; delay(); P1_2 = 0; P1_3 = 1; delay(); goto startrun; } //定时器0中断处理 void timeint(void) interrupt 1

单片机课设步进电机控制正反转(单片机爱好者)

单片机课程设计报告设计题目:步进电机控制系统 学院机械工程学院 专业机械设计制造及其自动化 班级 姓名 学号 指导教师 湖北工业大学 2010 年秋季学期

目录 1.设计目的 (2) 2.设计的主要内容和要求 (2) 3.题目及要求功能分析 (2) 4.设计方案 (5) 4.1 整体方案 (5) 4.2 具体方案 (5) 5.硬件电路的设计 (6) 5.1 硬件线路 (6) 5.2 工作原理 (7) 5.3 操作时序 (8) 6. 软件设计 (8) 6.1 软件结构 (8) 6.2 程序流程 (9) 6.3 源程序清单 (9) 7. 系统仿真 (9) 8. 使用说明 (10) 9. 设计总结 (10) 参考文献 (11) 附录 (12)

步进电机的控制 1.设计目的 (1)熟悉单片机编程原理。 (2)熟练掌握51单片机的控制电路和最小系统。 (3)单片机基本应用系统的设计方法。 2.设计的主要内容和要求 (1)查阅资料,了解步进电机的工作原理。 (2)通过单片机给参数控制电机的转动。 (3)通过按钮控制启停及反转。 (4)其他功能。 3.题目及要求功能分析 步进电机:步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。步进电机可以作为一种控制用的特种电机,利用其精度高等特点,广泛应用于各种工业控制系统中。 三相单、双六拍步进电机的结构和工作原理: 三相单、双六拍步进电机通电方式:这种方式的通电顺

基于51单片机控制步进电机毕业设计论文

基于51单片机控制步进电机毕业设计 论文 目录 第一章绪论 (2) 1.1课题背景 (2) 1.2课题的目的和意义 (3) 1.3课题的内容 (3) 第二章步进电机的结构与特点 (4) 2.1步进电机的构造 (4) 2.2步进电机的工作原理 (5) 2.3步进电机的主要特征 (6) 2.4步进电机绕组的电气特性 (8) 2.5步进电机的选型 (9) 第三章设计原理分析 (10) 3.1设计目的 (10) 3.2设计要求 (10) 3.3总体设计方框图 (11) 3.4设计方案论证 (11) 3.4.1系统控制方案 (11) 3.4.2驱动模块方案选择 (14) 3.4.3最终方案确定 (16) 第四章步进电机控制系统硬件设计 (16) 4.1单片机最小系统 (16) 4.2 控制电路 (18) 4.3 驱动电路 (20) 4.4 显示电路 (21) 4.5 位移越界报警电路 (22)

第一章绪论 4.6 状态指示灯显示电路 (22) 第五章步进电机控制系统软件设计 (23) 5.1主程序设计 (23) 5.2 LCD显示程序设计 (25) 5.3转速控制程序设计 (27) 5.4程序设计 (28) 5.5角度设定程序设计 (29) 5.6位移设定程序设计 (30) 第六章仿真结果与分析 (34) 6.1整体硬件设计图 (34) 6.2测试 (34) 6.3误差分析 (39) 第七章总结 (40) 参考文献 (41) 致谢 (43) 第一章绪论 1.1课题背景 步进电机作为控制执行器,广泛应用于各种控制领域[1]。当需要精确控制角 度方位时,步进电机的使用将会很好解决实际问题。随着微电子技术和计算机技 术的飞速发展[2],各行业对步进电机的需求日益增加,它已被普遍应用于各个经 济领域。 步进电机是在国外发明的。中国在文化大革命中就已经开始应用和生产,例 如北京、浙江、江苏、四川都可以生产,而且在各行业开始逐步使用,目前驱动 电路的半导体器件大多能做到完全国产。当时是全分立元器件构成的逻辑运算电 路[3],还有电容耦合输入的计数器,触发器,环形分配器。当前,国外对步进电 机的控制和驱动研究的一个重要的发展方向,是大量的研发专用芯片,结果就是

51单片机C语言编程基础和实例之欧阳光明创编

基础知识:51单片机编程基础 欧阳光明(2021.03.07) 单片机的外部结构: 1.DIP40双列直插; 2.P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入 时,要先输出高电平) 3.电源VCC(PIN40)和地线GND(PIN20); 4.高电平复位RESET(PIN9);(10uF电容接VCC与 RESET,即可实现上电复位) 5.内置振荡电路,外部只要接晶体至X1(PIN18)和X0 (PIN19);(频率为主频的12倍) 6.程序配置EA(PIN31)接高电平VCC;(运行单片机内部 ROM中的程序) 7.P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1.四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2.两个16位定时计数器;(TMOD,TCON,TL0,TH0, TL1,TH1) 3.一个串行通信接口;(SCON,SBUF) 4.一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。 C语言编程基础: 1.十六进制表示字节0x5a:二进制为01011010B;0x6E为 01101110。 2.如果将一个16位二进数赋给一个8位的字节变量,则自动 截断为低8位,而丢掉高8位。 3.++var表示对变量var先增一;var—表示对变量后减一。 4.x |= 0x0f;表示为 x = x | 0x0f;

5.TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四 位赋值0x5,而不改变TMOD的高四位。 6.While( 1 ); 表示无限执行该语句,即死循环。语句后的分号 表示空循环体,也就是{;}

基于51单片机的步进电机控制课程设计

课程设计报告 课程设计名称:单片机系统综合课程设计 课程设计题目:基于51单片机的步进电机控制 院(系):计算机学院 专业:计算机科学与技术(嵌入式)

目录 第1章总体设计方案 (1) 1.1课程设计的内容和要求 (1) 1.2课程设计原理 (1) 1.3课程设计思路 (2) 1.4实验环境 (3) 第2章详细设计方案 (4) 2.1实现方法 (4) 2.2模块设计 (5) 2.2.1 步进电机的驱动 (5) 2.2.2 按键电路设计 (5) 2.2.3 时钟产生及复位电路 (6) 2.3主程序流程图图 (7) 第3章调试及结果分析 (8) 3.1调试步骤及方法 (8) 3.2实验结果及分析 (8) 参考文献 (9) 附录1(源程序) (10) 附录2(系统原理图) (14) 附录3(器件清单) (15)

第1章总体设计方案 1.1 课程设计的内容和要求 一、课程设计内容: 步进电机是一种将电脉冲转换成角位移或线位移的电磁机械装置,也是一种能把输出解析为唯一增量和输入数字脉冲对应的驱动器件。步进电机具有快速启动、停止的能力,精度高、控制方便,因此,在工业上得到了广泛应用。 利用单片机控制一个步进电机,而且要满足如下技术指标: (1)开始通电时,步进电机停止转动。 (2)单片机分别接按键开关K1、K2和K3,用来控制步进电机的转向,要求如下: 当按下K1时,步进电机正转。 当按下K2时,步进电机反转。 当按下K3时,步进电机停止转动。 步进电机的工作方式有单四拍、双四拍、单双八拍。 二、课程设计要求: 1. 独立完成课程设计任务; 2. 通过老师当场验收; 3. 交出完整的课程设计报告。 1.2课程设计原理 步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调整节拍的目的。

基于51单片机的步进电机控制-

基于51单片机的步进电机控制 [摘要]本课程设计的内容是利用51单片机,达到控制步进电机的启动、 停止、正转、反转、两档速度和状态显示的目的,使步进电机控制更加灵活。步进电机驱动芯片采用ULN2803,ULN2803具有大电流、高电压,外电路简单等优点。利用四位数码管增设电机状态显示功能,各项数据更直观。实测结果表明,该控制系统达到了设计的要求。 关键字:步进电机、数码管、51单片机、ULN2803 一步进电机与驱动电路 1.1 什么是步进电机 步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时也可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 1.2 步进电机的种类 步进电机分永磁式(PM)、反应式(VR)、和混合式(HB)三种。永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为0.72度。这种步进电机的应用最为广泛。 1.3 步进电机的特点 1.精度高一般的步进电机的精度为步进角的3-5%,且不累积。可在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反转控制及制动等,这是步进电动机最突出的优点 2.过载性好其转速不受负载大小的影响,不像普通电机,当负载加大时就会出现速度下降的情况,所以步进电机使用在对速度和位置都有严格要求的场合; 3.控制方便步进电机是以“步”为单位旋转的,数字特征比较明显,这样就给计算机控制带来了很大的方便,反过来,计算机的出现也为步进电机开辟了更为广阔的使用市场;

51单片机汇编语言步进电机转速控制系统

理工大学本科设计报告题目:步进电机转速控制系统设计 课程名称:单片机综合设计 学院(系):电子信息与电气工程学部 专业: 班级: 学号: 学生: 成绩: 2013 年7 月20 日

题目:步进电机转速控制系统设计 1 设计要求 1)利用ZLG7290的键盘控制直流电机(或步进电机的转速、转向); 2)也可以利用ADC模块(与电位器配合),利用电位器控制转速; 3)利用ZLG7290的8位LED数码管显示电机转向、转速参数显示。 2 设计分析及系统方案设计 实验要求使用步进电机作为被控制对象,由ZLG7290做人机对话平台,利用单片机的P1(8位)和P3(部分口线)构造系统。实验最终实现功能、设计思路以及方案设计如以下几个小节所述。 2.1 系统设计实现功能 根据设计要求、现有设备以及知识储备,完成功能如下: ①由按键S1~S8实现转速切换,其中S1~S4正转,S5~S8反转 ②按键S16作为停止键,按下S10后步进电机停止转动,再按S1~S16步进电机按 照按键对应转速以及转向转动 ③按键S10作为复位键,当按下S10后,无论当前处于何种状态,系统恢复至初 始态 ④8为LED数码管显示当前步进电机转速(speed=0/1 1~4),转速前0表示正转, 1表示反转 ⑤若按下停止键,数码管显示当前转速;若按下复位键,数码管显示初始态

speed=00 2.2 设计思路 本次的设计是LED显示与步进电机相结合以及若干功能键的组合的一种设计。根据之前学习的按键中断显示实验和定时器实验,使用INT0和INT1,INT0作为按键中断,INT1作为定时器。在主程序中实现LED初始显示、定时器计时初始、按键中断初始。INT0中断调用中断服务子程序实现对按键键值的判断,并根据相应的按键值实现对应步进电机的变化,并显示该按键对应的转速。INT1定时器中断根据INT0的按键键值,对定时器设定相应的初值,实现步进电机按规定的转速转动。对于按键停止,则是利用中断优先级,当INT0的中断优先级高时,系统进入中断,此时INT1停止计时,也就实现了步进电机的停止,当改变定时器与按键中断的优先级时,即把INT0设为低优先级,INT1设为高优先级,步进电机重新开始转动。此时添加一个对INT0位地址的查询,若有按键即正/反转的4档转速所对应的按键,步进电机开始重新转动。对于复位功能,则同样是利用按键键值的判断,在对应键值下控制电机初始化。 2.3 系统方案设计 系统总设计方案框图如下所示:

相关文档
最新文档