我正在处理基于 arduino mega 的四轴飞行器,并试图为 4 个电机制作 PWM 频率 - 每个电机 400hz。
我发现了一个有趣的解决方案,其中使用 4 个 ATmega2560 16 位定时器来控制 4 个带 PWM 的 ESC,因此它可以达到 400hz 的频率。700 到 2000µs 是 ESC 处理的正常脉冲宽度。
1 秒/REFRESH_INTERVAL = 1/0.0025 = 400hz。
this is servo.h lib:
#define MIN_PULSE_WIDTH 700 // the shortest pulse sent to a servo
#define MAX_PULSE_WIDTH 2000 // the longest pulse sent to a servo
#define DEFAULT_PULSE_WIDTH 1000 // default pulse width when servo is attached
#define REFRESH_INTERVAL 2500 // minimum time to refresh servos in microseconds
#define SERVOS_PER_TIMER 1 // the maximum number of servos controlled by one timer
#define MAX_SERVOS (_Nbr_16timers * SERVOS_PER_TIMER)
问题是要使其工作每个 PWM 应由 1 个 16 位定时器控制。否则,比如说,1 个计时器上的 2 个 escs 将提供 200hz。所以所有的 16 位定时器都忙于控制 4 个 ESC,但我仍然需要从接收器读取输入 PPM。为此,我至少需要一个我不再拥有的 16 位计时器。
它仍然是一个 8 位定时器空闲位,它只能读取 0..255 个数字,而正常的数字 escs 操作是 1000..2000 等等。
那么如果我对 pwm 和 ppm 读数都使用相同的 16 位计时器会发生什么?它会起作用吗?会不会大幅度降低速度?
我有 arduino 与 Raspberry Pi 一起工作,它控制数据过滤、调试和其他东西,将 ppm 读数移动到 Raspberry 是否更好?