历史上的今天
今天是:2024年09月28日(星期六)
2021年09月28日 | 51驱动两相四线步进电机
2021-09-28 来源:eefocus
一、步进电机概念
1、步进电机概念
步进电机是将电脉冲信号,转换为角位移或者线位移的开环控制电机,又称为脉冲电机。在非超载情况下,电机转速、停止位置只取决于脉冲信号的频率和脉冲数,不受负载影响。当步进电机驱动器接收到一个脉冲信号时,它就可以驱动电机按设定方向转动一个固定的角度——步距角。如果需要高控制精度,可以配上细分驱动器,将步距角进一步细分,细分基本步距角。(基本步距角固定不变)
2、开环控制和闭环控制:
开环控制是指无反馈信息的系统控制方式。当操作者启动系统,使之进入运行状态后,系统将操作者的指令一次性输向受控对象。
闭环控制是指控制论的一个基本概念。指作为被控的输出以一定方式返回到作为控制的输入端,并对输入端施加控制影响的一种控制关系。
开环和闭环控制的区别:有无反馈;是否对当前控制起作用。开环控制一般是在瞬间就完成的控制活动,闭环控制一定会持续一定的时间。
形象一点表示:反馈由人来判断,为开环;由机器来判断,为闭环。
二、步进电机原理
1、步进电机控制
步进电机通过脉冲信号进行控制,每输入一个脉冲信号,步进电机前进一步。步进电机旋转的步距角,是在电机结构基础上等比例控制产生的。在不配备细分驱动器的情况下,步进电机步距角为一固定角度,即基本步距角。(在实际工作中可能步距角存在微小差别,属于机械结构固有误差,但误差不会积累)
2、步进电机构造原理
步进电机主要由定子和转子组成。
定子,就是由电流控制磁场方向,满足安培右手螺旋定律,步进电机的电流经过定子产生磁场的过程叫做励磁。电流与磁场关系符合右手螺旋定律。
电机的运动是通过改变电流在电机中的流动实现的,电机转子排斥B相磁极定子,吸引A相磁极定子,进而产生步进操作。
电机的相数由定子决定,两个定子-2相电机,三个定子-3相电机。2相电机最常用,细分效果好。
转子转子被定子环绕在中间受定子磁场变化产生转动
转子分为三类:反应式(VR)永磁式(PM)混合式(HB)


三、步进电机的工作方式
1、一些概念
相--------绕组的个数
齿距角------转子相邻两齿间的夹角
拍-------绕组的通电状态。三拍表示一个周期有三种通电状态,六拍表示有6种
步距角--------转子每拍转动的角度,步距角θ=360/NZ,N:步进电机拍数 Z:转子齿数
步距角反映步进电机精度,步距角越小,该步进电机能够输出的单位位移量越小。步距角与电机本身结构(转子齿数)和工作方式(拍数)有关。
2、四拍驱动
以两相四线步进电机为例,在四线驱动中,每次仅有一个线圈通电,共四种通电状态,为四拍工作方式。

3、八拍驱动

四、ULN2003工作原理
步进电机需要较大的驱动电流,因此需要ULN2003芯片来驱动电机。
1、ULN2003作用
ULN2003是一个单片高电压、高电流的达林顿晶体管阵列集成电路。由7对NPN达林顿管组成,输入和各种逻辑类型兼容。多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中,可直接驱动继电器等负载。
ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。
2、ULN2003引脚图及功能

引脚1~7:CPU脉冲输入端,端口对应一个信号输出端
引脚8:接地
引脚9: 该脚是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。用于感性负载时,该脚接负载电源正极,实现续流作用。如果该脚接地,实际上就是达林顿管的集电极对地接通。
引脚10~16:脉冲信号输出端,对应7-1信号输入端
3、ULN2003驱动原理
ULN2003在5V工作电压下能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
ULN2003是一个非门电路,包含7个单元,单独驱动每个达林顿管,驱动电流最大500mA,9脚可以悬空。
ULN2003也是一个7路反向器电路,即当输入端为高电平时ULN2003输出端为低电平,当输入端为低电平时ULN2003输出端为高电平,继电器得电吸合。
五、具体程序示例(两相四线步进电机)
//加速转动
#include #define uchar unsigned char #define uint unsigned int #define MotorData P0 //步进电机控制接口定义 uchar phasecw[4] ={0x08,0x04,0x02,0x01};//正转 电机导通相序 D-C-B-A uchar phaseccw[4]={0x01,0x02,0x04,0x08};//反转 电机导通相序 A-B-C-D uchar speed; //ms延时函数 void Delay_xms(uint x) { uint i,j; for(i=0;i } //顺时针转动 void MotorCW(void) { uchar i; for(i=0;i<4;i++) { MotorData=phasecw[i]; Delay_xms(speed);//转速调节 } } //停止转动 void MotorStop(void) { MotorData=0x00; } //主函数 void main(void) { uint i; Delay_xms(50);//等待系统稳定 speed=25; while(1) { for(i=0;i<10;i++) { MotorCW(); //顺时针转动 } speed--; //加速 //减速speed++ if(speed<4) { speed=25; //重新开始加速运动 MotorStop(); Delay_xms(500); } } } //正反转 #include #define uchar unsigned char #define uint unsigned int #define MotorData P0 //步进电机控制接口定义 uchar phasecw[4] ={0x08,0x04,0x02,0x01};//正转 电机导通相序 D-C-B-A uchar phaseccw[4]={0x01,0x02,0x04,0x08};//反转 电机导通相序 A-B-C-D //ms延时函数 void Delay_xms(uint x) { uint i,j; for(i=0;i } //顺时针转动 void MotorCW(void) { uchar i; for(i=0;i<4;i++) { MotorData=phasecw[i]; Delay_xms(5);//转速调节 } } //逆时针转动 void MotorCCW(void) { uchar i; for(i=0;i<4;i++) { MotorData=phaseccw[i]; Delay_xms(5);//转速调节 } } //停止转动 void MotorStop(void) { MotorData=0x00; } //主函数 void main(void) { uint i; Delay_xms(50);//等待系统稳定 while(1) { for(i=0;i<500;i++) { MotorCW(); //顺时针转动 } MotorStop(); //停止转动 Delay_xms(500); for(i=0;i<500;i++) { MotorCCW(); //逆时针转动 } MotorStop(); //停止转动 Delay_xms(500); } }
上一篇:51驱动直流电机——PWM调速
下一篇:51单片机之晶振与定时器
史海拾趣
|
俗话说知己知彼方可百战百胜。 下面让我们来一起看看Labview的家谱. LabVIEW(Laboratory Virtual Instrumentation Engineering Workbench,实验室虚拟仪器工程平台)是由美商国家仪器所开发的图形化程序编译平台,发 ...… 查看全部问答> |
|
nboot.bin的大小仅为2KB,怎么还生成了nboot.nb0/nb1两个文件?并且两个文件都为8KB,而且nboot.nb1中的数据不全是0X00,为什么 nboot.bin的大小仅为2KB,怎么还生成了nboot.nb0/nb1两个文件?并且两个文件都为8KB,而且nboot.nb1中的数据不全是0X00,为什么?… 查看全部问答> |
|
=== 请问,VC2005编译Wince的应用,怎么调用ADS或者RVDS编译生成的库?谢谢 === 因为我现在用Wince编译视频解码程序,感觉比ADS或者RVDS编译的性能差, 所以考虑ADS编译库,然后VC2005调用… 查看全部问答> |




