利用单片机实现对步进电机的简单控制
- 格式:doc
- 大小:19.00 KB
- 文档页数:5
题目:简易步进电机控制步进电机控制摘要:本设计采用ATMEL公司DIP-40封装的AT89S52单片机实现对四相步进电机的手动和按键控制。
由单片机产生的脉冲信号经过分配后分解出对应的四相脉冲,分解出的四相脉冲经驱动电路功率放大后驱动步进电机的转动。
转速的调节和状态的改变由按键进行选择,此过程由程序直接进行控制。
通过键盘扫描把选择的信息反馈给单片机,单片机根据反馈信息做出相应的判断并改变输出脉冲的频率或转动状态信号。
电机转动的不同状态由液晶LCD1602显示出来。
而设计的扩展部分可以通过红外信号的发射由另一块单片机和红外线LED完成,用红外万能接收头接收红外信号,可以实现对电机的控制进行红外遥控。
关键字:四相步进电机单片机功率放大 LCD1602步进电机控制 (1)摘要 (1)关键字 (1)前言 (3)1系统总体方案设计及硬件设计 (4)1.1步进电机 (4)1.1.1 步进电机的种类 (4)1.1.2 步进电机的特点 (4)1.1.3 步进电机的原理 (5)1.2 控制系统电路设计 (7)1.3 液晶显示LCD1602 (7)1.4 AT89S52核心部件及系统SCH原理图 (9)1.5 LN2003A驱动 (10)2软件设计及调试 (13)2.1程序流程 (13)2.2软件设计及调试 (14)3 扩展功能说明 (15)4设计总结 (16)5 设计源程序 (16)6 附录 (21)参考文献 (22)附2:系统原理图及实物图 (23)步进电机广泛应用于对精度要求比较高的运动控制系统中,如机器人、打印机、软盘驱动器、绘图仪、机械阀门控制器等。
目前,对步进电机的控制主要有由分散器件组成的环形脉冲分配器、软件环形脉冲分配器、专用集成芯片环形脉冲分配器等。
分散器件组成的环形脉冲分配器体积比较大,同时由于分散器件的延时,其可靠性大大降低;软件环形分配器要占用主机的运行时间,降低了速度;专用集成芯片环形脉冲分配器集成度高、可靠性好,但其适应性受到限制,同时开发周期长、需求费用较高。
浅谈单片机在步进电机控制中的应用摘要:本文基于stc89c52单片机实现了两个步进电机的数字控制,其中一个工作台可以平稳移动是通过加速、减速控制来实现的;而另外一个驱动工件旋转运动,且可调速、可显示加工时间,从而满足了设备加工控制的需求。
关键词:步进电机;stc89c52单片机一、系统功能本系统主要由两部分组成,即控制部分与显示部分,其中控制部分由电机换向控制、电机转速控制以及加减速控制等功能组成;加工时间显示以及电机转速显示则组成显示部分。
本系统通过单片机实现对两个步进电机的控制,其中一个驱动工作台平稳移动,另外一个则驱动加工工件进行旋转运动;电机转速通过lcd显示,而加工时间的显示则由数码管来实现。
二、电路设计本系统中步进电机采用68v的工作电压,电流最大值为8.28安培,驱动器采用配套的sd-2h086mb驱动器,其响应快且抗干扰性强,因此可以解决步进电机爬行速度低、噪声大、高速力矩低以及有共振区、较低的起动频率和驱动器可靠性差等不足。
不过尽管电机配备有驱动器,但是假如将单片机端口与驱动器控制接口直接连接,则端口的电压将归0,所以单片机系统中还需设置驱动装置。
本文利用专用的驱动芯片,其驱动力强、可靠性高,且适用性好。
26ls31芯片的驱动通过差分电路来实现,按照步进电机的控制需求,1号电机的脉冲发出端口p1.0、方向信号端口p1.1、使能信号端口p1.2以及2号电机的脉冲信号端口p1.3、使能信号端口p1.4等均被驱动,2号电机转向不变,不接方向信号。
其驱动接线图及驱动电路图分别如下图1和图2所示:三、控制系统的实现(一)加减速曲线的分析与实现其实所谓的加减速就是速度变化的过渡过,在起动阶段,控制频率以特定的规律慢慢增加,从而速度可以平稳的升至预定值;而停止时控制频率再以相应的规律慢慢减小,从而速度平稳的降低直至完全停止。
一般加减速算法有梯形曲线和指数曲线以及s曲线三种,其中s曲线算法加减速平稳,而且有较好的快速性及柔性,因此在数控系统中应用广泛。
C 语言实现单片机控制步进电机加减速源程序1. 引言在现代工业控制系统中,步进电机作为一种常见的执行元件,广泛应用于各种自动化设备中。
而作为一种常见的嵌入式软件开发语言,C 语言在单片机控制步进电机的加减速过程中具有重要的作用。
本文将从单片机控制步进电机的加减速原理入手,结合 C 语言的编程技巧,介绍如何实现单片机控制步进电机的加减速源程序。
2. 单片机控制步进电机的加减速原理步进电机是一种能够精确控制角度的电机,它通过控制每个步骤的脉冲数来实现旋转。
在单片机控制步进电机的加减速过程中,需要考虑步进电机的加速阶段、匀速阶段和减速阶段。
在加速阶段,需要逐渐增加脉冲的频率,使步进电机的转速逐渐增加;在匀速阶段,需要保持恒定的脉冲频率,使步进电机以匀速旋转;在减速阶段,需要逐渐减小脉冲的频率,使步进电机的转速逐渐减小。
这一过程需要通过单片机的定时器和输出控制来实现。
3. C 语言实现步进电机加减速的源程序在 C 语言中,可以通过操作单片机的 GPIO 来控制步进电机的旋转。
在编写源程序时,需要使用单片机的定时器模块来生成脉冲信号,以控制步进电机的旋转角度和速度。
以下是一个简单的 C 语言源程序,用于实现步进电机的加减速控制:```c#include <reg52.h>void main() {// 初始化定时器// 设置脉冲频率,控制步进电机的加减速过程// 控制步进电机的方向// 控制步进电机的启停}```4. 总结与回顾通过本文的介绍,我们了解了单片机控制步进电机的加减速原理和 C 语言实现步进电机加减速源程序的基本思路。
掌握这些知识之后,我们可以更灵活地应用在实际的嵌入式系统开发中。
在实际项目中,我们还可以根据具体的步进电机型号和控制要求,进一步优化 C 语言源程序,实现更加精准和稳定的步进电机控制。
希望本文能为读者在单片机控制步进电机方面的学习和应用提供一定的帮助。
5. 个人观点与理解在我看来,掌握 C 语言实现单片机控制步进电机加减速源程序的技术是非常重要的。
单片机驱动步进电机原理单片机驱动步进电机的原理是通过按照特定的顺序控制步进电机的绕组通电,使其产生旋转运动。
步进电机是一种将电信号转化为机械运动的设备,它通常由定子、转子和驱动组成。
在正常情况下,步进电机通过电磁场的切换来实现旋转。
单片机驱动步进电机的基本原理如下:1. 转动方向:步进电机的转动方向由控制信号的顺序决定。
单片机通过控制输出口的电平来改变绕组的通电顺序,从而改变步进电机的转动方向。
例如,逆时针旋转可按照ABCDA方式通电,而顺时针旋转可按照ABCDB方式通电。
2. 步距角度:步进电机的步距角度取决于每次电磁场的切换步骤。
单片机通过控制输出端口的频率和顺序来控制每步的角度。
例如,通常正常步进电机的步距角度为1.8度,该角度是由每个绕组之间的电磁场切换定时控制获得的。
3. 电流控制:单片机可以通过PWM技术来控制步进电机的电流大小。
PWM 技术可以实现对电机驱动引脚的高低电平及持续时间进行控制,从而实现电流的调节。
通过调节电流大小,可以使步进电机产生更大的转矩,也可以控制步进电机的速度和细分精度。
4. 加速度和减速度控制:步进电机在开始和停止时需要进行加速和减速。
单片机可以通过改变输出端口的电平和频率来控制步进电机的加速和减速过程,从而实现平滑的运动控制。
5. 反馈控制:有些情况下,需要对步进电机的位置进行准确定位。
单片机可以通过加装光电编码器或其他位置反馈传感器,实时监测步进电机的位置,从而实现精确的位置控制和反馈控制。
总结来说,单片机驱动步进电机的原理是通过控制输出端口的顺序、电平和频率来控制步进电机的转动方向、步距角度、电流大小、加速度和减速度等参数,从而实现对步进电机的运动控制。
通过这种方式,可以实现精确的位置控制、速度控制和旋转方向控制。
单片机对28BYJ-48步进电机的控制设计再重新看一下上面的步进电机外观图和内部结构图:步进电机一共有5根引线,其中红色的是公共端,连接到 5 V 电源,接下来的橙、黄、粉、蓝就对应了A、B、C、D 相;那么如果要导通A 相绕组,就只需将橙色线接地即可,B 相则黄色接地,依此类推;再根据上述单四拍和八拍工作过程的讲解,可以得出下面的绕组控制顺序表,如表9-1所示:我们板子上控制步进电机部分是和板子上的显示控制的74HC138 译码器部分复用的P1.0~P1.3,关于跳线我们在第3章已经讲过了,通过调整跳线帽的位置可以让P1.0~P1.3控制步进电机的四个绕组,如图9-5所示。
图9-5 显示译码与步进电机的选择跳线如果要使用电机的话,需要把4个跳线帽都调到跳线组的左侧(开发板上的实际位置),即左侧针和中间针连通(对应原理图中的中间和下边的针),就可以使用P1.0 到P1.3 控制步进电机了,如要再使用显示部分的话,就要再换回到右侧了。
那如果大家既想让显示部分正常工作,又想让电机工作该怎么办呢?跳线帽保持在右侧,用杜邦线把步进电机的控制引脚(即左侧的排针)连接到其它的暂不使用的单片机IO 上即可。
再来看一下我们步进电机的原理图,步进电机的控制电路如图9-6所示。
图9-6 步进电机控制电路诚然,单片机的IO 口可以直接输出0 V 和5 V 的电压,但是电流驱动能力,也就是带载能力非常有限,所以我们在每相的控制线上都增加一个三极管来提高驱动能力。
由图中可以看出,若要使 A 相导通,则必须是Q2 导通,此时 A 相也就是橙色线就相当于接地了,于是A 相绕组导通,此时单片机P1 口低4位应输出0b1110,即0xE;如要A、B 相同时导通,那么就是Q2、Q3 导通,P1 口低4位应输出0b1100,即0xC,依此类。
本科毕业设计论文题目基于单片机的步进电机驱动控制系统设计专业名称学生姓名指导教师毕业时间毕业 任务书一、题目基于单片机的步进电机驱动控制系统设计二、指导思想和目的要求步进电机是一种将电脉冲信号转换成相应的角位移或线位移的机电元件。
每出现一个脉冲,它就相应的运行一步。
步进电机具有结构简单、运行可靠、控制方便、控制性能好等优点,在数控机床、绘图仪、打印机及机器人领域得到广泛应用。
为了得到性能优良的控制结果,出现了很多步进电机控制系统,其中采用单片机作为控制核心的控制系统得到了广泛的应用,使用这种控制系统在步进电机的驱动上已经做的非常好。
本课题通过研究步进电机和单片机的原理,实现以单片机为核心的步进电机控制系统设计,达到对步进电机的转速和转角的控制。
三、主要技术指标1. 研究步进电机和单片机的原理,并基于单片机实现步进电机驱动控制系统的设计;2. 利用Proteus 仿真平台仿真实现以单片机作为控制核心对步进电机进行驱动控制的电路设计和软件设计及仿真。
四、进度和要求第01周----第02周: 查找相关资料,对英文资料进行翻译;第03周----第04周: 熟悉步进电机、单片机及如何使用单片机对步进电机进行驱动控制的相关原理;第05周----第06周:熟悉Proteus 8.0的应用;第07周----第13周:设计电路图并利用Proteus 8.0进行仿真实现;设计 论文第14周----第16周:撰写毕业设计论文,论文答辩。
五、主要参考书及参考资料[1] 蔡美琴.MCS—51系列单片机系统及其应用(第二版).高等教育出版社,2004-6-1.[2] 张毅刚,基于Proteus的单片机课程的基础实验与课程的基础实验与课程设计,人民邮电出版社.2012-4-1[3] 张明林,C语言程序设计,西北工业大学出版社,2005.[4] 谭浩强,C++面向对象程序设计.清华大学出版社,2006[5] 雷凯,步进电机细分驱动技术的研究[D].苏州大学硕士论文.2003.[6] 黄勇.廖宇.高林,基于单片机的步进电机运动控制系统设计.湖北名族学院论文.2008.[7] 房玉民,杭柏林.基于单片机的步进电机开环控制系统[J].电机与控制应用.2006.[8] 张巍.浅谈单片机控制步进电机[J].安防科技.2006.[9] 刘宝延,程树康,步进电机及其驱动控制系统[M],1997.11.[10]StePPingmotorhandbook6[M][11]Development of a Novel Drive Topology for a Five Phase Stepper Motor,T.S.Weerakoon and L.Samaranayake,Dept.of Electrical and Electronic Engineering,Faculty of Engineering,University of Peradeniya,Sri Lanka .[12]《Stepper Motor System Basics》[M]AMS advanced micro systems inc. 2000[13]Albert C.Leenhout.Smooth Step Motor Motion With Halt Driver.Annaul Symposium on IMCSD.1995 24 (2).学生___________ 指导教师 ___________ 系主任 ___________摘要步进电机广泛应用于工业,军事和医疗自动化领域,如数控装置,牵伸机,机械手,印刷及包装设备。
利用单片机实现对步进电机的简单控制
作者:吴云
来源:《计算机光盘软件与应用》2013年第08期
摘要:本文主要介绍了利用LY-51SV2.3开发板实现对步进电机的简单控制,以实现步进电机的正反转、加减速以及开始停止等功能。
通过对步进电机的控制,使人们对开发板的应用以及如何编写C语言程序有更深层次的理解。
通过本文的介绍,也为下一步更好的利用开发板控制步进电机打下一个基础。
关键词:单片机;步进电机;语言
中图分类号:TP368.1
目前,单片机应用得到了非常广泛的应用,几乎涉及到了社会生活中的各个领域,对于与计算机相关专业的单片机的知识有一个简单的学习了解是必要的,而对于初学者或者教学人员利用开发板进行学习是有效的途径。
开发板是学习和实践的最好产品,因为有配套测试好的软件和硬件,这样用户就不必操心组建开发系统的过程。
只需要专心研究程序。
开发板只不过是个工具,利用这个工具,可以使我们更快的了解并掌握需要的知识。
1设计思路
本次单片机使用STC89C51,通过开发板的5个按键K1-K5分别实现对步进电机的加减速、正反转与停止的控制,在实现正反转的过程中分别由Led指示灯进行指示,并在数码管上显示当前速度的大小值,其最大值不超过18,在整个按键过程中是由键盘扫描函数来控制,速度的大小值是由显示函数在数码管上显示出来。
2端口、函数与变量定义
#defineKeyPortP3//由P3口连接控制按钮
#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换
sbitLATCH1=P2^2;//定义锁存使能端口段锁存
sbitLATCH2=P2^3;//位锁存
sbitA1=P1^0;//定义步进电机连接端口
sbitB1=P1^1;sbitC1=P1^2;sbitD1=P1^3;sbitled=P1^5;sbitled1=P1^7;
unsignedcharcodedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f};
unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsignedcharTempData[8];//存储显示值的全局变量
定义AB相通电,其他相断电,定义BC相通电,其他相断电,定义CD相通电,其他相断电,定义D相通电,其他相断电,定义A相通电,其他相断电,定义B相通电,其他相断电,定义C相通电,其他相断电,定义D相通电,其他相断电全部断电
unsignedcharSpeed=1;bitStopFlag=1;
unsignedcharFlag=1;//定义电机正反转变量标志
voidDisplay(unsignedcharFirstBit,unsignedcharNum);//显示函数,在数码管显示具体速度值
voidInit_Timer0(void);unsignedcharKeyScan(void);
延时函数DelayUs2x(unsignedchart),voidDelayMs(unsignedchart)
3函数调用过程
voidDelayUs2x(unsignedchart)voidDelayMs(unsignedchart)
main()
{unsignedinti=512;unsignedcharnum;Coil_OFF;
while(1){num=KeyScan();//循环调用按键扫描
if(num==1)//第一个按键,速度等级增加
{if(Speed
elseif(num==2)//第二个按键,速度等级减小
{if(Speed>1)
Speed--;}
elseif(num==3)//电机停止
{Coil_OFF;
StopFlag=1;led=1;
led1=1;EA=0;}
elseif(num==4)//电机启动
{Init_Timer0();StopFlag=0;
Flag=1;led=1;
led=0;led1=1;}
elseif(num==5)//反转
{Init_Timer0();StopFlag=0;
Flag=2;led1=1;
led1=0;led=1;}
TempData[0]=dofly_DuanMa[Speed/10];
TempData[1]=dofly_DuanMa[Speed%10];}}
voidDisplay(unsignedcharFirstBit,unsignedcharNum) {staticunsignedchari=0;
DataPort=0;LATCH1=1;
LATCH1=0;DataPort=dofly_WeiMa[i+FirstBit];
LATCH2=1;LATCH2=0;
DataPort=TempData[i];LATCH1=1;
LATCH1=0;i++;if(i==Num) i=0;}
voidInit_Timer0(void)
voidTimer0_isr(void)interrupt1
{Display(0,8);if(!StopFlag){if(Flag==1)
{if(times==(20-Speed))//最大值18,所以最小间隔值20-18=2 {times=0;
switch(i){
case0:Coil_D1;i++;break; case1:Coil_C1;i++;break; case2:Coil_B1;i++;break; case3:Coil_A1;i++;break; case4:i=0;break; default:break; }}times++;}
if(Flag==2)
{if(times==(20-Speed))//最大值18,所以最小间隔值20-18=2 {times=0;switch(i)
{case0:Coil_A1;i++;break; case1:Coil_B1;i++;break; case2:Coil_C1;i++;break; case3:Coil_D1;i++;break; case4:i=0;break; default:break; }}times++;}}}
unsignedcharKeyScan(void)
{unsignedcharkeyvalue;
if(KeyPort!=0xff)
{DelayMs(10);if(KeyPort!=0xff)
{keyvalue=KeyPort;while(KeyPort!=0xff);switch(keyvalue) {case0xfe:return1;break; case0xfd:return2;break;
case0xfb:return3;break; case0xf7:return4;break;
case0xef:return5;break; case0xdf:return6;break;
case0xbf:return7;break; case0x7f:return8;break;
default:return0;break; }}}return0;}
4总结
到此为止,整个控制步进电机的设计就做完了,由于篇幅有限,本文里有一些具体函数没有内容,但这些函数都有现成的模式可供应用。
通过对步进电机的控制,使我们对单片机的应用有了一定的理解,并对使用C语言编程来控制步进电机有了更明确的理解,掌握了一定的知识,并对以后的进一步学习有了一定的基础。
参考文献:
[1]郭天祥.新概念51单片机C语言教程:入门、提高、开发、拓展全攻略[M].北京:电子工业出版社,2011,02.
[2]杨欣,王玉凤.电子设计从零开始[M].北京:清华大学出版社,2012,05.
[3]张毅刚.新编MCS-51单片机应用设计(第3版)[J].哈尔滨工业大学,2008,04.。