基于单片机的步进电机控制课程设计.docx
- 文档编号:3886928
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:13
- 大小:371.21KB
基于单片机的步进电机控制课程设计.docx
《基于单片机的步进电机控制课程设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的步进电机控制课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
基于单片机的步进电机控制课程设计
基于单片机的步进电机控制课程设计
江南大学
物联网工程学院
课程设计报告
课程名称:
单片机原理及应用
设计题目:
基于单片机的步进电机控制器设计
班级:
姓名:
学号:
指导教师:
评分:
2013年6月29日
一、设计目的:
通过具体小型测试系统设计,实践单片机系统设计及调试的全过程,以加深对单片机内部结构、功能和指令系统的理解,并进一步学习单片机开发系统的应用及一些外围芯片的接口和编程方法,初步掌握单片机系统的硬、软件设计技术及调试技巧。
二、设计要求:
1)电机转速可以平稳控制
2)通过键盘和显示器可以设置电机转速
3)显示电机的速度趋势
三、仪器设备:
1)PC机(已安装程序编写和调试的相关软件)
2)购买的51单片机学习开发板MINIV2
3)数据线
4)28BYJ-48步进电机
4、主要芯片及硬件原理说明:
芯片说明:
1)AT89C51单片机
89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压、高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器。
89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
2)电机驱动芯片ULN2003A
大电流达林顿阵列,由八个硅NPN达林顿管组成。
可直接驱动继电器、电动机等,其内部电路如下:
3)锁存器74ACQ573SC
74ACQ573SC芯片为D型透明锁存器,其封装、内部电路、引脚功能如下:
硬件电路及其原理说明:
1)控制模块:
该部分电路为单片机最小系统与控制按键的原理电路。
在最小系统中,使用晶振频率为12MHZ,复位电路具有上电自动复位与手动复位2中功能,使用内部程序存储功能。
P3.2~P3.6接独立按键,分别为控制电机的正转、反转、停止、加速、减速,P3.2和P3.3为外部中断引脚,但程序中统一使用按键检测的方法来读取控制信号,未使用中断。
系统由电脑USB接口供电,电压为5V,符合系统工作要求。
2)显示模块:
显示电路中使用8段共阴极独立数码管,数码管带有选通端(com引脚)。
本系统使用3个数码管,第一个数码管显示速度等级,速度等级分为1~8,等级越高速度越高。
第二个数码管显示电机的运行方向,“0”代表电机停止运转、“1”带表电机正转、“2”代表电机反转。
第三个数码管显示电机运行趋势,“P”代表电机平稳运行,“-”代表电机减速,“+”代表电机加速。
数码管位选数据和段选数据由P0口控制,数码管的显示中需要2个锁存器74ACQ573SC分别锁存位选和段选信号。
2个锁存器的片选信号分别由P^6和P2^7引脚控制。
位选信号为0时,对应数码管被选通;段选信号为1时对应的数码管内部LED被点亮。
所以数码管的段选数码表和位选控制如下:
数码管段选数码表
P0口输出
0x3f
0x06
0x5b
0x4f
0x66
0x6d
0x7d
数码管显示值
0
1
2
3
4
5
6
P0口输出
0x07
0x7f
0x6f
0x46
0x40
0x73
数码管显示值
7
8
9
类似“+”
-
P
位选控制
P0口输出
0xfe
0xfb
0xf7
被选通的数码管
第一个
第二个
第三个
原理图如下:
3)驱动模块:
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。
可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
本系统使用28BYJ-484相5线制步进电机,由于单片机输出电流较小无法直接驱动步进电机运转,所以需要经过ULN2003A电流放大芯片放大后,才能驱动电机。
28BYJ-48硬件特性:
1.额定电压:
12VDC(另有电压:
5V、6V、24V)
2.减速比:
1/64(另有减速比:
1/16、1/32)
3.步距角:
5.625°/64
4.驱动方式:
4相8拍
5.直流电阻:
200Ω±
6.空载牵入频率:
≥600Hz
7.空载牵出频率:
≥1000Hz
8.牵入转矩:
≥34.3mN.m(120Hz)
本设计采用8拍运行方式,即A-AB-B-BC-C-CD-D-DA的运行方式。
程序中对应的正转、反转数码表如下:
正转数码表
0x01
0x03
0x02
0x06
0x04
0x0c
0x08
0x09
A
AB
B
BC
C
CD
D
DA
反转数码表
0x09
0x08
0x0c
0x04
0x06
0x02
0x03
0x01
AD
D
DC
C
CB
B
BA
A
原理图如下:
5、程序清单:
#include
#defineuintunsignedint
#defineucharunsignedchar
uchardjr[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//电机正转数码表
uchardjl[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//电机反转数码表
uchardjstop[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
//电机停止数码表
uchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x46,0x40,
0x73};//数码管显示段码表
uintflag,k;//flag为电机运行状态标志
sbitright=P3^2;//正传按键
sbitleft=P3^3;//反转按键
sbitstop=P3^6;//停止按键
sbitup=P3^4;//加速按键
sbitdown=P3^5;//减速按键
sbitdula=P2^6;//数码管段选通输出端口
sbitwela=P2^7;//数码管位选通输出端口
voiddisplay(ucharsudu);//速度显示函数声明
voiddisplay1(ucharflag1);//电机运行状态显示函数
voiddelay1(uintz)//延时函数1
{
uintx,y;
for(x=z;x>0;x--)
for(y=30;y>0;y--);
}
voiddelay2(uinta)//延时函数2
{uintb,c;
for(b=a;b>0;b--)
for(c=10;c>0;c--);
}
voidmain()//主函数
{uintspeed1=1,speed;
while
(1)
{
if(stop==0)//停止按键检测
{
delay1(5);
if(stop==0)
while(!
stop);
flag=0;//如果停止按键按下,则flag=0
}
if(right==0)//正转按键检测
{
delay1(5);
if(right==0)
while(!
right);
flag=1;//如果正转按键按下,则flag=1
}
if(left==0)//反转按键检测
{
delay1(5);
if(left==0)
while(!
left);
flag=2;//如果反转按键按下,则flag=2
}
if(down==0)//减速按键检测
{
delay1(5);
if(down==0)
{
wela=1;//减速状态显示,第4数码管显示"-"
P0=0xf7;
wela=0;
dula=1;
P0=table[11];
dula=0;
while(!
down);
speed1++;
}
if(speed1>8)
speed1=1;
}
if(up==0)//加速按键检测
{
delay1(5);
if(up==0)
{
wela=1;//加速状态显示,第4数码管显示"+"
P0=0xf7;
wela=0;
dula=1;
P0=table[10];
dula=0;
while(!
up);
speed1--;
}
if(speed1<1)
speed1=8;
}
if(flag==0)//电机停止运行程序
{
for(k=0;k<8;k++)
{
P1=djstop[k];
delay2(speed1);
display(flag);
}
}
if(flag==1)//电机内部一周程序正传
{
for(k=0;k<8;k++)
{
P1=djr[k];
delay2(speed1);
speed=9-speed1;
display(speed);//调用速度显示函数
display1(flag);//调用电机运行状态显示函数
}
}
elseif(flag==2)//电机内部反转一周程序
{
for(k=0;k<8;k++)
{
P1=djl[k];
delay2(speed1);
speed=9-speed1;
display(speed);//调用速度显示函数
display1(flag);//调用电机运行状态显示函数
}
}
}
}
voiddisplay(ucharsudu)//速度显示子函数
{
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=table[sudu];
dula=0;
delay1
(1);
}
voiddisplay1(ucharflag1)//电机运行状态显示函数
{
wela=1;
P0=0xfb;
wela=0;
dula=1;
P0=table[flag1];//显示0代表电机停止,1代表正传,2代表反转
dula=0;
delay1
(1);
wela=1;
P0=0xf7;
wela=0;
dula=1;
P0=table[12];//显示P代表电机平稳运行
dula=0;
delay1
(1);
}
6、设计体会:
我通过基于单片机的步进电机控制器设计,实践单片机系统设计、上机调试及再设计的全过程,以加深对单片机内部结构、原理功能和指令系统的进一步理解,并进一步学习单片机开发系统的原理与应用以及一些外围芯片的接口和编程调试方法与技巧,初步掌握单片机系统的硬、软件设计技术及调试技巧。
老师课程上没有讲过步进电机的设计,不过课程设计需要用单片机,在设计之前,我好好复习了课本,全面梳理了一下51系列单片机的系统框图、功能和应用、指令系统以及扩展的知识点,对这次课程设计需要的硬件进行了预算和统计。
这次单片机课程设计不仅复习巩固了学到的知识,还扩展了知识。
通过这次课程设计,我们从纯理论的人是上升到了实践认识,锻炼了创造能力,独立思考能力,动手能力和整合能力,过程虽然很曲折和艰难,但是结果还是很令人满意。
通过这次的实践,巩固了对单片机的功能应用、原理和指令系统的掌握,复习了protel99SE原理图的制作,熟悉了上机调试的全过程。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 步进 电机 控制 课程设计