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.
工具/软件:Code Composer Studio
您好, 罗燕明 :
我会尝试您对 HFI 频率的建议。 它看起来工作正常。 在构建级别8,我在 q 轴上施加恒定电压,就像 bulid 级别2一样,转子以大约350rpm 的速度旋转。
但转子无法在构建级别9的电流环路下旋转。 我在其他培训视频()中发现它需要低通滤波 器,但我想知道哪种数字滤波器算法是合适的。
期待您的回复、提前感谢您的回复。
感谢您的回复。 但我在 示例项目中找不到任何与低通滤波器相关的代码,如下所示
//================================================ 级别9 ================================================
// 9级使用低速时的高频注入进行识别
// 转子位置、并在更高速度下使用 Level7中讨论的 eSMO、
// 在整个范围内提供速度控制
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
// lsw = 0:控制器处于复位状态、不为电机供电
// ls=1:识别初始转子位置、如果成功、则将 lsw 更改为2、否则更改为0
// lsw = 2:电机运行在速度环路中
/*************
*注:- *
*用于初始位置检测(IPD)和 *的可执行文件
*高频注入(HFI)位于 HFI.lib 文件中、而不 是*
*控制套件可下载版本的一部分。 *
*任何构建 LEVEL9代码的尝试都会导致错误。 *
*要访问库和/或源代码、建议用户 *
*联系最近的 TI 销售办事处。 *
****
*
#if (BUILDLEVEL = LEVEL9)
//----------------------------------
// 连接 RMP 模块的输入并调用斜坡控制宏
//----------------------------------
if (lsw!= run_State){
RC1.targetValue = 0;
RC1.SetpointValue = 0;
}
其他
RC1.targetValue = SpeedRef;
RC_MACRO (RC1)
//----------------------------------
// 连接斜坡生成模块的输入并调用斜坡生成器宏
//----------------------------------
rg1.Freq = RC1.SetpointValue;
RG_MACRO (rg1)
angle_wrap(rg1.out);
//----------------------------------
// 连接 SPEED_EST 模块的输入并调用估算速度宏
//----------------------------------
Transition1.SPD = RC1.SetpointValue;
Transition1.angleHFI = hfi1.thetaEst;
Transition1.angleSMO = esmo1.Theta;
角度_传输(&Transition1);
speed3.EstimatedTheta = transition1.angle;
if (lsw!= run_State)
speed3.Old估算 Theta = speed3.估算 Theta;
SE_MACRO (speed3)
//----------------------------------
// 以_IQ 格式测量直流总线电压
//----------------------------------
volt1.DcBusVolt =_IQ12toIQ (AdcResult.ADCRESULT7);
//----------------------------------
// 测量相电流、减去偏移并将其从(-0.5、+0.5)标准化为(-1、+1)。
// 连接 Clarke 模块的输入并调用 Clarke 变换宏
//----------------------------------
clarke1.As =_IQmpy2 (_IQ12toIQ (AdcResult.ADCRESULT1)-offsetA);//相位 A 电流。
clarke1.bs =_IQmpy2 (_IQ12toIQ (AdcResult.ADCRESULT2)-offsetB);// B 相电流。
Clarke_macro (clarke1)
// clarke1.cs =_IQmpy2 (_IQ12toIQ (AdcResult.ADCRESULT3)-offsetC);//相位 C 电流。
// CLARKE1_MACRO (clarke1)
//----------------------------------
// 连接驻车模块的输入并调用驻车变速器。 宏
//----------------------------------
park1.Alpha = clarke1.Alpha;
park1.Beta = clarke1.Beta;
park1.Angle = speed3.EstimatedTheta;
park1.sine =_IQsincu (park1.Angle);
park1.Cosine =_IQcosPU (park1.Angle);
PARK_MACRO (park1)
HPF_IQ.IN1 = park1.Qs;
//----------------------------------
//用于电机控制的状态机
//----------------------------------
if (lsw = RESET_STATE)
{
//重置所有 PI 稳压器
RESET_PI (PI_SPD);
RESET_PI (pi_id);
RESET_PI (PI_IQ);
HFI_RESET (&hfi1); //重置 HFI 模块
HPF_RESET (&hpf_IQ); //重置 HPF
HPF_init (&hpf_coeff1); //可选-在调试期间更改 HPF 角频率
dbc1.gain = 0;
}
否则、如果(lsw = IPD_State)
{
ZLSPD (&hpf_iq、&hpf_coeff1、&hfi1、&ns_id1、&clarke1、&clarke1、 volt1);
pi_id.out = hfi1.Duty;
pi_iq.out = 0;
if (hfi1.hfi_Status = hfi_run_State)
{
lsw =运行状态;
pi_id.out = 0;
}
否则、如果(hfi1.hfi_Status = hfi_reset_State)
{
lsw = RESET_STATE;
}
}
否则、如果(lsw = run_State)
{
//----------------------------------
// 连接 PI 模块的输入并调用 PID 速度控制器宏
//----------------------------------
如果(+SpeedLoopCount >= SpeedLoopPrescaler)
{
pi_spd.Ref = RC1.SetpointValue;
pi_spd.fbk = speed3.EstimatedSpeed;
pi_macro (pi_spd);
SpeedLoopCount=0;
}
//----------------------------------
// 连接 PI 模块的输入并调用 PID IQ 控制器宏
//----------------------------------
pi_iq.Ref = pi_spd.out;
pi_iq.fbk = park1.qs;
pi_macro (pi_iq);
//----------------------------------
// 连接 PI 模块的输入并调用 PID ID 控制器宏
//----------------------------------
pi_id.Ref = 0;
pi_id.fbk = park1.ds;
pi_macro (pi_id);
//零速和低速位置检测
if (_IQabs (RC1.SetpointValue)<= Transition1.spdHi)
{
ZLSPD (&hpf_iq、&hpf_coeff1、&hfi1、&ns_id1、&clarke1、&clarke1、 volt1);
pi_id.out += hfi1.Duty;
}
// dbc1.gain =_IQ (0.5); //注释以在调试环境中进行调整
}
//----------------------------------
// 连接 INV_PARK 模块的输入并调用逆向 Park 转换。 宏
//----------------------------------
ipark1.ds = pi_id.out;
ipark1.qs = pi_iq.out;
ipark1.sine = park1.sine;
ipark1.Cosine = park1.Cosine;
IPark_MACRO (ipark1)
//----------------------------------
// 连接 VOLT_CALC 模块的输入并调用相电压宏
//----------------------------------
// volt1.DcBusVolt =_IQ12toIQ (AdcResult.ADCRESULT7);
volt1.MfuncV1 = svgen1.Ta;
volt1.MfuncV2 = svgen1.tb;
volt1.MfuncV3 = svgen1.tc;
PHASEVOLT_MACRO (volt1)
//----------------------------------
// 连接 ESMO_POS 模块的输入并调用 ESMO 模块
//----------------------------------
如果((lsw = run_State)&&(esmo1.kslide < smok_set))
esmo1.kslide +=_IQ (0.00001);
esmo1.Ialpha = clarke1.Alpha;
esmo1.Isbeta = clarke1.Beta;
esmo1.Valpha = volt1.Valpha;
esmo1.vbeta = volt1.vbeta;
esmo1.runSpeed = speed3.EstimatedSpeed;
esmo1.cmdSpeed = RC1.SetpointValue;
eSMO_MODULE (&esmo1);
/********
*用于从 eSMO 估算角度移除抖动的补充滤波器
* /
// esmo1.Theta = angleFilter (π_SMO、&esmo1); //取消注释以包括
//----------------------------------
// 连接 SVGEN_DQ 模块的输入并调用空间矢量发生器。 宏
//----------------------------------
svgen1.Ualpha = ipark1.Alpha;
svgen1.Ubeta = ipark1.Beta;
SVGENDQ_MACRO (svgen1)
//----------------------------------
// 连接 PWM_DRV 模块的输入并调用 PWM 信号生成宏
//----------------------------------
如果(lsw!= run_State) dbc1.gain = 0;
// 否则 dbc1.gain =_IQ (0.5); //注释行以在调试中进行调整
pwm1.Mfunc1 = svgen1.Ta;
pwm1.MfuncC2 = svgen1.tb;
pwm1.MfuncC3 = svgen1.tc;
if (hfi1.hfi_Status!= hfi_nsid_state) //非 nsid 状态
{
/*********
*具有死区补偿宏的 PWM 生成器
* 如果 cura >0 Ta = Ta + Tdt
* 否则 Ta = Ta - TDT
(小部分 /
dbc1.scale =_IQdiv (_IQdiv2 (pwm1.Deadband)、dbc1.ith); //取消注释以进行调试
dbc1.Kdtc =_IQmpy (dbc1.scale、dbc1.gain); //取消注释以调整 “ ”
PWMwDBC_MACRO (1、2、3、pwm1、clarke1、dbc1);
}
//----------------------------------
// 连接 PWMDAC 模块的输入
//----------------------------------
pwmdac1.Mfunc1 = speed3.EstimatedTheta;
pwmdac1.MfuncC2 = pi_id.out;
PWMDAC_MACRO (6、pwmdac1) // PWMDAC 6A、6B
pwmdac1.Mfunc1 = rg1.out;
pwmdac1.MfuncC2 = pi_iq.out;
PWMDAC_MACRO (7、pwmdac1) // PWMDAC 7A、7B
//----------------------------------
// 连接数据记录模块的输入
//----------------------------------
DlogCh1 =(Int16)_IQtoIQ15 (rg1.out);
DlogCh2 =(Int16)_IQtoIQ15 (clarke1.Bs);
DlogCh3 =(Int16)_IQtoIQ15 (volt1.VphaseA);
DlogCh4 =(Int16)_IQtoIQ15 (qep1.ElecTheta);
#endif //(BUILDLEVEL = LEVEL9)
如突出显示部分所示, d&q 轴电流反馈只是来自未过滤的停止转换后的信号。
HFI 库文档中没有提到低通滤波器。 我从 FAE 获得的库版本 是 V13.1。 它是最新版本吗?