在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于STM32設計的爐溫溫度檢測儀

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2023-05-26 09:15 ? 次閱讀

一、項目背景

隨著工業生產的發展,爐溫檢測在現代化工、鋼鐵、電子、玻璃等行業中變得越來越重要。對于這些行業,穩定的生產環境和品質穩定的產品是必須的,而爐溫是影響產品品質的重要因素之一。如果爐溫過高或過低,都有可能導致產品結構改變、硬度變化、強度下降等質量問題,使得產品不能達到預期的性能指標。此外,爐溫不僅會影響產品質量,還會影響設備的使用壽命和工作效率,有時甚至會對整個工廠的正常生產造成影響。

為了防止這些問題的發生,現代化工、鋼鐵、電子、玻璃等行業需要精準測量爐溫并實時地監測爐溫變化情況。而本項目即是為了滿足這些需求而設計的。采用STM32F103C8T6作為主控芯片,它是一款基于ARM Cortex-M3內核的微控制器,具有豐富的外設和良好的計算能力,并且易于控制和集成到系統中。同時,鉑電阻PT100是一種高精度、穩定性好、線性度高的溫度傳感器,能夠提供更加準確的溫度測量結果。采用0.96寸IIC接口的OLED屏幕進行顯示,操作簡便、節省成本,并且具有較好的兼容性和可移植性。

image-20230525234029685

image-20230525234051359

二、設計思路

【1】硬件設計

主控芯片采用STM32F103C8T6,其內置有多種外設,可滿足該項目的需求。鉑電阻PT100作為測溫傳感器,能夠提供更加準確的溫度測量結果。0.96寸IIC接口的OLED顯示屏幕是本項目的顯示工具,能夠直觀地顯示測量結果。

【2】軟件設計

軟件設計分為數據采集、數據處理和數據顯示三個部分。采用STM32的ADC進行數據采集,通過PT100將溫度信號轉換為電阻信號,再通過AD轉換器轉換成數字信號進行處理。在數據處理中,對ADC采樣值進行數據校準、濾波處理和算法計算,得到準確的溫度值。最后,通過IIC總線協議將溫度值發送給OLED屏幕進行顯示,實現實時顯示檢測結果的功能。

三、代碼實現

【1】OLED顯示屏代碼

以下是基于STM32F103C8T6主控芯片,通過IIC接口控制0.96寸OLED顯示屏顯示數字的代碼:

#include "stm32f10x.h"
 #include "i2c.h"
 ?
 #define OLED_ADDRESS 0x78 // OLED IIC地址
 ?
 void oled_init(void) {
   OLED_Write_Command(0xAE); // 關閉顯示
   OLED_Write_Command(0xD5); // 設置時鐘分頻因子
   OLED_Write_Command(0x80); // 重要參數,必須設置,不然屏幕無法上電
   OLED_Write_Command(0xA8); // 設置驅動路數
   OLED_Write_Command(0x3F); // 默認值
   OLED_Write_Command(0xD3); // 設置顯示偏移
   OLED_Write_Command(0x00); // 默認值
   OLED_Write_Command(0x40); // 設置起始行
   OLED_Write_Command(0x8D); // 電荷泵設置
   OLED_Write_Command(0x14); // 開啟電荷泵
   OLED_Write_Command(0x20); // 設置內存地址模式
   OLED_Write_Command(0x00); // 水平模式
   OLED_Write_Command(0xA1); // 段重新映射設置
   OLED_Write_Command(0xC0); // 設置COM掃描方向
   OLED_Write_Command(0xDA); // 設置COM引腳硬件配置
   OLED_Write_Command(0x12); // 默認值
   OLED_Write_Command(0x81); // 對比度設置
   OLED_Write_Command(0xCF); // 默認值
   OLED_Write_Command(0xd9); // 設置預充電周期
   OLED_Write_Command(0xF1); // 默認值
   OLED_Write_Command(0xDB); // 設置VCOMH
   OLED_Write_Command(0x40); // 默認值
   OLED_Write_Command(0xA4); // 關閉全屏點亮
   OLED_Write_Command(0xA6); // 設置顯示方式
   OLED_Write_Command(0xAF); // 開啟屏幕顯示
 }
 ?
 void OLED_Write_Command(uint8_t cmd) {  // 寫命令
   I2C1_Start();
   I2C1_SendByte(OLED_ADDRESS);
   I2C1_SendByte(0x00);
   I2C1_SendByte(cmd);
   I2C1_Stop();
 }
 ?
 void OLED_Write_Data(uint8_t data) { // 寫數據
   I2C1_Start();
   I2C1_SendByte(OLED_ADDRESS);
   I2C1_SendByte(0x40);
   I2C1_SendByte(data);
   I2C1_Stop();
 }
 ?
 void OLED_Set_Pos(uint8_t x, uint8_t y) { // 設置光標位置
   OLED_Write_Command(0xb0+y);
   OLED_Write_Command(((x&0xf0)>>4)|0x10);
   OLED_Write_Command(x&0x0f);
 }
 ?
 void OLED_Show_Number(uint8_t x, uint8_t y, uint32_t num) { // 在指定位置顯示數字
   OLED_Set_Pos(x, y);
   while (num) {
     uint8_t temp = num % 10;
     OLED_Write_Data(temp + '0');
     num /= 10;
   }
 }
 ?
 int main(void) {
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
   GPIO_InitTypeDef GPIO_InitStructure;
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
 ?
   I2C1_Init();
 ?
   oled_init();
 ?
   OLED_Show_Number(0, 0, 12345); //在第1行第1列顯示數字12345
 ?
   while (1) {
   }
 }

首先,通過oled_init()函數初始化OLED屏幕,在函數中依次寫入了一系列命令,來設置OLED的各種參數,例如驅動路數、掃描方向、預充電周期、對比度等。接著,在OLED_Show_Number()函數中,調用了OLED_Set_Pos()函數來設置數字顯示的位置,然后通過循環取余數的方法將數字逐位分離,再將其轉換為字符型并通過OLED_Write_Data()函數輸出到OLED屏幕上,最終實現在屏幕上顯示指定數字的功能。

【2】溫度測量代碼

以下是基于STM32F103C8T6主控芯片,通過IIC接口控制0.96寸OLED顯示屏顯示溫度,并通過串口打印溫度的代碼:

#include "stm32f10x.h"
 #include "i2c.h"
 #include "usart.h"
 ?
 #define OLED_ADDRESS 0x78 // OLED IIC地址
 ?
 // PT100溫度轉換函數
 float RTD2Temperature(float R) {
     float temperature = 0;
     float RTD_A = 3.9083e-003f;
     float RTD_B = -5.775e-007f;
 ?
     temperature = (-RTD_A + sqrtf(RTD_A * RTD_A - 4 * RTD_B * (1 - R / 100))) / (2 * RTD_B);
     return temperature;
 }
 ?
 void oled_init(void) {
     OLED_Write_Command(0xAE); // 關閉顯示
     OLED_Write_Command(0xD5); // 設置時鐘分頻因子
     OLED_Write_Command(0x80); // 重要參數,必須設置,不然屏幕無法上電
     OLED_Write_Command(0xA8); // 設置驅動路數
     OLED_Write_Command(0x3F); // 默認值
     OLED_Write_Command(0xD3); // 設置顯示偏移
     OLED_Write_Command(0x00); // 默認值
     OLED_Write_Command(0x40); // 設置起始行
     OLED_Write_Command(0x8D); // 電荷泵設置
     OLED_Write_Command(0x14); // 開啟電荷泵
     OLED_Write_Command(0x20); // 設置內存地址模式
     OLED_Write_Command(0x00); // 水平模式
     OLED_Write_Command(0xA1); // 段重新映射設置
     OLED_Write_Command(0xC0); // 設置COM掃描方向
     OLED_Write_Command(0xDA); // 設置COM引腳硬件配置
     OLED_Write_Command(0x12); // 默認值
     OLED_Write_Command(0x81); // 對比度設置
     OLED_Write_Command(0xCF); // 默認值
     OLED_Write_Command(0xd9); // 設置預充電周期
     OLED_Write_Command(0xF1); // 默認值
     OLED_Write_Command(0xDB); // 設置VCOMH
     OLED_Write_Command(0x40); // 默認值
     OLED_Write_Command(0xA4); // 關閉全屏點亮
     OLED_Write_Command(0xA6); // 設置顯示方式
     OLED_Write_Command(0xAF); // 開啟屏幕顯示
 }
 ?
 void OLED_Write_Command(uint8_t cmd) {  // 寫命令
     I2C1_Start();
     I2C1_SendByte(OLED_ADDRESS);
     I2C1_SendByte(0x00);
     I2C1_SendByte(cmd);
     I2C1_Stop();
 }
 ?
 void OLED_Write_Data(uint8_t data) { // 寫數據
     I2C1_Start();
     I2C1_SendByte(OLED_ADDRESS);
     I2C1_SendByte(0x40);
     I2C1_SendByte(data);
     I2C1_Stop();
 }
 ?
 void OLED_Set_Pos(uint8_t x, uint8_t y) { // 設置光標位置
     OLED_Write_Command(0xb0+y);
     OLED_Write_Command(((x&0xf0)>>4)|0x10);
     OLED_Write_Command(x&0x0f);
 }
 ?
 void OLED_Show_Temperature(uint8_t x, uint8_t y, float temperature) { // 在指定位置顯示溫度
     OLED_Set_Pos(x, y);
     int temp = (int)(temperature * 10);
     for (int i = 0; i < 5; i++) {
         if (i == 2) {
             OLED_Write_Data('.');
         } else {
             OLED_Write_Data(temp % 10 + '0');
             temp /= 10;
         }
     }
     OLED_Write_Data('C');
 }
 ?
 int main(void) {
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
     GPIO_InitTypeDef GPIO_InitStructure;
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIOB, &GPIO_InitStructure);
 ?
     I2C1_Init();
 ?
     oled_init();
 ?
     USART1_Init();
 ?
     while (1) {
         float resistance = 100; // 鉑電阻的電阻值
         float temperature = RTD2Temperature(resistance); // 算出溫度值
 ?
         // OLED顯示溫度
         OLED_Show_Temperature(0, 0, temperature);
 ?
         // 串口輸出溫度
         char str[32];
         sprintf(str, "Temperature: %.1f C\\r\\n", temperature);
         USART1_SendString(str);
 ?
         delay_ms(1000); // 延時1s
     }
 }

首先,利用RTD2Temperature()函數將鉑電阻的電阻值轉換為溫度值。接著,在OLED_Show_Temperature()函數中,調用了OLED_Set_Pos()函數來設置溫度顯示的位置,并將溫度值逐位分離,通過OLED_Write_Data()函數輸出到OLED屏幕上,最終實現在屏幕上顯示測量的溫度的功能。同時,也通過串口輸出溫度值。

在主函數main()中,不斷循環讀取鉑電阻的電阻值,并通過RTD2Temperature()函數轉換為溫度值。然后,調用OLED_Show_Temperature()函數將溫度顯示在OLED屏幕上,并調用USART1_SendString()函數通過串口輸出溫度值。最后,通過delay_ms()函數延時1秒,等待下一次測量。
審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7841

    瀏覽量

    153316
  • 傳感器
    +關注

    關注

    2560

    文章

    52172

    瀏覽量

    761516
  • 單片機
    +關注

    關注

    6058

    文章

    44816

    瀏覽量

    644460
  • STM32
    +關注

    關注

    2283

    文章

    10986

    瀏覽量

    361174
  • 檢測儀
    +關注

    關注

    5

    文章

    4179

    瀏覽量

    43322
收藏 人收藏

    評論

    相關推薦

    微機燃點檢測儀配置簡要?

    `微機燃點檢測儀配置簡要?微機燃點檢測儀配置簡要?【鶴壁市英特儀器儀表廠】詳詢138.3923.4904檢測燃點的儀器,化驗燃點的設備,生物燃料燃燒測定,煤炭燃點
    發表于 09-10 15:56

    水分檢測儀的原理是什么?

    水分測定也叫做水分、水份測定、快速水分測定、水分計、水分檢測儀、水分測量儀、水分分析
    發表于 10-28 09:11

    固體燃料燃點檢測儀 YTRD-9型

    燃點檢測儀,測量煤燃點的設備功能特點:1、電腦與控制器雙向通訊,實行全面監控自動控制、顯示加熱爐的溫度自動測定、顯示煤樣溫度自動繪制爐溫隨時間變化曲線自動繪制煤樣
    發表于 12-22 07:53

    高精度木材燃點著火點檢測儀 SH-6A系列

    ,測試木材著火點機器,檢測樹葉稻草著火點溫度的設備燃點測定功能特點:1、電腦與控制器雙向通訊,實行監控,自動控制、顯示加熱爐的溫度,自動測定、顯示樣
    發表于 12-23 08:54

    常用的木材枯草樹葉燃點檢測儀

    `常用的木材枯草樹葉燃點檢測儀 常用的木材枯草樹葉燃點檢測儀 全自動木材燃點測定,高精度木材燃點分析,測試固體燃料著火點儀器,檢測木炭木
    發表于 02-28 14:24

    HY-9T全自動木材燃點檢測儀【英特儀器】

    `HY-9T全自動木材燃點檢測儀【英特儀器】 HY-9T全自動木材燃點檢測儀【英特儀器】林業大學全自動木材燃點測定,微機木材燃點分析,木材著火點化驗
    發表于 04-16 07:22

    怎樣去設計基于嵌入式stm32的心率檢測儀

    資源分享:嵌入式stm32項目開發 心率檢測儀的設計與實現本課程主要基于心率檢測儀的設計與實現講解STM32開發技術,STM32開發板廣泛應
    發表于 08-03 06:11

    基于心率檢測儀的設計與實現講解STM32開發技術

    視頻教程免費分享:嵌入式stm32項目開發之心率檢測儀的設計與實現本課程主要基于心率檢測儀的設計與實現講解STM32開發技術,STM32開發
    發表于 08-03 06:44

    怎樣去設計一種STM32的心率檢測儀

    STM32是什么?怎樣去設計一種STM32的心率檢測儀
    發表于 09-28 08:12

    怎樣去設計一種基于STM32的心率檢測儀

    怎樣去設計一種基于STM32的心率檢測儀
    發表于 09-29 08:58

    怎樣去設計一種基于STM32的心率檢測儀

    怎樣去設計一種基于STM32的心率檢測儀
    發表于 10-11 07:13

    如何利用STM32單片機實現顏色檢測儀設計

    9、基于STM32單片機的顏色檢測儀設計文章目錄9、基于STM32單片機的顏色檢測儀設計引言1、系統概述1.1、設計任務1.2、設計要求2、方案設計與論證2.1、芯片選擇方案2.2 、
    發表于 11-30 06:34

    便攜式低功耗溫度檢測儀設計

    便攜式低功耗溫度檢測儀主要由一體化智能溫度檢測模塊、nRF905無線數據收發模塊和LCD溫度數據顯示模塊構成。該
    發表于 09-24 15:36 ?31次下載
    便攜式低功耗<b class='flag-5'>溫度</b><b class='flag-5'>檢測儀</b>設計

    基于STM32空氣質量檢測儀原理圖

    STM32空氣質量檢測儀原理圖STM32空氣質量檢測儀原理圖STM32空氣質量檢測儀原理圖
    發表于 10-29 18:22 ?355次下載

    基于STM32爐溫溫度檢測儀設計方案

    隨著工業生產的發展,爐溫檢測在現代化工、鋼鐵、電子、玻璃等行業中變得越來越重要。對于這些行業,穩定的生產環境和品質穩定的產品是必須的,而爐溫是影響產品品質的重要因素之一。
    發表于 07-06 10:13 ?955次閱讀
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>爐溫</b><b class='flag-5'>溫度</b><b class='flag-5'>檢測儀</b>設計方案
    主站蜘蛛池模板: 福利视频一区二区牛牛 | 欧美婷婷六月丁香综合色 | 日日碰狠狠添天天爽五月婷 | 日韩三级免费 | 性欧美videofree另类超大 | 久久国产精品久久久久久久久久 | 天堂网男人 | 国产chinesetube | 素股中文字幕 | 国产高清在线免费 | a级毛片网| 天天躁夜夜躁狠狠躁2021 | 曰本三级香港三级人妇99视频 | 老师叫我揉她内裤越快越好 | h视频在线观看网站 | 精品视频一区二区三区四区五区 | 成人青草亚洲国产 | 666夜色666夜色国产免费看 | 四虎新地址4hu 你懂的 | 日日干视频| 亚洲精品色一区色二区色三区 | 天天插天天狠天天透 | 日本三级香港三级三级人!妇久 | 色内内免费视频播放 | 精品一区二区国语对白 | 黄色天堂| 女人色网| 丁香视频在线 | 天天艹在线| 一级一级特黄女人精品毛片 | 天天色播| 亚洲综合成人网 | 欧美日韩国产成人高清视频 | 末发育娇小性色xxxxx视频 | 天天爽夜夜爽一区二区三区 | 天天伊人网 | 亚洲三级在线视频 | 亚洲色图激情 | 天堂bt种子资源+在线 | 日本久操视频 | 美女视频网站色软件免费视频 |