STM32實現智能溫控系統(暖手寶):PID 算法 + DS18B20+OLED 顯示,[學習 PID 優質項目]

一、項目概述

本文基于 STM32F103C8T6 單片機,設計了一個高精度溫度控制系統。通過 DS18B20 采集溫度,采用位置型 PID 算法控制 PWM 輸出驅動 MOS 管加熱Pi膜,配合 OLED 實時顯示溫度數據。系統可穩定將 PI 膜加熱至 40℃,適用于實驗室加熱裝置、小型溫控設備等場景(可以換加熱模塊)。
在這里插入圖片描述

二、硬件方案

模塊型號/參數功能描述
主控芯片STM32F103C8T6核心控制單元
溫度傳感器DS18B20溫度采集(-55℃~+125℃)
顯示模塊SSD1306 0.96寸OLED實時顯示溫度和系統狀態
驅動電路IRF540N MOS管+續流二極管加熱膜功率控制
加熱裝置PI膜(12V/50W)電加熱執行器

三、軟件架構

/* 系統流程示意圖 */
主循環:
初始化 → OLED顯示 → DS18B20讀取溫度 → PID計算 → PWM輸出 → 延時刷新
1. DS18B20 驅動優化
c
// 溫度讀取函數優化(去除冗余代碼)
float DS18B20_Get_Temp(void)
{u8 data[2];short raw;DS18B20_Start();DS18B20_Read_Byte();  // 跳過溫度值高位data[0] = DS18B20_Read_Byte();  // 讀取溫度值低位data[1] = DS18B20_Read_Byte();  // 讀取溫度值高位raw = (data[1] << 8) | data[0];return (float)raw * 0.0625;  // 精度優化,直接計算0.0625℃/LSB
}
  1. 位置型 PID 算法實現
// PID結構體定義
typedef struct {float Kp, Ki, Kd;   // 控制參數float err[3];       // 誤差隊列 [e(k), e(k-1), e(k-2)]float integral;     // 積分累加值
} PIDController;// PID計算函數(增加限幅保護)
float PID_Compute(PIDController *pid, float setpoint, float feedback)
{pid->err[0] = setpoint - feedback;pid->integral += pid->err[0];// 積分限幅(防止積分飽和)if(pid->integral > 1000) pid->integral = 1000;else if(pid->integral < -1000) pid->integral = -1000;float output = pid->Kp * pid->err[0] +pid->Ki * pid->integral +pid->Kd * (pid->err[0] - 2*pid->err[1] + pid->err[2]);// 輸出限幅(0~100%占空比)if(output > 100) output = 100;else if(output < 0) output = 0;// 更新誤差隊列pid->err[2] = pid->err[1];pid->err[1] = pid->err[0];return output;
}
  1. 顯示優化方案
// OLED顯示函數重構
void OLED_Update(float temp, float pwm)
{static char buf[20];// 溫度顯示sprintf(buf, "Temp: %.1f C", temp);OLED_ShowString(0, 0, (u8*)buf, 16, 1);// PWM輸出顯示sprintf(buf, "PWM: %.0f %%", pwm);OLED_ShowString(0, 24, (u8*)buf, 16, 1);// 狀態指示OLED_ShowChinese(0, 48, 0, 16, 1);  // 溫OLED_ShowChinese(16, 48, 1, 16, 1); // 控OLED_ShowChinese(32, 48, 2, 16, 1); // 系OLED_ShowChinese(48, 48, 3, 16, 1); // 統
}

四、主函數核心邏輯

主函數是整個溫控系統的調度中心,負責初始化配置、循環采集數據、執行控制算法并更新顯示。其核心邏輯如下:

int main(void)
{// 1. 系統初始化PID_Init(&pid, 55, 0.1, 0.8);    // 初始化PID參數DS18B20_Init();                 // 溫度傳感器初始化OLED_Init();                    // OLED顯示初始化PWM_Init();                     // PWM輸出初始化// 2. 主控制循環while (1){// 2.1 溫度采集與處理float current_temp = DS18B20_Get_Temp();current_temp = Filter_Temp(current_temp);  // 滑動平均濾波// 2.2 PID控制算法float pwm_value = PID_Compute(&pid, 40.0, current_temp);// 2.3 輸出控制PWM_SetCompare1(pwm_value);// 2.4 數據顯示OLED_Update(current_temp, pwm_value);// 2.5 系統延時(建議100ms周期)Delay_ms(100);}
}

四、調試優化

PID 參數整定:
初始參數:Kp=55, Ki=0, Kd=0.8
現象:溫度上升較快但存在超調
優化:增加積分項(Ki=0.1)并降低微分作用
抗干擾措施:

// 溫度濾波算法(滑動平均濾波)
float Filter_Temp(float new_temp)
{static float temp_buf[5] = {0};static u8 index = 0;temp_buf[index++] = new_temp;if(index >= 5) index = 0;float sum = 0;for(u8 i=0; i<5; i++) sum += temp_buf[i];return sum / 5;
}

五、測試結果

時間 (s)實測溫度 (℃)PWM 輸出 (%)狀態描述
025.0100快速加熱
3038.585接近目標值
6040.215超調后穩定
12040.020穩定維持

在這里插入圖片描述
有問題歡迎評論區留言,需要資料滴滴,或者觀看b站視頻:小陳學長的電子實驗室

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/74514.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74514.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/74514.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

neo4j知識圖譜常用命令

1. 查看所有節點和關系 如果你想查看圖數據庫中的所有節點和關系&#xff0c;可以使用以下查詢&#xff1a; Cypher 深色版本 MATCH (n)-[r]->(m) RETURN n, r, m n 和 m 表示節點。r 表示兩個節點之間的關系。這條命令會返回所有節點及其直接相連的關系。 2. 查看所有節…

從零開始:使用Luatools工具高效燒錄Air780EPM核心板項目的完整指南

本文將深入講解如何使用Luatools工具燒錄一個具體的項目到Air780EPM開發板中。如何使用官方推薦的Luatools工具&#xff08;一款跨平臺、命令行驅動的燒錄利器&#xff09;&#xff0c;通過“環境配置→硬件連接→參數設置→一鍵燒錄”四大步驟&#xff0c;幫助用戶實現Air780E…

2024年認證杯SPSSPRO杯數學建模C題(第二階段)云中的海鹽全過程文檔及程序

2024年認證杯SPSSPRO杯數學建模 C題 云中的海鹽 原題再現&#xff1a; 巴黎氣候協定提出的目標是&#xff1a;在2100年前&#xff0c;把全球平均氣溫相對于工業革命以前的氣溫升幅控制在不超過2攝氏度的水平&#xff0c;并為1.5攝氏度而努力。但事實上&#xff0c;許多之前的…

大疆上云api介紹

概述 目前對于 DJI 無人機接入第三方云平臺,主要是基于 MSDK 開發定制 App,然后自己定義私有上云通信協議連接到云平臺中。這樣對于核心業務是開發云平臺,無人機只是其中一個接入硬件設備的開發者來說,重新基于 MSDK 開發 App 工作量大、成本高,同時還需要花很多精力在無人…

云原生之開源遙測框架OpenTelemetry(在 Gin 框架中使用 OpenTelemetry 進行分布式追蹤和監控)

文章目錄 云原生之開源遙測框架OpenTelemetry背景什么是可觀測性&#xff1f; 什么是 OpenTelemetry&#xff1f;Opentelemetry的主要優勢有以下幾點&#xff1a;理解分布式鏈路日志Spans分布式鏈路 在 Gin 框架中使用 OpenTelemetry 進行分布式追蹤和監控0. 整體思路1. 初始化…

【藍橋杯速成】| 11.回溯 之 子集問題

題目一&#xff1a;子集 問題描述 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 給你一個整數數組 nums &#xff0c;數組中的元素 互不相同 。返回該數組所有可能的子集&#xff08;冪集&#xff09;。 解集 不能 包含重復的子集。你可以按 任意順序 返回解集。 示例…

Nginx目錄結構

Nginx目錄結構 ? Nginx 的安裝目錄結構可能會因安裝方式&#xff08;如使用包管理器、源碼編譯等&#xff09;和操作系統的不同而有所差異。以下是通過在線安裝時&#xff0c;Nginx 默認的目錄結構&#xff0c;以及各目錄和文件的作用。 yum install nginx查詢nginx [rootRo…

2.(vue3.x+vite)使用vue-router

前端技術社區總目錄(訂閱之前請先查看該博客) 效果預覽 路由配置的“/”與“helloWorld”都可以訪問到以下內容 http://10.11.0.87:4000/#/ http://10.11.0.87:4000/#/helloWorld 1:安裝vue-router npm i vue-router 2:創建router文件 在src的目錄下創建router文件夾…

后端返回了 xlsx 文件流,前端怎么下載處理

當后端返回一個 .xlsx 文件流時&#xff0c;前端可以通過 JavaScript 處理這個文件流并觸發瀏覽器下載。 實現步驟 發送請求獲取文件流&#xff1a; 使用 fetch 或 axios 等工具向后端發送請求&#xff0c;確保響應類型設置為 blob&#xff08;二進制數據流&#xff09;。 創建…

HTML5拖拽功能教程

HTML5拖拽功能教程 簡介 HTML5引入了原生拖放(Drag and Drop)API&#xff0c;使開發者能夠輕松實現網頁中的拖拽功能&#xff0c;無需依賴第三方庫。拖拽功能可以大大提升用戶體驗&#xff0c;適用于文件上傳、列表排序、看板系統等多種交互場景。本教程將帶您全面了解HTML拖…

VUE3 路由配置

1.下載 VueRouter 模塊 在命令行中輸入 yarn add vue-router 2.導?相關函數 在自己創建的router/index.js 文件中 import { createRouter, createWebHashHistory } from vue-router 3.創建路由實例 在自己創建的router/index.js 文件中 const theFirstRouter ()>{return…

歷史序列影像 Esri的World Imagery Wayback簡介

Esri的World Imagery Wayback是一個專注于提供歷史衛星影像的在線平臺&#xff0c;由全球領先的地理信息系統&#xff08;GIS&#xff09;技術提供商Esri開發。該平臺整合了多源衛星影像數據&#xff0c;允許用戶回溯特定區域在不同時間點的影像變化&#xff0c;支持時間序列分…

golang結構體與指針類型

結構體與指針類型 指針類型字段 具名字段 舉例 package struct_knowledgeimport "fmt"//結構體字段為指針類型 func StructWithPoint(){type Student struct{name *string}var lisa Studentfmt.Printf("賦值前,Student的實例的值%#v\n",lisa)//錯誤的賦…

NetMizer-日志管理系統-遠程命令執行漏洞挖掘

漏洞描述&#xff1a;NetMizer 日志管理系統 cmd.php中存在遠程命令執行漏洞&#xff0c;攻擊者通過傳入 cmd參數即可命令執行 1.fofa搜素語句 title"NetMizer 日志管理系統" 2.漏洞驗證 網站頁面 驗證POC /data/manage/cmd.php?cmdid

Contactile三軸觸覺傳感器:多維力感賦能機器人抓取

在非結構化環境中&#xff0c;機器人對物體的精準抓取與操作始終面臨巨大挑戰。傳統傳感器因無法全面感知觸覺參數&#xff08;如三維力、位移、摩擦&#xff09;&#xff0c;難以適應復雜多變的場景。Contactile推出的三軸觸覺力傳感器&#xff0c;通過仿生設計與創新光學技術…

OpenCV三維解算常用方法C++

如果標定過程是通過OpenCV張正友標定法實現的&#xff0c;得到的內參外參保存在.txt文件中是這樣的形式&#xff1a; ① 內參intrinsics.txt&#xff1a; ② 外參extrinsics.txt&#xff1a; 那么可以通過如下方法讀取.txt文件獲取左右相機內外參&#xff0c;主要包括三維解算…

棧和隊列相關知識題目

棧的底層原理 棧&#xff08;Stack&#xff09;是一種后進先出&#xff08;LIFO&#xff09;?的線性數據結構&#xff0c;所有操作&#xff08;如插入、刪除&#xff09;僅在棧頂進行。它的底層實現可以是數組或鏈表&#xff0c;具體取決于編程語言和應用場景。 1.基于數組實…

【實戰案例】永洪vividime:精準賦能零售行業,實現數據洞察與業務增長

在零售食品行業變革加速、市場競爭白熱化的背景下&#xff0c;XX集團作為休閑食品領域頭部企業&#xff0c;面臨消費趨勢變化、宏觀經濟承壓及業績增長乏力的多重挑戰。為破解增長困境&#xff0c;集團將“收入增長金額”確立為核心戰略指標&#xff08;北極星指標&#xff09;…

一些題目記錄

別人面經題目記錄 https://zhuanlan.zhihu.com/p/32626732052 實現 NMS&#xff0c;七八次&#xff0c;很高頻&#xff1b; 實現 MultiHeadSelfAttention&#xff0c;大概 三四次&#xff1b; 用 Numpy 或者 List 實現MLP 的前向和反向&#xff0c;4次&#xff1b; Leetcode …

面試題分享-多線程順序打印奇偶數

目錄 1.題目詳情 2.解題思路 2.1.分析題目 2.2.解析思路 3.代碼實現 4.運行結果 1.題目詳情 昨天刷抖音&#xff0c;遇到一個面試題&#xff0c;描述如下&#xff1a; 請使用兩個線程&#xff0c;分別順序交替打印奇數和偶數&#xff0c;直到10為止。例如有兩個線程&#…