直流电机(DC)
这一期我们来学习如何控制直流电机。
需要材料:Arduino UNO
直流电机——本文以12V额定电机为例
电机驱动——本文以L298N为例
直流电机顾名思意,即可以将直流电转化成机械能的电机,其具有良好的调速性,直流电机的种类又分为许多种,主要由定子与转子组成。市面上常见的直流电机有很多,我们常用的有370电机等。
接线图如下
L298N是一款常用的电机驱动器可用于驱动直流电机以及步进电机,内置L298N双H桥直流电机驱动芯片,可采用5—7V电压逻辑驱动,同时板载5V供电可以给UNO板供电,如上图所示以电机输出A为例,可连接两个电机的两个两相,利用PWM调速。控制方向有两种形式:
- 使能控制即利用逻辑输入控制电机正反转,通过通道使能控制电机转速;将控制电机A的两个逻辑输出定义为intputA_1,INTPUTA_2,通道使能A定义为inputAspeed。
digitalWrite(intputA_1,HIGH);
digitalWrite(intputA_2,LOW);
analogWrite(inputAspeed,155);即电机以(((155/255)12)/12)(电机额定转速)的速度前转。
digitalWrite(intputA_2,HIGH);
digitalWrite(intputA_1,LOW);
analogWrite(inputAspeed,155);即电机以(((155/255)12)/12)(电机额定转速)的速度后转。
具体程序如下:
int inputA_1=8; //(左电机前进(1))数字8即为8号引脚
int inputA_2=9; //左电机后退(2)
int speedA=10;
void setup()
{ pinMode(inputA_1,OUTPUT); // PIN 8 (PWM)
pinMode(inputA_2,OUTPUT); // PIN 9 (PWM)
pinMode(speedA,OUTPUT); // PIN 10 (PWM) }
void go(int SpeedA)
{ if(SpeedA>=0)
{//正转 digitalWrite(inputA_1,HIGH);
digitalWrite(inputA_2,LOW); }else//反转
{ digitalWrite(inputA_2,HIGH);
digitalWrite(inputA_1,LOW); }
analogWrite(speedA,SpeedA);
}void loop()
{go(155);//电机以(((155/255)*12)/12)*(电机额定转速)正转
go(-155);//电机以(((155/255)*12)/12)*(电机额定转速)反转}`
- 非使能控制即将使能通道与5V短接(如上图所示),通过调节两个逻辑输入引脚的电压差来调节电机转速,一般来说我们会将其中一个引脚设置为高电平,通过设置两个引脚的电压高低来控制电机正反转。
digitalWrite(intputA_1,HIGH);
analogWrite(intputA_2,155);即电机以(((155/255)12)/12)(电机额定转速)的速度前转。
digitalWrite(intputA_2,HIGH);
analogWrite(intputA_1,155);即电机以(((155/255)12)/12)(电机额定转速)的速度后转。
具体程序如下:
int inputA_1=8; //(左电机前进(1))数字8即为8号引脚
int inputA_2=9; //左电机后退(2)
void setup() {
pinMode(inputA_1,OUTPUT); // PIN 8 (PWM)
pinMode(inputA_2,OUTPUT); // PIN 9 (PWM)
}
void go(int SpeedA){
if(SpeedA>=0){//正转
digitalWrite(inputA_1,HIGH);
analogWrite(inputA_2,SpeedA);
}else//反转
{ SpeedA=0-SpeedA;
digitalWrite(inputA_2,HIGH);
analogWrite(inputA_1,SpeedA);
}
}
void loop()
{go(155);//电机以(((155/255)*12)/12)*(电机额定转速)正转
go(-155);//电机以(((155/255)*12)/12)*(电机额定转速)反转
}
当然可以使用其他的模块来驱动电机例如TB6612。这些需要同学自己去探索。