微秒不是刻度
Arduino C++setPWM(ch, on, off) 接收的是刻度,不是微秒:在 50 Hz 下,一个刻度是 20000 / 4096 µs。初始代码把 1500 当成微秒发出去,还漏掉了 setPWMFreq(50)。写好 ticksFor(),让 1500 µs 变成约 307 个刻度,600 约 123,2400 约 492,并把帧设为 50 Hz。
检查
- 尚未运行能运行
- 尚未运行用 setPWMFreq(50) 把帧设为 50 Hz
- 尚未运行1500 µs 换算成 306-308 个刻度
- 尚未运行600 µs 换算成 122-124 个刻度
- 尚未运行2400 µs 换算成 490-493 个刻度
- 尚未运行通道 0 在 50 Hz 的帧里发出 1500 µs 的脉冲
提示
- ticks = us x 4096 / 20000。先乘后除,否则小数部分会丢掉。
- 1500 x 4096 超过 600 万,在 Nano 上 int 放不下:先转换成 uint32_t。
- pwm.setPWMFreq(50); 紧跟在 pwm.begin(); 后面。