Как получить 6 сигналов ШИМ с фазовым сдвигом 60 градусов?
Как создать 6 сигналов ШИМ с фазовым сдвигом 60 градусов, используя 6 выводов ШИМ Arduino Uno, как показано на рисунке ниже?
@Ahmad Naoum, 👍1
Обсуждение3 ответа
Лучший ответ:
С помощью оборудования это невозможно. Просто потому, что у вас фактически есть только три модуля таймера PWM, каждый с двумя выходами сравнения.
Это означает, что у вас есть три временных развертки, каждая из которых сравнивается с двумя значениями для двух сигналов ШИМ.
Вам потребуется единая основная временная база с шестью независимыми счетчиками со смещением и функцией сравнения для ваших нужд.
Однако это можно (примерно) сделать в программном обеспечении, в зависимости от ваших потребностей. Вы получаете джиттер от программно сгенерированного ШИМ из-за прерываний, мешающих вашему плавному выполнению. Однако у вас есть полный контроль над тем, как генерируется сигнал. Вместо рабочего цикла 0-X вы можете запрограммировать его на рабочий цикл XY. И когда все они взяты из одного и того же значения счетчика, все синхронизируется на 100%.
Могу ли я заставить 3 таймера начать отсчет одновременно?, @Ahmad Naoum
Не то чтобы, нет. Невозможно запустить их в одном и том же экземпляре. Вы могли бы сделать это близко друг к другу, хотя. Однако тогда это не дало бы вам разных фаз., @Majenko
Вы можете инвертировать один из двух выходов ШИМ., @Gerben
Вам нужно будет настроить таймеры с соответствующими значениями TCNTx, прежде чем запускать их одновременно., @Gerben
Вы _можете_ запустить три таймера одновременно, используя «Режим синхронизации таймера/счетчика». См. описание GTCCR (общий регистр управления таймером/счетчиком) в техническом описании., @Edgar Bonet
Используйте таймер для запуска прерывания. Установите таймер на 1/6 от общего цикла ШИМ, чтобы перейти к фазе 60 градусов. Каждый раз, когда срабатывает прерывание, включается следующий канал.
У вас может быть второй таймер и прерывание, чтобы выключить их таким же образом.
Я нашел правильный метод для 6-фазной ШИМ, как запросил ОП. И он может иметь любой рабочий цикл, который вы хотите. Мои ошибочные выводы на 50% только из-за того, что я использовал режим Fast-PWM. Когда я переключился на Phase-PWM (режим 10-PWM в 2560 ARduino), я получил правильные формы волны, такие же, как и хотел OP.
Ниже приведена ссылка на снимок логического анализатора, показывающий 6 фаз от 2560. Частота составляет 500 Гц, но ее легко изменить. Всего для реализации этого результата использовалось 4 таймера. Все использовали режим-10-ШИМ на одной частоте.
Переход на другую дату
Можете ли вы поделиться своим кодом, чтобы другие могли следовать вашему методу?, @RowanP
Пожалуйста, создайте один ответ. если вы используете только одну учетную запись, а не каждый раз новую, вы сможете редактировать свой пост. Я удалил ваши другие частичные ответы., @Juraj
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Генерация частоты ШИМ выше 125 кГц с помощью Arduino Uno
- Увеличить разрядность PWM
- Как вывести истинное аналоговое напряжение на выходной контакт
- ПИД-регулятор для управления скоростью двигателя
- Как управлять 6 шаговыми двигателями с помощью Arduino?
- Синусоидальный инвертор
Какой рабочий цикл? 50%?, @Gerben
Вы также можете использовать прерывание по таймеру, которое вызовет битовый PWM. Это похоже на то, как библиотека сервоприводов отправляет сигналы «ШИМ» на несколько сервоприводов., @Gerben