借鉴controlSUITE中的DSP libraries中的Floating Point中的2833x_FIR例子代码(路径:C:\ti\controlSUITE\libs\dsp\FPU\v120\examples_ccsv4\2833x_FIR)中的滤波算法做了电流环电流采集的滤波,从ADC读取的数据转换后的约为0.8820A,经过FIR滤波后的值为4.8997A左右。
2833x_FIR例子中的滤波算法实现:
for(i=0; i < SIGNAL_LENGTH; i++)
{
xn=0.5*sin(Rad) + 0.5*sin(Rad2); //Q15
sigIn[i]=xn;
firFP.input= xn;
firFP.calc(&firFP);
yn = firFP.output;
sigOut[i]=yn;
Rad = Rad + RadStep;
Rad2 = Rad2 + RadStep2;
}
xn为信号产生,yn为滤波后的结果。
我在电流环中滤波实现的方法基本一致,如下:
I_measure_L=left.dccurrent*0.006105; // I = ADC1 / 4095 * 3 / (6 * RS) A ( RS=0.02 omega) = 25 * ADC1 / 4095
sigIn=I_measure_L;
sigOut = Fir_filter(sigIn);
I_filter_L=sigOut;
float Fir_filter(float intput)
{
float output;
firFP.input= intput;
firFP.calc(&firFP);
output = firFP.output;
return output;
}
用上位机软件获取I_measure_L,与 I_filter_L的数据,I_measure_L的平均值为0.8820,而I_filter_L的平均值为4.8997。用matlab画图,得到的曲线如下图,图中红色线是ADC采集转换后的电流值,而绿色线是对电流值进行上述滤波后的值:
而当我利用2833x_FIR例子代码中的matlab下的FIR32forC28x.m对I_measure_L的数据进行滤波,在保留原代码的基础上增加了我的数据,修改后的代码如下
%S = 0.5*(sin(2*pi*k1*i) + sin(2*pi*k2*i));
[time cur_mea cur_fit pwm] = textread('filter_pwm=1750.txt','%d%f%f%f');
%len = length(time);
S=cur_mea(1:BUFFER_SIZE);
(数据文件在附件中,文件名filter_pwm=1750.txt),其结果如下:
当我改变电机的转速时,电流环采集到的电流值及相应的滤波值都会有明显的变化,见图
我的问题就是为什么我在TMS320F28335中实现Fir滤波时,滤波后的结果会有平移量,请TI FAE和广大工程师朋友解答。











