Arduino Uno одинаковая частота на ВСЕХ ШИМ-выводах

Я управляю двигателем BLDC с помощью инвертора / драйвера, выполняющего работу по переключению. Мне нужно предоставить 6 сигналов ШИМ для драйвера на одной частоте. Точная частота на самом деле не имеет значения, если она находится в диапазоне от 5 кГц до 10 кГц, а все выводы PWM одинаковы.

В настоящее время я использую Arduino Uno, я не уверен, как запрограммировать каждый вывод PWM (3, 5, 6, 9, 10, 11) для всех той же частоты, что и таймеры (0, 1 и 2) для конкретного контакты имеют разные тактовые частоты.

  • Контакты 5 и 6: управляются таймером 0, базовая частота 62500 Гц
  • Контакты 9 и 10: управляются таймером 1, базовая частота 31250 Гц
  • Контакты 11 и 3: управляются таймером 2, базовая частота 31250 Гц

timer1 и timer2 будут в порядке и могут быть уменьшены до значения предскалера 8 (7812,5 Гц). Не знаете, как получить timer0 на той же частоте?

http://playground.arduino.cc/Main/TimerPWMCheatsheet

Я уверен, что обойти это относительно просто. Можно ли разделить частоту для таймера 0 на число, которое не является значением предварительного масштабирования, скажем, 40?

Заранее спасибо.

Патент

1 ответ

Вы не указали номер чипа для контроллера мотора, но я уверен, что вы не сможете достичь того, чего хотите, с шестью различными таймерами. Проблема в том, что все PWM на разных контактах должны синхронизироваться, а не просто включаться и выключаться в течение необходимого времени.

Вместо этого вы должны использовать один таймер и переключать все выходы при правильной синхронизации. Эта страница имеет начало примера в разделе "Модуляция широтно-импульсной широковещательной синхронизации". Вам придется изменить его, чтобы переключать больше контактов.

Этот пример, вероятно, все еще недостаточно хорош. Вместо этого вы должны использовать подпрограмму обработки прерываний для переключения контактов. Таким образом, ШИМ работает более независимо и позволяет функции цикла делать больше.

Ваша подпрограмма будет привязана к прерыванию сравнения выходных данных по таймеру, и вам придется сохранять значения различных выходов ШИМ в некоторых изменчивых переменных. Регистр сравнения выходов будет настроен на пробуждение для следующего переключения. Когда процедура выполняется, она выполняет переключение и устанавливает регистр сравнения выходных данных для переключателя. Детали синхронизации и синхронизации будут зависеть от таблицы данных для вашего контроллера.

Функция цикла может считывать входы и регулировать изменчивые переменные для изменения скорости двигателя.

Есть также водители, которые делают все это для вас. Все, что вам нужно сделать, это указать направление и скорость, а чип создаст для вас 6 ШИМ.

Другие вопросы по тегам