[技术讨论] MAX6675+ K型热电偶

前几天做项目用到一个测温电路,使用热电偶测温,今天来跟大家一起分享一下使用心得。
    1、什么是热电偶
   当有两种不同的导体或半导体A和B组成一个回路,其两端相互连接时,只要两结点处的温度不同,
一端温度为T,称为工作端或热端,另一端温度为TO,称为自由端(也称参考端)或冷端,回路中将
产生一个电动势,该电动势的方向和大小与导体的材料及两接点的温度有关。这种现象称为“热电效应”,
两种导体组成的回路称为“热电偶”,这两种导体称为“热电极”,产生的电动势则称为“热电动势”。
因此,我们通过测量热电偶之间的压差就会求得侧两端的温度。
  2、测量方案
  MCU:HC32F460  测温芯片 MAX6675 传感器: K型热电偶
  为什么使用K型热电偶?  K型热电偶具有线性度好,热电动势较大,灵敏度高,稳定性和均匀性较好,抗氧化性能强,价格便宜等优点,
  能用于氧化性惰性气氛中。K型热电偶可以直接测量各种生产中从0℃到1300℃范围的液体蒸汽和气体介质
以及固体的表面温度。K型热电偶是目前用量最大的廉金属热电偶,从性能和成本上考虑我们采用K型热电偶。

MAX6675 这是一款专门用于测量K型热电偶芯,12-Bit, 0.25°C Resolution,最高测量温度为1024,符合我们使用条件。
3、使用方式
K型采用的SPI通讯协议

为了保证MCU的时钟边沿被MAX6675正确识别,MCU的SPI的时钟频率最好不超过该芯片最高时钟频率的1/2。


热电偶蓝色端接在MAX6675芯片T-,T-端通常接在PCB的地线。
热电偶红色端接在MAX6675芯片T+。 
4、应用电路
 
原理图电路前方只加滤波电容,不能再加电阻,MAX6675内部是差分运放,外加电阻会改变原有的放大倍率。
5、代码  
注意SPI的时钟极性和相位
MAX6675的CS管脚被拉低后,发送十六个脉冲信号就可得到输出数据。
MAX6675只有数据线只有MISO管脚。
//SPI  和 CS管脚初始化
void Max6675_GPIO_Init(void)
{
    stc_spi_init_t stcSpiInit;
    stc_port_init_t stcPortInit;

    MEM_ZERO_STRUCT(stcPortInit);
    stcPortInit.enPinMode = Pin_Mode_Out;
    stcPortInit.enPullUp = Enable;
    PORT_Init(MAX6675_SPI2_CS1_PORT, MAX6675_SPI2_CS1_PIN, &stcPortInit);
    MAX6675_SPI2_CS_HIGH();

    /* configuration structure initialization */
    MEM_ZERO_STRUCT(stcSpiInit);
    /* Configuration peripheral clock */
    PWC_Fcg1PeriphClockCmd(MAX6675_SPI2_UNIT_CLOCK, Enable);

    /* Configuration SPI pin */
    PORT_SetFunc(MAX6675_SPI2_SCK_PORT, MAX6675_SPI2_SCK_PIN,  MAX6675_SPI2_SCK_FUNC, Disable);
    PORT_SetFunc(MAX6675_SPI2_MISO_PORT,MAX6675_SPI2_MISO_PIN, MAX6675_SPI2_MISO_FUNC, Disable);

    /* Configuration SPI structure */
    stcSpiInit.enClkDiv = SpiClkDiv128;
    stcSpiInit.enFrameNumber = SpiFrameNumber1;
    stcSpiInit.enDataLength = SpiDataLengthBit8;
    stcSpiInit.enFirstBitPosition = SpiFirstBitPositionMSB;
    stcSpiInit.enSckPolarity = SpiSckIdleLevelLow;
    stcSpiInit.enSckPhase = SpiSckOddSampleEvenChange;
    stcSpiInit.enReadBufferObject = SpiReadReceiverBuffer;
    stcSpiInit.enWorkMode = SpiWorkMode3Line;
    stcSpiInit.enTransMode = SpiTransFullDuplex;
    stcSpiInit.enCommAutoSuspendEn = Disable;
    stcSpiInit.enModeFaultErrorDetectEn = Disable;
    stcSpiInit.enParitySelfDetectEn = Disable;
    stcSpiInit.enParityEn = Disable;
    stcSpiInit.enParity = SpiParityEven;
    stcSpiInit.enMasterSlaveMode = SpiModeMaster;
    stcSpiInit.stcDelayConfig.enSsSetupDelayOption = SpiSsSetupDelayCustomValue;
    stcSpiInit.stcDelayConfig.enSsSetupDelayTime = SpiSsSetupDelaySck1;
    stcSpiInit.stcDelayConfig.enSsHoldDelayOption = SpiSsHoldDelayCustomValue;
    stcSpiInit.stcDelayConfig.enSsHoldDelayTime = SpiSsHoldDelaySck1;
    stcSpiInit.stcDelayConfig.enSsIntervalTimeOption = SpiSsIntervalCustomValue;
    stcSpiInit.stcDelayConfig.enSsIntervalTime = SpiSsIntervalSck6PlusPck2;
    SPI_Init(MAX6675_SPI2_UNIT, &stcSpiInit);
    SPI_Cmd(MAX6675_SPI2_UNIT, Enable);

}

/**
  * @brief  max6675模块读取测得的原始数据
  * @param  None
  * @retval 温度的原始数据
  */
static uint16_t Max6675_ReadRawValue(channel)
{
    uint16_t tmp;
    //enable max6675
    Max6675_Cs_Enable(channel);

    tmp = Max6675_Write_Send_Byte(0XFF); //read MSB
    tmp <<= 8;
    tmp |= Max6675_Write_Send_Byte(0XFF); //read LSB

    Max6675_Cs_Disable(channel);
    if(tmp & 4)
    {
        // thermocouple open
        tmp = 4095; //未检测到热电偶
    }
    else
    {
        tmp = tmp >> 3;
    }
    return tmp;
}


//温度分辨率
#define MAX6675_TEMPERATURE_RESOLUTION            0.25f

将SPI读取的数据x温度分辨率,就得到侧两端实际的温度值。


通过返回数据的第二个位,可以检测是否有热电偶是否插上。如果D2为0则表示有热电偶,否则没有。
再就是画PCB的时候,热电偶的冷端和 MAX6675原理图热量较大的元器件,避免检测误差。
以上 就是MAX6675 的使用心得。
---------------------
作者:woai32lala
链接:https://bbs.21ic.com/icview-3225330-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

这是一篇关于MAX6675的K热电偶测温实验,见附件下载其源码和使用教程。热电偶实际上是一种能量转换器,它将热能转换为电能,用所产生的热电势测量温度,对于热电偶的热电势,应注意如下几个问题: 1、热电偶的热电势是热电偶工作端的两端温度函数的差,而不是热电偶冷端与工作端,两端温度差的函数; 2、热电偶所产生的热电势的大小,当热电偶的材料是均匀时,与热电偶的长度和直径无关,只与热电偶材料的成份和两端的温差有关; 3、当热电偶的两个热电偶丝材料成份确定后,热电偶热电势的大小,只与热电偶的温度差有关;若热电偶冷端的温度保持一定,这时候的热电偶热电势仅是工作端温度的单值函数。 将两种不同材料的导体或半导体A和B焊接起来,构成一个闭合回路。当导体A和B的两个执着点1和2之间存在温差时,两者之间便产生电动势,因而在回路中形成一个大小的电流。 根据热电偶测温原理,热电偶的输出热电势不仅与测量端的温度有关,而且与冷端的温度有关,需要测量出冷端温度,从而才能准确地测量出真实的温度 可能感兴趣的项目设计:MAX6675+K热电偶测温实验,链接:https://www.cirmall.com/circuit/2537/detail?3 该设计通过SPI接口和USART将测得的温度数据发送到PC的串口助手,本文中使用到了以下模块: a)网购的一款MAX6675模块,包含K热电偶。 b)STM32 Nucleo F302R8开发板。 热电偶工作原理 两种不同成份的导体两端接合成回路,当两个接合点的温度不同时,在回路中就会产生电动势,这种现象称为热电效应,而这种电动势称为热电势。 热电偶就是利用热点效应原理进行温度测量的,其中,直接用作测量介质温度的一端叫做工作端(也称为测量端),另一端叫做冷端(也称为补偿端);冷端与显示仪表或配套仪表连接,显示仪表会指出热电偶所产生的热电势。 MAX6675工作原理 MAX6675MAXIM公司的K热电偶串行模数转换器,它能独立完成信号放大、冷端补偿、线性化、A/D转换及SPI串口数字化输出功能。 MAX6675内部集成有冷端补偿电路;带有简单的3位串行SPI接口;可将温度信号转换成12位数字量,温度分辨率达0.25℃;内含热电偶断线检测电路。冷端补偿的温度范围-20℃~80℃,可以测量0℃~1023.75℃的温度。MAX6675为SO-8脚封装,工作电压为+5V直流电压,功耗为47.1mW,电流为50mA,适用于体积不大,不利散热的装置条件下使用,其引脚图如图2所示。其中SO为SPI串行输出端口引脚; CS为片选信号;SCK为串行时钟输入;T+、T-分别接热电偶的测量端和冷端。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值