Здравствуйте.
Объясните пожалуйста кто нибудь что за беда с настройкой PWM в PIC24FVKM202?
Вот функция инициализации:
Код:
|
/*Инициализирует модуль ШИМ*/
void InitializePWM(void) {
ODCBbits.ODB13 = 0;
TRISBbits.TRISB13 = 0;
PORTBbits.RB13 = 1;
// модули ССP
CCP1CON3H = 0x0000;
CCP2CON3H = 0x0000;
CCP3CON3H = 0x0000;
// мы настраиваем OC3B значит это 3 модуль линия OCBEN
CCP3CON1H = 0x0000;
CCP3CON1Hbits.OPS = 0;
CCP3CON1L = 0x0000;
CCP3CON1Lbits.CLKSEL = 0b000; // internal clock
CCP3CON1Lbits.CCPSIDL = 1;
CCP3CON1Lbits.TMRPS = 1; // prescaller
CCP3CON1Lbits.T32 = 0; // 16 bit mode
CCP3CON1Lbits.CCSEL = 0; // PWM
CCP3CON1Lbits.CCPMOD = 0b0101; // PWM mode
CCP3CON2H = 0x0000;
CCP3CON2L = 0x0000;
CCP3CON2Hbits.OCBEN = 1;
CCP3CON2Hbits.ICS = 0b000;
CCP3CON3H = 0x0000;
CCP3CON3Hbits.OUTM = 0b001; // pushpull
CCP3CON3Hbits.POLACE = 1; // active high
CCP3CON3Hbits.PSSACE = 0; // inactive than shutdown
CCP3CON3Hbits.PSSBDF = 0; // inactive than shutdown
CCP3PRH = 0x00;
CCP3PRL = 1000;
CCP3RA = 250;
CCP3RB = 500;
CCP3BUFH = CCP3RA; // установить 50% скважность
CCP3BUFL = CCP3RB; // установить 50% скважность
CCP3TMRH = 0;
CCP3TMRL = 0;
CCP3CON1Lbits.CCPON = 1;
} |
//Режим выставил CCP3CON1Lbits.CCPMOD = 0b0101; // PWM mode Dual Edge Compare (16-bit buffered) PWM Mod
Судя по схеме работы сигнал должен меняться в 3 случаях:
1. При срабатывании CCP3TMRL == CCP3RA
2. При срабатывании CCP3TMRH == CCP3RB
3. При Rollover CCP3TMRL/H
Но судя по тому что я получаю в логическом анализаторе это просто какая то дикая дичь.
Он работает хрен пойми как. То сменит значение при Rollover то не сменит. Условия 1,2 тоже игнорирует раз через раз.
Что я делаю не так то??