ZHCU083I January 2013 – October 2021 TMS320F2802-Q1 , TMS320F28026-Q1 , TMS320F28026F , TMS320F28027-Q1 , TMS320F28027F , TMS320F28027F-Q1 , TMS320F28052-Q1 , TMS320F28052F , TMS320F28052F-Q1 , TMS320F28052M , TMS320F28052M-Q1 , TMS320F28054-Q1 , TMS320F28054F , TMS320F28054F-Q1 , TMS320F28054M , TMS320F28054M-Q1 , TMS320F2806-Q1 , TMS320F28062-Q1 , TMS320F28062F , TMS320F28062F-Q1 , TMS320F28068F , TMS320F28068M , TMS320F28069-Q1 , TMS320F28069F , TMS320F28069F-Q1 , TMS320F28069M , TMS320F28069M-Q1
Rs 在线估算器内部包含两个一阶级联滤波器,使用这两个滤波器是为了获得准确且稳定的定子电阻值。总共有四个滤波器,其中一组的两个级联滤波器用于对电流进行滤波,另一组的两个级联滤波器用于对电压进行滤波。每组的两个滤波器默认使用相同的系数。但是,根据应用所需的响应,可以分别读取和写入这两个滤波器的系数。这些滤波器的默认截止频率已设置为 0.2Hz。用户可以通过以下代码示例来验证这个截止频率:
EST_getRsOnLineFilterParams(obj->estHandle, EST_RsOnLineFilterType_Current,
&pfilter_i0->b0, &pfilter_i0->a1, &pfilter_i0->y1,
&pfilter_i1->b0, &pfilter_i1->a1, &pfilter_i1->y1);
EST_getRsOnLineFilterParams(obj->estHandle, EST_RsOnLineFilterType_Voltage,
&pfilter_v0->b0, &pfilter_v0->a1, &pfilter_v0->y1,
&pfilter_v1->b0, &pfilter_v1->a1, &pfilter_v1->y1);
_iq pu_to_kHz_sf = _IQ((float_t)USER_EST_FREQ_Hz/1000.0);
cutoff_freq_kHz_i0 = _IQmpy(pfilter_i0->b0, pu_to_kHz_sf);
cutoff_freq_kHz_i1 = _IQmpy(pfilter_i1->b0, pu_to_kHz_sf);
cutoff_freq_kHz_v0 = _IQmpy(pfilter_v0->b0, pu_to_kHz_sf);
cutoff_freq_kHz_v1 = _IQmpy(pfilter_v1->b0, pu_to_kHz_sf);
默认情况下,截止频率变量会返回值 0.0002,表示 0.0002KHz 或 0.2Hz。通常,应对这个截止频率进行调整,以使电阻值可以随应用的预期温度动态增加。图 16-16 是 Rs 在线特性如何随截止频率变化的示例。图中使用的截止频率为 0.1Hz、0.2Hz 和 0.5Hz。使用 0.1Hz 的慢速转角,如果滤波器的截止频率高于转角的频率,电阻将趋向于跟随转角,因此建议将这个滤波器至少设置为与慢速转角相同的频率,从而使电阻的过滤效果更好。
可以看出,较低的截止频率可导致电阻变化较小。但是,如果系统温度动态使温度上升速度过快,则使用低截止频率可能会出现问题。
在温度上升速度极快的情况下,需要将截止频率更改为更高的值。如果应用要求更改截止频率,以下代码示例显示如何进行更改。在本示例中,需要在运行中更改截止频率,因此必须先读取并修改截止频率,然后将其写回到相同的输出中,从而可以避免影响滤波器的输出。
EST_getRsOnLineFilterParams(obj->estHandle, EST_RsOnLineFilterType_Current,
&pfilter_i0->b0, &pfilter_i0->a1, &pfilter_i0->y1,
&pfilter_i1->b0, &pfilter_i1->a1, &pfilter_i1->y1);
EST_getRsOnLineFilterParams(obj->estHandle, EST_RsOnLineFilterType_Voltage,
&pfilter_v0->b0, &pfilter_v0->a1, &pfilter_v0->y1,
&pfilter_v1->b0, &pfilter_v1->a1, &pfilter_v1->y1);
// Use global variable desired_frequency_kHz to set the desired cutoff
// frequency of the filters.Use the same cutoff frequency for all filters
cutoff_freq_kHz_i0 = desired_frequency_kHz;
cutoff_freq_kHz_i1 = cutoff_freq_kHz_i0;
cutoff_freq_kHz_v0 = cutoff_freq_kHz_i0;
cutoff_freq_kHz_v1 = cutoff_freq_kHz_i0;
// Use the following scale factor to convert kHz to per unit value
_iq kHz_to_pu_sf = _IQ(1000.0/(float_t)USER_EST_FREQ_Hz);
// Calculate the per unit value for all filters
cutoff_freq_pu_i0 = _IQmpy(cutoff_freq_kHz_i0, kHz_to_pu_sf);
cutoff_freq_pu_i1 = _IQmpy(cutoff_freq_kHz_i1, kHz_to_pu_sf);
cutoff_freq_pu_v0 = _IQmpy(cutoff_freq_kHz_v0, kHz_to_pu_sf);
cutoff_freq_pu_v1 = _IQmpy(cutoff_freq_kHz_v1, kHz_to_pu_sf);
// Calculate coefficients for all filters
pfilter_i0->b0 = cutoff_freq_pu_i0;
pfilter_i0->a1 = cutoff_freq_pu_i0 - _IQ(1.0);
pfilter_i1->b0 = cutoff_freq_pu_i1;
pfilter_i1->a1 = cutoff_freq_pu_i1 - _IQ(1.0);
pfilter_v0->b0 = cutoff_freq_pu_v0;
pfilter_v0->a1 = cutoff_freq_pu_v0 - _IQ(1.0);
pfilter_v1->b0 = cutoff_freq_pu_v1;
pfilter_v1->a1 = cutoff_freq_pu_v1 - _IQ(1.0);
// Configure Rs Online to use the new filter coefficients
EST_setRsOnLineFilterParams(obj->estHandle, EST_RsOnLineFilterType_Current,
pfilter_i0->b0, pfilter_i0->a1, pfilter_i0->y1,
pfilter_i1->b0, pfilter_i1->a1, pfilter_i1->y1);
EST_setRsOnLineFilterParams(obj->estHandle, EST_RsOnLineFilterType_Voltage,
pfilter_v0->b0, pfilter_v0->a1, pfilter_v0->y1,
pfilter_v1->b0, pfilter_v1->a1, pfilter_v1->y1);