Микросхема - Форум инженеров

Проекты, идеи, схемы и разработки
Текущее время: Ср ноя 21, 2018 5:57 pm

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 50 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Ср июл 01, 2015 12:09 am 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
В качестве продолжения темы что была ранее:
>>> "Experiment: Драйвер IR2104, поиск причины кривого синуса"

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

Теперь собирается новая версия, с внесенными изменениями и учётом всех ранее допущенных огрех.
Собирается в неспешном темпе, мини-лабораторная установка инвертора, это экспериментальная установка планируемая для быстрой проверки разных методов управления при формировании синуса.
- заложен IR2110 (для первого ряда экспериментов), уже прицеплены выбранные IGBT.
- алгоритм с программой для управления будет базироваться на DSP - TMS320F28027

Собирается только небольшая часть от планируемого в будущем, поскольку она пока самая ответственная.

В качестве конструкции, будут использоваться только подручные средства, по смыслу, больше напоминающие макетирование.
Вложение:
20150624_014338_s.png
20150624_014338_s.png [ 612.39 KiB | Просмотров: 24437 ]


Когда закончу сборку этой установки не ясно и самому.
Оно вроде как ни кому не нужно и делается лично для души.
Когда запущу, то можно будет более безопасно и поэкспериментировать. ))

Симулирование схемы
Вложение:
psim_00.JPG
psim_00.JPG [ 109.52 KiB | Просмотров: 23075 ]


врнменные диаграммы напряжений, токов, мощностей
Вложение:
psim_01.JPG
psim_01.JPG [ 134.71 KiB | Просмотров: 23075 ]

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Ср июл 15, 2015 11:14 pm 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
Вот ещё - несколько фоток.
Прицепленные IGBT
Вложение:
SAM_0949s.jpg
SAM_0949s.jpg [ 179.4 KiB | Просмотров: 24428 ]


Вид сбоку, иной ракурс
Вложение:
SAM_0950s.jpg
SAM_0950s.jpg [ 172.47 KiB | Просмотров: 24428 ]


Этот ферритовый сердечник от монитора планируется в выход инвертора :)
Вложение:
SAM_0951s.jpg
SAM_0951s.jpg [ 87.54 KiB | Просмотров: 24428 ]


размеры
Вложение:
SAM_0952s.jpg
SAM_0952s.jpg [ 75.34 KiB | Просмотров: 24428 ]

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Пн июл 20, 2015 10:40 pm 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
Код постепенно пишется, и вот запущен ADC + Timer0 + LCD (Nokia 5110)
Таким образом подцепившись на PWM, уже можно что-то измерять и показать на дисплее от Nokia 5110 как на осциллографе.
* Приципил фотку:
Щас это грубейший вариант, демонстрирующий принцип и не более.
* На всякий случай, в будущем пригодится, запостил фотку на ибекс с большим разрешением:
Вложение:
SAM_0957_small.jpg
SAM_0957_small.jpg [ 120 KiB | Просмотров: 24420 ]

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Чт сен 10, 2015 11:23 pm 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
Вот ещё один промежуточный вариант.
Тут сейчас лишь симуляция синус-сигнала - то есть это не реальный сигнал, а лишь значения синус таблицы для тестирования и отладки методик отображения на дисплее.
Время внизу дисплея - это время семплирования канала АЦП, оно регулируемое, щас регулируется и задаётся резистором слева на фото.
Пытаюсь приготовить кодовую инфраструктуру для правильного отображения захваченного сигнала.
по сути делаю микро-осциллограф на борту этого же чипа, чтоб можно было анализировать генерируемые и производные сигналы в цепях инвертора.

....
Добавлено через несколько дней
....

Теперь делаю инициализацию для частоты синуса Fgrid = 50 Hz при заполнении частотой коммутации Fsw = 54.35 KHz

Код инициализации
Код:
#define PWM_FREQ_SINUS     ( 50 )  // HZ
#define STEPS              ( 360 ) // 360 degree in sinus
#define PWM2_FREQ_SWITCH   18000/3   // ( PWM_FREQ_SINUS * STEPS )
#define PWM2_FREQ_PERIOD   ( CPU_FREQ / PWM2_FREQ_SWITCH )

/* ==========================================================================
* NAME - Init_PWM
* IN   - void
* OUT  - void
* RET  - t_error err
   ========================================================================== */
t_error Init_PWM (void) {
    // Initalize GPIO
    GPIO_setPullUp(myGpio, GPIO_Number_0, GPIO_PullUp_Disable);
    GPIO_setPullUp(myGpio, GPIO_Number_1, GPIO_PullUp_Disable);
    GPIO_setMode(myGpio, GPIO_Number_0, GPIO_0_Mode_EPWM1A);
    GPIO_setMode(myGpio, GPIO_Number_1, GPIO_1_Mode_EPWM1B);

    GPIO_setPullUp(myGpio, GPIO_Number_2, GPIO_PullUp_Disable);
    GPIO_setPullUp(myGpio, GPIO_Number_3, GPIO_PullUp_Disable);
    GPIO_setMode(myGpio, GPIO_Number_2, GPIO_2_Mode_EPWM2A);
    GPIO_setMode(myGpio, GPIO_Number_3, GPIO_3_Mode_EPWM2B);

    GPIO_setPullUp(myGpio, GPIO_Number_4, GPIO_PullUp_Disable);
    GPIO_setPullUp(myGpio, GPIO_Number_5, GPIO_PullUp_Disable);
    GPIO_setMode(myGpio, GPIO_Number_4, GPIO_4_Mode_EPWM3A);
    GPIO_setMode(myGpio, GPIO_Number_5, GPIO_5_Mode_EPWM3B);

    // Setup a debug vector table and enable the PIE
    PIE_setDebugIntVectorTable(myPie);
    PIE_enable(myPie);

    // Register interrupt handlers in the PIE vector table
    PIE_registerPieIntHandler(myPie, PIE_GroupNumber_3, PIE_SubGroupNumber_1, (intVec_t)&epwm1_timer_isr);
    PIE_registerPieIntHandler(myPie, PIE_GroupNumber_3, PIE_SubGroupNumber_2, (intVec_t)&epwm2_timer_isr);
    PIE_registerPieIntHandler(myPie, PIE_GroupNumber_3, PIE_SubGroupNumber_3, (intVec_t)&epwm3_timer_isr);

    CLK_disableTbClockSync(myClk);

    //InitEPwm1();
    //InitEPwm2();
    //InitEPwm3();

    // EPWM Module 2 config
    CLK_enablePwmClock(myClk, PWM_Number_1);
    CLK_enablePwmClock(myClk, PWM_Number_2);

    // Setup TBCLK myPwm1
    PWM_setCounterMode    (myPwm1, PWM_CounterMode_UpDown); // Count up
    PWM_disableCounterLoad(myPwm1);                         // Disable phase loading
    PWM_setHighSpeedClkDiv(myPwm1, PWM_HspClkDiv_by_1);     // Clock ratio to SYSCLKOUT
    PWM_setClkDiv         (myPwm1, PWM_ClkDiv_by_1);        // Slow just to observe on the scope

    // Setup TBCLK myPwm2
    PWM_setCounterMode    (myPwm2, PWM_CounterMode_UpDown); // Count up
    PWM_disableCounterLoad(myPwm2);                         // Disable phase loading
    PWM_setHighSpeedClkDiv(myPwm2, PWM_HspClkDiv_by_1);     // Clock ratio to SYSCLKOUT
    PWM_setClkDiv         (myPwm2, PWM_ClkDiv_by_1);        // Slow just to observe on the scope

    //=====================================================================
    // Config
    //=====================================================================
    // Initialization Time
    //========================
    // EPWM Module 1 config
    EPwm1Regs.TBPRD = PWM2_FREQ_PERIOD; //500; // Period = 1201 TBCLK counts
    EPwm1Regs.CMPA.all = PWM2_FREQ_PERIOD/2; //100; // Set 50% fixed duty for EPWM1A
    EPwm1Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zero
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Asymmetrical mode
    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Master module
    EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // Sync down-stream module
    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=Zero
    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=Zero
    EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // set actions for EPWM1A
    EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
    EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module
    EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Hi complementary
    EPwm1Regs.DBFED = 50; // FED = 50 TBCLKs initially
    EPwm1Regs.DBRED = 70; // RED = 70 TBCLKs initially

    // EPWM Module 2 config
    EPwm2Regs.TBPRD = PWM2_FREQ_PERIOD; //500; // Period = 1201 TBCLK counts
    EPwm2Regs.CMPA.half.CMPA = PWM2_FREQ_PERIOD/2; //300; // Set 50% fixed duty EPWM2A
    EPwm2Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zero initially
    EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Asymmetrical mode
    EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Slave module
    EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
    EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // sync flow-through
    EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=Zero
    EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=Zero
    EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET; // set actions for EPWM2A
    EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;
    EPwm2Regs.AQCTLB.bit.ZRO = AQ_CLEAR; // set actions for EPWM2A
    EPwm2Regs.AQCTLB.bit.CAU = AQ_SET;
    EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module
    EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Hi complementary
    EPwm2Regs.DBFED = 30; // FED = 30 TBCLKs initially
    EPwm2Regs.DBRED = 40; // RED = 40 TBCLKs initially

    // Run Time (Note: Example execution of one run-time instant)
    //============================================================
    EPwm2Regs.TBPHS.all = 100;//1200-300; // Set Phase reg to 300/1200 * 360 = 90 deg
    EPwm1Regs.DBFED = 0; //FED1_NewValue; // Update ZVS transition interval
    EPwm1Regs.DBRED = 0; //RED1_NewValue; // Update ZVS transition interval
    EPwm2Regs.DBFED = 0; //FED2_NewValue; // Update ZVS transition interval
    EPwm2Regs.DBRED = 0; //RED2_NewValue; // Update ZVS transition interval
    EPwm1Regs.CMPB = 100; // adjust point-in-time for ADCSOC trigger

    // Interrupt where we will modify the deadband
    PWM_setIntMode  (myPwm1, PWM_IntMode_CounterEqualZero); // Select INT on Zero event
    PWM_enableInt   (myPwm1);                               // Enable INT
    PWM_setIntPeriod(myPwm1, PWM_IntPeriod_ThirdEvent);     // Generate INT on 3rd event
    PWM_setIntMode  (myPwm2, PWM_IntMode_CounterEqualZero); // Select INT on Zero event
    PWM_enableInt   (myPwm2);                               // Enable INT
    PWM_setIntPeriod(myPwm2, PWM_IntPeriod_ThirdEvent);     // Generate INT on 3rd event

    CLK_enableTbClockSync(myClk);

    // Initalize counters:
    EPwm1TimerIntCount = 0;
    EPwm2TimerIntCount = 0;
    EPwm3TimerIntCount = 0;

    // Enable CPU INT3 which is connected to EPWM1-3 INT
    CPU_enableInt(myCpu, CPU_IntNumber_3);

    // Enable EPWM INTn in the PIE: Group 3 interrupt 1-3
    PIE_enablePwmInt(myPie, PWM_Number_1);
    PIE_enablePwmInt(myPie, PWM_Number_2);
    PIE_enablePwmInt(myPie, PWM_Number_3);

    // Enable global Interrupts and higher priority real-time debug events
    CPU_enableGlobalInts(myCpu);
    CPU_enableDebugInt(myCpu);

    return E_OK;
}
/* ========================================================================== */

...
...
...

/* ==========================================================================
* NAME - epwm2_timer_isr
* IN   - void
* OUT  - void
* RET  - void
   ========================================================================== */
interrupt void epwm2_timer_isr (void) {
#if (1==USE_F28027_PWM)
#if (1==PWM2_INT_ENABLE)
   static uint16_t cnt=0;

   //EPwm2TimerIntCount++;

    //if (EPwm1TimerIntCount==0) EPwm1TimerIntCount = 1;
    //PWM_setPeriod(myPwm1, EPwm1TimerIntCount );
   if ( cnt < 360 ) {
      //SinusRMS += sinus[cnt];
      //PWM_setPeriod(myPwm1, sinus[cnt] );
       PWM_setCmpA(myPwm2, /*EPWM2_MIN_DB+*/1*sinus360_1[cnt]);
       PWM_setCmpB(myPwm2, /*EPWM2_MIN_DB+*/1*sinus360_1[cnt]);
      cnt++;
   } else {
      cnt=0;
   }

   // Clear INT flag for this timer
    PWM_clearIntFlag(myPwm2);

    // Acknowledge this interrupt to receive more interrupts from group 3
    PIE_clearInt(myPie, PIE_GroupNumber_3);
#endif //(1==PWM2_INT_ENABLE)
#endif //(1==USE_F28027_PWM)
}
/* ========================================================================== */

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Пт сен 11, 2015 9:59 am 
Не в сети
Звание: Професор
Аватар пользователя

Зарегистрирован: Вт апр 10, 2007 8:13 am
Сообщений: 3064
Откуда: Харьков
Один такт генерации в коде пропускается:
cnt==359 - отрабатывает, cnt становится 360;
cnt==360 - счетчик обнуляется, но компараторы PWM не обновляются.

Исправить можно так:
Код:
      //SinusRMS += sinus[cnt];
      //PWM_setPeriod(myPwm1, sinus[cnt] );
       PWM_setCmpA(myPwm2, /*EPWM2_MIN_DB+*/1*sinus360_1[cnt]);
       PWM_setCmpB(myPwm2, /*EPWM2_MIN_DB+*/1*sinus360_1[cnt]);

       if (++cnt >= STEPS )
           cnt=0;

_________________
Молчание — знак нежелания выражать несогласие.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Пн сен 14, 2015 8:25 pm 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
dimich писал(а):
Один такт генерации в коде пропускается:
cnt==359 - отрабатывает, cnt становится 360;
cnt==360 - счетчик обнуляется, но компараторы PWM не обновляются.

Исправить можно так:
Код:
      //SinusRMS += sinus[cnt];
      //PWM_setPeriod(myPwm1, sinus[cnt] );
       PWM_setCmpA(myPwm2, /*EPWM2_MIN_DB+*/1*sinus360_1[cnt]);
       PWM_setCmpB(myPwm2, /*EPWM2_MIN_DB+*/1*sinus360_1[cnt]);

       if (++cnt >= STEPS )
           cnt=0;

Как ни странно, но на осциллографе этого артефакта не видно )))
Протестирую.

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Пн сен 14, 2015 9:19 pm 
Не в сети
Звание: Професор
Аватар пользователя

Зарегистрирован: Вт апр 10, 2007 8:13 am
Сообщений: 3064
Откуда: Харьков
idea писал(а):
dimich писал(а):
Один такт генерации в коде пропускается:
cnt==359 - отрабатывает, cnt становится 360;
cnt==360 - счетчик обнуляется, но компараторы PWM не обновляются.

Как ни странно, но на осциллографе этого артефакта не видно )))


На 360 отсчетах отставание частоты получается 0.28%. Не удивительно, что незаметно :)
Но все же, имхо, алгоритм по возможности должен быть точным.

_________________
Молчание — знак нежелания выражать несогласие.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Вт сен 15, 2015 11:29 pm 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
Теперь об управлении силовой части инвертора.
В данном случае это - H-Bridge, полно-мостовая схема включения.
Однако стоит сразу упомянуть, на эту классическую схему H-Bridge существует много алгоритмов управления, и множество из них запатентованы.
Что бы было понятно о чём идет речь, непосвященным в глубины этих технологий, стоит привести самый простой документ с описанием и примерами. Вот один из примеров от TI, где разработан (местами аналогичный) инвертор и есть внятные описания, покрывающие многие вопросы.
http://www.ti.com/lit/an/slaa602/slaa602.pdf
Тут видно как должен управляться H-Bridge. В моем случае, как раз я тоже начну работу с инвертором с самого простого метода управления (усложнять буду потом), так как и показано в документации от TI, на странице 25..26.

Соответственно, сигналы управления на затворе должны быть сформированы правильно:
- по времени длительности импульса (особенно обратить внимание на выход с драйвера)
- по времени dead-time
- по амплитуде (особенно обратить внимание на выход с драйвера)
(Правда тут чуток другое включение из-за использование 2-х разных типов транзисторов, по этому будет отличаться от моего случая)

Как видно, между тем что мне нужно получить, и тем что я уже показывал выше, есть довольно большая разница.
Поэтому, я буду пере-инициализировать и подготавливать новый код к новому результату init() & irq() функций. Они должны будут схожи с теми что от TI.
В общем-то в них то и есть вся суть.
Вместо UP (так было) нужно теперь будет использовать UP-DOWN (будет) режим.
Изображение
http://www.ti.com/lsds/ti/microcontroll ... ntrol.page

И постепенно нужно подтягивать теорию.
Вспоминать, да и местами учить с нуля методы управления алгоритмом Clark и Park преобразований (CLARKE and PARK transforms)
Пример - http://www.ti.com/lit/wp/sprt528a/sprt528a.pdf. Хоть у меня инвертор и не 3-х фазный, не смотря на это, некоторые аспекты метода управления c Clark&Park-преобразованиями нужны для стабилизации по цепям обратной связи частоты и фазы генерируемого сигнала.

*****************************************************************

этап инициализации:
Код:
#define PWM_UP_MODE        0
#define PWM_DOWN_MODE      1
#define PWM_UP_DOWN_MODE   2
#define PWM_FREQ_SINUS     ( 50 )  // HZ
#define STEPS              ( 360 ) // 360 degree in sinus
#define PWM2_FREQ_SWITCH   ( PWM_FREQ_SINUS * STEPS ) / (2+1)
#define PWM2_FREQ_PERIOD   ( CPU_FREQ / PWM2_FREQ_SWITCH )/PWM_UP_DOWN_MODE

...

    // Initialization Time
    // = = = = = = = = = = = = = = = = = = = = = = = =
    EPwm2Regs.TBPRD = PWM2_FREQ_PERIOD; //600; // Period = 2'600 TBCLK counts
    EPwm2Regs.CMPA.half.CMPA = PWM2_FREQ_PERIOD; //350; // Compare A = 350 TBCLK counts
    EPwm2Regs.CMPB = PWM2_FREQ_PERIOD; //400; // Compare B = 400 TBCLK counts
    EPwm2Regs.TBPHS.all = 0; // Set Phase register to zero
    EPwm2Regs.TBCTR = 0; // clear TB counter
    EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Symmetric
    EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Phase loading disabled
    EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
    EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
    EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // TBCLK = SYSCLKOUT
    EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
    EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR = Zero
    EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR = Zero
    EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;
    EPwm2Regs.AQCTLA.bit.CAD = AQ_SET;
    EPwm2Regs.AQCTLB.bit.CBU = AQ_SET;
    EPwm2Regs.AQCTLB.bit.CBD = AQ_CLEAR;
    // Run Time
    // = = = = = = = = = = = = = = = = = = = = = = = =
    //EPwm2Regs.CMPA.half.CMPA = Duty1A; // adjust duty for output EPWM1A
    //EPwm2Regs.CMPB = Duty1B; // adjust duty for output EPWM1B


Анализ причины проблемы...
Тут видно что есть пересекающиеся уровни между каналами PWM_A и PWM_B, такого быть не должно...
И нужно явно найти причину и исправить
Эта проблема из-за того когда пытался увеличить duty методом умножения на 2:
Код:
   PWM_setCmpA(myPwm2, /*EPWM2_MIN_DB+*/2*sinus360_1[cnt]);
   PWM_setCmpB(myPwm2, PWM2_FREQ_PERIOD-/*EPWM2_MIN_DB+*/2*sinus360_1[cnt]);

...а вот так всё хорошо:
Код:
   PWM_setCmpA(myPwm2, /*EPWM2_MIN_DB+*/1*sinus360_1[cnt]);
   PWM_setCmpB(myPwm2, PWM2_FREQ_PERIOD-/*EPWM2_MIN_DB+*/1*sinus360_1[cnt]);


Синус... Почти чистенький синус виден :)
Тут виден ВЧ звон, это потому что, я уменьшил емкость конденсатора на интеграторе из RC-цепочки и порой осцил так интерпретирует мини выбросы.

А вот FFT спектр посмотреть на этом осциллографе не получается, в желаемой оси частот. Огорчился.
Минимум 25кГц на клетку, так что свои желаемые 50Гц не разглядеть.
...вот что получается на сетке в 25кГц
...и вот что получается на сетке в 50кГц

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Пн сен 28, 2015 10:09 pm 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
Ну и теперь пользуясь случаем, что синус уже есть и кодовая инфраструктура немного устоялась, то снижаю частоту коммутации в 4 раза.
Было 54.3 kHz, теперь стало 13.51 kHz.
Ввёл дополнительные таблицы синуса, на 180 и 90 точек.

В чём же теперь преимущество и недостаток:

Недостаток:
Код:
Высокий риск появления слышимого акустического шума, писк на 13 кГц. Увеличивается размер выходного индуктора(а это деньги за феррит+ медь). И ещё, в 4 раза хуже будет реакция срабатывания на аварийную ситуацию.


Преимущество:
Код:
В данном случае за счет снижения частоты в 4 раза снижается коэффициент динамических потерь на транзисторах и диодах мостовой схемы, а это потери возникающие во время коммутации ВЧ сигналом. Иными словами, снижения частоты сделано, для повышения эффективности (КПД).
И второй момент, тоже важный.
Так как программа управления будет находиться в основном в прерывании, то больше временного ресурса на отработку алгоритма управления и "прочих плюшек".


Естественно это скажется и на качестве синуса, теперь вместо 360 точек на период, получается 90 точек.
Ну и коль значение RC-цепи осталось прежним, то, теперь значительно сильнее видно пики, визуально.

На практике же эти пики будут не так заметны, в силу большого сглаживания LC-цепями сигнала на выходе. Но это зависит также и от величины нагрузки.

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Чт окт 01, 2015 1:08 am 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
Теперь, формирую часть сигнала, которая будет подаваться на входя транзисторов, для формирования синуса на выходе H-bridge.
Прежде чем это делать нужно рассмотреть что у меня подается, и что я наблюдаю на измерительной RC-цепочке интегратора.
- Синий - это выход с оптрона.
- Жёлтый - это RC интегратор.
Тут видно явно наличие сдвига фазы.

Анализ длительностей интервалов сигналов управления, снимаемых с оптронов и подаваемых на IR2120.
На основании этих значений можно вести дальнуйшие расчеты как точнык так и оценочные.

Минимальная длительность и расстояние между импульсами
600 nS - что соответсвует частоте 1,67 МГц

Максимальная длительность и расстояние между импульсами
16,8 uS - что соответсвует частоте около 59,52 КГц

Тут видно гарантированное время в которое нужно уложиться всему обработчику части алгоритма - 56,8 uS

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Чт окт 01, 2015 10:47 pm 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
Проверка что не происходит перекрестной устновки лог. уровней способных привести к выгоранию H-bridge, по причине одновременно открываемых ключей одного плеча (любого из них одновременно верхнего и нижнего).
Разумеется что не рассматривается влияние эффекта Миллера.

Как видно, нет перекрытия. Интервал гарантированного dead-time в межплечье около 260 микросекунд.

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Пт окт 02, 2015 12:09 am 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
А теперь я хочу произвести улучшение метода управления, при котором один из транзисторов в плече буде всегда открыт на этапе всего времени формирования полупериода.
Таким способом я собираюсь улучшить эффективность, исключая динамические потери на одном из транзисторов.

Аналогичный метод управления описан по ссылкам
- https://mlabsbd.wordpress.com/2015/01/1 ... ontroller/
- http://tahmidmc.blogspot.com/2013/02/si ... _2525.html

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Пт окт 02, 2015 9:12 pm 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
Подключение цифровой части с драйвером и с H-мостом
Первая попытка и ыидно что, чтото явно не так... Бустрапный конденсатор както странно издавал писки, и грелся конденсатор и драйвер.
Потом перестал выходить сигнал с драйверов и при этом нагрелся так что задымился... Упьсь, а ведь это менее 20В и всего лишь 1А.
Синий - напряжение на DC_Link.
Ну во первых напряжение на DC_Link - не постоянка,значит явно чтото потребляет сверх нормы.
Судя по форме - один полу-период просаживал... пожоже какойто из драйверов IR2110 оказался битый/дохлый либо где-то КЗ.
Благо успел это заснять.... Надо разбираться что случилось.

Нашёл поломку, исправил. Перепаял и заново подсоединил всё вместе.
Вот что на выходе драйверов. И вот эти самые странные пороги щас всё портят

Синус разумеется от этого с характерным искажением...
И это то что я первым делом начну расследовать. Это на самом деле опасная ситуация с такими выбросами.
Обралите внимание, амплитуды по плюсу и минусу более 30В, при том что у меня питание около 18В, потом порог становится на 18В.

Хм...
И вот тут вот я как-то так и задумался... Жутко странное поведение драйвера затвора IR2110

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Пт окт 09, 2015 7:18 am 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
Ну вот.... Так намного лучше. Но это щас на малой нагрузке.
Если подгрузить все конечно испортится ))
Это уже замеряно на выходе с инвертора, на нагрузочном резисторе.
Также предстоит переползти обратно в частотный диапазон выше слышимого, индуктор сильно пищит на 13кГц.
Также:
Перемотал индуктор и дополнил фильтрующий конденсатор.
Индуктор то самодельный намотан на коленке... Жуть как пищит.

....
Добавлено через несколько дней
....

Лучшая форма что получилась с этого железа, не прибегая ни к каким алгоритмам коррекции и исправления сигнала. Алгоритмика судя по всему неизбежна. Ок...
Теперь, имея рабочий код для управления затворами, остается только добавить алгоритм автокоррекции.
Для этого потребуется снабжать всю схему датчиками и вводить спец алгоритм по авто-колибровки.
А алгоритм нужен для подстройки на лету, для выдерживания формы синуса, независимо от нагрузки
Vdclink = 18.5 V
Vccdriver = 15.5 V
Fsw = 27.5 kHz
Fgrid = 50 hZ

Iload = 0.1A
Тут видно искажение в синусе, на участке перехода через ноль. Это вызвано тем что драйвера имеют особенности работы на малых длительностях, а также специфика оптрона, который тоже на малых временных интервалах съедает часть длительности. (нужно пробовать подбирать резисторы на излучающий диод и на выходе с коллекторного съема )
также пробовал вносить искусственно искажения - выравнивался ноль, но при этом ползла и амплитуда полу-периода вверх, что в целом тоже искажение синуса...
http://ybex.com/d/6s4nfboarzzgrvc0atjae ... lgiwj.html

При токе Iload = 0.55A - Сигнал значительно ухудшается.
При этом видно визуально что наряду с проседанием амплитуды и характерного искажения синуса, появляется также ВЧ составляющая ШИМа.

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

Вложение:
SAM_1089.JPG
SAM_1089.JPG [ 1.11 MiB | Просмотров: 20303 ]

Вложение:
SAM_1090.JPG
SAM_1090.JPG [ 1.11 MiB | Просмотров: 20293 ]


-------------------------------------------------------------------------

Теперь в планах:
- Сделать плавный стоп-старт (ramp - mode)
- Испытание под повышенным напряжением
- Испытать несколько дешевых вариантов токовых датчиков с гальванической изоляцией
- Найти альтернативные варианты с опто-изолированными аналоговыми усилителями

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Сб окт 17, 2015 12:36 am 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
Добавил в код:
* Ramp mode Start-Up. Он же - плавный старт

+ Обновления: заменил трансформатор
И теперь у меня вместо старого 20Вт, установлен на 250 Вт, и есть возможность пробовать переходить постепенно на более высокие напряжения в тестах.
-> ТС-250-2М
http://vprl.ru/index/transformatory_ts_250/0-82
Изображение

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Сб окт 31, 2015 7:36 pm 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
Прежде чем продолжать стоит выяснить, артефакт с искажениями синуса в нарастании/спаде в области нуля

Обновлю модель симуляции, и так как схема в симуляторе отличается от той что в реале, то делаю вместо полного моста(full-bridge) -> полу-мост (half-bridge).
Значение нагрузки R1 ставлю 20 Ом, что довольно таки критично, ибо отображает большую мощность нагрузки.

Тут график мощности (синий) отображает характер изменения напряжения который наблюдается на осциллографе при измерении напряжения на нагрузочном резисторе.
Как видно их графика Power peak2peak около 600 Вт.

Теперь проверяю на пониженной мощности, R1 ставлю 200 Ом

Тут график мощности (синий) отображает другой, желаемый характер изменения напряжения который должен быть синусоидальной формы.
Как видно их графика Power peak2peak около 60..70 Вт.

....
Добавлено через несколько дней
....

Хм... Чтото не получилось так быстренько в реале перескочить с Full-bridge на Half-bridge.
Перепаял обратно проводки на схему Full-bridge, и прицепил снабберные конденсаторы, без резисторов.

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

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Ср ноя 04, 2015 9:40 pm 
Не в сети
Звание: ...студент
Аватар пользователя

Зарегистрирован: Вт янв 31, 2012 8:22 pm
Сообщений: 176
Откуда: Днепропетровск
Космодром прислал новости, акция на IGBT транзистор - http://kosmodrom.ua/el.php?name=STGW45HF60WD

_________________
(be || (!be))


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Ср ноя 04, 2015 10:29 pm 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
coolbassnik писал(а):
Космодром прислал новости, акция на IGBT транзистор - http://kosmodrom.ua/el.php?name=STGW45HF60WD

угу, спасибо, хороший
STGW45HF60WD http://kosmodrom.ua/pdf/STGW45HF60WD.pdf
IGBT транзистор - TO-247-3: Uкэ.макс: 600 В: Iк@25°C: 45 А: Uкэ.нас: 1.65 В: Диод tвосст: 140 нc. Eoff 0.63 mJ

у меня щас IHW20N120R3 (H20R1202) http://www.farnell.com/datasheets/1926814.pdf
IGBT транзистор - TO-247-3: Uкэ.макс: 1200 В: Iк@25°C: 20 А: Uкэ.нас: 1.48 В: Диод tвосст: 387 нc. Eoff 1.65 mJ

========================================================================
* краткий обзор вариаций применения диодов и транзисторов от ST - http://www.st.com/st-web-ui/static/acti ... g_pres.pdf
И там есть вот такое предложение, собственно интересно какие элементы они предлагают применять....

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Чт ноя 05, 2015 1:59 am 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
По тихоньку планирую PCB

Тут выпрямление и инвертор.
AC Input -> Relays & Fuse -> Diod-Bridge -> DC-Link -> Relays & Fuse -> Full-Bridge Inverter -> Filter -> Relays & Fuse -> Output

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: экспериментальная мини-лабораторная установка инвертора
СообщениеДобавлено: Пн ноя 09, 2015 1:45 am 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: Вс апр 08, 2007 11:00 pm
Сообщений: 6358
Откуда: KHARKOV or KIEV
Начал баловаться и пробовать визуализировать и цеплять 3D библиотеки.
Блин, кошмарно много время отбирает эта ерунда. :)

Но так как еще свои библиотеки не создаю, то юзаю те что попали под руку. Планирую найти хорошую базу в инете...

_________________
* Ceci tuera cela.
* Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда." (C) Linus Torvalds.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 50 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 2 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB