步进电机正反转设计单片机课程设计Word文档格式.docx
- 文档编号:18024001
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:42
- 大小:246.02KB
步进电机正反转设计单片机课程设计Word文档格式.docx
《步进电机正反转设计单片机课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《步进电机正反转设计单片机课程设计Word文档格式.docx(42页珍藏版)》请在冰豆网上搜索。
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
视域
73.4×
38.8
行列点阵数
128×
64
dots
点距离
0.52×
0.52
点大小
0.48×
0.48
4.3.4模块引脚说明
引脚号
引脚名称
方向
功能说明
1
VSS
-
模块的电源地
2
VDD
模块的电源正端
3
V0
LCD驱动电压输入端
4
RS(CS)
H/L
并行的指令/数据选择信号;
串行的片选信号
5
R/W(SID)
并行的读写选择信号;
串行的数据口
6
E(CLK)
并行的使能信号;
串行的同步时钟
7
DB0
数据0
8
DB1
数据1
9
DB2
数据2
10
DB3
数据3
11
DB4
数据4
12
DB5
数据5
13
DB6
数据6
14
DB7
数据7
15
PSB
并/串行接口选择:
H-并行;
L-串行
16
NC
空脚
17
/RET
复位低电平有效
18
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<
REG51.h>
//#include<
stdio.h>
math.h>
#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)
=set_speed)
step_index--;
if(step_index<
=0)
step_index=7;
else
P0=0x00;
}
voidcaluate(void)
uchartemp=0;
uintu16Temp=0;
u16Temp=(100-set_speed)*100/85;
buf_SpeedString[0]='
0'
+(u16Temp/100);
buf_SpeedString[1]='
+(u16Temp%100/10);
buf_SpeedString[2]='
+(u16Temp%100%10);
buf_SpeedString[3]='
%'
write_hz_str(6,60,&
buf_SpeedString);
//按键处理程序
voidkey_Scan(void)
{
staticucharkey_loose=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&
switch(temp)
case0xFE:
buf_Direction=CST_STEP_MOTOR_Z;
write_hz_str(6,20,"
反转"
);
caluate();
break;
case0xFD:
buf_Direction=CST_STEP_MOTOR_F;
正转"
case0xFB:
write_hz_str(6,50,"
100%"
buf_Direction=CST_STEP_MOTOR_ST;
停止"
case0xEF:
if(buf_Direction!
=CST_STEP_MOTOR_ST)
{
set_speed+=5;
if(set_speed>
=80)
set_speed=80;
//减速
}
caluate();
case0xF7:
set_speed-=5;
if(set_speed<
=15)
set_speed=15;
//加速
}
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;
//Timer0C/T=0,定时工作方式
//Timer0M1,M0=0,1
TMOD=0x01;
//GATE=0,以运行控制位TR0启动定时器0C/T=0,定时工作方式
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,"
set_speed=60;
step_index=3;
EA=1;
//开中断
while
(1)
key_Scan();
2、显示子程序的设计
图12显示程序流程图
程序如下:
LCD_HZ.h"
sbitE=P3^5;
sbitRW=P3^4;
sbitRS=P3^2;
sbitL=P3^1;
//左半平面
sbitR=P3^0;
//右半平面
sbitBusy=P2^7;
////忙判断位
#defineLCDPAGE0xB8//设置页指令。
#defineLCDLINE0x40//设置列指令。
//LCD判断忙的子程序
voidchkbusy(void)//测LCD忙状态
E=1;
//使能LCD
RS=0;
//读写指令
RW=1;
//读
//读操作前
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 步进 电机 反转 设计 单片机 课程设计