使用 PWM 通过串行端口控制直流电机
在这个例子中,我们的目标是完成一个最常见的任务: *我有一个小型直流电机,我如何使用我的 Arduino 来控制它?*使用 analogWrite()
和 Serial
库,可轻松实现 PWM 和串行通信。
基础
脉冲宽度调制或简称 PWM 是一种使用数字输出模拟模拟信号的技术。这是如何运作的?使用脉冲序列,可以修改每个周期中高电平时间(数字 1,通常为 5V)与低电平时间(数字 0,0V)之间的关系 D(占空比),以产生这两个电平之间的平均电压:
通过使用 Arduino 的 analogWrite(pin,value)
函数,我们可以改变 pin
输出的占空比的 value
。注意,pin
必须进入输出模式,value
必须在 0(0V)
和 255(5V)
之间。介于两者之间的任何值都将模拟比例中间模拟输出。
然而,模拟信号的目的通常与机械系统的控制有关,该机械系统需要比单独的 Arduino 板更多的电压和电流。在本例中,我们将学习如何放大 Arduino 的 PWM 功能。
为此,使用 MOSFET 二极管。本质上,该二极管用作开关。它允许或中断其源极和漏极端子之间的电流。但它不是机械开关,而是具有称为门的第三个端子。一个非常小的电流(<1mA)将打开该门并允许电流流动。这非常方便,因为我们可以将 Arduino 的 PWM 输出发送到此门,从而创建另一个 PWM 脉冲序列,其具有相同的占空比通过 MOSFET,这允许电压和电流破坏 Arduino。
物料清单:你需要构建此示例
- MOSFET 二极管:例如,流行的 BUZ11
- 电机保护二极管: 肖特基 SB320
- 电阻:任何 10K~1M 欧姆
- 电机:典型的小型电机(典型的可以是 12V)
- 与你选择的电机兼容的电源
- 面包板
- 彩色电缆!
- 一个 Arduino,但你已经知道了。
构建
把所有东西放在一为面包板的导轨供电并将 MOSFET 二极管放入其中。将电机连接在正轨和 MOSFET 漏极之间。以相同方式连接保护二极管:MOSFET 漏极和正极轨之间。将 MOSFET 的源极连接到公共接地轨。最后,将 PWM 引脚(我们在本例中使用引脚 10)连接到 MOSFET 的栅极,并通过电阻连接到公共地(我们需要非常低的电流!)。
以下是此构建的外观示例。如果你喜欢这里的计划。
代码
现在我们可以通过串行通信发送值,将 Arduino 连接到计算机,上传代码并控制电机。回想一下,这些值应该是 0 到 255 之间的整数。这个例子的实际代码非常简单。每行都有解释。
int in = 0; // Variable to store the desired value
byte pinOut = 10; // PWM output pin
void setup() { // This executes once
Serial.begin(9600); // Initialize serial port
pinMode(pinOut, OUTPUT); // Prepare output pin
}
void loop() { // This loops continuously
if(Serial.available()){ // Check if there's data
in = Serial.read(); // Read said data into the variable "in"
analogWrite(pinOut, in); // Pass the value of "in" to the pin
}
}
就是这样! 现在,你可以使用 Arduino 的 PWM 功能来控制需要模拟信号的应用,即使功率要求超过了电路板的限制。