Как сгенерировать 3 сигнала ШИМ

У меня 2560 мегапикселей, и я хочу генерировать 3-фазный ШИМ-сигнал с частотой 62,5 кГц, синхронизированный и сдвинутый на 120 градусов друг от друга.

Мне это нужно для 3-фазного повышающего преобразователя с расщепленной катушкой (или даже изолированного обратноходового преобразователя) с 3-фазным трансформатором, соединенным с катушкой индуктивности. Так что мне не нужна таблица синусоиды, как здесь, а на самом деле, прямоугольный выход PWM, от 3 синхронизированные цифровые контакты с выбранным рабочим циклом. Как мне это сделать?

, 👍0

Обсуждение

Насколько точной должна быть разность фаз? Достаточно ли (0°, ±119,53°)? Если нет, подойдет ли частота 62,745 кГц? Какой рабочий цикл вы хотите?, @Edgar Bonet

@EdgarBonet Привет. Вероятно, лучше придерживаться 2-х или 4-х фазных, так как их легче разделить. О, и давайте опустим 2-фазный случай, так как его можно решить с помощью аппаратно-белой инвертации (без программного смещения фазы). Все, что я хочу, это способ настроить смещение фазы в Arduino, и вопрос об этом. Все остальное лучше подходит в качестве тем для ee.se. Считайте, что это управление затворами транзисторов, (неважно, что дальше), чтобы сосредоточиться только на программном вопросе., @xakepp35


1 ответ


1

Если у вас остались таймеры, я бы (независимо от количества сигналов ШИМ и если вам нужны разные частоты ШИМ) просто выделил бы таймер для выполнения IRQ для управления ими.

Частота IRQ будет зависеть от того, насколько точно вы хотите контролировать рабочий цикл, см. также к комментарию Эдгара Боне.

,

Кажется, это хорошее решение. Тем не менее, я не очень хорошо знаком с низкоуровневыми вещами Arduino. Не могли бы вы расширить свой ответ простым небольшим примером, пожалуйста? Это может быть так же просто, как если бы вы дали 4 вывода: pin[0,1,2,3] и 4 рабочих цикла: dc[0,1,2,3]. Частота фиксирована на уровне 62,5 кГц (или 31 кГц, не имеет значения), а выводы должны обеспечивать синхронизированный ШИМ-сигнал с заданными рабочими циклами и фазовыми смещениями 0, 90, 180 и 270 градусов соответственно. Например, for(i=0; i<4; i++) { AnalogWrite(pin[i], dc[i]); }, но для синхронизированных контактов. Можете ли вы дать такой, как синхронизировать выводы, с фиксированными смещениями фазы и частоты??, @xakepp35

Вау, держись. Постараюсь написать больше позже, но я имею в виду, что если, например, 4 сигнала, разнесенные на 90 градусов, все с рабочим циклом 50%, можно было бы установить время в 8 раз больше частоты (а не 4, так как для одного 50% вам нужны оба «НИЗКИЙ -to-HIGH" и "HIGH-to-LOW". Затем, в зависимости от требований к разрешению/точности рабочего цикла, необходимо увеличить частоту IRQ (которая выше была базовой частотой *8). Программирование Arduino похоже на C, поэтому такие операторы, как % (не знаю термина по-английски, но я имею в виду, например, 107% 100 = 7), пригодятся., @Tuomo