用arduino驱动直流电机和步进电机,arduino l298n电机驱动模块
chanong
|这次我将介绍如何使用Arduino控制直流有刷电机。
直流有刷电机是最常见的电机之一。我小时候玩的四轮驱动汽车使用的是有刷直流电机。驱动这个直流电机也很容易,如果你接上直流电,电机就会旋转,如果你改变电源的正负极,电机就可以反转。那么如何才能更方便地调节电机转速或者切换电机旋转方向呢?
人们发现,当连接两节电池时,电机的旋转速度比仅连接一节电池时快得多。因此,您只需控制电机的输入电压即可控制直流电机的速度。最常见的方法是使用PWM信号来控制电机。
PWM直流电机控制PWM脉宽调制(PWM)是一种模拟控制方法,根据相应负载的变化来调制晶体管基极或MOS管栅极的偏置以及晶体管或MOS管的导通时间。实现开关稳压电源的输出变化。即使使用条件发生变化,这种方法也可以使电源的输出电压保持恒定,并且在使用微控制器的数字信号控制模拟电路时是一种极其有效的技术。这对应于快速打开和关闭电子设备所施加的平均电压。平均电压取决于占空比,或者周期内信号开启时间与信号关闭时间的比率。
脉宽调制电路图
所以,根据你的电机大小,你可以简单地将Arduino PWM输出连接到晶体管的基极或MOS管的栅极,通过控制PWM输出就可以控制电机的速度。低功耗Arduino PWM信号打开和关闭MOS管的栅极,从而驱动大功率电机。
Arduino驱动直流电机接线图
注意:Arduino 和电机电源必须共用同一地。
H 桥直流电机控制您学**了如何控制电机的速度。下一步是控制电机的正转和反转。要控制旋转方向,只需反转流过电机的电流方向即可。最常见的方法是使用H 桥。 H桥电路包含四个开关元件、晶体管或MOS管,中间有一个电机,形成类似的H形电路。通过同时激活两个特定开关,您可以改变电流方向,从而改变电机的旋转方向。例如,仅打开开关1 和3 将使电机正转,仅打开开关2 和4 将使电机反转。
因此,通过结合PWM和H桥两种方法,可以自由地控制直流电机。事实上,有很多直流电机驱动器具有此功能,L298N 是最常用的模块之一。
L298N 驱动模块L298N 是双H 桥电机驱动器,可以同时控制两个直流电机的速度和方向。该模块可驱动电压为5 至35V、峰值电流高达2A 的直流电机。
模块左右两侧各有两个螺丝端子,用于连接电机A、B。中心螺丝接线端子包含一个接地端子、一个用于电机的5-35V电源端子VCC以及一个可以输入或输出的5V端子。这取决于电机VCC 所使用的电压。该模块具有一个板载5V 稳压器,可以使用跳线启用或禁用。如果电机供电电压高达12V,则可以启用5V稳压器并使用5V引脚作为输出为Arduino板供电。但如果电机电压超过12V,则需要断开跳线,过高的电压可能会损坏板载5V稳压芯片。在这种情况下,5V引脚用作输入,因为它必须连接到5V电源才能使IC正常工作。
接下来是信号端子接线。 EnableA 和EnableB 引脚用于启用和控制电机速度。如果该引脚上有跳线,电机将启动并全速运行。另外,取下跳线帽,向该引脚输入PWM 来控制电机的速度。将此引脚接地可禁用电机。
IN1和IN2引脚用于控制电机A的旋转方向,IN3和IN4用于控制电机B的旋转方向。这些引脚用于切换L298N IC 内部的H 桥。当IN1输入低电平、IN2输入高电平时,电机正转;N1输入高电平、IN2输入低电平时,电机反转。如果两个引脚输入相同,电机将停止。 IN3、IN4 和电机B 也是如此。
Arduino L298N 电机驱动器现在让我们实际连接Arduino。使用电位器控制电机的转速,使用按钮改变旋转方向。电路图如下所示。
硬件设备:
Arduino UNO 控制器x 1298N 电机驱动模块x 1 直流电机x 1 电位器x 1 按钮x 112V 电源x 1 杜邦线x nArduino 线/* Arduino 直流电机控制- PWM | H 桥| L298N */#define enA 9 //电机定义控制端和使能端#define in1 6#define in2 7#define button 4 //定义按钮int rotDirection=0; //定义旋转方向int Pressed=false;void setup() { pinMode(enA , OUTPUT ); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(button, INPUT); //设置初始旋转方向digitalWrite(in1, LOW);digitalWrite(in2, HIGH);}void loop( ) { int PotValue=analogRead(A0); //读取电位器值int pwmOutput=map(potValue, 0, 1023, 0, 255); //将电位器值从0 映射到255analogWrite(enA, pwmOutput ); //PWM 信号输出//读取按键值if (digitalRead(button)==true) { Pressed=!pressed; } while (digitalRead(button)==true); Late(20); //按钮按下后,改变电机转动方向Direction if (pressed==true rotDirection==0) {digitalWrite(in1, HIGH);digitalWrite(in2, LOW); rotDirection=1;lay(20); } //如果按钮按下,改变旋转方向电机if (pressed==false rotDirection==1) {digitalWrite(in1, LOW); digitalWrite(in2, HIGH); rotDirection=0; Late(20); }}此示例程序需要以下定义:首先对所需的引脚和变量进行编程。该设置需要设置引脚模式和电机的初始旋转方向。该循环首先读取电位器的值,并将结果值(0 到1023)映射到PWM 信号的0 到255 值,或PWM 信号的0 到100% 占空比。接下来,使用analogWrite()函数将PWM信号发送到实际驱动电机的L298N板的使能引脚。
接下来,检查按钮是否被按下,如果值为真,则反转in1和in2的状态以改变电机的旋转方向。该按钮充当电机反转按钮,每次按下它都会改变电机旋转方向。








