本設計基于MAX31865設計了一款上位機實時顯示當前溫度的溫控器,溫控器具有報警功能。
下位機采用usb串口供電,供電方式簡單,且可通過串口方式一鍵下載程序,不用使用額外的ST-LINK或者J-link下載。
STM32F103通過 SPI讀取MAX31865采集鉑電阻PT100溫度并通過 串口發送溫度值的實驗程序。
壓縮包包括:
程序源代碼
MAX31865芯片手冊(pdf格式 中文)
1.png (86.61 KB, 下載次數: 128)
下載附件
2021-1-23 15:12 上傳
程序使用三線制,內通過修改寄存器數值,改成二線制以及四線制。
高精度設備滿足誤差預算:
15位ADC分辨率,標稱溫度分辨率為0.03125°C (隨RTD非線性變化);
整個工作條件下,總精度保持在0.5°C (0.05%滿量程);
全差分VREF輸入;
轉換時間:21ms (最大值);
集成故障檢測,增加系統穩定性:
2.png (67.8 KB, 下載次數: 125)
下載附件
2021-1-23 15:16 上傳
單片機源程序如下:
- #include "max31865.h"
- #include "spi.h"
- #include "delay.h"
- //max chushihua
- void MAX31865_Int(void)
- {
-
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PB端口時鐘
- // MAX31865_DRDY_APBxClkCmd(GPIO_Pin_11, ENABLE);
-
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
- GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIB15,14,13
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //推挽輸出
- GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIB15,14,13
-
- SPI2_Init();
- SPI2_SetSpeed(SPI_BaudRatePrescaler_16);
- }
- /* 向MAX31865發送數據 */
- void MAX31865_SendData(uint8_t addr , uint8_t data)
- {
- SPI_MAX31865_CS_LOW();
- SPI2_ReadWriteByte(addr);
- SPI2_ReadWriteByte(data);
- SPI_MAX31865_CS_HIGH();
- }
- /* 從MAX31865讀取數據 */
- uint8_t MAX31865_ReceiveData(uint8_t addr)
- {
- uint8_t data;
- SPI_MAX31865_CS_LOW();
- SPI2_ReadWriteByte(addr);
- data = SPI2_ReadWriteByte(addr);
- SPI_MAX31865_CS_HIGH();
- return data;
- }
- //void MAX31855_ReadData()
- //{
- // u32 data=0;
- // int i;
- // SPI_MAX31865_CS_LOW();
- // delay_ms(1);
- // for(i=31;i>=0;i--)
- // GPIOA_MAX31855_SCK_H;
- // delay_ms(1);
- //
- //}
復制代碼- #include "stm32f10x.h"
- #include "spi.h"
- //#include "./usart/bsp_usart_dma.h"
- #include "max31865.h"
- #include "lcd1602.h"
- #include "delay.h"
- #include "usart.h"
- //uint8_t read_temp_HIGH;
- //uint8_t read_temp_LOW;
- //uint16_t read_temp;
- u8 i;
- u16 s1;
- u16 s2;
- u16 s3=0;
- u32 s4=0;
- u16 s5;
- unsigned long wd=0;
- int main(void)
- {
- SystemInit();
- delay_init(); //延時函數初始化
- LCD1602_Init(); //1602初始化
- SPI2_Init(); //spi初始化
- MAX31865_Int(); //MAX初始化ADC1
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優先級分組為組2:2位搶占優先級,2位響應優先級
- uart_init(115200); //串口初始化為115200
-
- while(1)
- {
-
- MAX31865_SendData(MAX31856_CONFIG_3WIRE,0xc1);
- MAX31865_SendData(MAX31856_CONFIG_REG,0xf2); //11110010
- s1=MAX31865_ReceiveData(MAX31856_RTDMSB_REG);
- s2=MAX31865_ReceiveData(MAX31856_RTDLSB_REG);
- s3=(s1<<8) | s2;
- printf("s3:%x",s3);
- // delay_ms(50);
- s3=s3>>1;
- // s3=s3&0xfffe;
-
- wd=(s3/32)-256;
- printf("wd:%d\r\n",wd);
- LCD1602_Show_Str(0,0,"WD:");
- // LCD1602_Write_Dat(wd/100%10+0x30);
- LCD1602_Write_Dat(wd/10%10+0x30);
- // LCD1602_Show_Str(5,0,".");
- LCD1602_Write_Dat(wd%10+0x30);
- LCD1602_Show_Str(9,0,"^C");
- }
- }
復制代碼
所有資料51hei提供下載:
MAX31865_PT100_源代碼.7z
(192.12 KB, 下載次數: 430)
2021-1-23 18:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
max31865資料.zip
(457.42 KB, 下載次數: 192)
2021-1-23 15:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|