Влияет ли изменение частоты ШИМ в Arduino на связь SPI и I2C и помогает ли управлять двигателем постоянного тока?

Я использую Motor Shield на основе L293D для управления двумя двигателями постоянного тока от Arduino Mega 2560. Я использую 5 и 6 вывод PWM для установки скорости каждого двигателя. У меня два вопроса:

  1. Сделает ли увеличение частоты ШИМ (с 500 Гц по умолчанию до максимальной 31 кГц) двигатели более чувствительными? С частотой по умолчанию (кроме шума) двигатели работают выше уровня 130-140 PWM. Ниже 130 они не вращаются, а только издают звуковой сигнал. Также есть небольшая разница между 130 и 255 уровнями. Сделает ли увеличение частоты импульсов их более чувствительными, чтобы я мог запускать их на уровне 32 (1/8 максимальной скорости)?

  2. Если да: будет ли изменение делителя в timer0 (как описано здесь http://arduino.cc/playground/Code/PwmFrequency и здесь http://www.mythic-beasts.com/~markt/ATmega-timers.html ) влияет на интерфейс SPI и I2C? Повлияет ли (и как) это на функцию pulseIn? (Я знаю, что это повлияет на функцию задержки, но я предполагаю, что мне нужно будет изменить масштаб аргумента функции).

Ответы (1)

1) 31 кГц - гораздо более разумная частота ШИМ, чем 500 Гц. Двигатели будут действовать как фильтр нижних частот и, как правило, дадут вам постоянный эквивалент вашей ШИМ, но с очень низкой частотой ШИМ, которая становится рискованной - как вы видели. В общем, вы должны увеличить частоту ШИМ выше полосы пропускания двигателя, иначе он увидит прямоугольную волну, а не постоянное напряжение. 31 кГц находится в пределах диапазона большинства контроллеров двигателей, которые я видел. Как правило, вы хотите, чтобы он был высоким, но не слишком высоким (ВЧ-шум может проникать в другие части схемы и т. д.). Похоже, вы находитесь в хорошем диапазоне с 31 кГц.

2) Это не должно влиять на эти битрейты. Периферийные устройства должны иметь свои собственные делители и скейлеры и должны управляться главными часами, а не периферийным таймером. Однако я не могу говорить с функцией pulseIn.