标题:
STM32 PID算法测试C语言程序实现 0.96寸OLED显示
[打印本页]
作者:
小哦噢
时间:
2019-7-21 12:09
标题:
STM32 PID算法测试C语言程序实现 0.96寸OLED显示
1d415d5c0c1be96e286c0b693d6d4cd.jpg
(733.81 KB, 下载次数: 63)
下载附件
OLED显示
2019-7-21 12:05 上传
单片机源程序如下:
#include "PID.h"
/*以电机调速为例*/
struct _pid{
float SetSpeed; //设定值
float ActualSpeed; //实际值
float err; //偏差值
float err_last; //上一个偏差值
float err_last_last; //最上一个偏差值
float Kp, Ki, Kd; //比例、积分、微分系数
}pid;
void PID_init() //初始化
{
pid.SetSpeed = 0.0;
pid.ActualSpeed = 0.0;
pid.err = 0.0;
pid.err_last = 0.0;
pid.err_last_last = 0.0;
pid.Kp = 0.2; //可修改
pid.Ki = 0.015; //可修改
pid.Kd = 0.2; //可修改
}
float PID_realize(float Speed)
{
float incrementSpeed; //当前值
pid.SetSpeed = Speed; //用户设定值
pid.err = pid.SetSpeed - pid.ActualSpeed; //偏差值
incrementSpeed =pid.Kp*(pid.err - pid.err_last) + pid.Ki*pid.err + pid.Kd*(pid.err - 2 * pid.err_last_last + pid.err_last);
pid.ActualSpeed += incrementSpeed; //实际输出值
pid.err_last = pid.err_last_last;
pid.err_last_last = pid.err;
return pid.ActualSpeed;
}
复制代码
/**********************PID算法测试C语言实现**************************/
// 0.96寸OLED显示 IIC通讯
// --------------------
// GND 电源地
// VCC 接5V或3.3v电源
// SCL 接PA5(SCL)
// SDA 接PA7(SDA)
// --------------------
#include "stm32f10x.h"
#include "oled.h"
#include "PID.h"
int main(void)
{
u32 count=0;
OLED_Init(); //初始化OLED
OLED_Clear();
PID_init();
OLED_ShowChar(16,0,'P',16);
OLED_ShowChar(24,0,'I',16);
OLED_ShowChar(32,0,'D',16);
OLED_ShowCHinese(44,0,0);
OLED_ShowCHinese(60,0,1);
OLED_ShowCHinese(76,0,2);
OLED_ShowCHinese(92,0,3);
OLED_ShowCHinese(0,4,4);
OLED_ShowCHinese(16,4,5);
OLED_ShowCHinese(32,4,6);
OLED_ShowChar(48,4,':',16);
OLED_ShowCHinese(0,6,7);
OLED_ShowCHinese(16,6,8);
OLED_ShowCHinese(32,6,9);
OLED_ShowChar(48,6,':',16);
OLED_ShowChar(86,5,'.',12);
OLED_ShowChar(86,7,'.',12);
OLED_ShowNum(56,5,(int)setspeed,5,12); //显示设定值整数部分
OLED_ShowNum(93,5,(int)(setspeed*10)%10,1,12); //显示设定值小数部分
OLED_ShowNum(99,5,(int)(setspeed*100)%10,1,12);
OLED_ShowNum(105,5,(int)(setspeed*1000)%10,1,12);
OLED_ShowNum(111,5,(int)(setspeed*10000)%10,1,12);
while(count<1000)
{
float Speed = PID_realize(setspeed);
OLED_ShowNum(56,7,Speed,5,12); //显示当前值整数部分
OLED_ShowNum(93,7,(int)(Speed*10000)%10000,4,12); //显示当前值及小数点后4位
}
}
复制代码
所有资料51hei提供下载:
PID算法测试.7z
(184.24 KB, 下载次数: 141)
2019-7-21 15:50 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
wsxujn
时间:
2019-8-29 23:56
这个怎么样,下来看看
作者:
afeiaa
时间:
2020-4-16 23:23
感谢楼主 学习了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1