难的东西学不会是因为简单的知识没学好
基础不牢,地动山摇
1.0直流电机
1.0.0什么是电机
(1)电机:就是电动机,有电能产生动能的一种装置。简称电机
1.0.1分类(不完全分类)
(1)交流电机:没有正负,
(2)直流电机:永磁 励磁
(3)步进电机(精度不是特别高)、伺服电机(精度高于步进电机):精确控制
1.0.1直流电机
(1)单片机IO口不能直接驱动直流电机。因为单片机的IO口的驱动能力很弱(一般20ma左右)
(2)单片机的IO口是数字的,
(3)直流电机没有正负之分,调换两个接线柱,电机的运行方向发生翻转,顺时针转动与逆时针转动的区别。
1.1步进电机
1.1.0
(1)特点:精确控制旋转角度。
(2)步距角:也可以说是步长,就是电机一次走多少距离。走的距离越小,那么说明精度越高。步进电机有一个固定的步距角,这个角度和步进电机本身有关。一般有1.8° 与 1.2°的。
(3)相数:步进电机中的绕组的个数。2 3 4相等,相数越多步距角度越小,控制越精确。
(4)细分:一般是控制芯片实现的,对于步进电机的固定步距角再进行细分。使得控制更加精确。
1.1.1
(1)极性:单极性和双极性
(2)拍数
单相四拍 A/ B A B/ 正转
双相四拍 A/B AB AB/ A/B/ 正转
半步八拍 A/ A/B B AB A AB/ B/ A/B/
时序:A/ B A B/
四根线上电平
A A/ B B/
0 1 0 0 第1拍
0 0 1 0 第2拍
1 0 0 0 第3拍
0 0 0 1 第4拍
4个节拍加起来就是一个完整的周期,按照这个周期给步进电机供电,则步进电机就会转动1个步距角。
时序:A/B AB AB/ A/B/
四根线上电平
A A/ B B/
0 1 1 0 第1拍
1 0 1 0 第2拍
1 0 0 1 第3拍
0 1 0 1 第4拍
(3)要控制步进电机的运转:需要控制器 ,驱动器 步进电机本身三部分。
控制器一般就是MCU 驱动器就是专门的电机驱动芯片,具有强的驱动能力。
1.2代码实践
#include <reg51.h>
/*
** 接线:
A P1^0
B P1^1
C P1^2
D P1^3
OUTA对应A-、OUTB对应A+、OUTC对应B-、OUTD对应B+。
*/
#define TIME 10
sbit APositive = P1^1;
sbit ANegative = P1^0;
sbit BPositive = P1^3;
sbit BNegative = P1^2;
void delay(unsigned char t);
// 单相四拍 A/ B A B/
// 双相四拍 A/B AB AB/ A/B/
// 半步八拍 A/ A/B B AB A AB/ B/ A/B/
void main(void)
{
while(1)
{
// 单相四拍 A/ B A B/
ANegative = 1;
BPositive = 0;
APositive = 0;
BNegative = 0;
delay(TIME);
ANegative = 0;
BPositive = 1;
APositive = 0;
BNegative = 0;
delay(TIME);
ANegative = 0;
BPositive = 0;
APositive = 1;
BNegative = 0;
delay(TIME);
ANegative = 1;
BPositive = 0;
APositive = 1;
BNegative = 0;
delay(TIME);
ANegative = 0;
BPositive = 0;
APositive = 0;
BNegative = 1;
delay(TIME);
/*
// 双相四拍 A/B AB AB/ A/B/
ANegative = 1;
BPositive = 1;
APositive = 0;
BNegative = 0;
delay(TIME);
ANegative = 0;
BPositive = 1;
APositive = 1;
BNegative = 0;
delay(TIME);
ANegative = 0;
BPositive = 0;
APositive = 1;
BNegative = 1;
delay(TIME);
ANegative = 1;
BPositive = 0;
APositive = 0;
BNegative = 1;
delay(TIME);
*/
/*
// 单相八拍 A/ A/B B AB A AB/ B/ A/B/
ANegative = 1;
BPositive = 0;
APositive = 0;
BNegative = 0;
delay(TIME);
ANegative = 1;
BPositive = 1;
APositive = 0;
BNegative = 0;
delay(TIME);
ANegative = 0;
BPositive = 1;
APositive = 0;
BNegative = 0;
delay(TIME);
//A/ A/B B AB A
ANegative = 0;
BPositive = 1;
APositive = 1;
BNegative = 0;
delay(TIME);
ANegative = 0;
BPositive = 0;
APositive = 1;
BNegative = 0;
delay(TIME);
//AB/ B/ A/B/
ANegative = 0;
BPositive = 0;
APositive = 1;
BNegative = 1;
delay(TIME);
ANegative = 0;
BPositive = 0;
APositive = 0;
BNegative = 1;
delay(TIME);
ANegative = 1;
BPositive = 0;
APositive = 0;
BNegative = 1;
delay(TIME);
*/
}
}
void delay(unsigned char t)
{
unsigned char a,b;
for(a=0;a<200;a++)
for(b=0;b<t;b++);
}
留几个问题:
(1)单相四拍、双相四拍、半步八拍的之间的特点与差异?
除了每一个后者比前这的速度慢了,动力大了,还有那些差别。半步八拍控制的精度比前者高了。
(2)如果编程严格的按找节拍来,或者说是编程时有失误,假如中间某一个节拍错了,会发生什么情况?有什么隐患?(我代码简单实验了一下,感觉上还是正常转动。但是会不会发热或者什么的不太清楚。)
(3)也就是简单的了解下电机的基础知识而已,有相关的项目了再深入研究吧!!