电机
- 电机的分类有挺多的,按用途来看的话就有 驱动类电机 和 控制类电机
左为 四线双极性电机 ,右为 直流电机
直流电机
- 属于驱动类电机,是将动能转化为机械能,主要用在电钻、电风扇、洗衣机等设备上,如我们小时候玩的四驱车大多数为直流电机
步进电机
- 又分为 反应式 、永磁式、 混合式 三种
反应式
结构简单成本低,但动态性能差、效率低、发热大、可靠性低,基本被淘汰
永磁式
动态性能好、输出力矩较大,但误差相对来说较大一些,价格低,广泛应用于消费产品
混合式
综合了上两种的优势,精度也很高,但结构相对复杂,价格也相对较高,主要用于工业。
驱动
- 驱动 直流电机 的方法也很简单,像我们小时玩的时候,直接是用电池一正一负接上去,这里我们也是一样,但是单片机的IO口的驱动能力不足以驱动我们的直流电机,所以我们需要用到芯片来帮我们驱动直流电机
ULN2003芯片
如图,输入与输出之间用的是 逻辑非 ,也就是说我们在 输入端 输入
0
,在 输出端 得到的就是1
,而驱动 直流电机 只需让它的两个引脚一正一负就行了
- 驱动步进电机需了解该电机的特性与相位,我用的步进电机则是 四线双极性 电机,它有两个绕组,每个绕组有两根线(
A+
、A-
、B+
、B-
),想要驱动它,我看教程上的运行方式是(A+)—(A-)—(B+)—(B-)
,但我试了一下后,电机并没有转动,只是一直在抖动,后来我将它改为A+
、B+
、A-
、B-
轮流为高电平,它就正常转动了 - 同样,想要驱动步进电机,IO口的驱动能是达不到要求的,我们同样要用芯片来帮我们驱动它
TC1508S芯片
该芯片可以用来驱动四线双极性步进电机,同时也可以用它来驱动直流电机,上一个芯片驱动直流电机无法做到控制正反转
步进电机驱动程序
#include <STC89C5xRC.H>
#include "intrins.h"
void delay2ms() //误差 0us
{
unsigned char a,b;
for(b=4;b>0;b--)
for(a=248;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
//unsigned char code BeatCode[4]=
//{
// 0x0d,0x07,0x0e,0x0b //A+—B+—A-—B-
//};
unsigned char code BeatCode[4]=
{
0x0b,0x0e,0x07,0x0d //B-—A-—B+—A+
};
void main()
{
unsigned char x;
unsigned char tmp;
while(1)
{
tmp=P1;
tmp=tmp&0xf0; //与上0,低四位清零
tmp=tmp|BeatCode[x]; //在或,给低四位输入数据
P1=tmp; //在把低四位的数据和高四位的原值传回给P1
x++;
if(x==4) //x=x&0x03,到4归零
{
x=0;
}
delay2ms(); //延时,不然会发现步进电机在抖动
}
}
要注意的是在切换时要有延时,不同的步进电机所需的延时时间也是有所不同,需要自己去测试
- 这样就完成了简单的电机驱动,精确的驱动等我学会了在说哈,目前实力不足。。。