PWM产生的源函数求解释啊?

2019-07-18 14:23发布


void F281X_EV1_PWM_Update(PWMGEN *p)
{      
                int16 MPeriod;
        int32 Tmp;

// Compute the timer period (Q0) from the period modulation input (Q15)
        Tmp = (int32)p->PeriodMax*(int32)p->MfuncPeriod;           // Q15 = Q0*Q15
        MPeriod = (int16)(Tmp>>16) + (int16)(p->PeriodMax>>1);     // Q0 = (Q15->Q0)/2 + (Q0/2)
        EvaRegs.T1PR = MPeriod;  

// Compute the compare 1 (Q0) from the PWM 1&2 duty cycle ratio (Q15)
        Tmp = (int32)MPeriod*(int32)p->MfuncC1;                    // Q15 = Q0*Q15
        EvaRegs.CMPR1 = (int16)(Tmp>>16) + (int16)(MPeriod>>1);    // Q0 = (Q15->Q0)/2 + (Q0/2)

// Compute the compare 2 (Q0) from the PWM 3&4 duty cycle ratio (Q15)
        Tmp = (int32)MPeriod*(int32)p->MfuncC2;                   // Q15 = Q0*Q15
        EvaRegs.CMPR2 = (int16)(Tmp>>16) + (int16)(MPeriod>>1);   // Q0 = (Q15->Q0)/2 + (Q0/2)

// Compute the compare 3 (Q0) from the PWM 5&6 duty cycle ratio (Q15)
        Tmp = (int32)MPeriod*(int32)p->MfuncC3;                   // Q15 = Q0*Q15
        EvaRegs.CMPR3 = (int16)(Tmp>>16) + (int16)(MPeriod>>1);   // Q0 = (Q15->Q0)/2 + (Q0/2)
        }

这个函数中MfuncC1,MfuncC3,MfuncC3,是 svgendq模块产生的Ta,Tb,Tc。然后用于算三个寄存器的值。我的疑问是他怎么算的啊.....我看书上说的应该是CMPR3=Tc/时钟周期啊.....可是他这里怎么搞得啊?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
悠然33
1楼-- · 2019-07-19 06:25
zhangmangui 发表于 2014-4-15 22:38
// Compute the timer period (Q0) from the period modulation input (Q15)
        Tmp = (int32)p->Peri ...

#define F281X_EV1_FC_PWM_GEN {1000,   
                                  0x7FFF,
                                  0x4000,
                                  0x4000,
                                  0x4000,
                                  (void (*)(Uint32))F281X_EV1_PWM_Init,  
                                  (void (*)(Uint32))F281X_EV1_PWM_Update 可是初始值是0X7FFF,怎么是-1到1 呢?
zhangmangui
2楼-- · 2019-07-19 11:43
悠然33 发表于 2017-3-31 10:28
#define F281X_EV1_FC_PWM_GEN {1000,   
                                  0x7FFF,
                ...

7FFF  就是中间值   也就是x轴
zhangmangui
3楼-- · 2019-07-19 12:29
悠然33 发表于 2017-3-31 10:28
#define F281X_EV1_FC_PWM_GEN {1000,   
                                  0x7FFF,
                ...

MCU输出的肯定是波形    输出后经滤波   变光滑
然后隔直   就成了正负的正弦波
悠然33
4楼-- · 2019-07-19 17:05
 精彩回答 2  元偷偷看……
zhangmangui
5楼-- · 2019-07-19 20:22
悠然33 发表于 2017-4-1 09:27
谢谢讲解,是我理解错了,我忘记7FFF是Q格式表示的,一直还看成是16进制的 ...

多分享啊

一周热门 更多>