static inline void HAL_writePwmData(HAL_Handle handle,HAL_PwmData_t *pPwmData)
{
uint_least8_t cnt;
HAL_Obj *obj = (HAL_Obj *)handle;
PWM_Obj *pwm;
_iq period;
_iq pwmData_neg;
_iq pwmData_sat;
_iq pwmData_sat_dc;
_iq value;
uint16_t value_sat;
for(cnt=0;cnt<3;cnt++)
{
pwm = (PWM_Obj *)obj->pwmHandle[cnt];
period = (_iq)pwm->TBPRD;
pwmData_neg = _IQmpy(pPwmData->Tabc.value[cnt],_IQ(-1.0));
pwmData_sat = _IQsat(pwmData_neg,_IQ(0.5),_IQ(-0.5)); //_IQsat(A, long P, long N)//IQ数值的限幅函数 把A限制到[N P]之间
pwmData_sat_dc = pwmData_sat + _IQ(0.5);
value = _IQmpy(pwmData_sat_dc, period);
value_sat = (uint16_t)_IQsat(value, period, _IQ(0.0));
// write the PWM data
PWM_write_CmpA(obj->pwmHandle[cnt],value_sat);
}
return;
} // end of HAL_writePwmData() function
pPwmData->Tabc.value[cnt]是由三项电压标幺值减去最大最小电压标幺值和的一半而得出的,作为PWM占空比来使用,但是电压标幺值是由实际电压除上USER_IQ_FULL_SCALE_VOLTAGE_V得到的,而占空比直接相关的是母线电压,如果母线电压与USER_IQ_FULL_SCALE_VOLTAGE_V相等,则比较容易理解。母线电压比USER_IQ_FULL_SCALE_VOLTAGE_V要小很多,所以直接把电压标幺值作为占空比,不会导致输出电压要小于实际所需电压吗?希望大神帮忙解答,谢谢
Annie Liu:Tabc和PWM占空比使用每单位格式,并且与USER_IQ_FULL_SCALE_VOLTAGE_V无直接关系,并且PWM占空比始终基于实际直流总线电压,因为FOC使用反馈电流和电压。
static inline void HAL_writePwmData(HAL_Handle handle,HAL_PwmData_t *pPwmData)
{
uint_least8_t cnt;
HAL_Obj *obj = (HAL_Obj *)handle;
PWM_Obj *pwm;
_iq period;
_iq pwmData_neg;
_iq pwmData_sat;
_iq pwmData_sat_dc;
_iq value;
uint16_t value_sat;
for(cnt=0;cnt<3;cnt++)
{
pwm = (PWM_Obj *)obj->pwmHandle[cnt];
period = (_iq)pwm->TBPRD;
pwmData_neg = _IQmpy(pPwmData->Tabc.value[cnt],_IQ(-1.0));
pwmData_sat = _IQsat(pwmData_neg,_IQ(0.5),_IQ(-0.5)); //_IQsat(A, long P, long N)//IQ数值的限幅函数 把A限制到[N P]之间
pwmData_sat_dc = pwmData_sat + _IQ(0.5);
value = _IQmpy(pwmData_sat_dc, period);
value_sat = (uint16_t)_IQsat(value, period, _IQ(0.0));
// write the PWM data
PWM_write_CmpA(obj->pwmHandle[cnt],value_sat);
}
return;
} // end of HAL_writePwmData() function
pPwmData->Tabc.value[cnt]是由三项电压标幺值减去最大最小电压标幺值和的一半而得出的,作为PWM占空比来使用,但是电压标幺值是由实际电压除上USER_IQ_FULL_SCALE_VOLTAGE_V得到的,而占空比直接相关的是母线电压,如果母线电压与USER_IQ_FULL_SCALE_VOLTAGE_V相等,则比较容易理解。母线电压比USER_IQ_FULL_SCALE_VOLTAGE_V要小很多,所以直接把电压标幺值作为占空比,不会导致输出电压要小于实际所需电压吗?希望大神帮忙解答,谢谢
user5947112:
回复 Annie Liu:
你好,感谢您的回复,但我还有些不明白。’Tabc和PWM占空比使用每单位格式,并且与USER_IQ_FULL_SCALE_VOLTAGE_V无直接关系,Tabc实际上就是电压的标幺值算出来的啊
pT->value[0] = (Va – Vcom); pT->value[1] = (Vb – Vcom); pT->value[2] = (Vc – Vcom);
这个值就是Tabc,是用每相电压的标幺值减去了最大最小电压标幺值的一半,所以我说的问题我还是不明白
static inline void HAL_writePwmData(HAL_Handle handle,HAL_PwmData_t *pPwmData)
{
uint_least8_t cnt;
HAL_Obj *obj = (HAL_Obj *)handle;
PWM_Obj *pwm;
_iq period;
_iq pwmData_neg;
_iq pwmData_sat;
_iq pwmData_sat_dc;
_iq value;
uint16_t value_sat;
for(cnt=0;cnt<3;cnt++)
{
pwm = (PWM_Obj *)obj->pwmHandle[cnt];
period = (_iq)pwm->TBPRD;
pwmData_neg = _IQmpy(pPwmData->Tabc.value[cnt],_IQ(-1.0));
pwmData_sat = _IQsat(pwmData_neg,_IQ(0.5),_IQ(-0.5)); //_IQsat(A, long P, long N)//IQ数值的限幅函数 把A限制到[N P]之间
pwmData_sat_dc = pwmData_sat + _IQ(0.5);
value = _IQmpy(pwmData_sat_dc, period);
value_sat = (uint16_t)_IQsat(value, period, _IQ(0.0));
// write the PWM data
PWM_write_CmpA(obj->pwmHandle[cnt],value_sat);
}
return;
} // end of HAL_writePwmData() function
pPwmData->Tabc.value[cnt]是由三项电压标幺值减去最大最小电压标幺值和的一半而得出的,作为PWM占空比来使用,但是电压标幺值是由实际电压除上USER_IQ_FULL_SCALE_VOLTAGE_V得到的,而占空比直接相关的是母线电压,如果母线电压与USER_IQ_FULL_SCALE_VOLTAGE_V相等,则比较容易理解。母线电压比USER_IQ_FULL_SCALE_VOLTAGE_V要小很多,所以直接把电压标幺值作为占空比,不会导致输出电压要小于实际所需电压吗?希望大神帮忙解答,谢谢
Annie Liu:
回复 user5947112:
FOC是一个反馈控制系统,通过改变“输出电压”来实现电流闭环控制,“输出电压”不是绝对电压值,它是通过调节PWM占空比的直流母线电压的相对速率,即使你 不需要知道真正的直流母线电压。