当前位置: 首页 > news >正文

十、51单片机之步进电机

1、什么是步进电机

1.1、外观

 1.2、概念

(1)步进电机是一种将电脉冲信号转换成相应角位移线位移的电动机。每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。因此,步进电动机又称脉冲电动机。

(2)步进电机能够在精度范围内控制转动的方向,角位移,速度等。通常应用于机床中,如PCB生产中的贴片机,就需要精确控制电机。

(3)步进电机的种类非常多。这里示例的是四线步进电机,电机上标有A+、A-、B+、B-。

2、步进电机相关的概念

2.1、步距角

(1)步进电机转动的最小单位,也就是步进电机的精度。

(2)步进电机有一个固有的步距角,这个参数和步进电机有关。

(3)步进电机一般情况下只能以固有步距角的整数倍来运动,这一个固有步距角的移动就叫一个节拍

(4)电机还有比步距角更小的运动方式,叫做细分,由电机驱动器来支持的。

2.2、相数

相数指步进电机内部的线圈组数,一般一组线圈引出一组线。

2.3、细分

初学中不接触细分,我手里的电机驱动器(驱动芯片)也不支持细分。

2.4、单极性和双极性

单极性和双极性是步进电机最常采用的两种驱动架构。

(1)参考如下资料:单极性 (unipolar) 和双极性 (bipolar) 步进电机 - 豆丁网

(2)单极性驱动电路使用四颗晶体管来驱动步进电机的两组相位;双极性驱动电路使用八颗晶体管来驱动两组线位。

(3)单极性驱动电路的电机结构包含两组带有中间抽头的线圈,整个电机共有六条线与外界连接。

(4)双极性驱动电路可以同时驱动四线式或六线式步进电机,虽然四线式电机只能使用双极性驱动电路,它却能大幅降低量产型应用的成本。

(5)双极性驱动电路的晶体管只需承受电机电压便可;双极性驱动电路的晶体管只需承受电机电压便可单极性驱动电路需要箝位电路才能驱动。

3、两相四线式步进电机驱动时序

四线分别是A+    A-    B+    B-

A+  =  A;A/  =  A-;B+  =  B;B/  =  B-;

3.1、单相四拍

正转时序:  A/ B A B/

反转时序:  B/ A B A/

3.2、双相四拍

正转时序:  A/B  AB  AB/ A/B/

反转时序:  A/B/ AB/ AB A/B

3.3、半步八拍

正转时序:  A/  A/B  B  AB  A  AB/  B/  A/B/

反转时序:  A/B/ B/ AB/ A AB B A/B A/

4、控制器和驱动器

(1)一套步进电机的系统需要三部分:控制器+驱动器+步进电机。

(2)一般情况下:控制器就是单片机,驱动器一般是接在单片机的IO口上面的专用电机驱动芯片。

(3)控制器负责产生时序信号,驱动器负责将时序信号转成功率驱动信号给步进电机用。

5、原理图

 (1)原理图中INA、INB、INC、IND与单片机IO口相连接,通过单片机的IO口给驱动器芯片输入0/1产生控制信号,控制信号经过TC1117的转换,从OUTA、OUTB、OUTC、OUTD四个脚输出具有驱动步进电机能力的驱动信号。

(2)INA、INB对应一个相线线圈的两端,INC、IND对应另一个相线线圈的两端。

驱动芯片数据手册:略。

6、步进电机编程示例

#include <reg52.h>
#include "intrins.h"


sbit AN = P0^0;  //A-
sbit AP = P0^1;  //A+
sbit BN = P0^2;  //B-
sbit BP = P0^3;  //B+


/*函数声明*/
void Delay1ms();		//@12.000MHz
void Delay500ms();		//@12.000MHz


void main()
{

	while(1)
	{
		/* 单相四拍: A/ B A B/ */
		AN = 1;
		AP = 0;  
		BN = 0;   
		BP = 0;   
		//Delay1ms();
		Delay500ms();
		
		AN = 0;
		AP = 0;  
		BN = 0;  
		BP = 1;
		//Delay1ms();
		Delay500ms();		
		
		AN = 0;
		AP = 1;  
		BN = 0;  
		BP = 0; 
		//Delay1ms();
		Delay500ms();		
		
		AN = 0;
		AP = 0;  
		BN = 1;  
		BP = 0;  
		//Delay1ms();
		Delay500ms();
	}
}


void Delay1ms()		//@12.000MHz
{
	unsigned char i, j;

	i = 2;
	j = 239;
	do
	{
		while (--j);
	} while (--i);
}


void Delay500ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

(1)单相四拍驱动时序:A/  B  A  B/,如果这当作正传,那么反过来B/  A  B  A/ 就是反转。

(2)转速控制:转速是由脉冲信号的频率控制的,其实就是delay的时间。

(3)delay时间过短电机可能不转。delay时间越长,转速约满。

相关文章:

  • iPhone设置163邮箱 收件服务器和发件服务器填写内容
  • 四大领先优势加持,华为云会议服务更省心可靠!
  • 【AI理论学习】理解词向量、CBOW与Skip-Gram模型
  • 【学习笔记】JavaScript异步编程
  • Java Number Math 类
  • 【Go实现】实践GoF的23种设计模式:命令模式
  • ETCD的创建
  • 沥青瓦UKCA认证—EN 544
  • 一本通 1276:【例9.20】编辑距离
  • c语言复习之文件(十三)
  • 【OJ每日一练】1033 - 等级成绩
  • 5G URLLC标准化关键技术分析
  • 安装GitHub上一些库的注意事项
  • 知识蒸馏DEiT算法实战:使用RegNet蒸馏DEiT模型
  • 《MySQL高级篇》九、数据库的设计规范
  • 我,30多岁的土木工程人,终于转行了
  • 动态DNS与DPDK高性能DNS -DPDK环境搭建
  • 【Numpy基础知识】通用函数ufunc基础知识
  • 甜点cc的2022年回顾总结
  • 【软件测试】瓶颈?资深测试聊测试开发的瓶颈在哪?