使用 PWM 通过串行端口控制直流电机

在这个例子中,我们的目标是完成一个最常见的任务: *我有一个小型直流电机,我如何使用我的 Arduino 来控制它?*使用 analogWrite()Serial 库,可轻松实现 PWM 和串行通信。

基础

脉冲宽度调制或简称 PWM 是一种使用数字输出模拟模拟信号的技术。这是如何运作的?使用脉冲序列,可以修改每个周期中高电平时间(数字 1,通常为 5V)与低电平时间(数字 0,0V)之间的关系 D(占空比),以产生这两个电平之间的平均电压:

StackOverflow 文档

通过使用 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 的栅极,并通过电阻连接到公共地(我们需要非常低的电流!)。

以下是此构建的外观示例。如果你喜欢这里的计划。

StackOverflow 文档

代码

现在我们可以通过串行通信发送值,将 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 功能来控制需要模拟信号的应用,即使功率要求超过了电路板的限制。