Как исправить эти вырезы в синусоидального

P

praveen_palaparthi

Guest
Привет я работаю по синусоидальной волне UPS.I написали код для генерации синусоидального но получили некоторые пазы, как устранить эти и получить чистый синус волна.Предложи мне, если нужно изменить логику.

 
Зеленый сигнал colur является выходным напряжением, и желтый цвет является зондирование напряжение на контроллер для контроля выходного напряжения .............

 
Цитата:

Предложи мне, если нужно изменить логику.
 
Я извиняюсь здесь логика.

Я разделить половину цикла синусоидального на 36 интервалов и хранить ценности в array.I intialised таймера-0 так, что на каждые 278 микро второе я обновить рабочий цикл, принимая значения от синус table.How я 278 микро второй нормально ... Я взял только половину цикла тем временем период составляет 10 мельница второй разделен на 36 я получил 278 нас.это открытые петли здесь я получаю чисто синусоидальной волне без выемки.
and then i am calculating the error=ref-output
.THen this error is passed through PI euqation then i am sending the corrected duty cycle to registers.

Но когда зондирования вне поставить точку напряжения в точке средства на каждые 278 микро сек Я коррекции рабочего цикла с использованием ПИ equation.I
ч. получения этих шума, как показано в figure.First я измерения выходного напряжения с помощью АЦП, как я с DC от установленных в зондирования напряжения в зондирования напряжение сдвигается до 2,5 вольт от происхождения, как это показано в желтый цвет волны так я substrating этом DC смещение от измеренного выходного напряжения, что является выходным напряжением = измеряются-500,
а затем я расчете ошибки = реф - производства.
Далее эта ошибка через ИП euqation то я направляю исправленным цикл к регистрам.

Здесь псевдокод для коррекции нагрузки этот код выполняется на каждые 278 микро секунды.sine_value = sine_table [sine_table_count];ref_voltage = sine_value;out_voltage_1 = out_voltage-500;если (Half_cycle_count)(out_voltage_1 = ~ out_voltage_1;out_voltage_1 = out_voltage_1 1;)X = ref_voltage-out_voltage_1;z1 = KI * X;Z = z1>> 10;Y = yold (KP * (X-xold)) Z;Duty_cycle = Y>> 6;если (Duty_cycle <0)(Duty_cycle = ~ Duty_cycle;Duty_cycle = Duty_cycle 1;)если (Duty_cycle> 0x1F4)Duty_cycle = 0x1F0;xold = X;yold = Y;

Это то, что я делаю и получаю шум предложить мне, пожалуйста, есть ли какой-либо логики в правильной нагрузке для поддержания постоянной volatge / -10 вольт в 230 вольт.
Извините, но вам необходимо войти в аккаунт это вложение

 
ОК, как представляется, главная проблема в контроллере дизайн.

Там
в основной проблемой при пересечении нулевого разрыва в вашем контроллере.Предположим, что ИП вывода дает правильный рабочий цикл до нулевого пересечения но ненулевое я сигнала.Так как вы инвертирование выходного напряжения, а не синус стол при нулевом пересечения,
то я сигнал имеет значения, начиная от неправильной полярности после пересечения нулевой.Это приводит к нагрузке шага, который устраняется в осциллирующим контроллер ответ в течение нескольких контроллеров выборки intervalls.В качестве дополнительного вопроса, если ИП выходе должно насыщать на нуле (в
связи с фактическим полярности),
то производство положительный вывод вместо.Вы должны использовать информацию half_cycle вместо инвертирования duty_cycle негативных значений.

Это может быть так, что небольшое смещение в результатах измерений напряжения вызывает проблемы, так что он может быть сведен к минимуму путем корректировки произвольное смещение 500.Но в принципе, это неправильно инвертировать ИП контроллер полярность на каждой половине цикла.По крайней мере, вы должны сбросить интегрального сигнала на пересечение нулевой, если вы делаете это именно так.

Вы сообщили, что открытые петли сигнала достаточно хорошо.Так что я чудом, если это необходимо исправить кратковременные выходного напряжения.Вы можете использовать медленный контроллер для вывода вместо RMS.

 
Сэр Я дал вам только выход коррекции частью ОК Я сделаю полный код скажите мне, где моя логика идет wrong.I сдачи только синусоидальный PWM поколения с замкнутым циклом, пожалуйста, помогите мне в развитии логики.
Это таймер-0 обычных который генерирует sinuoidal PWM я не упоминается intialisation части.ACDC interruupt недействительным (недействительными)(если (TOIF)(
T0IF = 0;T0CS = 0; / / создано timer0TMR0 = 0x5B;СРП = 0;PS2 = 0;PS1 = 0;PS0 = 1;sine_value = sine_table [sine_table_count];ref_voltage = sine_value;out_voltage_1 = out_voltage-500;если (Half_cycle_count)(out_voltage_1 = ~ out_voltage_1;out_voltage_1 = out_voltage_1 1;)X = ref_voltage-out_voltage_1;z1 = KI * X;Z = z1>> 10;Y = yold (KP * (X-xold)) Z;Duty_cycle = Y>> 6;если (Duty_cycle <0)(Duty_cycle = ~ Duty_cycle;Duty_cycle = Duty_cycle 1;)если (Duty_cycle> 0x1F4)Duty_cycle = 0x1F0;xold = X;yold = Y;PR2 = 0x80; / / 0xA6 0x80 0x80 0x93 0xC0;T2CON = 0x04; / enablint Таймер 2 и prescaler значение = 1:1если (Half_cycle_count) / / позитивный половине цикла(CCPR2L = Duty_cycle>> 2;CCP2CON = ((И Duty_cycle

И 0x03) <<4) 0 x0C;CCP1CON = 0x00;)другое / / Негативный половине цикла(CCPR1L = Duty_cycle>> 2;CCP1CON = ((И Duty_cycle

И 0x03) <<4) 0 x0C;CCP2CON = 0x00;)sine_table_count ;если (sine_table_count> = 0x24)(sine_table_count = 0x00;
если (Half_cycle_count)Half_cycle_count = 0;ещеHalf_cycle_count = 1;)
)
 

Welcome to EDABoard.com

Sponsor

Back
Top