使用Arduino控制直流电机
直流电机是最简单的电机类型。它有两个端子或引线。连接电池后,电机将旋转;如果反转连接,电机将反向旋转。如果端子上的电压降低,电机的转速也会相应降低。
在本文中,我们将了解如何将直流电机与Arduino接口并控制其速度。我们不会讨论反转电机方向,因为这需要额外的IC(H桥)。在本文结尾,我将提供一些教程链接,这些教程解释了直流电机的反向旋转。
好了,让我们从电路图开始。
电路图
简化的电路图如下所示:
如您所见,电机的其中一个端子直接连接到+5V,另一个端子连接到PN2222晶体管的集电极。该晶体管的基极通过电阻连接到Arduino的11号引脚,而发射极连接到GND。我们使用晶体管是因为电机可能需要的电流远大于Arduino数字引脚所能承受的电流。使用Arduino引脚控制晶体管的基极可以确保Arduino数字引脚的小电流可以控制电机的大电流。请注意,如果您的电机消耗的电流远大于USB所能提供的电流,您可能需要使用电源适配器而不是USB为Arduino供电。
晶体管充当开关。当11号引脚电压达到最大值时,开关将完全闭合,电机在其端子(Vcc和GND)之间将承受最大电压差,并以全速旋转。当11号引脚的PWM占空比降低时,开关将部分闭合(即,根据占空比,有时断开,有时闭合),从而在电机端子之间产生较小的表观电压差,从而降低其速度。PWM占空比越高,电机速度越高。
电机两个端子之间有一个反向保护二极管,银色(负极)端连接到+5V线路。该二极管可保护Arduino和晶体管免受电机断电时可能出现的任何负尖峰电压和相应电流的影响。
另一个版本的电路图来自另一个TutorialsPoint教程,如下所示:
唯一的区别是,在上图电路中,晶体管的基极连接到Arduino的9号引脚,而不是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号引脚。
在setup函数中,我们将引脚定义为OUTPUT并初始化Serial。
在loop函数中,我们从用户那里获取一个整数,如果该整数在0到255之间,我们将相应地设置基极引脚的PWM占空比。因此,电机的旋转速度将与用户输入成正比。
如果您有兴趣使用H桥改变电机旋转方向,以下是一些相关的教程:
https://www.allaboutcircuits.com/projects/control-a-motor-with-an-arduino/
https://bc-robotics.com/tutorials/controlling-dc-motor-arduino/