基于STM32设计的炉温温度检测仪

这篇具有很好参考价值的文章主要介绍了基于STM32设计的炉温温度检测仪。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

炉温检测在现代工业生产中十分重要,因为炉温过高或过低都会对产品质量产生影响,甚至影响工厂的正常运作。因此,设计一款能够精准测量炉温并显示结果的检测仪器具有很大的实用价值。
本项目采用了STM32F103C8T6作为主控芯片,该芯片拥有丰富的外设和性能较好的计算能力,能够满足该项目对计算和控制的需求。同时,铂电阻PT100作为测温传感器,能够提供更加精准的温度测量结果。

一、项目背景

随着工业生产的发展,炉温检测在现代化工、钢铁、电子、玻璃等行业中变得越来越重要。对于这些行业,稳定的生产环境和品质稳定的产品是必须的,而炉温是影响产品品质的重要因素之一。如果炉温过高或过低,都有可能导致产品结构改变、硬度变化、强度下降等质量问题,使得产品不能达到预期的性能指标。此外,炉温不仅会影响产品质量,还会影响设备的使用寿命和工作效率,有时甚至会对整个工厂的正常生产造成影响。

为了防止这些问题的发生,现代化工、钢铁、电子、玻璃等行业需要精准测量炉温并实时地监测炉温变化情况。而本项目即是为了满足这些需求而设计的。采用STM32F103C8T6作为主控芯片,它是一款基于ARM Cortex-M3内核的微控制器,具有丰富的外设和良好的计算能力,并且易于控制和集成到系统中。同时,铂电阻PT100是一种高精度、稳定性好、线性度高的温度传感器,能够提供更加准确的温度测量结果。采用0.96寸IIC接口的OLED屏幕进行显示,操作简便、节省成本,并且具有较好的兼容性和可移植性。

基于STM32设计的炉温温度检测仪

基于STM32设计的炉温温度检测仪

二、设计思路

【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秒,等待下一次测量。文章来源地址https://www.toymoban.com/news/detail-471783.html

到了这里,关于基于STM32设计的炉温温度检测仪的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 毕业设计 STM32空气质量检测仪 - 单片机 嵌入式

    Hi,大家好,学长今天向大家介绍一个 单片机项目 基于STM32的空气质量检测仪 大家可用于 课程设计 或 毕业设计 如今人们大约 80%的时间是在室内度过的, 室内空气质量与我们每个人的工作和生活都息息相关, 因此对生活环境的空气质量提出了更高的要求。 针对雾霾、 室内

    2024年01月17日
    浏览(54)
  • 单片机毕业设计 STM32智能空气质量检测仪 - 环境检测盒子 嵌入式 物联网

    Hi,大家好,学长今天向大家介绍一个 单片机项目 基于STM32的空气质量检测仪 大家可用于 课程设计 或 毕业设计 如今人们大约 80%的时间是在室内度过的, 室内空气质量与我们每个人的工作和生活都息息相关, 因此对生活环境的空气质量提出了更高的要求。 针对雾霾、 室内

    2024年02月10日
    浏览(46)
  • 基于单片机体温心率脉搏检测仪系统设计

    ** 单片机设计介绍, 基于单片机体温心率脉搏检测仪系统设计   基于单片机体温心率脉搏检测仪系统设计是一个综合性的项目,它结合了单片机技术、传感器技术和电子技术,实现了对人体体温、心率和脉搏的实时监测。以下是关于该系统设计的主要内容的概述: 一、系

    2024年04月10日
    浏览(55)
  • STM32之数据采集和心率检测仪(原理图、PCB、程序源码等)超详细!!!

    该设计 本是 以NUCLEO_F411RE为控制核心,利用芯片内部 的 模数转换器来采集外部 的 模拟信号 , 并 在 TFT液晶屏的配合下来显示采集的数据。为便于直观分析,还将采集的数据绘制成波形图。为验证其设计功能,特配置了心率传感器来获取心率信号 , 经实际验证能 在 采集过

    2024年02月05日
    浏览(47)
  • 【特纳斯电子】基于单片机的空气质量检测仪-实物设计

    资料查找方式: 特纳斯电子(电子校园网):搜索下面编号即可 T2212204C-SW 本设计是基于单片机的空气质量检测仪,主要实现以下功能: 1.可以通过显示屏来显示温度、湿度、PM2.5浓度、一氧化碳浓值。 2.通过温湿度模块来检测环境温度湿度值。 3.通过PM2.5检测器来检测PM2.5值

    2024年02月19日
    浏览(52)
  • 浅析美业皮肤检测仪图像算法

            做为美容院的入口设备,检测仪有着至关重要的角色。它不仅要帮助咨询师讲解皮肤问题,还要智能地推荐解决方案和护理方案。小编从事美业仪器研发多年,每次看到新的算法和设备出现,都会非常地高兴,一方面是可以学习借鉴,让自己少走弯路;另一方面也

    2024年02月10日
    浏览(115)
  • 特高压导线的舞动检测仪中安全加密传输

    随着特高压电网的广泛兴建,输电线路的运行管理越来越复杂,导线舞动事故的发生也日益频繁。舞动常引起导线断股、断线、金具严重磨损、脱落、杆塔倾倒、线路跳闸等严重事故,容易造成电网大面积停电,给电网运行造成重大经济损失。为了及时掌握架空输电线路导线

    2024年04月26日
    浏览(48)
  • 手机盖板IR油墨透光率检测仪T03

    手机盖板作为手机最外层玻璃面板,其加工一般有落料、倒边、抛光、镀膜、丝印等多道加工工序组成,其中任何一个工序出现差错,都有可能导致手机盖板产生缺陷,例如漏油、透光、IR孔不良、视窗划伤、油墨区划伤、內污、边花等,这些缺陷随时可能出现。   随着手机

    2024年02月11日
    浏览(45)
  • 70、基于STM32单片机的蓝牙智能热水器控制系统设计温度温控水温水位检测

    毕设帮助、开题指导、技术解答(有偿)见文末。 目录 摘要 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、PCB图 六、硬件框图 七、程序源码 八、资料包括 随着社会的发展,人类科技的进步,各行各业都在使自己的产品智能化、数字化,因老式的热水器使用煤气

    2024年02月05日
    浏览(107)
  • 气体检测仪语音报警芯片,可自行烧录的音频芯片,WT588F02B-8S

    近年来,安全问题备受关注,特别是涉及气体泄漏的危险场景。 为了进一步增强气体检测仪的安全功能,市面上便研发出了一款有害气体报警器,并采用WT588F02B-8S语音提示芯片为元器件,为产品赋予更多声音,更多警示,让安全警报更为直观有效。 WT588F语音芯片,保护生命

    2024年02月13日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包