使用 Arduino 控制直流电机
直流电机是最简单的电机。它有两个端子或引线。当与电池连接时,电机将旋转,如果连接反转,电机将朝相反方向旋转。如果端子之间的电压降低,电机速度将相应降低。
在本文中,我们将了解如何将直流电机与 Arduino 连接并控制其速度。我们不会考虑反转电机的方向,因为这将需要额外的 IC(H 桥)。在本文的最后,我将提供一些教程的链接,这些教程解释了直流电机的方向反转。
好吧,让我们从电路图开始。
电路图
下面显示了电路图的简化版本 −
如您所见,电机的一个端子直接连接到 +5V,而另一个端子连接到 PN2222 晶体管的集电极。该晶体管的基极通过电阻连接到 Arduino 的引脚 11,而发射极连接到 GND。我们使用晶体管是因为电机所需的电流可能比 Arduino 的数字引脚所能处理的电流大得多。使用 Arduino 引脚控制晶体管的基极可确保来自 Arduino 数字引脚的小电流可以控制电机的大得多的电流。请注意,如果您的电机消耗的电流比 USB 所能提供的电流大得多,您可能必须使用壁式适配器而不是 USB 为 Arduino 供电。
晶体管充当开关。当引脚 11 达到最大电压时,开关将完全关闭,电机将在其端子(Vcc 和 GND)之间经历最大电压差,并将全速旋转。当引脚 11 的 PWM 占空比减小时,开关将部分关闭(即从某个时间打开并在剩余时间内关闭,具体取决于占空比),从而在电机端子之间产生较小的视在电压差,从而降低其速度。 PWM 占空比越高,电机转速越高。
电机两个端子之间有一个反向保护二极管,银端(负极)连接至 +5V 线。该二极管可保护 Arduino 和晶体管免受电机断电时可能产生的任何负尖峰电压和相应电流的影响。
唯一的区别是,在上述电路中,晶体管的基极连接到 Arduino 的 PIN 9,而不是 PIN 11。确保无论将基座连接到哪个引脚,您都在代码中正确提及。
示例
代码如下所示 −
#define basePin 11 void setup() { pinMode(basePin, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available()) { int user_input_speed = Serial.parseInt(); if (user_input_speed >= 0 && user_input_speed <= 255) { analogWrite(basePin, user_input_speed); } } }
如您所见,我们将连接到晶体管基极的引脚定义为引脚 11。
在设置中,我们将引脚定义为 OUTPUT 并初始化串行。
在循环中,我们从用户那里获取一个整数,如果它在 0 到 255 之间,我们会相应地设置基极引脚的 PWM 占空比。因此,电机旋转的速度将与用户输入成比例。
如果您有兴趣使用 H 桥改变电机旋转的方向,这里有相同的教程 −
https://www.allaboutcircuits.com/projects/control-a-motor-with-an-arduino/
https://bc-robotics.com/tutorials/controlling-dc-motor-arduino/