Хотя чтение аналоговых сигналов с использованием Arduino не является проблемой, ситуация может измениться на противоположную, когда вам нужно генерировать фактические аналоговые выходные сигналы с помощью микроконтроллера. В данном материале вы узнаете, почему стандартная функция analogWrite не то, что нужно в идеале, и мы рассмотрим другие варианты для создания правильных аналоговых сигналов, используя вашу любимую Arduino-совместимую плату разработки.
К сожалению, генерирование фактических аналоговых выходов с большинством плат Arduino не так просто, как вызов функции analogWrite. В то время как некоторые платы (такие как Arduino Nano 33 IOT) поставляются с возможностями цифро-аналогового преобразователя (DAC), большинство популярных Arduino (таких как UNO) не имеют такого. В результате вызов функции analogWrite на выводе, который не имеет надлежащих аналоговых выходных возможностей, приведет к тому, что Arduino генерирует цифровой сигнал, широтно-импульсной модуляцией (ШИМ). Этот сигнал ШИМ затем имеет коэффициент заполнения пройденного аналогового значения. Так, например, если вы хотите вывести значение 128, используя функцию analogWrite с разрешением восьми битов на выводе, который не имеет надлежащих аналоговых выходных возможностей, прошивка Arduino будет генерировать сигнал ШИМ с коэффициентом заполнения примерно 50%.

В то время как этот подход работает отлично для простых задач, таких как включение светодиода или управление двигателем, ШИМ-сигналы не используются с реальными аналоговыми входами других устройств, поскольку данные сигналы являются цифровыми.
Некоторые платы Arduino имеют встроенный преобразователь ЦАП, который может взять несколько бит и генерировать правильные аналоговые выходные сигналы. Следующие официальные платы Arduino поддерживают фактические аналоговые выходы: все платы Arduino MKR, Nano 33 IoT, все платы Zero. Следовательно, самый простой способ добавления фактических аналоговых выходов к проекту – использовать одну из поддерживаемых плат Arduino с реальными аналоговыми выходами. Тем не менее, существует множество других совместимых с Arduino устройств, таких как Seeeduino xiao, которые также имеют встроенный ЦАП.
Вы можете использовать внешний модуль ЦАП или шилд для Arduino, если ваш проект требует определенного Arduino, у которого нет встроенного ЦАП. Многие из этих модулей имеют высокое разрешение от десяти до двенадцати битов. Однако, чтобы не использовать все цифровые контакты ввода/вывода Arduino, эти модули часто используют другие методы связи, например, I2C, чтобы получить биты, используя только несколько линий цифровой связи. Такие модули внутренне преобразуют передаваемое значение в напряжение, которое напоминает входное значение перед генерацией правильного аналогового выходного сигнала. Например, MCP4725 – это популярный 12-битный ЦАП, доступный в удобном, небольшом корпусе.

Наконец, вы также можете разработать и создать свою цепь ЦАП для вашего проекта Arduino. Этот подход идеально подходит для более опытных пользователей и проектов, где экономическая эффективность важнее точности. В зависимости от реализации вы можете сэкономить несколько сотен рублей, внедрив простую схему ЦАП, такую как стандартная цепочка резисторов R-2R. Тем не менее, более сложные решения могут также использовать выделенный чип ЦАП, например, MCP4725.

Вы можете выбрать из нескольких вариантов при поиске способов добавить фактические возможности аналоговых выводов в ваши проекты Arduino. Самый простой метод-использовать Arduino или любую совместимую плату, которая включает в себя цифровой преобразователь (ЦАП). Если это невозможно, вы можете использовать внешний модуль ЦАП или шилд. Наконец, создание пользовательского ЦАП является вариантом, особенно когда решение должно быть рентабельным, а точность не имеет первостепенного значения.
© digitrode.ru