- C的官方编译器gcc下载地址:https://github.com/skeeto/w64devkit/releases
这个很难下载,可以用msys2提供的仿linux系统下的C,下载地址:https://www.msys2.org/,下载完成后在shell里输入以下语句:
pacman -Syu
pacman -Su
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
然后在安装包里找到gcc的PATH,写入环境变量就可以了;
- 用C写个PID控制器;
#include <iostream>
float pid(float setpoint, float pv, float dt) {
float kp=0.9,ki=0.1,kd=0.001,previous_error = 0,integral=0,derivative=0;
float error = setpoint - pv;
integral += error * dt;
derivative = (error - previous_error) / dt;
previous_error = error;
float output = kp * error + ki * integral + kd * derivative;
std::cout << "pv: " << pv << "\t"<< "Error: " << error << std::endl;
return output;
}
int main() {
float setpoint = 100, pv = 0,output=0;
for (int i = 0; i < 10; i++) {
std::cout << i << "\t";
output = pid(setpoint, pv, 1);
pv += output*1.23;
}
return 0;
}
输出:
0 pv: 0 Error: 100
1 pv: 123.123 Error: -23.123
2 pv: 94.6533 Error: 5.34673
3 pv: 101.236 Error: -1.23633
4 pv: 99.7141 Error: 0.285873
5 pv: 100.066 Error: -0.0661011
6 pv: 99.9847 Error: 0.0152817
7 pv: 100.004 Error: -0.00353241
8 pv: 99.9992 Error: 0.000816345
9 pv: 100 Error: -0.000190735
可以看到偏差迅速波动变小,直到输出控制量为0;