43-基于stm32单片机MAX31865铂电阻PT100温度测量程序源码原理图元器件清单
功能介绍:采用stm32单片机作为主控MCU,采用MAX31865模块采集PT100温度数据,并且通过SPI协议将数据传送到单片机,stm32单片机收到数据将温度显示到OLED显示屏上,MAX31865是简单易用的热敏电阻至数字输出转换器,优化用于铂电阻温度检测器(RTD)。外部电阻设置RTD灵敏度,高精度Δ- Σ ADC将RTD电阻与基准电阻之比转换为数字输出。MAX31865输入具有高达±45V的过压保护,提供可配置的RTD及电缆开路、短路条件检测。全部资料都经过实物验证,程序有中文注释,新手容易看懂,资料分享下载链接:设计资料合集
43-基于stm32单片机MAX31865铂电阻PT100温度测量(程序+原理图+元器件清单全套资料)


下面是部分程序展示,程序中文注释,新手容易看懂
//初始化SPI max31865 的IO口
void SPI1_MAX31865_Init(void)
{SPI1_Init(); //初始化SPI1SPI1_SetSpeed(SPI_BaudRatePrescaler_64); //设置为 72/64 = 1.125 M时钟writeRegister8_1(0x00, 0x00); //清除配置寄存器enableBias_1(1); //使能偏置电压delay_ms(10); //等待10ms使得RTDIN的滤波电容充电setWires_1(MAX31865_3WIRE); //使能PT100 三线工作模式clearFault_1(); //清除故障检测位} //RTD接线模式设置void setWires_1(max31865_numwires_t wires)
{uint8_t t = readRegister8_1(MAX31856_CONFIG_REG);if (wires == MAX31865_3WIRE) {t |= MAX31856_CONFIG_3WIRE;} else {// 2 or 4 wiret &= ~MAX31856_CONFIG_3WIRE;}writeRegister8_1(MAX31856_CONFIG_REG, t);
}//设置自动转换模式
void autoConvert_1(bool b)
{uint8_t t = readRegister8_1(MAX31856_CONFIG_REG);if (b) {t |= MAX31856_CONFIG_MODEAUTO; // enable autoconvert} else {t &= ~MAX31856_CONFIG_MODEAUTO; // disable autoconvert}writeRegister8_1(MAX31856_CONFIG_REG, t);
}//使能偏执电压
void enableBias_1(bool b)
{uint8_t t = readRegister8_1(MAX31856_CONFIG_REG);if (b) {t |= MAX31856_CONFIG_BIAS; // enable bias} else {t &= ~MAX31856_CONFIG_BIAS; // disable bias}writeRegister8_1(MAX31856_CONFIG_REG, t);
} //读寄存器,8位
u8 readRegister8_1(u8 addr)
{uint8_t ret = 0;addr &= 0x7F; // make sure top bit is set to 1SPI1_FLASH_CS=0; delay_us(100);SPI1_ReadWriteByte(addr); //发送写取状态寄存器命令 ret = SPI1_ReadWriteByte(0xff); //写入一个字节 delay_us(100);SPI1_FLASH_CS=1; //取消片选 return ret;
}//读两个寄存器,16位
u16 readRegister16_1(u8 addr)
{uint8_t buffer[2] = {0, 0};uint16_t ret = 0;readRegisterN_1(addr, buffer, 2);ret = buffer[0];ret <<= 8;ret |= buffer[1];return ret;
}//读N个寄存器
void readRegisterN_1(u8 addr, u8 buffer[], u8 n)
{addr &= 0x7F; // make sure top bit is 0SPI1_FLASH_CS=0; delay_us(100);SPI1_ReadWriteByte(addr); //发送读取状态寄存器命令 while (n--) {buffer[0] = SPI1_ReadWriteByte(0Xff);buffer++;}delay_us(100);SPI1_FLASH_CS=1; //取消片选
}//指定寄存器写8位数据
void writeRegister8_1(u8 addr, u8 data)
{ addr |= 0x80; // make sure top bit is set to 1SPI1_FLASH_CS=0;delay_us(100);SPI1_ReadWriteByte(addr); //发送读取状态寄存器命令 SPI1_ReadWriteByte(data); //写入一个字节 delay_us(100);SPI1_FLASH_CS=1; //取消片选
}

下面是原理图,采用AD绘制:



stm32单片机最小系统讲解:
电源
电就是MCU要吃的饭,不吃饭,stm32芯片肯定不能工作。
stm32最小系统板需要5v和3.3v两种电压,一般可以直接通过USB提供5v电压,也可以用电源适配器提供5V电压。而3.3v电压可以通过稳压芯片如ASM1117-3.3v等,把5v电压降为3.3v输出。
USB接口,提供的5v电压经过ASM1117-3.3v后降为3v3,(10*10^4pF=0.1u)用于电源滤波,高频滤波用小电容,低频滤波用大电容。D3是一个led用以指示电源工况,其上的510R即510.0Ω用以限流,防止led灯烧坏。
USB接口,提供5v电压,同时它也是一个模拟串口,其D-和D+引脚与ch340相应引脚连接构成一个串口设备。
stm32吃的是3v3将其VDD和VSS引脚分别连接到3v3和GND,就解决了stm32的吃饭问题。
注意:VBAT是stm32芯片的备用3.3v电源输入端,当没有备用电源是也需要将VBAT接到VDD上去。
VDDA和VSSA是模拟电源输入口,用以给stm32芯片内部ADC,复位电路供电因此必须分别接到VDD和VSS上。
复位电路
人工作久了容易自闭、精神恍惚,这时需要睡一觉就以重新焕发活力。stm32工作久了也容易“精神恍惚”————程序跑飞,也需要复位。
stm32的NRST引脚是复位信号接收引脚与RESET相连,芯片低电平复位。如上图所示,当芯片刚上电时,电容充电导通,此时RESET=0,芯片复位;当按下复位按钮时,RESET接地,芯片复位。
晶振电路
晶振是芯片的心跳,每一次脉冲激励芯片执行一条指令,因此晶振的重要性不言而喻。
stm32的晶振电路,8M无源晶振,其中(1M)用于稳定晶振的脉冲波形,(20P)和(20P)一方面构成晶振起振的必要回路,另一方面匹配电容,同时还具有调节晶振电路频率的作用。
注意:OSC32IN是外部32.768K晶振输入口,可以直接接时钟信号,也可以不洁作IO用。OSCIN是外部系统时钟输入信号,可以接时钟信号,也可以不接做IO口用,此时stm32用芯片内部的RC电路起振产生时钟信号。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
