2_foc闭环调试_ADC电流采样与滤波及pid数据结构
1、ADC电流采样
上次添加了编码器获取电角度的程序,将之前开环控制的角度进行了替换,这次再将电流采样添加进来,之后就可以利用这样一个有反馈的系统进行电流环PI控制器参数调试。
之前写过ADC+DMA电流采样的stm32库函数程序,现在来看还是有很大缺陷的:首先当电机没有转动时,ADC采样已经有了一个数值,即是一个偏置,需要后面将其减去,这块采回来的电流理论上是一个正弦波数值。另外需要将ADC采样值转换为对应单位的电流,公式是(ADC原始值-偏置)*3.3V参考电压/4096/R欧姆/放大倍数,这个还需要进一步验证。
2、 一阶低通滤波算法
FirstOrder_LPF_Calc 通常用于计算一阶低通滤波器(LPF)的输出,滤波器用于平滑输入信号,消除噪声,尤其是在控制系统中处理传感器信号时。一阶滤波,又叫一阶惯性滤波,或一阶低通滤波。是使用软件编程实现普通硬件RC低通滤波器的功能。
一阶低通滤波的算法公式为:
Y(n)=αX(n) + (1-α)Y(n-1)
α 越大,滤波器的响应越快,能更快跟踪输入变化,但噪声抑制效果较差。
α越小,响应越慢,能更好地滤除噪声,但可能会导致信号滞后。
应用:
FirstOrder_LPF_Calc 可广泛应用于传感器信号滤波、电流环和速度环的噪声抑制等场景。在FOC(磁场定向控制)中,滤波器用于平滑电流和速度反馈信号,避免过大的噪声干扰控制系统的稳定性。
总结:
通过调节 α,可以灵活控制滤波器的响应速度和噪声抑制效果。
滤波器能有效减小信号中的高频噪声,同时保持低频成分的完整性。
一阶滤波无法完美地兼顾灵敏度和平稳度。有时,我们只能寻找一个平衡,在可接受的灵敏度范围内取得尽可能好的平稳度。而在一些场合,我们希望拥有这样一种接近理想状态的滤波算法。即:当数据快速变化时,滤波结果能及时跟进(灵敏度优先);当数据趋于稳定,在一个固定的点上下振荡时,滤波结果能趋于平稳(平稳度优先)。
3、 pid参数数据结构
typedef struct
{
float Ref; // Input: Reference input
float Fdb; // Input: Feedback input
float Err; // Variable: Error
float Kp; // Parameter: Proportional gain
float Up; // Variable: Proportional output
float Ui; // Variable: Integral output
float Ud; // Variable: Derivative output
float OutPreSat; // Variable: Pre-saturated output
float OutMax; // Parameter: Maximum output
float OutMin; // Parameter: Minimum output
float Out; // Output: PID output
float SatErr; // Variable: Saturated difference
float Ki; // Parameter: Integral gain
float Kc; // Parameter: Integral correction gain
float Kd; // Parameter: Derivative gain
float Up1; // History: Previous proportional output
float Ui_1;
float OutF;
} PIDREG_T;
先混个面熟,之后挨个调。