Как получить 6 сигналов ШИМ с фазовым сдвигом 60 градусов?

Как создать 6 сигналов ШИМ с фазовым сдвигом 60 градусов, используя 6 выводов ШИМ Arduino Uno, как показано на рисунке ниже?

, 👍1

Обсуждение

Какой рабочий цикл? 50%?, @Gerben

Вы также можете использовать прерывание по таймеру, которое вызовет битовый PWM. Это похоже на то, как библиотека сервоприводов отправляет сигналы «ШИМ» на несколько сервоприводов., @Gerben


3 ответа


Лучший ответ:

2

С помощью оборудования это невозможно. Просто потому, что у вас фактически есть только три модуля таймера PWM, каждый с двумя выходами сравнения.

Это означает, что у вас есть три временных развертки, каждая из которых сравнивается с двумя значениями для двух сигналов ШИМ.

Вам потребуется единая основная временная база с шестью независимыми счетчиками со смещением и функцией сравнения для ваших нужд.

Однако это можно (примерно) сделать в программном обеспечении, в зависимости от ваших потребностей. Вы получаете джиттер от программно сгенерированного ШИМ из-за прерываний, мешающих вашему плавному выполнению. Однако у вас есть полный контроль над тем, как генерируется сигнал. Вместо рабочего цикла 0-X вы можете запрограммировать его на рабочий цикл XY. И когда все они взяты из одного и того же значения счетчика, все синхронизируется на 100%.

,

Могу ли я заставить 3 таймера начать отсчет одновременно?, @Ahmad Naoum

Не то чтобы, нет. Невозможно запустить их в одном и том же экземпляре. Вы могли бы сделать это близко друг к другу, хотя. Однако тогда это не дало бы вам разных фаз., @Majenko

Вы можете инвертировать один из двух выходов ШИМ., @Gerben

Вам нужно будет настроить таймеры с соответствующими значениями TCNTx, прежде чем запускать их одновременно., @Gerben

Вы _можете_ запустить три таймера одновременно, используя «Режим синхронизации таймера/счетчика». См. описание GTCCR (общий регистр управления таймером/счетчиком) в техническом описании., @Edgar Bonet


0

Используйте таймер для запуска прерывания. Установите таймер на 1/6 от общего цикла ШИМ, чтобы перейти к фазе 60 градусов. Каждый раз, когда срабатывает прерывание, включается следующий канал.

У вас может быть второй таймер и прерывание, чтобы выключить их таким же образом.

,

3

Я нашел правильный метод для 6-фазной ШИМ, как запросил ОП. И он может иметь любой рабочий цикл, который вы хотите. Мои ошибочные выводы на 50% только из-за того, что я использовал режим Fast-PWM. Когда я переключился на Phase-PWM (режим 10-PWM в 2560 ARduino), я получил правильные формы волны, такие же, как и хотел OP.

Ниже приведена ссылка на снимок логического анализатора, показывающий 6 фаз от 2560. Частота составляет 500 Гц, но ее легко изменить. Всего для реализации этого результата использовалось 4 таймера. Все использовали режим-10-ШИМ на одной частоте.

Переход на другую дату

,

Можете ли вы поделиться своим кодом, чтобы другие могли следовать вашему методу?, @RowanP

Пожалуйста, создайте один ответ. если вы используете только одну учетную запись, а не каждый раз новую, вы сможете редактировать свой пост. Я удалил ваши другие частичные ответы., @Juraj