四相步进电机驱动电路及驱动程序设计

合集下载

4-四相五线减速步进电机28BYJ-48原理、仿真及演示程序(使用ULN2003A驱动)

4-四相五线减速步进电机28BYJ-48原理、仿真及演示程序(使用ULN2003A驱动)

减速步进电机28BYJ-48的原理如下图:中间部分是转子,由一个永磁体组成,边上的是定子绕组。

当定子的一个绕组通电时,将产生一个方向的电磁场,如果这个磁场的方向和转子磁场方向不在同一条直线上,那么定子和转子的磁场将产生一个扭力将定子扭转。

依次改变绕组的磁场,就可以使步进电机正转或反转(比如通电次序为A->B->C->D正转,反之则反转)。

而改变磁场切换的时间间隔,就可以控制步进电机的速度了,这就是步进电机的驱动原理。

由于步进电机的驱动电流较大,单片机不能直接驱动,一般都是使用ULN2003达林顿阵列驱动,当然,使用下拉电阻或三极管也是可以驱动的,只不过效果不是那么好,产生的扭力比较小。

参考:减速步进电机28BYJ-48最简单的驱动方法28BYJ-48的内部结构请见这里下面是一个步进电机的演示程序:#include <reg52.h>sbit key=P2^0; //按键控制步进电机的方向unsigned char speed=5; //步进电机的转速//八拍方式驱动,顺序为A AB B BC C CD D DAunsigned char codeclockWise[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x0d};void delay(unsigned char z){unsigned char x,y;for(x=0;x<z;x++)for(y=0;y<110;y++);}void main(){unsigned char i;while(1){for(i=0;i<8;i++){if(key) //按键未按下,正转{P0=clockWise[i];delay(speed);}else //按键按下,反转{P0=clockWise[8-i];delay(speed);}}}}Proteus仿真图及Keil源文件下载:/filebox/down/fc/79bf41133cc59eaf2ca9531a5382557 b/835705302/blog/item/7d9eb519397d7e1d34fa4148.html。

n驱动器驱动四相五线制步进电机28byj-48-5v接线说明

n驱动器驱动四相五线制步进电机28byj-48-5v接线说明

用L298N驱动器驱动四相五线制步进电机28BYJ-48-5V接线说明
如图所示,逻辑输入四个输入端与单片机相连,电源线的连接,在X宝上购买时都有相应的说明,请参考卖家标注。

此模块能同时驱动两个直流电机,但是只能驱动一个步进电机,本文只说明与四相五线制28BYJ-48-5V电机接法。

电机的原来,参考图2
图1驱动模块
图2,电机原理
通过图2电机原理的说明,我们可以进行连线,,如图所示。

找到对应的电机四相的关系,电机的四线(公共端除外)分别接到L298N模块的OUT1 ,OUT2和OUT3,OUT4输出端,其中公共端线接到5V电源。

因为本步进电机的额定电压为5V,所以从单片机引出5V电压接到驱动模块的12V输入口,5V输入口不接电源
如图所示进行连线,此时电机可能出现振动情况,但是不运转,或者只运转一个角度,此时,拔去四个输入口旁边的使能通道EB的跳线帽(或者EA),此时电机正常运转。

四相八拍步进电机控制电路

四相八拍步进电机控制电路

四相八拍步进电机控制电路
步进电机在各种自动控制领域中有着广泛的应用,它通过精确的位置控制和简单的控制电路设计,实现了高效的运行。

在步进电机中,四相八拍步进电机是一种常见的类型,它具有结构简单、控制方便等特点,因此得到了广泛采用。

步进电机的控制原理基于控制电路对电机内部各个线圈的通断控制,从而实现单步运动。

四相八拍步进电机由四个线圈组成,按相间夹角为90度的顺序连接,每相均可单独控制。

常见的步进电机控制电路包括单片机控制、逻辑门控制等。

在设计四相八拍步进电机控制电路时,首先需要确定电机驱动方式。

常见的方式包括全步进驱动和半步进驱动。

全步进驱动中,电机每步转动一个完整的步进角度;而在半步进驱动中,电机每步转动半个步进角度。

选择不同的驱动方式可以实现不同的转动精度和速度要求。

控制电路中常用的元器件包括晶体管、电阻、电容等。

通过合理的连接和控制,可以使步进电机按照预先设定的步进序列运行。

在具体设计电路时,需要根据电机的参数和工作要求,选择合适的元器件和控制方式,并进行电路调试和优化。

为了确保步进电机的稳定运行,还需要注意电源稳定性和线圩的连接质量。

稳定的电源可以提供电机正常工作所需的能量,而良好的线圩连接可以减小电机运行时的噪音和振动,延长电机使用寿命。

总的来说,四相八拍步进电机控制电路是实现步进电机精准运动的关键,通过合理的设计和调试,可以有效地实现对电机位置的控制。

在实际应用中,可以根据具体要求进行电路的定制设计,以满足不同场景下步进电机的控制需求。

1。

四相五线步进电机驱动原理

四相五线步进电机驱动原理

四相五线步进电机驱动原理
步进电机是一种将电脉冲信号转换为机械旋转运动的电机,具有结构简单、控制方便、精度高等优点,因此被广泛应用于各种自动化设备中。

四相五线步进电机是其中一种常见类型,其驱动原理相对简单,下面将对其进行介绍。

首先,四相五线步进电机由电机主体和控制驱动电路组成。

电机主体包括定子和转子,定子上布有4组线圈(称为相),每组线圈都与控制驱动电路相连。

控制驱动电路通过周期性地改变电流流向和大小来控制电机旋转。

在四相五线步进电机中,每相线圈都与控制驱动电路的输出端口相连。

控制驱动电路通过向每相线圈施加不同的电流信号来控制电机旋转方向和步距。

常见的控制方式包括单相励磁、双相励磁和全相励磁。

在单相励磁方式下,控制驱动电路依次激活每一相线圈,使其产生磁场,从而驱动电机旋转。

在双相和全相励磁方式下,同时激活两相及全部相线圈,以增加驱动力矩和稳定性。

步进电机的驱动原理基于这样的工作机制:通过改变线圈的电流方向和大小,可以使电机产生磁场旋转,从而带动转子转动。

通过适时地改变电流信号,可以控制电机按特定的步距旋转,实现精确的位置控制。

同时,步进电机具有较高的定位精度和速度响应,适用于需要精确控制运动的场合。

其工作原理简单清晰,易于控制,适用于各种自动控制系统和精密设备中。

总的来说,四相五线步进电机通过控制驱动电路向不同相线圈施加电流信号,实现精确的旋转运动控制。

其驱动原理基于电磁学和控制理论,具有结构简单、控制方便、精度高的特点,是自动化设备中重要的执行元件之一。

1。

步进电机四相八拍驱动程序

步进电机四相八拍驱动程序
if(CurKey==LastKey)
{
keytimes++;
if(keytimes%5==0)//短按
{
keycode=(ShortPush|CurKey);
}
else if(keytimes>100) //长按
{
keytimes=101;
keycode=(LongPush|CurKey);
}
}
else if(CurKey!=LastKey)
{
TCNT1H=0xC5;
TCNT1L=0x69;
}
else if(SlowSpeed==0) //15ms
{
TCNT1H=0xF1;
TCNT1L=0x5B;
}
if(Direction==0)
{
PORTC&=~(1<<PC2|1<<PC3);
PORTD=((1<<PD3)|stepper[stepcnt]);
break;
case 0x8E:
break;
case 0x8D:
break;
case 0x8B: //连续微调+
TuneFlag=3;
Pflag=0;
break;
case 0x87: //连续微调-
TuneFlag=4;
Pflag=0;
break;
default:
break;
}
}
}
PORTC|=1<<PC3;
}
if(TuneFlag!=0)
{
switch(TuneFlag)
{
case 0x01:
case 0x03:

PLC的四相步进电机控制方法及实现

PLC的四相步进电机控制方法及实现

基于PLC的四相步进电机控制方法及实现#1步进电机是一种将电脉冲信号转换成直线位移或角位移的执行元件。

步进电机的输出位移量与输入脉冲个数成正比,其转速与单位时间内输入的脉冲数(即脉冲频率)成正比,其转向与脉冲分配到步进电机的各相绕组的相序有关。

所以只要控制指令脉冲的数量、频率及电机绕组通电的相序.便可控制步进电机的输出位移量、速度和转向。

步进电机具有较好的控制性能,其启动、停车、反转及其它任何运行方式的改变,都在少数脉冲内完成,且可获得较高的控制精度,因而得到了广泛的应用2 PLC的特点及应用可编程序控制器fProgrammable Logic Controller)简称PLC,是在继电器控制和计算机控制的基础上开发出来的,并逐渐发展成以微处理器为核心,把自动化技术、计算机技术、通讯技术融为一体的新型工业自动控制装置。

它具有可靠性高、环境适应性好、编程简单、使用方便以及体积小、重量轻、功耗低等优点,因此迅速普及并成为当代工业自动化的支柱设备之一。

2.1高可靠性PLC所有的I/O接口电路均采用光电隔离,使工业现场的外电路与PLC内部电路之间电气上隔离;各输入端均采用RC滤波器,其滤波时间常数一般为10~20ms;各模块均采用屏蔽措施,以防止辐射干扰;采用性能优良的开关电源:具有良好的自诊断功能.一旦电源或其他软、硬件发生异常情况,CPU立即采用有效措施,以防止故障扩大;简化编程语言,对信息进行保护和恢复.设置警戒时钟WDT;对程序和动态数据进行电池后备。

上述措施使PLC有高的可靠性。

而采用循环扫描工作方式也提高其抗干扰能力。

2.2通用性强、采用模块化结构各个PLC的生产厂家都有各种系列化产品和各种模块供用户选择。

用户可以根据控制对象的规模和控制要求,选择合适的PLC产品,组成所需要的控制系统。

在做应用设计时,一般不需要用户制作任何附加装置.从而能使设计工作简化。

为了适应各种工业控制需要,除了单元式的小型PLC以外。

四相步进电机原理图及程序

四相步进电机原理图及程序

四相步进电机原理图本文先介绍该步进电机的工作原理,然后介绍了其驱动器的软、硬件设计。

1. 步进电机的工作原理该步进电机为一四相步进电机,采用单极性直流电源供电。

只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。

图1是该四相反应式步进电机工作原理示意图。

图1 四相步进电机步进示意图开始时,开关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八拍图2.步进电机工作时序波形图2.基于AT89C2051的步进电机驱动器系统电路原理步进电机驱动器系统电路原理如图3:图3 步进电机驱动器系统电路原理图AT89C2051将控制脉冲从P1口的P1.4~P1.7输出,经74LS14反相后进入9014,经9014放大后控制光电开关,光电隔离后,由功率管TIP122将脉冲信号进行电压和电流放大,驱动步进电机的各相绕组。

使步进电机随着不同的脉冲信号分别作正转、反转、加速、减速和停止等动作。

图中L1为步进电机的一相绕组。

AT89C2051选用频率22MHz的晶振,选用较高晶振的目的是为了在方式2下尽量减小AT89C2051对上位机脉冲信号周期的影响。

四相双四拍步进电机控制系统设计解读

四相双四拍步进电机控制系统设计解读

1引言本实验旨在通过控制AT89S52芯片,实现对四相步进电机的转动控制。

具体功能主要是控制电机正转、反转、加速与减速。

具体工作过程是:给试验箱上电后,拨动启动开关,步进电机按照预先设置的转速和转动方式转动。

调整正反转按钮,步进电机实现正反转切换;拨动加速开关,步进电机转速加快,速度达到最大值,不再加速;拨动减速开关时,电机减速转动,速度减到最小速度,停止减速。

89C58)芯片、拨码开关单元、四项步进电机等硬件设备。

实验具体电路单元有:单片机最小系统、步进电机连接电路、拨码开关连接电路。

2四项步进电机2.1 步进电机步进电机是一种将电脉冲转化为角位移的执行机构。

电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。

2.2 步进电机的共组原理2.2步进电机的控制1.换相顺序控制:通电换相这一过程称为脉冲分配。

例如:混合式步进电机的工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。

2.控制步进电机的转向控制:如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。

3.控制步进电机的速度控制:如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。

两个脉冲的间隔越短,步进电机就转得越快。

2.3步进电机的工作过程开关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方向转动。

四相五线步进电机控制程序

四相五线步进电机控制程序

#include <reg51.h>sbit LA=P2^0; //定义两相,选择P2口的低四位输出//LA为A,LB为B,LC为C,LD为Dsbit LB=P2^1;sbit LC=P2^2;sbit LD=P2^3;sbit key1 = P3^7; //定义按键1sbit key2 = P3^6; //定义按键2sbit key3 = P3^5; //定义按键3sbit key4 = P3^4; //定义按键4sbit key5 = P3^3; //定义按键5sbit key6 = P3^2; //定义按键6/********函数声明*************************************************************/ void right(unsigned int Speed,unsigned int road); //正转void left(unsigned int Speed,unsigned int road); //反转void mDelay(unsigned int DelayTime); //延时函数/********变量定义*************************************************************/ int MotorStep=0; //步进索引/***********主函数开始********************************************************/void main(){P2&=0XF0; //因ULN2003A直接驱动,初始时为低电平,这里一定不能少了while(1){ //循环if(key1==0) //1键按下正转right(20,32); //两个参数代表转速和步进量,以20的速度进32步if(key2==0) //2键按下反转left(20,32);if(key3==0) //3键接下正转right(10,32); //两个参数代表转速和步进量,以10的速度进32步if(key4==0) //4键接下反转left(10,32);}}/***********正转,两个参数代表转速和步进量*************************************/void right(unsigned int Speed,unsigned int road){//步进节拍:A-B-C-Dwhile(road){switch(MotorStep){case 0:LB=0;LC=0;LD=0;LA=1; //AMotorStep=1;break;case 1:LA=0;LC=0;LD=0;LB=1; //BMotorStep=2;break;case 2:LA=0;LB=0;LD=0;LC=1; //CMotorStep=3;break;case 3:LA=0;LB=0;LC=0;LD=1; //DMotorStep=0;break;}mDelay(Speed); //这里的延时即控制转速road--; //完成一步}P2&=0XF0; //将四个脚复位0,停止}/***********反转,两个参数代表转速和步进量*************************************/ void left(unsigned int Speed,unsigned int road){//步进节拍:D-C-B-Awhile(road){switch(MotorStep){case 3:LA=0;LC=0;LD=0;LB=1; //BMotorStep=2;break;case 2:LB=0;LC=0;LD=0;LA=1; //AMotorStep=1;break;case 1:LA=0;LB=0;LC=0;LD=1; //DMotorStep=0;break;case 0:LA=0;LB=0;LD=0;LC=1; //CMotorStep=3;break;}mDelay(Speed); //这里的延时即控制转速road--; //完成一步}P2&=0XF0; //将四个脚复位0}/***********延时函数*******************************************************/ void mDelay(unsigned int DelayTime){unsigned char j=0;while(DelayTime--){for(j=0;j<100;j++){}}}。

四线双型步进电机驱动程序汇编语言

四线双型步进电机驱动程序汇编语言

四线双型步进电机驱动程序汇编语言一、概述四线双型步进电机是一种常用的电机类型,其驱动程序可以使用汇编语言实现。

本文将介绍四线双型步进电机驱动程序的汇编语言实现方法。

二、步进电机工作原理步进电机是一种将输入脉冲信号转换为旋转运动的电机。

其工作原理是通过改变电磁场的方向和大小来控制转子的位置。

常见的步进电机有两种类型:单相和双相。

其中,双相步进电机分为四线单型和四线双型两种。

三、四线双型步进电机驱动程序实现1. 硬件连接四线双型步进电机需要连接到控制器上,其中,A相、B相、C相和D 相分别连接到控制器上的对应引脚。

此外,还需要一个使能信号引脚和一个方向信号引脚。

2. 程序实现(1)初始化在程序开始时,需要对控制器进行初始化设置。

具体包括设置引脚方向和模式等参数。

(2)驱动函数驱动函数是实现步进电机旋转运动的核心代码。

其主要思路是根据输入的脉冲信号来改变输出端口引脚的状态,从而控制电机转动。

具体实现方法如下:a. 根据输入的脉冲信号确定下一步的方向和步数;b. 根据当前位置和下一步位置之间的差值,确定需要改变的引脚状态;c. 将需要改变的引脚状态写入输出端口。

(3)延时函数为了保证电机转动的稳定性,需要在每次驱动后加入适当的延时。

延时函数可以使用计时器或者循环等方式实现。

四、总结本文介绍了四线双型步进电机驱动程序汇编语言实现方法。

通过对硬件连接和程序实现进行详细说明,读者可以更好地理解步进电机工作原理和驱动程序实现方法,从而更好地应用于实际项目中。

六、Atmega48通过ULN2803驱动四相步进电机

六、Atmega48通过ULN2803驱动四相步进电机
Delay_1ms(); }
12
*
器件初始化函数 *
****************************/
void init_devices(void)
{
CLI();
Port_Init();
Timer1_init();
EICRA = 0x00; EIMSK = 0x00; TIMSK1 |=(1<<TOIE1) ; SEI(); }
default:
break;
}
}
while(key)
//等待按键释放
{
Delay_ms(10);
key=RD_KEY();
}
}
}
}
/********************delay_Accurate.h*************************************** 毫秒级精确延时(ICC AVR)
//单四拍方式驱动
PORTD = Runcode1[3-i]|0xF0; //A、B、C、D 驱动
i++;
break;
case 2:
//双四拍方式驱动
if(i>3) i=0;
PORTD = Runcode2[3-i]|0xF0; //A、B、C、D 驱动
i++;
break;
case 3:
//单双八拍方式驱动
TCCR1B |= (0<<CS12)|(1<<CS11)|(0<<CS10); //64 分频
}
/****************************
*
定时器 1 中断函数 *
****************************/

四相五线步进电机程序设计流程

四相五线步进电机程序设计流程

四相五线步进电机程序设计流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!以下是一个四相五线步进电机程序设计的基本流程:1. 确定电机参数了解步进电机的型号、步距角、相数等参数。

2相四线-四相五线-四相六线步进电机接线及驱动方法

2相四线-四相五线-四相六线步进电机接线及驱动方法

2相四线-四相五线-四相六线步进电机接线及驱动方法————————————————————————————————作者:————————————————————————————————日期:2相四线,四相五线,四相六线步进电机接线及驱动方法步进电机工作原理:步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。

在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。

可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

按照常理来说,步进电机接线要根据线的颜色来区分接线。

但是不同公司生产的步进电机,线的颜色不一样。

特别是国外的步进电机。

那么,步进电机接线应该用万用表打表。

步进电机内部构造如下图:通过上图可知,A,~A是联通的,B和~B是联通。

那么,A和~A是一组a,B和~B是一组b。

不管是两相四相,四相五线,四相六线步进电机。

内部构造都是如此。

至于究竟是四线,五线,还是六线。

就要看A和~A之间,B和B~之间有没有公共端com抽线。

如果a组和b组各自有一个com端,则该步进电机六线,如果a和b组的公共端连在一起,则是5线的。

所以,要弄清步进电机如何接线,只需把a组和b组分开。

用万用表打。

四线:由于四线没有com公共抽线,所以,a和b组是绝对绝缘的,不连通的。

所以,用万用表测,不连通的是一组。

五线:由于五线中,a和b组的公共端是连接在一起的。

用万用表测,当发现有一根线和其他几根线的电阻是相当的,那么,这根线就是公共com端。

对于驱动五线步进电机,公共com端不连接也是可以驱动步进电机的。

六线:a和b组的公共抽线com端是不连通的。

同样,用万用表测电阻,发现其中一根线和其他两根线阻止是一样的,那么这根线是com端,另2根线就属于一组。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

四相步进电机驱动电路及驱动程序设计
我们用一个单片机控制多个步进电机指挥跳舞机器人的双肩、双肘和双脚伴着音乐做出各种协调舒缓充满感情的动作,荣获一等奖。

电路采用74373锁存,74LS244和ULN2003作电压和电流驱动,单片机(Atc52)作脉冲序列信号发生器。

程序设计基于中断服务和总线分时利用方式,实时更新各个电机的速度、方向。

整个舞蹈由运动数据所决定的一截截动作无缝连接而成。

本文主要介绍一下这个机器人的四相五线制步进电机驱动电路及程序设计.
1、步进电机简介
步进电机根据内部线圈个数不同分为二相制、三相制、四相制等。

本文以四相制为例介绍其内部结构。

图1为四相五线制步进电机内部结构示意图。

2、四相五线制步进电机的驱动电路
电路主要由单片机工作外围电路、信号锁存和放大电路组成。

我们利用了单片机的I/O端口,通过74373锁存,由74LS244驱动,ULN2003对信号进行放大。

8个电机共用4bit I/O端口作为数据总线,向电机传送步进脉冲。

每个电机分配1bit的I/O端口用作74373锁存信号,锁存步进电机四相脉冲,经ULN2003放大到12V驱动电机运转。

电路原理图(部分)如图2所示。

(1)Intel 8051系列单片机是一种8位的嵌入式控制器,可寻址64K字节,共有32个可编程双向I/O口,分别称为P0~P3。

该系列单片机上集成8K的ROM,128字节RAM可供使用。

(2)74LS244为三态控制芯片,目的是使单片机足以驱动ULN2003。

ULN2003是常用的达林顿管阵列,工作电压是12V,可以提供足够的电流以驱动步进电机。

关于这些芯片的详细介绍可参见它们各自的数据手册。

(3)74373是电平控制锁存器,它可使多个步进电机共用一组数据总线。

我们用P1.0~P1.7作为8个电机的锁存信号输出端,见表1。

这是一种基于总线分时复用的方式,以动态扫描的方式来发送控制信号,这和高级操作系统里的多任务进程调度的思想一致。

这种方法明显的好处是节省I/O口,使系统可以控制更多的步进电机。

本电路设计为控制8个。

3 、程序设计
传统的步进电机驱动程序利用简单的条件循环来发送脉冲序列,但当电机数目发生变化时,编程繁杂,冗余代码较多,难以做到信号占空比一致,进而产生“抖动” 现象。

下面提出一种基于中断服务方式,面向舞蹈动作,可实时改变各个电机速度和方向(每200ms可改变一次)的程序设计方法。

3.1 速度归一化和线性关系
我们将速度量化成一个-128~127内可变的数,正号代表正转,负号代表返转,称之归一化速度(-128~127为一个字节)。

给每个电机分
配一个速度累加计数器speed_tickers[i](I=0,1,2…,7分别代表8个电机),初始值为0,每个中断触发周期内给该累加计数器加上从舞步信息数组dancedata中读取的速度值speeds[i],当计数器值大于或等于预设的阈值MAX_SPEED_TICKER=600时,则发送脉冲序列中的下一个(正转)或上一个(反转)给步进电机,这取决于速度的符号(参考3.2节)。

同时,将该电机的累加计数器speed_tickers[i]恢复为0。

给出的速度值speed[i]越大,则累加达到或超过阈值MAX_SPEED_TICKER的时间就越短,那么向步进电机发送脉冲的频率就越高,速度也就越快。

归一化速度值设为num(-128~127),电机实际旋转速度设为V,那么V和num之间满足关系式:
(1)当num是阈值600的约数时,
其中,[x]代表不超过x的最大整数。

(3)V0是一个速度常数,即当归一化速度值num=120的时候对应的电机实际速度。

(4)num和速度V近似线性关系,V∝num。

正是因为有了这种函数关
系,我们在舞蹈动作控制中,可以轻松实现速度在大范围内变化。

3.2 速度正负实现方式
(1)在程序中,数组steps[8]用于存放步进电机的脉冲序列。

(2)设置指针cur_step[8]指向8个电机当前处在脉冲序列step[8]中的位置。

易知:0 <=step[i]<=7,其中,i分别代表8个电机。

(3)设置指针移动变量delta=0。

delta=1,指针向后移动一步,电机正转;delta=-1,指针向前移动一步,电机反转;delta=0,指针不移动,电机不发生转动。

3.3 程序具体步骤
3.3.1 初始化计时器InitTimer,然后空循环,进入等中断阶段。

3.3.2 中断触发后,程序进入服务程序。

(1)执行函数SetAllSpeeds,函数根据提供的速度值speed[i]依次判断是否给各个电机发送脉冲,实现电机以特定的速度和方向旋转。

SetAllSpeeds具体算法流程见图3。

(2)从定义的数组dancedata中读取新的速度信息,每200ms一次。

(3)将系统在调用中断处理函数时关闭的计时器重新打开InitTimer。

(4)中断处理函数结束返回。

注意:第一,(1)和(2)不可交换,这是为了保证步进电机每步延时的均匀性;第二,内部中断间隔时间1ms内,8051是否能够将中断服务程序中所有的代码执行完全?答案是肯定的。

参考图4,我们对整
个中断服务程序进行了统计,它所要执行的指令数在200~300之间变化,时钟间隔设置为1ms,选用12MHz晶振,执行这些指令需要耗时约500~600μs<1ms,因此,中断处理完全可以在一个计时器周期内执行完毕。

3.4 舞蹈编排
在舞蹈编排中,我们面向的是动作,因此,必须关心三要素:快慢、方向和幅度。

在程序中,舞步信息数组格式如下:
每组数据含有8个字节,分别代表8个电机的归一化速度num,这
点在3.1节中已经做了详细分析。

程序每200ms读一次数据,换句话说,每组数据的有效期只有200ms。

我们分析表2一组数据代表的含义。

(1)组数为25,这隐含了动作的时间信息。

因为每组数据的有效期为200ms,所以,25组数据的执行时间为:200ms×25=5000ms
(2)左脚和右脚(轮式)的归一化速度相等,方向相反。

根据公式(1)可以知道
V=0.5×V0
所以,机器人以0.5V0的速度原地转圈5000ms。

(3)其它关节的归一化速度num=0,说明其它关节均无动作。

3.5 可视化辅助程序简介
我们发现一个简单的动作竞需要5组数据,5分钟的舞蹈需要
5X60X1000ms/200ms=1500 组数据(需占用1.5K存储空间,AT89C52足够)。

如果人工填写这些数据,将十分困难。

因此在实际的运用中,我们用C+Builder编写了机器人模拟程序,采用图形界面,预一化速度
和时间信息,写入data.h,只要将其作为头文件,电机驱动程序将自动读取。

4、电路和程序特点总结
(1)一块单片机控制多个步进电机,总线分时复用。

(2)程序基于中断服务,电机工作稳定可靠。

(3)提出归一化速度,实现了速度V大范围可变。

(4)数据更新每200ms一次,可以轻松控制各个电机实时加速、减速、爆发,从而使舞蹈更人性化、感情化。

这也正是我们允许数据量大的原因。

(5)辅助程序实现编程可视化。

文末是中国科大首届机器人舞蹈比赛中用到的程序实例。

相关文档
最新文档