Перейти к содержанию
    

Как состряпать алгоритм синусоидального ШИМ?

On 8/4/2023 at 2:36 PM, Сергей Борщ said:

Я тут подумал, может для таблицы в 36 значений вычислить другой размер фазового аккумулятора? Скажем такой: 36*1024=36864:russian_ru:

 

On 8/4/2023 at 2:36 PM, Сергей Борщ said:

Что-то делаете неправильно. Показывайте код.

ISR(TIMER1_OVF_vect)//PWM_ON interrupt
{
 if(!(TIFR & (1<<TOV1)))
   {
    TIFR |= (1<<TOV1);//clear TIM1 Overflow flag
    
   num = akk/(36864/36);//for 36-num 
   //num = akk/(65536/32);//2048 for 32-num table

   if((OCR1A - 127) <= 255) {PORTA &= ~1; }//PWM is ON, LOW key is OFF
   else { PORTA |= 1;}//PWM is OFF, LOW key is ON
   OCR1A = PH1H[num];  //ШИМ 1  
   if((OCR1B - 127) <= 255) {PORTA &= ~2; /*TCCR1A |= (1<<5);*/}
   else { PORTA |= 2;}
   OCR1B = PH2H[num];  //ШИМ 2  
   if((OCR1C - 127) <= 255) {PORTA &= ~4; /*TCCR1A |= (1<<3);*/}
   else { PORTA |= 4;}
   OCR1C = PH3H[num];  //ШИМ 3

   akk += akk_shift;
   }   
}

Вот так выглядят две фазы.

osc.jpg

Но если в строчке

num = akk/(36864/36);

36 заменить на 18, то всё становится всё ОК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 минут назад, MPetrovich сказал:
akk += akk_shift;

А где тут проверка if(akk >= 36864) akk -= 36864; ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 minutes ago, Сергей Борщ said:

А где тут проверка if(akk >= 36864) akk -= 36864; ?

Ой... Вот это я ступил :dash2:

Вставил и всё стало нормально. Очередная Вам  от меня благодарность :thank_you2:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 8/4/2023 at 2:36 PM, Сергей Борщ said:

для частоты, отличной от 1 МГц нужно вручную подстраивать записью константы (которую надо сначала вычитать программатором из сигнатуры) в регистр OSCCAL

Попробовал подстроить частоту, получилось только ещё большее расхождение. Да наплевать, в конце концов. Частотник ставят чтобы изменять частоту вращения асинхронника и точность установки частоты, скажем для насоса, вообще по барабану. Главное, что обеспечит для мотора частотник - это плавный старт от нуля оборотов и, соответственно плавное нарастание момента.

У меня в другом затыка возникла. Мне нужно dead-time обеспечить между верхним и нижним ключом. Я попытался организовать его в прерывании Timer/Counter1 Output Compare A Match Interrupt. По сути, это прерывание в момент окончания PWM Duty Cycle. Я взял и засунул в это прерывание задержку 1мкСек. Но отчего то эта задержка отсутствует при генерации ШИМ. :russian_ru:

Хотя если просто дёргать порт

ISR(TIMER1_COMPA_vect)//Output Compare A (PWM_OFF)interrupt
{
	PORTE=1;
    _delay_us(1);
    PORTE=0;
}

то нормально всё срабатывает - есть импульс примерно 1мкСек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выставил постоянный Duty Cycle и на оба прерывания ISR(TIMER1_OVF_vect) и ISR(TIMER1_COMPA_vect) вставил такие импульсы. Получилась картинка: один луч - выход ОС1А, второй - бит 0 порта Е. На первом луче собственно ШИМ, на втором импульс после входа в первое прерывание + импульс входа во второе прерывание.

Итог меня расстроил. Импульсы сдвинуты от начала и от конца Duty Cycle на одну и ту же величину - примерно на 2,4мкСек. Неужели столько времени требуется для вызова прерывания в ATMega128?

 

IMG_20230807_152210.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

57 минут назад, MPetrovich сказал:

У меня в другом затыка возникла. Мне нужно dead-time обеспечить между верхним и нижним ключом

для нижнего ключа я закидываю в таймер макс. число , но пропадает dead time , тогда я поставил ir 2308 там встроен блок dead time

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пока решил в лоб - тупо вставляю задержку 1мкСек перед установкой в 1  и после сброса в 0 выводов порта управления нижними ключами. Это удлиняет прерывание на 1мкСек, но пропорционально по всему периоду. В итоге вроде как получается прибавка в амплитуде равная 1/32=0,03125 или 3,125% (32мкСек - период ШИМ). Для 300 вольт это 9,375вольта. Не думаю, что это будет критично для мотора. А что скажет уважаемая публика?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

выложите показания с лог. анализатора , и не забывайте про хвосты , на 300 вольтах длинный хвост , вы идёте по моим граблям

Изменено пользователем Oleg.normalniy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, Oleg.normalniy said:

выложите показания с лог. анализатора , и не забывайте про хвосты , на 300 вольтах длинный хвост , вы идёте по моим граблям

 

Анализатор дома. Вот на осциллографе две фазы

IMG_20230807_173642.jpg

Задержка между верхними и нижними ключами 1,4мкСек

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот вам мои показания с лог. анализатора , dead time 0,16275 mc

ГИБРИД.logicdata

5 минут назад, MPetrovich сказал:

Анализатор дома. Вот на осциллографе две фазы

ну на такой фотке не понятно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и даже при таком dead time рука тянется к валерьянке , я вам выложил лог.анализатор , анализируйте

Изменено пользователем Oleg.normalniy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, Oleg.normalniy said:

на такой фотке не понятно

А что увидеть то нужно? Сам dead-time?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, Oleg.normalniy said:

и даже при таком dead time рука тянется к валерьянке

А что за ключи Вы используете, если им такого мёртвого времени не хватает?

1 minute ago, Oleg.normalniy said:

да

Ну вот он 🙂

1691419816003..thumb.jpg.e5efbf3285f3945085aae2fbea306ccb.jpg

5 minutes ago, Oleg.normalniy said:

я вам выложил лог.анализатор , анализируйте

А чем его открывать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...