TI中文支持网
TI专业的中文技术问题搜集分享网站

motor ware 例程 pwm输出函数 怎么理解?

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占空比的直流母线电压的相对速率,即使你 不需要知道真正的直流母线电压。

赞(0)
未经允许不得转载:TI中文支持网 » motor ware 例程 pwm输出函数 怎么理解?
分享到: 更多 (0)