MAX6675 K型热电偶读温度

发布者:WanderlustHeart最新更新时间:2022-07-14 来源: csdn关键字:MAX6675  K型热电偶 手机看文章 扫描二维码
随时随地手机看文章

K型热电偶简介

K型热电偶作为一种温度传感器,K型热电偶通常和显示仪表,记录仪表和电子调节器配套使用。

K型热电偶可以直接测量各种生产中从0℃到1300℃范围的液体蒸汽和气体介质以及固体的表面温度。

K型热电偶是目前用量最大的廉金属热电偶,其用量为其他热电偶的总和。K型热电偶丝直径一般为1.2mm~4.0mm。

正极(KP)的名义化学成分为:Ni:Cr=90:10,负极(KN)的名义化学成分为:Ni:Si=97:3,其使用温度为-200℃~1300℃。

K型热电偶具有线性度好,热电动势较大,灵敏度高,稳定性和均匀性较好,抗氧化性能强,价格便宜等优点,能用于氧化性惰性气氛中广泛为用户所采用。


MAX6675简介

MAX6675冷端温度补偿、热电偶数字转换器可进行冷端温度补偿,并将K型热电偶信号转换成数字信号。数据输出为12位分辨率、SPI兼容、只读格式。

转换器温度分辨率为0.25°C,可读取温度达+1024°C,热电偶在0°C至+700°C温度范围内精度为8 LSB。


MAX6675时序

时序

MAX6675采用串行总线协议,注意数据是在时钟上升沿后时采样。


MAX6675寄存器内容

寄存器

寄存器内容如图,其中THERMOCOUPLE INPUT是传感器检测,当K型热电偶没有接入时返回1。


MAX6675读取程序

IO定义

//PA5 SO

//PA6 CS

//PA7 SCK

#define MAX6675_SO_PORT GPIOA

#define MAX6675_SO_PIN GPIO_Pin_0

#define MAX6675_CS_PORT GPIOA

#define MAX6675_CS_PIN GPIO_Pin_11

#define MAX6675_SCK_PORT GPIOA

#define MAX6675_SCK_PIN GPIO_Pin_12

#define SCK PAout(12)

#define CS PAout(11)

#define MISO PAin(0)


由于这里采用的是stm32f103rct6主控的正点原子mini板,为了保证不和其他IC冲突,使用A0(连接的wk_up)、A11(usb)、A12(usb)引脚。


IO初始化

void max6675_init(void)

{


    GPIO_InitTypeDef  GPIO_InitStructure;


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA端口时钟


    GPIO_InitStructure.GPIO_Pin = MAX6675_CS_PIN |MAX6675_SCK_PIN;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  

    GPIO_Init(GPIOA, &GPIO_InitStructure);  

    GPIO_SetBits(GPIOA,MAX6675_CS_PIN|MAX6675_SCK_PIN);

    GPIO_InitStructure.GPIO_Pin = MAX6675_SO_PIN;    

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  

    GPIO_Init(GPIOA, &GPIO_InitStructure);  


}


其中用到的宏已经在上面引脚定义处给出。


串行数据读写程序

/**

  * @brief  max6675模块读写一个字节的数据

  * @param  txData:要发送的数据

  * @retval 接收到的数据

  */

uint8_t max6675_readWriteByte(uint8_t txData)

{

    unsigned char temp=0;

    unsigned char dat=0;

    for(temp=0x80; temp!=0; temp>>=1)

    {

        SCK=0;

        SPI_delay();  //让SCK稳定

        SCK=1;

        SPI_delay();  //让SCK稳定

        if(MISO==1)

        {

            dat|=temp;

        }

        else

        {

            dat&=~temp;

        }

    }

    return dat;

}


根据IC时序图,可以编写串行数据读取程序,注意因为是上升沿后读取数据,所以SCK先拉低再拉高,其中的SPI_delay调用的系统延时,用于使时钟线稳定,也保证采样时数据稳定,同时由于MAX6675允许的最快速率为4MHz,所以需要必要的延时。


void SPI_delay()

{

    delay_us(1);

}


读取寄存器值

uint16_t max6675_readRawValue(void)

{

    uint16_t tmp=0;

    GPIO_ResetBits(MAX6675_CS_PORT,MAX6675_CS_PIN); //enable max6675


    tmp=max6675_readWriteByte(0XFF); //read MSB

    tmp <<= 8;

    tmp |= max6675_readWriteByte(0XFF); //read LSB;

    //tmp=tmp&0x00FF;

    GPIO_SetBits(MAX6675_CS_PORT,MAX6675_CS_PIN); //disable max6675

    if (tmp & 4)

    {

        // thermocouple open

        //tmp = 0x0FFF; //未检测到热电偶 4095

tmp = 4095; //未检测到热电偶 4095

printf("thermocouple openrn");

    }

    else

    {

        tmp = tmp >> 3;

    }

tmp=tmp&0x0FFF; //12bit

    return tmp;

}


电平片选设备,然后连续两次调用读取函数,读出16bit的寄存器值,先判断热电偶是否连接(如果热电偶没有连接,这里会直接返回4095,即测出来的值是1023.75摄氏度),最后返回12bit的温度值。


温度计算

/**

  * @brief  max6675模块读取测得的原始数据

  * @param  None

  * @retval 温度值(单位:℃)

  */

float max6675_readTemperature(void)

{

    return (max6675_readRawValue() * 1024.0 / 4096);

}


因为MAX6675的量程是0 ~ 1023.75摄氏度,而12bit表示的范围是 0 ~ 4095,所以需要读量程进行一个简单的转换。


主函数

直接改写正点原子的 ALIENTEK MINISTM32 实验11 TFT LCD液晶显示实验 的例程:


#include "led.h"

#include "delay.h"

#include "sys.h"

#include "usart.h"

#include "lcd.h"


void max6675_init(void);

uint8_t max6675_readWriteByte(uint8_t txData); //max6675模块读写一个字节

uint16_t max6675_readRawValue(void);

float max6675_readTemperature(void);



char ss[20];

int main(void)

{

    float tempValue=0;

    u8 x=0;

    delay_init();     //延时函数初始化

    uart_init(115200); //串口初始化为9600

    LED_Init();   //初始化与LED连接的硬件接口

    LCD_Init();

    max6675_init();

    while(1)

    {


        POINT_COLOR=RED;

        tempValue=max6675_readTemperature();

        sprintf(ss,"temp:%f",tempValue);

        LCD_ShowString(30,40,200,24,24,ss);

        LED0=!LED0;

        delay_ms(200);

    }

}


注意MAX6675数据手册有说明,芯片的转换时间典型值为0.17s,最大值为0.22s,如果发现MAX6675采集到的数据一直不变,请注意自己的采样频率!!!


实际效果

实际演示效果如下图~

在这里插入图片描述

其中k型热电偶是自己后来单独买的,MAX6675是在优信电子购买的~

关键字:MAX6675  K型热电偶 引用地址:MAX6675 K型热电偶读温度

上一篇:stm32裸机移植FreeModbus
下一篇:STM32外部中断的关闭和打开

推荐阅读最新更新时间:2024-11-09 11:49

基于LIN总线和MAX6675温度传感器改善车辆制动性能
1、引言 国内的大型、重型车辆普遍采用鼓式刹车装置,每年重型车辆在山路下坡行驶时因制动失灵造成的事故频发,刹车鼓温度过热导致制动器的散热不能满足要求是导致制动失灵的主要因素,提高重型车辆制动性能的最佳方案就是加装ABS,尽管国家已发布标准GB7258、GB12676来规定客车和货车必须安装符合要求的防抱死制动装置,以此来增强道路行驶的安全性。但实际配备情况很不理想,因为鼓式刹车换成盘式刹车、配备ABS会使厂商成本增加,所以未来几年内多数大型车辆仍旧采用加装水箱的方式来给刹车鼓降温。 就国内目前实际情况,本文提出的基于LIN总线监测刹车鼓温度、自动控制喷淋系统以及添加安全报警功能的设计是改善现有重型车辆制动性能的一种低成本、便于
[嵌入式]
基于LIN总线和<font color='red'>MAX6675</font><font color='red'>温度</font>传感器改善车辆制动性能
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved