Кто любит RISC в жизни, заходим, не стесняемся.
Vlid
Первый раз сказал Мяу!
Сообщения: 32 Зарегистрирован: Ср янв 18, 2017 13:11:34
Сообщение
Vlid » Пт мар 15, 2019 09:50:42
Добрый день!
Пытаюсь настроить ШИМ модуляцию для инвертора с чистым синусом. То есть должно быть примерно такая картинка.
Спойлер Пробовал настраивать с помощью прерываний. Работает почти так как надо однако решение не совсем красиво.
Помогите настроить профессионально, так сказать
Вложения
Untitled.png
(27.96 КБ) 391 скачивание
Аlex
Модератор
Сообщения: 4614 Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:
Сообщение
Аlex » Пт мар 15, 2019 10:01:37
Vlid писал(а): Работает почти так как надо
Это как ?
Показывайте решение и рассказывайте, что в нём не нравится.
Vlid
Первый раз сказал Мяу!
Сообщения: 32 Зарегистрирован: Ср янв 18, 2017 13:11:34
Сообщение
Vlid » Пт мар 15, 2019 17:04:15
Таким образом настраиваю ШИМ (EPWM1 отвечает за импульсы низкой частоты, а EPWM2 за формирование синусоиды):
Код: Выделить всё
EPwm1Regs.TBPRD = 4000; EPwm1Regs.CMPA.bit.CMPA = 2000; // Set 50% fixed duty for EPWM1A EPwm1Regs.TBPHS.bit.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.TBCTL.bit.HSPCLKDIV = TB_DIV4; // TBCLK = SYSCLK EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV4; 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.bit.DBFED = 50; // FED = 50 TBCLKs initially EPwm1Regs.DBRED.bit.DBRED = 70; // RED = 70 TBCLKs initially EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_PRD; EPwm1Regs.ETSEL.bit.INTEN = 1; EPwm1Regs.ETPS.bit.INTPRD = ET_3RD; // EPWM Module 2 config EPwm2Regs.TBPRD = PERIOD; EPwm2Regs.CMPA.bit.CMPA = 500; // Set 50% fixed duty EPWM2A EPwm2Regs.CMPB.bit.CMPB = 500; // Set 50% fixed duty EPWM2A EPwm2Regs.TBPHS.bit.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.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Hi complementary EPwm2Regs.DBFED.bit.DBFED = 50; // FED = 50 TBCLKs initially EPwm2Regs.DBRED.bit.DBRED = 70; // RED = 70 TBCLKs initially EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; EPwm2Regs.ETSEL.bit.INTEN = 1; EPwm2Regs.ETPS.bit.INTPRD = ET_1ST; EDIS;В прерывании EPWM2 от забрасываются значение из таблицы синусов в CMPA или CMPB. В прерывании от EPWM1 включаются и исключаются последовательно CMPA и CMPB модуля EPWM2.