void ggUpdateCmprs(float ua, float ub, float uc, float udc, int use_0spwm_1svm) { int cmp1; int cmp2; int cmp3; float tmp; float invUdc; float max; float min; float dlt; max=ua; if(max<ub)max=ub; if(max<uc)max=uc; min=ua; if(min>ub)min=ub; if(min>uc)min=uc; dlt=-0.5*max-0.5*min;//if use spwm, dlt should be zero. if(use_0spwm_1svm==0)dlt=0;//0MODE, we USE swpm ua+=dlt; ub+=dlt; uc+=dlt; if(udc<1)udc=1; invUdc=1.0/udc; tmp=ua*invUdc+0.5; LIMIT(tmp,0,1); cmp1=tmp*PWMPRD; cmp1=ggNARROWPWM(cmp1); tmp=ub*invUdc+0.5; LIMIT(tmp,0,1); cmp2=tmp*PWMPRD; cmp2=ggNARROWPWM(cmp2); tmp=uc*invUdc+0.5; LIMIT(tmp,0,1); cmp3=tmp*PWMPRD; cmp3=ggNARROWPWM(cmp3); EPwm1Regs.CMPA.half.CMPA =PWMPRD-cmp1; EPwm2Regs.CMPA.half.CMPA =PWMPRD-cmp2; EPwm3Regs.CMPA.half.CMPA =PWMPRD-cmp3;
时间: 2024-03-15 10:43:05 浏览: 44
s3c2410_udc.zip_s3c2410_udc
这段代码用于更新三相电压的 PWM 占空比。具体来说,它根据三相电压的大小和 DC 母线电压,计算出三个 PWM 信号的占空比,并更新到 PWM 的比较寄存器中,从而控制输出 PWM 波形的占空比。
具体的实现过程如下:
1. 首先定义一些变量,包括三相电压(`ua`、`ub`、`uc`)、DC 母线电压(`udc`)、比较值(`cmp1`、`cmp2`、`cmp3`)等。
2. 计算三相电压的最大值和最小值,以及一个偏移量 `dlt`。如果使用 SPWM 模式,那么 `dlt` 的值应该为 0。
3. 根据 DC 母线电压计算出一个系数 `invUdc`,用于将电压转换为占空比。
4. 计算三个 PWM 信号的占空比。具体地,将三相电压除以 DC 母线电压,然后加上 0.5 向上取整(这里可能是为了消除舍入误差),再乘以 PWM 周期,最后将结果限制在 0 到 1 之间,并将其转换为比较值 `cmp1`、`cmp2`、`cmp3`。
5. 将三个比较值更新到 PWM1、PWM2、PWM3 的比较寄存器中,从而更新 PWM 波形的占空比。
需要注意的是,这段代码中的 `ggNARROWPWM` 函数并没有给出,但可以猜测它可能是用来限制 PWM 比较值在一定范围内的函数。
阅读全文