arduino直流电机

直流电机(DC)

这一期我们来学习如何控制直流电机。
需要材料:Arduino UNO
直流电机——本文以12V额定电机为例
电机驱动——本文以L298N为例
直流电机顾名思意,即可以将直流电转化成机械能的电机,其具有良好的调速性,直流电机的种类又分为许多种,主要由定子与转子组成。市面上常见的直流电机有很多,我们常用的有370电机等。
在这里插入图片描述
接线图如下
在这里插入图片描述

L298N是一款常用的电机驱动器可用于驱动直流电机以及步进电机,内置L298N双H桥直流电机驱动芯片,可采用5—7V电压逻辑驱动,同时板载5V供电可以给UNO板供电,如上图所示以电机输出A为例,可连接两个电机的两个两相,利用PWM调速。控制方向有两种形式:

  1. 使能控制即利用逻辑输入控制电机正反转,通过通道使能控制电机转速;将控制电机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)*(电机额定转速)反转}`
  1. 非使能控制即将使能通道与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。这些需要同学自己去探索。

  • 6
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值