单片机-控制-步进电机

本文介绍了步进电机的工作原理,强调了步进电机在数字控制系统中的重要性。文章对比了步进电机与伺服电机、舵机的区别,并提供了单片机控制步进电机的示例代码,包括使用Arduino Pro MINI控制28BYJ-48五线四相步进电机的实验。
摘要由CSDN通过智能技术生成

开始浏览正文之前,请大家先花几分钟看完这段视频:

步进电机是如何工作的


步进电机(stepping motor)

步进电机

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件,是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角),是现代数字程序控制系统中的主要执行元件,应用极为广泛。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响。

当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为”步距角”,它的旋转是以固定的角度一步一步运行的。

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

步进电机是一种感应电机,它的工作原理是利用电子电路,将直流电变成分时供电的多相时序控制电流,用这种电流为步进电机供电,步进电机才能正常工作,驱动器就是为步进电机分时供电的多相时序控制器。

虽然步进电机已被广泛地应用,但步进电机并不能像普通的直流电机、交流电机在常规下使用。它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。

步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。

步进电机又称为脉冲电机,基于最基本的电磁铁原理,它是一种可以自由回转的电磁铁,其动作原理是依靠气隙磁导的变化来产生电磁转矩。

由于步进电机是一个把电脉冲转换成离散的机械运动的装置,具有很好的数据控制特性,因此,计算机成为步进电机的理想驱动源,随着微电子和计算机技术的发展,软硬件结合的控制方式成为了主流,即通过程序产生控制脉冲,驱动硬件电路。单片机通过软件来控制步进电机,更好地挖掘出了电机的潜力。因此,用单片机控制步进电机已经成为了一种必然的趋势,也符合数字化的时代趋势。


步进电机和伺服电机、舵机有何区别?

伺服电机不仅仅只包含一个电机,通常是包含电机、传感器和控制器的电机系统(具体可以参考伺服电机/舵机 控制)。
舵机是个俗称,适用于航模上,其实是一种低端的但最常见的伺服电机系统,价格低廉但精度较低。


单片机控制示例

51单片机按键控制单反转仿真

相信通过视频及文字内容,大家对步进电机相关原理已经非常熟悉。下面通过Arduino Pro MINI开发板进行一项简易的步进电机控制实验。
步进电机内部结构
步进电机(Stepper/Step/Stepping Motor),主要是依靠定子线圈序列通电,顺次在不同的角度形成磁场,推拉定子旋转。接触步进电机时会有很多容易混淆的概念。比如单极性、双极性、两相八线、四相八线等等。主要是由于线圈的接法不同,我们先简单地辩析一下:按照电机驱动架构可分为单极性 (unipolar) 和双极性 (bipolar) 步进电机。所谓的极性,就是电流通过线圈绕组产生磁场的极性,单极性就是只有一个磁极,双极就是有两个磁极。四相,八相是指步进电机的相数,即步进电机内部的线圈组数。电机的相数不同,步进电机接收到每个脉冲信号的角度也不同。通过不同的极性,不同的相数,线圈接法会得到不同的电机性能。


实验前要准备的元件
- 28BYJ-48 五线四相步进电机
- ULN2003驱动芯片
- Arduino Pro MINI开发板
- 杜邦线若干
28BYJ-48,DC5V,五线四相步进电机


示例代码一:
  • 20
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
一次控制两个电机#include #define GPIO_MOTOR P1 sbit K1=P3^6; sbit K2=P3^5; sbit K3=P3^4; sbit K4=P3^3; unsigned char code ZHENG1 [8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //正转顺序编码 unsigned char code FAN1 [8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //反转顺序编码 unsigned char code ZHENG2 [8]={0x1f,0x3f,0x2f,0x6f,0x4f,0xcf,0x8f,0x9f}; //正转顺序编码 unsigned char code FAN2 [8]={0x9f,0x8f,0xcf,0x4f,0x6f,0x2f,0x3f,0x1f}; //反转顺序编码 char Motor1_Step,Motor2_Step,Speed,Speed2; void Delay(unsigned int t); void Motor1_zheng(); void Motor1_fan(); void Motor2_zheng(); void Motor2_fan(); void main() { unsigned int i; Motor1_Step=1; Motor2_Step=3; Speed=10; Speed2=40; while(1) { while(K1==0) { for(i=0;i<10;i++) { Motor1_zheng(); } } while(K2==0) { for(i=0;i<10;i++) { Motor1_fan(); } } while(K3==0) { for(i=0;i<10;i++) { Motor2_zheng(); } } while(K4==0) { for(i=0;i<10;i++) { Motor2_fan(); } } } } void Motor1_fan() { unsigned int i; for(i=0;i<8;i++) { //GPIO_MOTOR = FFW[i]&0x1f; //取数据 GPIO_MOTOR = FAN1[i]; Delay(Speed); //调节转速 } } void Motor1_zheng() { unsigned int i; for(i=0;i<8;i++) { //GPIO_MOTOR = FFZ[i]&0x1f; GPIO_MOTOR = ZHENG1[i]; Delay(Speed); //调节转速 } } void Motor2_fan() { unsigned int i; if(Motor1_Step==0) { for(i=0;i<8;i++) { //GPIO_MOTOR = FFW2[i]&0xf1; //取数据 GPIO_MOTOR = FAN2[i]; Delay(Speed2); //调节转速 } } Motor1_Step=1; } void Motor2_zheng() { unsigned int i; if(Motor1_Step==1) { for(i=0;i<8;i++) { //GPIO_MOTOR = FFZ2[i]&0xf1; GPIO_MOTOR = ZHENG2[i]; Delay(Speed2); //调节转速 } } Motor1_Step=0; } void Delay(unsigned int t) { unsigned int k; while(t--) { for(k=0; k<80; k++) { } } }
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值