標題:
STM32 PID算法測試C語言程序?qū)崿F(xiàn) 0.96寸OLED顯示
[打印本頁]
作者:
小哦噢
時間:
2019-7-21 12:09
標題:
STM32 PID算法測試C語言程序?qū)崿F(xiàn) 0.96寸OLED顯示
1d415d5c0c1be96e286c0b693d6d4cd.jpg
(733.81 KB, 下載次數(shù): 63)
下載附件
OLED顯示
2019-7-21 12:05 上傳
單片機源程序如下:
#include "PID.h"
/*以電機調(diào)速為例*/
struct _pid{
float SetSpeed; //設(shè)定值
float ActualSpeed; //實際值
float err; //偏差值
float err_last; //上一個偏差值
float err_last_last; //最上一個偏差值
float Kp, Ki, Kd; //比例、積分、微分系數(shù)
}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; //用戶設(shè)定值
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;
}
復(fù)制代碼
/**********************PID算法測試C語言實現(xiàn)**************************/
// 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); //顯示設(shè)定值整數(shù)部分
OLED_ShowNum(93,5,(int)(setspeed*10)%10,1,12); //顯示設(shè)定值小數(shù)部分
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); //顯示當前值整數(shù)部分
OLED_ShowNum(93,7,(int)(Speed*10000)%10000,4,12); //顯示當前值及小數(shù)點后4位
}
}
復(fù)制代碼
所有資料51hei提供下載:
PID算法測試.7z
(184.24 KB, 下載次數(shù): 141)
2019-7-21 15:50 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
wsxujn
時間:
2019-8-29 23:56
這個怎么樣,下來看看
作者:
afeiaa
時間:
2020-4-16 23:23
感謝樓主 學(xué)習(xí)了
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1