Синусоидальный инвертор
Я работаю над созданием инвертора чистой синусоидальной волны с использованием Arduino Uno для вывода двух ШИМ-сигналов для верхней и нижней половины волны. В настоящее время я вывожу предварительно рассчитанные значения с прерыванием в виде ШИМ. Кажется, это работает, но мне было интересно, есть ли у кого-нибудь отзывы о моем дизайне и есть ли лучший способ сделать это. Мне также нужно будет учесть обратную связь, чтобы изменить максимальный рабочий цикл ШИМ, и я беспокоюсь, что ATMEGA не сможет справиться с этим достаточно быстро.
Если вам нужна дополнительная информация, дайте мне знать, заранее спасибо!
Оллс
таблицу, которую я использую для расчета значений.
р>#include "TimerOne.h"
int duty_cycle;
int x = 0;
// таблица sin_table состоит из значений sin(0-400), умноженных на PWM_PERIOD
// https://docs.google.com/spreadsheets/d/1iyveHnOxIzqg907T6pu4znsJE-6tg40juMihDvU8Tbg/edit?usp=sharing
uint8_t _sin[] = { // Рассчитано для 50 Гц при 200 импульсах на полуволну.
0,0,0,1,1,1,2,2,3,3,3,4,4,5,5,5,6,6,6,7,7,8,8,8,9,9,9,10,10,10,11,11,12,12,12,13,13,13,14,14,14,15,15,15,15,16,16,16,17,17,17,17,18,18,18,19,19,19,19,19,20,20,20,20,21,21,21,21,21,22,22,22,22,22,22,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,23,23,23,23,23,23,22,22,22,22,22,22,21,21,21,21,21,20,20,20,20,19,19,19,19,19,18,18,18,17,17,17,17,16,16,16,15,15,15,15,14,14,14,13,13,13,12,12,12,11,11,10,10,10,9,9,9,8,8,8,7,7,6,6,6,5,5,5,4,4,3,3,3,2,2,1,1,1,0,0,0,0,0,1,1,1,2,2,3,3,3,4,4,5,5,5,6,6,6,7,7,8,8,8,9,9,9,10,10,10,11,11,12,12,12,13,13,13,14,14,14,15,15,15,15,16,16,16,17,17,17,17,18,18,18,19,19,19,19,19,20,20,20,20,21,21,21,21,21,22,22,22,22,22,22,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,23,23,23,23,23,23,23,22,22,22,22,22,22,21,21,21,21,21,20,20,20,20,19,19,19,19,19,18,18,18,17,17,17,17,16,16,16,15,15,15,15,14,14,14,13,13,13,12,12,12,11,11,10,10,10,9,9,9,8,8,8,7,7,6,6,6,5,5,5,4,4,3,3,3,2,2,1,1,1,0,0,0
};
void setup() {
// Режим закрепления и установка низкого уровня.
DDRD = DDRD | B00011000;
PORTD = B00000000;
Timer1.initialize(47);
Timer1.attachInterrupt(pwm);
}
void pwm() {
if (PIND & B00000100) { // Переключатель блокировки
// Нижняя половина или верхняя половина волны, запуск импульса ШИМ
if (x > 200) {
PORTD = B00010000;
} else {
PORTD = B00001000;
}
duty_cycle = _sin[x];
if (duty_cycle > 3) {
delayMicroseconds(duty_cycle);
}
PORTD = B00000000;
x++;
if (x > 400) {
x = 0;
}
}
}
void loop() {}
@olls, 👍0
Обсуждение1 ответ
Лучший ответ:
Комментарий пользователя olls преобразован в ответ:
Я заставил его работать. К сожалению, схема не моя, чтобы делиться ею, но она состояла из нескольких транзисторов для сдвига ШИМ до 20 В, которые затем входили в схему инвертора (сделанную не мной, довольно сложную), которая объединяла два сигнала ШИМ в сигнал переменного тока. Затем был трансформатор и RC-фильтр для сглаживания и усиления ШИМ. Извините, что не могу помочь, но это было давно, и я не сделал все это.
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Генерация частоты ШИМ выше 125 кГц с помощью Arduino Uno
- Увеличить разрядность PWM
- Как вывести истинное аналоговое напряжение на выходной контакт
- ПИД-регулятор для управления скоростью двигателя
- Как управлять 6 шаговыми двигателями с помощью Arduino?
- Не могу контролировать скорость двигателей постоянного тока с помощью analogWrite()
Почему бы не использовать один таймер для ШИМ на выводах, а второй (более медленный) таймер для изменения рабочего цикла в соответствии с синусоидальной волной. Таким образом, вам также не нужно менять код, чтобы иметь другую частоту. Вероятно, вам также потребуется добавить RC-фильтр к выходным контактам и, возможно, повторитель напряжения, чтобы получить стабильный выходной сигнал, независимо от того, какой ток вы потребляете., @Gerben
У меня это заработало. К сожалению, схема не принадлежит мне, но она состояла из нескольких транзисторов для переключения ШИМ до 20 В, которые затем вошли в схему инвертора (созданную не мной, довольно сложную), которая объединила два сигнала ШИМ в переменный ток. сигнал. Затем был трансформатор и RC-фильтр для сглаживания и усиления ШИМ. Извините, я ничем больше не могу помочь, но это было давно, и я не все успел., @olls
http://arduinoprosto.ru/q/23842/three-phase-sine-wave-inverter-using-arduino указывает на статью с некоторыми схемами., @Dave X