Нужна помощь в создании 2 PWM-сигналов
Мой проект заключается в использовании Arduino для управления двумя электромагнитными клапанами с помощью ШИМ и получения входного сигнала от датчика в качестве обратной связи.
Клапаны направляют поток воды, который приводит в движение гидравлический привод, обнаруживаемый датчиком LVDT.
То, что я хочу, чтобы моя программа позволяла мне устанавливать желаемое смещение в качестве цели, которая заставляет Arduino динамически изменять рабочий цикл шим-сигнала на основе входного сигнала обратной связи, который получает Arduino. Я собираюсь внедрить PID для управления им.
Схема состоит из Arduino, посылающего ШИМ-сигналы на два NPN-МОП-транзистора логического уровня для управления соленоидами, которые питаются от 2 внешних источников 12 В.
В чем мне конкретно нужна помощь, так это в том, как написать ту часть программы, которая позволит мне генерировать 2 ШИМ-сигнала, которые позволят мне изменять частоту шим-волн, чтобы у соленоидов было достаточно времени для переключения, а затем также возможность установить рабочий цикл.
Я начинающий программист, и это мой первый раз, когда я работаю с электроникой. Я просто надеюсь, что кто-нибудь сможет указать мне правильное направление.
3 ответа
Вы можете попробовать использовать мою библиотекуAVR_Slow_PWM, которая может предоставлять следующие функции и генерировать 2 независимых ШИМ-сигнала на любой вывод GPIO. Конечно, только в том случае, если ваша аппаратная конструкция может правильно использовать ШИМ-сигналы.
Эта библиотека позволяет использовать ШИМ-каналы на основе ISR на платах на основе AVR, таких как Mega-2560, UNO,Nano, Leonardo и т.д., Используя ядро AVR для создания и вывода ШИМ любого вывода GPIO. Поскольку в этой библиотеке не используется мощная ШИМ с чисто аппаратным управлением и множеством ограничений, максимальная частота ШИМ в настоящее время ограничена 500 Гц, что по-прежнему подходит для многих приложений в реальной жизни
Просто из интереса: используете ли вы digitalWrite () для своего программного ШИМ?, @Sim Son
Да. digitalWrite() используется всякий раз, когда необходимо внести изменения., @khoih-prog
Последние несколько дней я искал что-то похожее на это приложение, пытаясь подготовить скелет проекта в качестве учебного упражнения для друга с ограниченным опытом программирования. Хотя в принципе библиотека AVR_Slow_PWM выглядит очень хорошо, на практике ей крайне необходим простой пример, генерирующий всего один или два сигнала: ничего умного, просто минимальный код настройки и настройки, аналогичный примеру вентилятора библиотеки TimerOne, и определенно не содержащий никакого обработчика прерываний и т. д. если это действительно необходимо., @Mark Morgan Lloyd
Если вам нужны только два ШИМ-вывода, я предлагаю использовать аппаратную ШИМ с Таймер 1. Библиотека Timer 1 делает этот процесс довольно простым. Он поддерживает частоты от 0,12 Гц до нескольких МГц, хотя разрешение ухудшается выше 7,8 кГц.
По сравнению с решением на основе прерываний аппаратная ШИМ имеет меньшее дрожание и не потребляет циклов процессора. Недостатком является то, что вы будете ограничены 2 каналами, работающими на одной и той же частоте, но это , похоже, не проблема для вашего проекта.
Я согласен, для одного или двух сигналов: обратите внимание на комментарий в исходном коде относительно того, какие выводы можно использовать. Я также хотел бы отметить, что это заслуга Пола в том, что он уважает лицензию на предшествующий код., @Mark Morgan Lloyd
Считать это запоздалым наблюдением больше всего на свете.
Поскольку в гидравлическом контуре нет признаков наличия аккумулятора, а два клапана работают в противофазе, может потребоваться поддерживать как взаимодополняющие коэффициенты ШИМ, так и постоянную относительную фазу.
На первый взгляд кажется, что библиотека TimerOne поддерживает постоянную относительную фазу. Библиотека AVR_Slow_PWM определенно не работает.
Если нет необходимости применять смещение к краям ШИМ, чтобы приспособить клапаны, имеющие разное время открытия и закрытия, то проще всего просто изменить направление переключения одного из полевых транзисторов, при этом оба управляются от одного и того же Сигнал ШИМ (т. е. когда один видит 75 % включенным, другой видит 75 % выключенным).
Если /необходимо/ необходимо применить смещение, то, возможно, лучше вручную закодировать что-то в обработчике прерывания таймера, тем более, что мне сказали, что типичные клапаны должны работать с частотой около 10 Гц, но не намного быстрее: это устраняет большинство стандартных библиотек ШИМ.
- Как использовать SPI на Arduino?
- Библиотека DHT.h не импортируется
- Светодиоды: разница между общим анодом и общим катодом
- Как повторить кусок кода
- Почему эта программа на C++ не может прочитать Serial.write() моего arduino?
- Как изменить переменную при нажатии кнопки, подключенной к контакту 2
- Отображение двоичных данных на светодиодах
- Корпус кнопки и переключателя
С какой частотой вам нужно запускать соленоиды? Если он составляет порядка 10 Гц, 1 Гц или медленнее, вы можете рассмотреть возможность реализации программного ШИМ, а не использования аппаратного ШИМ., @Dave X