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


10

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

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

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

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

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

Ответы:


8

Библиотека серво не использует ШИМ. Когда вы вызываете write (), он вычисляет длительность импульса в микросекундах и сохраняет ее в глобальном массиве. Затем есть один таймер, который регулярно запускает прерывание, которое изменяет выходные сигналы в соответствии с желаемой шириной импульса каждого канала.

Вы можете найти исходный код ниже: ссылка на Github


1
Так это по сути имитирует ШИМ? В чем смысл цифровых выводов с каналами ШИМ?
user41158

2
Обычно сервоимпульсы имеют длительность около 1 мс. Поэтому они должны управляться частотами около 1 кГц, что очень легко генерируется программным обеспечением на любом выходе с микросхемой, работающей на нескольких МГц. Выходы ШИМ AVR генерируются специальным оборудованием и могут достигать частоты ЦП, но количество каналов ограничено. Я предполагаю, что авторы модуля Servo решили использовать один таймер, чтобы обрабатывать столько каналов, сколько выводов, и сохранить оборудование ШИМ для других целей.
Grapsus

1
ШИМ выходов Arduino предназначен для выходов переменной мощности с рабочими циклами от 0 до 100%. Контроллер типа PWM в стиле RC имеет очень ограниченный диапазон рабочих циклов - 1000 мкс при 50 Гц - 5%, 2000 мкс при 50 Гц - 10%. Думайте о ШИМ RC как о «последовательности импульсов», а не как о традиционном «ШИМ».
Джон Уотт

@ user41158 Если у вас есть неограниченное время центрального процессора, вы можете использовать любой цифровой выход , как PWM и управлять ими в программном обеспечении, а не только PWM, теоретически можно создавать цифровые системы связи, написав программу и переключая эти выходы, это называется " битовым стук ". Но на практике процессорное время не безгранично, и аппаратные задачи лучше решать. Для сервоуправления частота ШИМ довольно низкая, поэтому целесообразно использовать программный ШИМ для создания дополнительных выходов.
Jan 盖子

2

6 выводов PWM используют встроенный UART на ATmega328P для получения выходного сигнала. Это делает импульсы очень быстрыми для более качественного «аналогового» выхода. Поскольку сервоприводы общаются с достаточно медленной скоростью, они могут управляться с помощью программных прерываний. Программные прерывания уходят от кода, который вы выполняете, и запускают код, включенный в библиотеку сервосистемы. Этот код использует стандартные средства для изменения состояния выводов. Делая это с помощью прерываний, а не с помощью UART, вы теряете некоторое время на обработку, но получаете возможность управлять большим количеством сервоприводов.


Можете ли вы объяснить (или ссылку на) больше? Как UART используется для ШИМ?
Мартин Томпсон

Я думаю, что было бы лучше сказать, что библиотека PWM может использовать выводы ввода / вывода UART, если это необходимо. библиотека PWM не будет использовать сам UART, но выводы, используемые UART, могут также использоваться в качестве стандартного цифрового ввода-вывода, если это не требуется для UART.
Питер Беннетт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.