黄工无刷电机学习
直播中

刘洋

10年用户 1121经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[问答]

如何控制直流电机?

如何控制直流电机?

回帖(1)

李大帅

2021-10-20 10:48:56
直流电机(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)*(电机额定转速)反转
            }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分