PWM(PCA9685)驱动舵机(E6001)与电调(WP1625)

脉冲宽度调制(PWM)

脉冲宽度调制Pulse-width modulationPWM),简称脉宽调制,即对输出波形中的脉冲宽度(高电平持续时间)按照需要进行调整,一般情况下 PWM 输出波形的周期是固定的,通过调整一个周期内高电平时间与低电平时间的比值(占空比)便可以驱动如逆变电路、舵机、电调等,至于为什么可以实现 PWM 对这些电路的控制因本文重点不在这里故不再赘述,感兴趣可以自行学习。

PCA9685

PCA9685 是一个 I2C 总线控制的 16 通道 LED 控制器,每个输出都有 12 位分辨率(4096步)固定频率的独立 PWM 控制器,其工作频率可以从典型的 40Hz 到 1000Hz 编程控制,占空比可从 0% 到 100% 进行调节。PCA9685 的工作电源电压范围为 2.3V 至 5.5V,输入输出均为 5.5V 耐受。虽然 PCA9685 为 LED 控制器,但因为它是通过输出 PWM 进行控制,故也可用于控制舵机等由 PWM 控制的器件。

引脚配置(TSSOP28)(6.1 Fig2)

设备地址

PCA9685 的地址由一个固定的最高位 1 以及 6 个硬件地址引脚构成可编程地址,A0~A5 可通过对其拉低或拉高组成最多有64个可能的可编程地址,其中两个地址为“软件复位(0x02)”与“LED 全调用(0xE0)”不可使用,由于按照 I2C 通信协议,器件地址的最低位必须为对读写控制位,故在实际编程中不考虑最低位,即当 A0~A5 全部接地时,PCA9685 的器件地址为 40h (0100 0000)。

从机地址 (7.1.1 Fig4)

输出频率

PCA9685 的输出频率由 PRE_SCALE 寄存器控制对时钟进行预分频,寄存器地址为 FEh ,通过配置这个寄存器便可以修改全部 16 个 PWM 输出通道的频率。

$$ 预分频值=round\left ( \frac{时钟频率}{4096\times 输出频率} \right ) $$

例如使用默认的芯片内部时钟频率为 25MHz,对于输出频率为 200Hz,预分频值即 PRE_SCALE 寄存器中的值应为 30。

$$ 预分频值=round\left ( \frac{25MHz}{4096\times 200Hz} \right ) $$

输出波形

PCA9685 的开启时间和 PWM 占空比由 LEDx_ON 与 LEDx_OFF 两个 12 位寄存器独立控制,这两个寄存器将分别储存一个从 0 到 4095 的值, LEDx_ON 储存开启时间的值, LEDx_OFF 储存关闭时间的值,LEDx 引脚 ON 与 OFF 的时间将与一个 12 位的计数器的值进行比较,该计数器将按照分频后的时钟频率由 000h 0FFFh 连续累加。

LED0 控制寄存器地址 (7.3 Table 3 Register summary)

LEDx_ON 与 LEDx_OFF 又由两个 8 位寄存器组成,因为输出分辨率仅为 12 位,故只使用了低 8 位的全部、高 8 位的后 4 位以及高 8 位的第 4 位(从 0 开始)用来控制该输出引脚的全关或全开。下图为全部 LED 控制寄存器(地址从 FAhFDh)的位描述,其他 16 个引脚(地址从 06h 45h)的 64 个寄存器与之相似。

ALL_LED_ON 与 ALL_LED_OFF 控制寄存器位描述 (7.3.4 Table7)

例如使用 LED0 输出,首先延时 10%,PWM 占空比 20%(LED 开启时间 20%,LED 关闭时间 80%):

  • 延时时间=10%=4096X0.1=409.6≈410=19Ah

由于计数器从 0 开始,在 4095 结束,故将其减去 1,延时时间为 199h即将 LED0_ON_H 设置为 1h,LED0_OFF_L 设置为 99h,其含义为当内部计数器计数数值为 199h 时 LED0 输出高电平。

  • 开启时间=20%=4096X0.2=819.2≈819
  • 关闭时间=延时时间+开启时间=410+819=1228=4CCh

故 LED0_OFF_H 设置为 4h,LED0_OFF_L 设置为 CCh。

LED0 输出波形 (7.3.3 Fig7)

本文仅简单介绍了 PCA9685 的基本用法,更详细的配置描述以及芯片的更多功能请参照数据手册。

驱动代码参考:micropython-adafruit-pca9685Adafruit_CircuitPython_PCA9685

舵机

舵机有三根线:电源线、地线以及信号线。电源线通常为红色,连接 5V 电源,地线通常为黑色或棕色,信号线通常为黄色或白色,由 PWM 信号控制。

PWM 控制

标准舵机脉冲宽度范围为 1ms 到 2ms,通常发送频率为 50Hz,即 1ms 脉冲为 5% 占空比,2ms 脉冲为 10% 占空比,最重要的就是脉冲的长度必须在 1ms 到 2ms 的范围内,对应舵机从 0° 到 180° 的转动角度

PWM 脉宽与舵机转动角度的对应

由于对舵机的教程很多,故这里也不再描述,如果想更加详细了解可以在 Arduino Servo Motors 以及其他教程中进一步学习。

电调 (Hobbywing Quicrun WP 1625)

由于我对电调的了解也并不多,故这里只针对 Hobbywing Quicrun WP 1625 这款电调做简单介绍。

连接示意图

PWM 控制

WP1625 这款电调为有刷电调,可以实现有刷电机的正转、反转以及刹车控制,通过 PWM 信号脉冲时间控制这三种状态以及电机的转速。

与舵机相似,这款电调的控制脉冲宽度为 1ms(全速反转)到 2ms(全速正转)以及 1.5ms(停止),所以这意味着如果使用不同的频率,那么占空比必须调整以获得 1ms 到 2ms 的脉冲。

例如,如果使用 60hz 频率,则 1 ms 脉冲需要 6% (0.05 X 60 / 50 = 0.06) 的占空比,这里将 PCA9685 的频率设置为 60 hz,所以 1 ms 脉冲是 0.06 X 4096 ≈ 246,0.09 占空比的停止脉冲是 0.09 X 4096 ≈ 367,0.12 占空比的全速正转脉冲是 0.12 X 4096 ≈ 492

注意:WP1625 为“双向”模式, 即正反转带刹车模式,提供了倒车功能,该模式通常用于日常训练。此模式采用双击
式倒车方式,即油门摇杆在第一次从中点区域推至反向区域时,电机只是刹车,不会产生倒车动作;当油门摇杆快速回到中立点区域并第二次推至反向区域时(即所谓的“双击”),如果此时电机已停止,则产生倒车动作,如果电机未停止,则不会倒车,仍是刹车,需要再次将油门回到中点并推向反向区才会倒车,这样做的目的是防止车辆行驶过程中因多次点刹而造成误倒车。

对电调更加详细的了解可以参考知乎文章 无人机初级篇系列第 7 讲:电调与PWM信号

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇