【问题标题】:Controlling the speed of motors using Arduino Uno without using analogWrite?在不使用analogWrite的情况下使用Arduino Uno控制电机速度?
【发布时间】:2012-10-03 04:36:29
【问题描述】:

我需要控制我的自主Arduino Uno 机器人的速度,但我受到了限制。我不能使用任何 MCU 库,例如analogWrite、来自 MCU(定时器)的任何硬件设备或模块。

我曾想过以非常小的间隔关闭和打开电机并将其置于循环中。但我正在努力寻找一种更有效、更干净的方法。我需要能够将速度控制在正常速度的 75%、50% 和 25%,然后打开和关闭电机,这很复杂。

如何更有效地控制电机的速度?

【问题讨论】:

  • 你为什么被限制?这些限制听起来很荒谬。
  • 好吧,有了你提到的限制,那里没有很多其他选择。以您描述的方式控制电机的速度是最有意义的。您是否允许使用不同种类的电机,或者这也是一种限制?如果没有,为什么不考虑使用步进电机?我对您使用的硬件并不熟悉,您可以从电机位置/角度/其他方面获得什么样的反馈?如果您可以使用 fb,您应该能够更精确地控制您的电机。

标签: arduino microcontroller avr robotics robot


【解决方案1】:

你说你有一些非常严格的条件:

我不能使用任何 MCU 库,例如analogWrite,任何硬件设备或来自 MCU(定时器)的模块。

获取motor controller with a serial interface,每当您想更改速度时,将几个串行字节按位发送给它。您只需将 Arduino 的 GND 连接到控制器的 GND,选择一个 Arduino 引脚作为 TX 线,然后将该引脚连接到控制器的 RX 线。然后使用 digitalWrite 和 delayMicroseconds 对一些串行字节进行 bit-bang。

【讨论】:

  • 不要使用 bit-banging。 Arduino 中使用的 AVR 具有适当的内置 USART(串行转 USB)硬件,绝对应该使用它。作为一般的经验法则,在嵌入式编程的情况下,尽可能多的事情应该由内置硬件完成,软件仿真更昂贵,因此被认为是不好的做法。
  • @H2CO3:请阅读原始问题,上面写着“我不能使用任何 MCU 库,例如analogWrite、来自 MCU(定时器)的任何硬件设备或模块。”因此,我将不胜感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多