91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第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

    文章

    7951

    瀏覽量

    154982
  • 傳感器
    +關注

    關注

    2565

    文章

    52983

    瀏覽量

    767290
  • 單片機
    +關注

    關注

    6067

    文章

    44989

    瀏覽量

    650366
  • STM32
    +關注

    關注

    2293

    文章

    11032

    瀏覽量

    364800
  • 檢測儀
    +關注

    關注

    5

    文章

    4257

    瀏覽量

    44142
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

    `微機燃點檢測儀配置簡要?微機燃點檢測儀配置簡要?【鶴壁市英特儀器儀表廠】詳詢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 ?1047次閱讀
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>爐溫</b><b class='flag-5'>溫度</b><b class='flag-5'>檢測儀</b>設計方案
    主站蜘蛛池模板: 夜夜操夜夜爱 | 久久久久无码国产精品一区 | 伊人久久影视 | 天天色影院| 永久免费看片 | 五月伊人婷婷 | 亚洲免费影视 | 激情五月综合综合久久69 | 特黄特黄aaaa级毛片免费看 | 男操女视频网站 | 奇米影视一区二区三区 | 日韩一卡 二卡 三卡 四卡 免费视频 | 欧美夜夜| 亚洲国产精品久久久久婷婷老年 | 奇米网在线观看 | 日本高清不卡视频 | 欧美一级第一免费高清 | 亚洲综合欧美日本另类激情 | 国产伦精品一区二区免费 | 免费人成在观看 | 久久久久久久综合狠狠综合 | 国产va精品免费观看 | 天堂自拍 | 91精品国产亚洲爽啪在线影院 | 日韩一级片视频 | 亚洲专区一路线二 | 日本free护士姓交 | 一级做a爱片特黄在线观看免费看 | 国产激烈床戏无遮挡在线观看 | 一个色在线视频 | 久久久国产精品免费 | 白丝丝袜高跟国产在线视频 | 国产呦在线观看视频 | 久久久午夜精品理论片 | 韩国三级hd中文字幕久久精品 | 男女全黄做爰视频 | 天天夜夜狠狠 | 国产精品伦理一区二区三区 | 你懂在线| 成人福利在线视频 | 九色在线播放 |