stm32通过定点运算转换pid计算后的值代码
时间: 2024-01-05 16:02:47 浏览: 61
以下是一个使用定点运算实现PID控制器的例子,其中包含了将PID计算结果转换成PWM占空比的代码。
```c
// 定义PID控制器参数
#define Kp 0.2f
#define Ki 0.1f
#define Kd 0.05f
// 定义定点数运算参数
#define Q 16 // 定点数小数位数
#define K 65536.0f // 定点数转换系数
// 定义PID控制器变量
int32_t error, pre_error, integral;
float derivative, output;
// 定义被控对象控制量变量
int16_t pwm;
// PID控制器计算函数
void pid_compute(int16_t setpoint, int16_t measurement)
{
// 计算误差和积分项
error = (int32_t)setpoint - (int32_t)measurement;
integral += error;
// 定点数运算
error *= K;
integral *= K;
derivative *= K;
// 计算微分项
derivative = (float)(error - pre_error) / K;
// 计算PID输出
output = Kp * error + Ki * integral + Kd * derivative;
// 转换成PWM占空比
pwm = (int16_t)(output / K * 1000.0f);
if (pwm < 0) pwm = 0;
if (pwm > 1000) pwm = 1000;
// 更新误差项
pre_error = error;
}
```
在这个例子中,我们使用了定点数运算来实现PID控制器的计算。具体来说,我们使用了一个16位的定点数表示浮点数,其中Q=16表示小数位数为16位,K=65536.0f表示定点数转换系数。
在PID计算过程中,我们将输入的浮点数转换成定点数进行计算,计算结果也是一个定点数。在计算完成后,我们再将计算结果转换成浮点数,并将其转换成PWM占空比,最后输出作为控制信号驱动被控对象。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)