This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好、e2e 团队、
在更改 SVM 范围之前、我们有自己的逆变器与之前版本的 Motorware 配合使用。 但是、这个之前的版本似乎与 Lab11a 不能很好地配合使用、这个实验似乎具有这个 SVM 变化的依赖性。 因为当我按照 LAB11的规定从使用 CTRL 模块对象迁移到没有 CTRL 对象结构时、我的电机开始以错误的方式旋转、它始终使用最大电机电流、并转至最大速度、但相反。
我注意到以下更改:
//******* //
HALL_WrtiePwmData 首先饱和至1.0
pwmData_sat =_IQsat (pPwmData->TBC.value[0]、_IQ (1.0)、_IQ (-1.0));
pwmData_sat_dc =_IQmpy (pwmData_sat +_IQ (1.0)、_IQ (0.5));
在新版本中更改为0.5
pwmData_neg =_IQmpy (pPwmData->TBC.value[0]、_IQ (-1.0));
pwmData_sat =_IQsat (pwmData_neg、_IQ (0.5)、_IQ (-0.5));
pwmData_sat_dc = pwmData_sat +_IQ (0.5);
/***** //
//******* //
之前的 SVGEN_RUN
_iq Vmax、Vmin、Vcom;
_iq va、vb、vc;
//_IQ maxModulation = SVGEN_getMaxModulation (handle);
//_IQ maxModulationNeg =-maxModulation;
_iq va_tmp =-(pVab->value[0]>1);
_iq vb_tmp =_IQmpy (SVGEN_SQRT3_over_2、pVab->value[1]);
va = pVab->value[0];//alpha
vb = va_tmp + vb_tmp;//_IQmpy (SVGEN_SQRT3_over_2、vb_tmp);//-0.5* alpha + sqrt (3)/2 * beta;
vc = va_tmp - vb_tmp;//_IQmpy (SVGEN_SQRT3_over_2、vb_tmp);//-0.5*alpha - sqrt (3)/2 * beta;
////剪裁
// va=_IQsat (VA、SVGEN_4_over_3、-SVGEN_4_over_3);
// Vb=_IQsat (Vb、SVGEN_4_over_3、-SVGEN_4_over_3);
// vc_IQsat (vc、SVGEN_4_over_3、-SVGEN_4_over_3);
VMAX = 0;
Vmin=0;
//查找顺序 Vmin、vmid、Vmax
如果(VA > Vb)
{
VMAX = VA;
Vmin = Vb;
}
其他
{
VMAX = Vb;
Vmin = VA;
}
如果(VC > Vmax)
{
VMAX = VC;
}
否则、如果(Vc < Vmin)
{
Vmin = Vc;
}
VCOM =(Vmax+Vmin)>>1;//0.5*(Vmax+Vmin)
//减共模项以实现 SV 调制
PT->Value[0]=(Vcom - VA);
PT->Value[1]=(Vcom - Vb);
PT->Value[2]=(Vcom - VC);
返回;
和新版本中
_iq Vmax、Vmin、Vcom;
_iq va、vb、vc;
_iq va_tmp =-(pVab->value[0]>1);
_iq vb_tmp =_IQmpy (SVGEN_SQRT3_over_2、pVab->value[1]);
va = pVab->value[0];//alpha
vb = va_tmp + vb_tmp;//-0.5*alpha + sqrt (3)/2 * beta;
vc = va_tmp - vb_tmp;//-0.5*alpha - sqrt (3)/2 * beta;
VMAX = 0;
Vmin=0;
//查找顺序 Vmin、vmid、Vmax
如果(VA > Vb)
{
VMAX = VA;
Vmin = Vb;
}
其他
{
VMAX = Vb;
Vmin = VA;
}
如果(VC > Vmax)
{
VMAX = VC;
}
否则、如果(Vc < Vmin)
{
Vmin = Vc;
}
VCOM =_IQmpy (Vmax+Vmin、_IQ (0.5));
//减共模项以实现 SV 调制
PT->Value[0]=(VA - Vcom);
PT->Value[1]=(Vb - Vcom);
PT->Value[2]=(VC - Vcom);
返回;
/***** //
//******* //
User.h
#define USER_MAX_VS_MAG_PU (1.0)
最近的文件
#define USER_MAX_VS_MAG_PU (0.5)
//***** //
我应该使用哪种实现来正确运行新实验室 Lab11 (a/e)?
我还需要考虑修改其他内容吗?
这取决于 MotorWare 的版本。 第15个及后续版本使用"#define USER_MAX_VS_MAG_PU (0.5)"。 如果您使用这些版本、则必须将变量设置为小于0.5作为 user.h 中的注释文本。 请下载并使用最新版本作为以下链接。
你好
当我使用最近的文件时:
hal.h
pwmData_neg =_IQmpy (pPwmData->TBC.value[0]、_IQ (-1.0));
pwmData_sat =_IQsat (pwmData_neg、_IQ (0.5)、_IQ (-0.5));
pwmData_sat_dc = pwmData_sat +_IQ (0.5);
svgen.h
_iq Vmax、Vmin、Vcom;
_iq va、vb、vc;
_iq va_tmp =-(pVab->value[0]>1);
_iq vb_tmp =_IQmpy (SVGEN_SQRT3_over_2、pVab->value[1]);
va = pVab->value[0];//alpha
vb = va_tmp + vb_tmp;//-0.5*alpha + sqrt (3)/2 * beta;
vc = va_tmp - vb_tmp;//-0.5*alpha - sqrt (3)/2 * beta;
VMAX = 0;
Vmin=0;
//查找顺序 Vmin、vmid、Vmax
如果(VA > Vb)
{
VMAX = VA;
Vmin = Vb;
}
其他
{
VMAX = Vb;
Vmin = VA;
}
如果(VC > Vmax)
{
VMAX = VC;
}
否则、如果(Vc < Vmin)
{
Vmin = Vc;
}
VCOM =_IQmpy (Vmax+Vmin、_IQ (0.5));
//减共模项以实现 SV 调制
PT->Value[0]=(VA - Vcom);
PT->Value[1]=(Vb - Vcom);
PT->Value[2]=(VC - Vcom);
返回;
和 user.h
#define USER_MAX_VS_MAG_PU (0.5)
lab11a 不起作用。 但是、当我使用新的 HALL_WritePwmData、USER_MAX_VS_MAG_PU (0.5)和之前的 SVGEN_RUN 实现时、实验会工作、但电机会反向旋转。
我的第二个问题是:这是这些行的区别
//减共模项以实现 SV 调制
PT->Value[0]=(VA - Vcom);
PT->Value[1]=(Vb - Vcom);
PT->Value[2]=(VC - Vcom);
//减共模项以实现 SV 调制
PT->Value[0]=(Vcom - VA);
PT->Value[1]=(Vcom - Vb);
PT->Value[2]=(Vcom - VC);
SVGEN 的代码与 PWM 驱动模块相关、最终的 PWM 输出是一样的、但是计算过程与上面提到的不同。 您不能在两个版本之间混合文件、您只需使用最新的 motorWare 版本18、或者在不更改 PWM 和 SVGEN 函数的情况下保留原始版本、因为不同版本中的 FAST 算法是相同的。