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

8

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

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

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

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

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

user1265
источник

Ответы:

4

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


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

( Источник )

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

Анонимный пингвин
источник
1
Так это по сути имитирует ШИМ? В чем смысл цифровых выводов с каналами ШИМ?
user1265
@ user1265 Более или менее ... он использует таймеры, которые управляют ШИМ. Что касается точки ШИМ, IIRC ATmega328 имеет схему для повышения эффективности ШИМ.
Анонимный пингвин
2
@ user1265, аппаратный ШИМ "бесплатный", то есть он вообще не влияет на производительность остальной части вашей программы (он просто связывает таймер или, по крайней мере, его часть). Процедуры обслуживания прерываний для эмулированного ШИМ сравнительно дороги. Однако в этом случае частота ШИМ составляет всего около 50 Гц, так что это не слишком трагично (стандартная частота ШИМ в Arduino составляет 31/62 кГц, поэтому ШИМ, например, для освещения при частоте 50 Гц, вероятно, будет довольно мерцательным).
микротерион
What is the point of the digital pins with PWM channels then?- Вы можете получить гораздо более высокие частоты (до 8 МГц) и очень точные рабочие циклы. Это невозможно, когда вы полагаетесь на прерывание, чтобы сделать это для вас.
Ник Гэммон