Как Arduino Uno может поддерживать до 12 сервоприводов, если у него всего 6 цифровых выводов ШИМ?

Согласно этому:

Библиотека Servo поддерживает до 12 двигателей на большинстве плат Arduino и 48 на Arduino Mega. На платах, отличных от Mega, использование библиотека отключает функцию AnalogWrite() (PWM) на контактах 9 и 10, есть ли на этих контактах сервопривод. На Меге до 12 сервоприводы можно использовать без вмешательства в работу ШИМ; использование Двигатели с 12 по 23 отключат ШИМ на контактах 11 и 12.

Однако согласно этому:

14 контактов цифрового ввода-вывода (из которых 6 обеспечивают выход ШИМ)

Так как же Uno может управлять более чем 6 сервоприводами, если у него есть только 6 цифровых контактов ввода-вывода, которые могут обеспечивать выход ШИМ?

, 👍9


1 ответ


Лучший ответ:

5

Хотя я сам не смотрел источник, в подобных ситуациях обычно используется таймер прерывания 1, который в режиме ШИМ был бы связан с контактами 9 и 10. Это объясняет, почему вы не можете использовать широтно-импульсную модуляцию на этих контактах. Фактически, вы можете использовать любой из трех таймеров для ШИМ на любом цифровом выводе, хотя это не так хорошо, как встроенные параметры ШИМ.


(источник: bansky.net)

(Источник)

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

,

То есть, по сути, это имитирует ШИМ? Какой тогда смысл в цифровых выводах с каналами ШИМ?, @user1265

@user1265 user1265 Более или менее... он использует таймеры, которые управляют ШИМ. Что касается ШИМ, IIRC в ATmega328 имеет схему, позволяющую сделать ШИМ более эффективной., @Anonymous Penguin

@user1265 user1265, аппаратный ШИМ «бесплатен», т.е. он вообще не влияет на производительность остальной части вашей программы (он просто связывает таймер или, по крайней мере, его часть). Обслуживание процедур прерываний для эмулируемой ШИМ обходится сравнительно дорого. Однако в этом случае частота ШИМ составляет всего около 50 Гц, так что это не так уж трагично (стандартная частота ШИМ Arduino составляет 31/62 кГц, поэтому выполнение ШИМ, например, для осветительных приборов на частоте 50 Гц, вероятно, будет довольно мерцающим)., @microtherion

«Какой тогда смысл в цифровых выводах с каналами ШИМ?» — вы можете получить гораздо более высокие частоты (до 8 МГц) и очень точные рабочие циклы. Это невозможно, если вы полагаетесь на прерывание, которое сделает это за вас., @Nick Gammon