单片机课程设计步进电机正反转设计.docx
- 文档编号:29032717
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:50
- 大小:270.55KB
单片机课程设计步进电机正反转设计.docx
《单片机课程设计步进电机正反转设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计步进电机正反转设计.docx(50页珍藏版)》请在冰豆网上搜索。
单片机课程设计步进电机正反转设计
单片机课程设计
课题:
步进电机正反转设计
系别:
电气与电子工程系
专业:
姓名:
学号
指导老师:
2013年01月09日
一设计目的
1、增进对单片机的感性认识,加深对单片机理论方面的理解;
2、掌握单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O口、A/D、D/A、串行口通讯等;
3、了解和掌握单片机应用系统的软硬件设计过程、方法及实现;
4、了解步进电机控制的基本原理,能实现电机正反转驱动控制,掌握控制步进电机转动的编程方法。
二设计要求
1、具有速度和转向设定功能;
2、设置开始、停止以及正反转健;
3、转速以及转向有数码管显示(本设计使用的为LCD12864)。
三、总体设计
步进电机是一种将电脉冲转化为角位移的数字控制执行机构。
它将电脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。
步进电机具有控制简便、定位准确等特点。
随着科学技术的发展,在许多领域将得到广泛的应用。
鉴于传统的脉冲系统移植性不好,本文提出微机控制系统代替脉冲发生器和脉冲分配器,用软件的方法产生控制脉冲,通过软件编程可以任意设定步进电机的转速、旋转角度、转动次数和控制步进电机的运行状态。
以简化控制电路,降低生产成本,提高系统的运行效率和灵活性。
步进电机的角位移与输入脉冲数严格成正比,因此,当它转动一周后,没有累计误差,具有良好的跟随性。
由步进电机与驱动电路组成的开环数控系统,既非常简单、廉价,又非常可靠。
同时,它也可以与角度反馈环节组成高性能的闭环数控系统。
步进电机的动态响应快,易于起停、正反转及变速。
速度可在相当宽的范围内平滑调节,低速下仍能保证获得大转矩。
步进电机只能通过脉冲电源供电才能运行,它不能直接使用交流电源和直流电源。
步进电机存在振荡和失步现象,必须对控制系统和机械负载采取相应的措施。
步进电机自身的噪声和振动较大,带惯性负载的能力较差。
步进电机是自动控制系统中常用的执行部件。
步进电机的输入信号为脉冲电流,它能将输入的脉冲信号转换为阶跃型的角位移或直线位移,因而步进电机可看作是一个串行的数/模转换器。
由于步进电机能够直接接受数字信号,而不需数/模转换,所以使用微机控制步进电机显得非常方便。
步进电机有以下优点:
(1)通常不需要反馈就能对位置和速度进行控制;
(2)位置误差不会积累;
(3)与数组设备兼容,能够直接接收数字信号;
(4)可以快速启停。
步进电机的品种规格很多,按照它们的结构和工作原理可以划分为磁阻式(也称反应式或变磁阻式)电机、混合式电机、永磁式电机和特种电机等四种主要型式。
步进电机不需位移传感器就可精确定位,所以在精确定位系统中应用广泛。
目前打字机、计算机外部设备、数控机床、传真机等设备中都使用了步进电机。
随着电子计算机技术的发展,步进电机必将发挥它的控制方便、控制准确的特点,在工业控制等领域取得更为广泛的应用。
本设计采用16位单片机AT89C51对步进电机进行控制,通过I/O口输出的具有时序的方波作为步进电机的控制信号,信号经过驱动芯片驱动步进电机;同时,用触发按键来对电机的状态进行控制,并用128X64LCD显示电机的状态及转速。
因为步进电机的控制是通过脉冲信号来控制的,将电脉冲信号转变为角位移或线位移的开环控制元件。
所以怎样产生这个脉冲信号和产生怎样的信号是电机控制的关键。
用软件控制单片机产生脉冲信号,通过单片机的P1口输出脉冲信号,因为所选电机是两相的,所以只需要P0口的低四位P0.0-P0.3分别通过ULN2003A接到电机的五根电线上。
可以通过调整输出脉冲的频率来调整电机的转速,通过改变输入脉冲的顺序来改变转动方向,P2口和P3口接128X64LCD,可以显示当前的电机转速和转向,设置复位键可使正在转动的电机停止转动,大概可分为如下图所示的几部分。
注:
由于此设计程序较复杂,在此没有列出程序的框图,程序框图详见软件设计。
四、主要器件介绍及电路设计
4.1、步进电机
4.1.1步进电机概述
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。
可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
由于脉冲信号数与步距角的线性关系,加上步进电机只有周期性的误差而无累积误差等特点,使得在速度、位置等控制领域用步进电机来控制变的非常的简单。
步进电机是一种感应电机,它的工作原理是利用电子电路,将直流电变成分时供电的,多相时序控制电流,用这种电流为步进电机供电,步进电机才能正常工作,驱动器就是为步进电机分时供电的,多相时序控制器
虽然步进电机已被广泛地应用,但步进电机并不能象普通的直流电机,交流电机在常规下使用。
它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。
因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。
步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。
随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。
4.1.2步进电机的工作原理
通常电机的转子为永磁体,当电流流过定子绕组时,定子绕组产生一矢量磁场。
该磁场会带动转子旋转一角度,使得转子的一对磁场方向与定子的磁场方向一致。
当定子的矢量磁场旋转一个角度。
转子也随着该磁场转一个角度。
每输入一个电脉冲,电动机转动一个角度前进一步。
它输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。
改变绕组通电的顺序,电机就会反转。
所以可用控制脉冲数量、频率及电动机各相绕组的通电顺序来控制步进电机的转动
四相步进电机,采用单极性直流电源供电。
只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。
图1是该四相
反应式步进电机工作原理图。
图2四相反应式步进电机工作原理图
开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。
当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。
而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。
依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。
单四拍与双四拍的步距角相等,但单四拍的转动力矩小。
八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2.a、b、c所示:
a单四拍b双四拍c八拍
图3.步进电机工作时序波形图
4.2ULN2003
ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。
它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTLCOMS,由达林顿管组成驱动电路。
ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE约1V左右,耐压BVCEO约为36V。
用户输出口的外接负载可根据以上参数估算。
采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。
通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。
ULN2003是一个非门电路,包含7个单元,但独每个单元驱动电流最大可达350mA.资料的最后有引用电路,9脚可以悬空。
比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。
ULN2003的作用:
ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。
可直接驱动继电器等负载。
输入5VTTL电平,输出可达500mA/50V。
ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。
该电路的特点如是:
ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器。
ULN2003是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。
ULN2003A引脚图及功能如下:
图4ULN2003A引脚图
ULN2003是高耐压、大电流、内部由七个硅NPN达林顿管组成的驱动芯片。
经常在以下电路中使用,作为:
1、显示驱动
2、继电器驱动
3、照明灯驱动
4、电磁阀驱动
5、伺服电机、步进电机驱动等电路中。
ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
ULN2003工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还可以在高负载电流并行运行。
ULN2003的封装采用DIP—16或SOP—16
ULN2003A在各种控制电路中常用它作为驱动继电器的芯片,其芯片内部做了一个消线圈反电动势的二极管。
ULN2003的输出端允许通过IC电流200mA,饱和压降VCE约1V左右,耐压BVCEO约为36V。
输出电流大,故可以直接驱动继电器或固体继电器(SSR)等外接控制器件,也可直接驱动低压灯泡。
ULN2003可以驱动7个继电器,具有高电压输出特性,并带有共阴极的续流二极管使器件可用于开关型感性负载。
每对达林顿管的额定集电极电流是500mA,达林顿对管还可并联使用以达到更高的输出电流能力。
ULN2003A中每对达林顿管的基极都串联有一个2.7kΩ的电阻,可直接与TTL或5VCMOS器件连接。
4.312864LCD
12864A-1汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵,16*8=128,16*4=64,一行只能写8个汉字,4行;)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。
4.3.1主要技术参数和显示特性如下:
电源:
VDD3.3V-5V(内置升压电路,无需负压);
显示内容:
128列×64行(128表示点数)
显示颜色:
黄绿
显示角度:
6:
00钟直视
LCD类型:
STN
与MCU接口:
8位或4位并行/3位串行
配置LED背光
多种软件功能:
光标显示、画面移位、自定义字符、睡眠模式等
4.3.2外形尺寸图:
图512864LCD外形尺寸
4.3.3主要外形尺寸
项目
标准尺寸
单位
模块体积
113.0×65.0×12.8
mm
定位尺寸
105.0×55.0
mm
视域
73.4×38.8
mm
行列点阵数
128×64
dots
点距离
0.52×0.52
mm
点大小
0.48×0.48
mm
4.3.4模块引脚说明
引脚号
引脚名称
方向
功能说明
1
VSS
-
模块的电源地
2
VDD
-
模块的电源正端
3
V0
-
LCD驱动电压输入端
4
RS(CS)
H/L
并行的指令/数据选择信号;串行的片选信号
5
R/W(SID)
H/L
并行的读写选择信号;串行的数据口
6
E(CLK)
H/L
并行的使能信号;串行的同步时钟
7
DB0
H/L
数据0
8
DB1
H/L
数据1
9
DB2
H/L
数据2
10
DB3
H/L
数据3
11
DB4
H/L
数据4
12
DB5
H/L
数据5
13
DB6
H/L
数据6
14
DB7
H/L
数据7
15
PSB
H/L
并/串行接口选择:
H-并行;L-串行
16
NC
空脚
17
/RET
H/L
复位低电平有效
18
NC
空脚
19
LED_A
-
背光源正极(LED+5V)
20
LED_K
-
背光源负极(LED-OV)
逻辑工作电压(VDD):
4.5~5.5V
电源地(GND):
0V
工作温度(Ta):
0~60℃(常温)/-20~75℃(宽温)
4.3.5接口时序
模块有并行和串行两种连接方法(时序如下):
4.3.5.18位并行连接时序图
图6MPU写资料到模块
图7MPU从模块读出资料
4.3.5.2串行连接时序图
图8串行连接时序
串行数据传送共分三个字节完成:
第一字节:
串口控制—格式11111ABC。
A为数据传送方向控制:
H表示数据从LCD到MCU,L表示数据从MCU到LCD。
B为数据类型选择:
H表示数据是显示数据,L表示数据是控制指令。
C固定为0
第二字节:
(并行)8位数据的高4位—格式DDDD0000
第三字节:
(并行)8位数据的低4位—格式0000DDDD
串行接口时序参数:
(测试条件:
T=25℃VDD=4.5V)
4.4系统的时钟电路
时钟电路是用于产生单片机工作时所必需的时钟信号。
时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准的,有条不紊地一拍一拍地工作。
时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。
在本系统中采用外部时钟方式的电路,如图所示:
图9系统的时钟电路
在本设计中的电容C1、C2典型值为30±10pF。
外接代内容的值虽然没有严格的要求,但是电容的大小会影响振荡器的稳定性和起振的快速性。
同时,在系统中采用12MHz的晶体振荡器来产生时钟脉冲。
这样可以满足系统在设计时的机器周期的需要。
4.5步进电机驱动电路
由单片机直接输出的脉冲不足以驱动步进电机正常工作所以需要驱动电路给步进电机提供电源,在本设计中采用型号为ULN2003A的芯片,使步进电机正常工作。
驱动信号由P0口的P0.0-P0.3输出,分别与驱动芯片的B1-B4相连,电路如下图所示:
图10步进电机的驱动电路
五软件设计
1、主程序的设计
主程序需具备的功能,要不断扫描P1口并判断触发按键是否闭合,并能根据其电平高低,输出不同的控制脉冲,并调用显示子程序显示转速及方向。
图11主程序设计流程
程序如下
#include
//#include
//#include
#include"macro.h"
voidiniLCD(void);
voidwrite_hz_str(intx1,inty1,uchar*point);
ucharbuf_Direction;//设定步进电机的转向
uintset_speed;//设定步进电机的转速
ucharstep_motor_loop[8]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};
ucharstep_index;
ucharbuf_SpeedString[]="";
#defineCST_STEP_MOTOR_Z10//正转
#defineCST_STEP_MOTOR_F20//反转
#defineCST_STEP_MOTOR_ST0//停
#definefosc_12MHz12
#definefosc_24MHz24
#definefosc_settingfosc_12MHz//工作方式1
#defineCST_TIME_MS1000
#defineCST_TH0(65536-CST_TIME_MS*fosc_setting/fosc_12MHz)/256
#defineST_TL0(65536-CST_TIME_MS*fosc_setting/fosc_12MHz)%256
voidstep_motor_driver(void)
{
staticuintspeed_delay=0;
speed_delay++;
if(buf_Direction==CST_STEP_MOTOR_Z)
{
P0=step_motor_loop[step_index];
if(speed_delay>=set_speed)
{
speed_delay=0;
step_index++;//大于7,从头再来
if(step_index>7)
step_index=0;
}
}
elseif(buf_Direction==CST_STEP_MOTOR_F)
{
P0=step_motor_loop[step_index];
if(speed_delay>=set_speed)
{
speed_delay=0;
step_index--;
if(step_index<=0)
step_index=7;
}
}
else
{
speed_delay=0;
P0=0x00;
}
}
voidcaluate(void)
{
uchartemp=0;
uintu16Temp=0;
u16Temp=(100-set_speed)*100/85;
buf_SpeedString[0]='0'+(u16Temp/100);
buf_SpeedString[1]='0'+(u16Temp%100/10);
buf_SpeedString[2]='0'+(u16Temp%100%10);
buf_SpeedString[3]='%';
write_hz_str(6,60,&buf_SpeedString);
}
//按键处理程序
voidkey_Scan(void)
{
staticucharkey_loose=0;
uchartemp=0;
P1=0XFF;
temp=P1&0xFF;
if(key_loose>0)
{
if(temp==0xFF)
key_loose=0;
return;
}
elseif(temp!
=0xFF)
{
key_loose=10;
temp=P1&0xFF;
switch(temp)
{
case0xFE:
buf_Direction=CST_STEP_MOTOR_Z;
write_hz_str(6,20,"反转");
caluate();
break;
case0xFD:
buf_Direction=CST_STEP_MOTOR_F;
write_hz_str(6,20,"正转");
caluate();
break;
case0xFB:
write_hz_str(6,50,"100%");
buf_Direction=CST_STEP_MOTOR_ST;
write_hz_str(6,20,"停止");
caluate();
break;
case0xEF:
if(buf_Direction!
=CST_STEP_MOTOR_ST)
{
set_speed+=5;
if(set_speed>=80)
set_speed=80;;//减速
}
caluate();
break;
case0xF7:
if(buf_Direction!
=CST_STEP_MOTOR_ST)
{
set_speed-=5;
if(set_speed<=15)
set_speed=15;//加速
}
caluate();
break;
default:
break;//其它值返回
}
}
}
voidisr_timer0(void)interrupt1using1
{
TH0=CST_TH0;
TL0=CST_TL0;
step_motor_driver();
}
voidinit_timer0(void)
{
TCON=0x00;
TMOD=0x00;
TL0=0x00;
TH0=0x00;
TCON=0x00;
//Timer0C/T=0,定时工作方式
//Timer0M1,M0=0,1
TMOD=0x01;//GATE=0,以运行控制位TR0启动定时器0C/T=0,定时工作方式
TH0=CST_TH0;
TL0=CST_TL0;
TF0=0;//clear0.countoverflag.
TR0=1;//enableTIMER0,startcount
ET0=1;//enableacceptinterrupt
}
//主控程序
voidmain(void)
{
P2=0xff;
P1=0xff;
P0=0Xff;
init_timer0();
iniLCD();//初始化LCD
write_hz_str(0,18,"2013-1-7");
write_hz_str(3,18,"步进电机仿真");
write_hz_str(6,20,"停止");
buf_Direction=CST_STEP_MOTOR_ST;
set_speed=60;
step_index=3;
EA=1;//开中断
caluate();
while
(1)
{
key_Scan();
}
}
2、显示子程序的设计
图12显示程序流程图
程序如下:
#include
//#include
//#include
#include"macro.h"
#include"LCD_HZ.h"
sbitE=P3^5;
sbitRW=P3^4;
sbitRS=P3^2;
sbitL=P3^1;//左半平面
sbitR=P3^0;//右半平面
sbitBusy=P2^7;////忙判断位
#defineLCDPAGE0xB8//设置页指令。
#defineLCDLINE0x40//设置列指令。
/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 步进 电机 反转 设计