步进电机驱动器的设计
摘要:由在单片机结合ULN2003组成单片机的驱动系统的程序设计过程中,通过操作按键对步进电机的正转、反转和启动、停止。
关键词:单片机 驱动 步进电机
目录
一、 单片机的驱动原理 .....................................3
二、 单片机最小系统 .......................................4
三、 Max232串口电路 ... ...................................7
四、 步进电机驱动模块电路..................................8
五、 系统的软件设计 .......................................9
附 :参考文献..............................................33
一、 步进电机的驱动原理
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。您可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
虽然步进电机已被广泛地应用,但步进电机并不能象普通的直流电机,交流电机在常规下使用。它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。
步进电机是将电脉冲信号转变为角位移或线位移的一种开环线性执行元件,具有无累积误差、成本低、控制简单特点。产品从相数上分有二、三、四、五相,从步距角上分有0.9°/1.8°、0.36°/0.72°,从规格上分有口42~φ130,从静力矩上分有0.1N·M~40N·M。(本实验提供的是四相步进电机,它对外有六条引线,其中二条为公共端、另四条分别为A相、B相、C相、D相,但引线具体排序未知,故在使用前需对步进电机进行分析、测试,并判断出具体的相序。)
二、单片机最小系统
单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路.
下面给出一个51单片机的最小系统电路图.
说明:
复位电路:由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定.典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位.一般教科
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
推荐C 取10u,R取8.2K.当然也有其他取法的,原则就是要让RC组合可以在RST脚上产生不少于2个机周期的高电平.至于如何具体定量计算,可以参考电路分析相关书籍.
晶振电路:典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作)
复位电路
一、复位电路的用途
单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。
单片机复位电路如下图:
二、复位电路的工作原理
在书本上有介绍,51单片机要复位只需要在第9引脚接个高电平持续2US就可以实现,那这个过程是如何实现的呢?
在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。所以可以通过按键的断开和闭合在运行的系统中控制其复位。
开机的时候为什么为复位?
在电路图中,电容的的大小是10uF,电阻的大小是10k。所以根据公式,可以算出电容充电到电源电压的0.7倍(单片机的电源是5V,所以充电到0.7倍即为3.5V),需要的时间是10K*10UF=0.1S。也就是说在电脑启动的0.1S内,电容两端的电压时在0~3.5V增加。这个时候10K电阻两端的电压为从5~1.5V减少(串联电路各处电压之和为总电压)。所以在0.1S内,RST引脚所接收到的电压是5V~1.5V。在5V正常工作的51单片机中小于1.5V的电压信号为低电平信号,而大于1.5V的电压信号为高电平信号。所以在开机0.1S内,单片机系统自动复位(RST引脚接收到的高电平信号时间为0.1S左右)。
按键按下的时候为什么会复位?
在单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
:
1、复位电路的原理是单片机RST引脚接收到2US以上的电平信号,只要保证电容的充放电时间大于2US,即可实现复位,所以电路中的电容值是可以改变的。
2、按键按下系统复位,是电容处于一个短路电路中,释放了所有的电能,电阻两端的电压增加引起的。
三、Max232串口电路
MAX232芯片是美信公司专门为电脑的RS-232
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
串口设计的接口电路,使用+5V单电源供电。内部结构基本可分三个部分:第一部分是电荷泵电路。由1、2、3、4、5、6脚构成。功能是产生+12V和-12V两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R0IN)、12脚(R0OUT)、11脚(T0IN)、14脚(T0OUT)为第一数据通道。8脚(R1IN)、9脚(R1OUT)、10脚(T1IN)、7脚(T1OUT)为第二数据通道。TTL/CMOS数据从T0IN、T1IN输入转换成RS-232数据从T0OUT、T1OUT送到电脑DP9插头;DP9插头的RS-232数据从R0IN、R1IN输入转换成TTL/CMOS数据后从R0OUT、R1OUT输出。第三部分是供电。15脚GND、16脚VCC(+5V)。
因为单片机输入、输出电平为TTL电平,而PC机配置的是RS-232C标准接口,二者的电气
规范
编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载
不同,所以要加电平转换电路。给出了采用MAX-232芯片的PC机和单片机串行通信接口电路,与PC机相连采用9芯标准插座。
四、步进电机驱动模块电路
电路如下图所示:
五、系统的软件设计
要求:可通过操作按键对步进电机的正转、反转、和启动、停止进行控制。
程序如下:
#include
#include //要用到_nop_();函数
#include
#define uchar unsigned char
#define uint unsigned int
uchar key;
int n;
static uchar i;
/***************************************************************************/
/*********** 单片机引脚定义 ************/
/***************************************************************************/
/*Define ADC operation const for ADC_CONTR*/
#define ADC_POWER 0x80 //ADC power control bit
#define ADC_FLAG 0x10 //ADC complete flag
#define ADC_START 0x08 //ADC start control bit
#define ADC_SPEEDLL 0x00 //540 clocks
#define ADC_SPEEDL 0x20 //360 clocks
#define ADC_SPEEDH 0x40 //180 clocks
#define ADC_SPEEDHH 0x60 //90 clocks
/*************************************************************/
/*********************硬件部分********************************/
/*************************************************************/
//按键控制
sbit k1= P1^3;
sbit k2= P1^2;
sbit k3= P1^1;
sbit k4= P1^0;
//电机驱动
sbit F1 = P2^4;
sbit F2 = P2^5;
sbit F3 = P2^6;
sbit F4 = P2^7;
//12864
sbit CS = P2 ^ 3; //片选 高电平有效 单片LCD使用时可固定高电平
sbit SID = P2 ^ 6; //数据
sbit SCLK = P2 ^ 5; //时钟
sbit PSB = P2 ^ 4; //串并口选择/******************************************************************************/
/********** 数据部分 ***********/
/******************************************************************************/
//12864
void Write_char(bit start, uchar ddata);
void Send_byte(uchar bbyte);
void Delaynms(uint di);
void Lcd_init(void);
void LCD_Write_string(uchar X,uchar Y,uchar *s);
void LCD_set_xy( uchar x, uchar y );
void display();
uchar code waves[]={"电机转动方式:"};
uchar code znwk1[] ={"启动"};
uchar code znwk2[] ={"停止"};
uchar code znwk3[] ={"正转"};
uchar code znwk4[] ={"反转"};
//电机
void stop();
void motor_ffw(uchar f) ;
/**************************************************************************/
/************ 各延时程序 **************/
/**************************************************************************/
void delay() //电机延时
{
for(n=0;n<550;n++)
{ _nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void delay10ms() //按键延时,去抖动
{
uchar ms,km;
for(ms=10;ms>0;ms--)
for(km=150;km>0;km--);
}
void Delaynms(uint di) //12864延时
{
uint da,db;
for(da=0;da0)
{
motor_ffw(f);
k--;
}
}
void stop() //停止
{
F1=1 ;F2=1 ;F3=1 ; F4=1 ;
}
void going() //启动后正反转
{
if(key==1)
{
moving(0,1);
}
else if(key==2)
{
stop();
}
else if(key==3)
{
moving(0,1);
}
else if(key==4)
{
moving(1,1);
}
else;
}
void scan() //按键控制
{
if(k1==0)
{
delay10ms();
if(k1==0)
{
key=1;
}
}
else if(k2==0)
{
delay10ms();
if(k2==0)
{
key=2;
}
}
else if(k3==0)
{
delay10ms();
if(k3==0)
{
key=3;
}
}
else if(k4==0)
{
delay10ms();
if(k4==0)
{
key=4;
}
}
else;
}
void ce()
{
if(k4==0)
{
delay10ms();
if(k4==0)
{
moving(0,1000) ;
}
}
/* else if(k3==0)
{
delay10ms();
if(k3==0)
{
moving(1,1000) ;
}
} */
}
/***********************************************************/
/**************** 主函数 ****************/
/**********************************************************/
void main()
{
Int_232();
i=1;
//CLK_DIV=CLK_DIV|0x02 ;
// PSB=0;
// Lcd_init(); //设置液晶显示器
// Clr_Scr(); //清屏
// Delaynms(1000);
while(1)
{
scan();
going();
//ce();
}
}
结论
电子信息技术发展日新月异,新型单片机层出不穷,在电机控制系统开发过程中,如果恰当选取单片机以及个电路模块的型号,能够简化设计过程,起到事半功倍的效果。该系统采用STCSTC12C5A60S单片机其工作方式,转动速率及转动数可以通过键盘输入,本系统具有通用性,适当改变输出口各位控制端,便可控制不同的步进电机。论文设计符合步进电机控制系统的标准要求。经系统调试,可以实现步进电机的以下功能:正反转、启动和停止。
参考文献
[1] 江衍煊,郑振杰, 游德智,单片机连接ULN2003驱动步进电机的应用[J],机电元件,2010,30(3):28-31.
[2] 唐国栋,高云国,基于L297/L298 芯片步进电机的单片机控制[J],微计算机信息,2006,22(12):134-136.
[3] 马忠梅, 籍顺心.单片机的C语言应用程序设计[M],北京:北京航天航空大学出版社,2007.
[4] 张劲,利用AT89S52单片机控制步进电机,常州工程职业技术学院学报,2008,2:73-75.
[5] 王晓明 电动机的单片机控制.北京航空航天大学出版社.2002.
[6] 张毅刚 彭喜源,谭晓昀。MCS一51单片机应用设计.哈尔滨工业大学出版社.1997.
[7] 陈维山 赵杰 机电系统计算机控制.哈尔滨工业大学出版社.1999