目的/效果
让步进电机 正向转90度,逆向转90度
一,STC单片机模块
二,步进电机
2.2 什么是步进电机?
步进电机可以理解为:是一个按照固定步幅运动的“小型机器”。它与普通电机不同点在于,普通电机可以持续旋转,而步进电机按照特定的步数或者角度来移动。它每次只能移动一定的距离或者旋转一定的角度,运动更像是按照固定的步伐一步一步地走。这种特性让步进电机在需要精确控制位置和速度的场景中非常有用,比如打印机、机器人、数控机床等。
2.2.1 步进电机驱动板
步进电机的控制需要按照特定的顺序激活线圈,以产生旋转。驱动板充当了控制器的角色,它能提供正确的电流和顺序来激活步进电机的各个线圈,使得它按照预期的方式运转。步进电机的操纵需要精确的电流控制和时序激活,而驱动板能提供这种控制,让步进电机按照设定的步数或角度进行精确的运动。用通俗的语言解释一下就是,步进电机是个没有“脑子”的机器,需要芯片(ULN2003)把单片机发送过来的电信息,转化为步进电机能够“处理”的脉冲信号,并作出相应处理。
静态参数
相数:线圈的组数,两相步进电机步距角一般为 1.8°,三相的步进电机步距角为 1.2°,相数越多步距角越小。
步距角:一个脉冲信号所对应的电机转动的角度,这个步距角他不一定是电机实际工作的真正步距角,真正的步距角与驱动器的细分有关。
拍数:完成一个磁场周期性变化所需的脉冲数。
定位转矩:电机在不通电状态下,电机转子自身的锁定力矩(由磁场齿形的谐波以及机械误差造成的)。
动态参数
步距角精度:步进电机转动一个步距角度的实际值与理论值的误差。用百分比表示:误差/步距角 *100%。
失步:电机运转的步数,不等于理论上的步数。也可以叫做丢步,一般都是因负载过大或者是频率过快。
最大空载起动频率:不加负载的情况下,能够直接起动的最大频率。
最大空载运行频率:电机不带负载的最高转速频率。
运行距频特性:输出转矩与输入脉冲频率的关系,是电机选型的根本依据。要在该曲线之下才能保证运行时不丢步。
电机正反转控制:改变通电顺序而改变电机的正反转。
2.2.2 五线四相
五线四相指的是它的线数和相数。在这个28BYJ48步进电机中,有五根线用于连接,四相则表示它具有四组线圈,每个线圈都能独立控制。+为公共端,分A、B、C、D四相
分别给ABCD导通,电机就会转。
单相激励步进
每次通电产生磁性的相只有ABCD其中的一个
步序 | A | B | C | D | P1(HEX) |
1 | 1 | 0 | 0 | 0 | 0x08 |
2 | 0 | 1 | 0 | 0 | 0x04 |
3 | 0 | 0 | 1 | 0 | 0x02 |
4 | 0 | 0 | 0 | 1 | 0x01 |
P1=0x08;//A导通
Delay_ms(10);
P1=0x04;//B导通
Delay_ms(10);
P1=0x02;//C导通
Delay_ms(10);
P1=0x01;//D导通
Delay_ms(10);
双相激励步进
转子却被固定在两个绕阻的极性中间
步序 | A | B | C | D | P1(HEX) |
1 | 1 | 1 | 0 | 0 | 0x0C |
2 | 0 | 1 | 1 | 0 | 0x06 |
3 | 0 | 0 | 1 | 1 | 0x03 |
4 | 1 | 0 | 0 | 1 | 0x09 |
P1=0x0C;//AB导通
Delay_ms(10);
P1=0x06;//BC导通
Delay_ms(10);
P1=0x03;//CD导通
Delay_ms(10);
P1=0x09;//DA导通
Delay_ms(10);
混合激励驱动
双相激励的过程中,也可以在装换相位时加一个关闭相位的状态而产生走半步的现象,这将步进电机的整个步距角一分为二
步序 | A | B | C | D | P1(HEX) |
1 | 1 | 0 | 0 | 0 | 0x08 |
2 | 1 | 1 | 0 | 0 | 0x0C |
3 | 0 | 1 | 0 | 0 | 0x04 |
4 | 0 | 1 | 1 | 0 | 0x06 |
5 | 0 | 0 | 1 | 0 | 0x02 |
6 | 0 | 0 | 1 | 1 | 0x03 |
7 | 0 | 0 | 0 | 1 | 0x01 |
8 | 1 | 0 | 0 | 1 | 0x09 |
P1=0x08;//A导通
Delay_ms(10);
P1=0x0C;//AB导通
Delay_ms(10);
P1=0x04;//B导通
Delay_ms(10);
P1=0x06;//BC导通
Delay_ms(10);
P1=0x02;//C导通
Delay_ms(10);
P1=0x03;//CD导通
Delay_ms(10);
P1=0x01;//D导通
Delay_ms(10);
P1=0x09;//DA导通
Delay_ms(10);
2.3 细分驱动
将步距角以电流分配方法进行细分化的技术。一般电机产品都会集成这种技术,使用时只需细分数即可实现。
原理:磁场强度和电流大小成正比。
如果Ia = Ib 那么转子将停在相邻两个线圈的中间,如果电流不相等,转子将停在电流较大的一侧;通过改变输入电流的比例,就可以比原来更小的步距角进行驱动;可进行超微小角度,更加平滑的运转,有效地降低振动和噪音的驱动方法。
2.4 通过数字信号控制旋转位置和转速。
控制定子绕组ABCD周期性、交替得电,进而控制步进电机一步一步的向前运动的这个控制器就是步进电机驱动器。
电机的旋转位置只取决于脉冲个数,转速只取决脉冲信号的频率。
角位移=脉冲个数X步距角。
步进电机的步距角计算公式为:θ=360°/(Z×m×k)。其中,θ是步距角,Z是转子齿数,m是定子绕组的对数,k是通电方式系数。对于单拍通电方式,k=1;对于单双拍通电方式,k=2。1
另外,步距角也可以通过以下公式计算:θ=360°/(转子齿数×运行拍数)。以常规二、四相,转子齿为50齿电机为例,四拍运行时步距角为θ=360°/(50×4)=1.8°,八拍运行时步距角为θ=360°/(50×8)=0.9°。
请注意,步距角是步进电机运动的基础,它取决于电机上的磁极总数,且步距角越小,运转的平稳性越好。
2.5 适用场景
步进电机有以下的三个特点:
其一是精准定位,步进电机能够准确控制位置,适用于需要精确控制位置和速度的应用。
其二是固定步进,它能按照固定步幅移动,使其在需要确定性移动的应用中很有用。
其三是低速高扭矩:步进电机在低速和高扭矩方面表现出色,这让它们在需要大力矩但不需要高速旋转的场景中很有用。
故而根据以上的三个特性,可以用到那些项目里呢?举几个我曾接触使用到步进电机的项目吧!同学们可以发挥自己的想象力哈哈哈...
智能窗帘
打印机
图书馆取书机器人的机械臂关节处的动力
三,创建Keil项目
详细参考:51单片机STC89C52RC——创建Keil项目-CSDN博客
四,代码
完整代码参考《https://gitee.com/oopxiajun/STC89C52》
main.c
#include <REGX52.H>
#include "Delay.h"
#include "key.h"
#include "StepMotor.h"
#include "LCD1602.h"
//模式 :1-正转,2-反转
int Model=1;
/**
* 函 数:主函数
* 参 数:无
* 返 回 值:无
*/
void main()
{
int step=0;
LCD_Init();
//顺时针转90度
StemMotor_Run(1,90,1);
Delay_ms(1000);
//逆时针转90度
StemMotor_Run(2,90,2);
while(1)
{
}
}
#include <REGX52.H>
#include "delay.h"
int StepTime = 1000;//steptime表示每步的时间
//八拍
unsigned char code Rotation[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
/**
* 函 数:控制步进电机运行
* 参 数:Step 转速(单步暂停时长)
Angle 角度(0-360)
Direction 转动方向(1-顺时针,2-逆时针)
* 返 回 值:无
*/
void StemMotor_Run(int Step,int Angle,int Direction)
{
int i=0;
Angle=(int)(Angle/0.72);
while((Angle--)>=0)
{
if(Direction==1)//正转
{
//每执行一次下面的循环,步进电机转角0.72度 ,
//步进电机运行1周,需执行500次下面的循环
for(i=0;i<8;i++)
{
P1=Rotation[i];//步距角0.09度,4000次转一圈
Delay_ms(Step);
}
}
else if(Direction==2)//反转
{
for(i=7;i>=0;i--)
{
P1=Rotation[i];
Delay_ms(Step);
}
}
}
}
五,代码编译、下载到51单片机
代码编译请参考
《51单片机STC89C52RC——代码编译-CSDN博客》
代码下载请参考
《51单片机STC89C52RC——STCAI-ISP代码下载-CSDN博客》