MAX6675是美信(Maxim Integrated,现被ADI收购)推出的一款集成热电偶数字转换器芯片,专为K型热电偶设计。该芯片通过SPI接口与微控制器通信,可将热电偶的模拟信号转换为12位数字温度值,测量范围覆盖0°C至+1024°C,分辨率达0.25°C。其内部集成冷端补偿电路,可直接读取环境温度进行补偿计算,简化了传统热电偶测温所需的外部电路设计。此外,MAX6675内置信号调理、数字滤波和断线检测功能,抗干扰能力强,适用于工业控制、家电温控、实验室设备等场景。工作电压为3.3V-5V,兼容多数嵌入式系统。但需注意其仅支持K型热电偶,且高温段精度受热电偶特性限制,设计时需参考手册进行校准。该芯片以高集成度和易用性成为低成本测温方案的常见选择。

由图中可见这款芯片所需要的电路非常简单。所以我们选用它,但是这款芯片也有所不足,就是转换时间偏慢,可能会在后边我们的应用中存在不足。

接下来我们打通这颗芯片的数据读取:
在freertos中创建Thread
与瑞萨配套的FSP Smart Configurator 可以完成创建thread,并且图形化选项,省去我们搜索参数配置的繁琐。

首先在stacks选项中,我们点击New Thread

然后在Name后填入max6675。

接下来我们在这个thread中添加 New Stack中的r_sci_spi。

之所以选择sci的spi,而没有选择专用的spi模块,是因为io口与板载的串口冲突。为了方便调试,只能暂且忍让,呜呜呜,希望厂家能改进设计……

回到主题sci的spi需要配置

通道和name选择好之后,来到pins设置中

还需要为芯片的cs引脚配置,就近选择了p304 不锈钢牌io口,希望能如不锈钢般耐用好用:

点击 Generate project content,没有错误我们就可以回到keil中了
编写spi读代码
回到代码中,已经创建了thread文件,和留给我们编写代码的entry文件max6675_read_entry.c
直接调用接口R_SCI_SPI_Open,就可以完成spi的芯片端初始化。
void max6675_read_entry(void * pvParameters)
{
FSP_PARAMETER_NOT_USED(pvParameters);
R_SCI_SPI_Open(&g_sci_spi0_ctrl, &g_sci_spi0_cfg);
在while中,操作cs引脚和 spi读2个字节。
while(1)
{
g_ioport.p_api->pinWrite(g_ioport.p_ctrl, sci_spi0_cs, BSP_IO_LEVEL_LOW);
vTaskDelay(1);
R_SCI_SPI_Read(&g_sci_spi0_ctrl, &spi_data, 2, SPI_BIT_WIDTH_8_BITS);
vTaskDelay(1);
g_ioport.p_api->pinWrite(g_ioport.p_ctrl, sci_spi0_cs, BSP_IO_LEVEL_HIGH);
然后就可以摸鱼一会,从上面的手册知道,最少需要强制摸鱼220。我们姑且摸一架空客小飞机320吧。
vTaskDelay(320);
等等,还得看到读出来的数据
if (spi_data[1] & 0x4){
printf("no K connect\r\n\r\n");
} else {
temp_data = spi_data[0] << 5;
temp_data += spi_data[1] >> 3;
temp = temp_data / 4;
printf("temp---%d\r\n", temp);
pwm_duty = (uint8_t)deal(temp, target_temp);
}
好粗狂啊,直接丢失了0.25℃的精度


- 这就读到了,。没有热电偶的可以短接一下。短接后的读数按我理解就是max6675用来冷端补偿的参数。