Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,13 @@ v_f(k)=\frac{T_f}{T_f+T_s}v_f(k-1)+\frac{T_S}{T_f+T_s}v(k)
$$


其中<i>v<sub>f</sub>(k)</i>为k时刻的滤波值, <i>v(k)</i>为<i>k</i>时刻的速度测量值, <i>T<sub>f</sub></i>是滤波时间常数,<i>T<sub>s</sub></i>是采样时间(或上述式子的时间间隔)。
其中 <i>v<sub>f</sub>(k)</i> 为k时刻的滤波值, <i>v(k)</i>为<i>k</i> 时刻的速度测量值, <i>T<sub>f</sub></i> 是滤波时间常数, <i>T<sub>s</sub></i> 是采样时间(或上述式子的时间间隔)。
这个低通滤波器也可以写成这样的形式:

$$
v_f(k)=\alpha v_f(k-1)+(1-\alpha)v(k)
$$

其中:

$$
Expand All @@ -38,7 +40,7 @@ $$



上面的式子更直观地表示了在低通滤波器中常量T<sub>f</sub>的意义。如果你的采样时间大约是1毫秒(对于arduino UNO,这可以作为平均值),那么设置 `T_f = 0.01` 将得到:
上面的式子更直观地表示了在低通滤波器中常量 T<sub>f</sub> 的意义。如果你的采样时间大约是1毫秒(对于arduino UNO,这可以作为平均值),那么设置 `T_f = 0.01` 将得到:

```cpp
alpha = 0.01/(0.01 + 0.001) = 0.91
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,24 +26,28 @@ $$


比例环:

$$
u_P(k)=P_e(k)
$$


积分环:

$$
u_I(k)=u_I(k-1)+I\frac{e(k)+e(k-1)}{2}T_s
$$


微分环:

$$
u_D(k)=D\frac{e(k)-e(k-1)}{T_s}
$$


其中 <i>u(k)</i> 为k时刻的控制信号(本例中为电压<i>U<sub>q</sub></i>) ,e(k),e(k-1)为当前时刻k和前一时刻k-1的跟踪误差,跟踪误差是指目标速度值 <i>v<sub>d</sub></i>与实测速度 <i>v</i>之间的差异。

$$
e(k)=v_d(k)-v_f(k)
$$
Expand Down Expand Up @@ -130,4 +134,4 @@ class PIDController
```cpp
motor.PID_velocity.P = 1;
motor.P_angle.P = 10;
```
```