標(biāo)題: STM32F103+PT100+MAX31865+LCD1602+串口 源程序 [打印本頁]

作者: 梁廷明    時間: 2021-1-23 15:17
標(biāo)題: STM32F103+PT100+MAX31865+LCD1602+串口 源程序
本設(shè)計基于MAX31865設(shè)計了一款上位機實時顯示當(dāng)前溫度的溫控器,溫控器具有報警功能。
下位機采用usb串口供電,供電方式簡單,且可通過串口方式一鍵下載程序,不用使用額外的ST-LINK或者J-link下載。

STM32F103通過 SPI讀取MAX31865采集鉑電阻PT100溫度并通過 串口發(fā)送溫度值的實驗程序。
壓縮包包括:
程序源代碼
MAX31865芯片手冊(pdf格式 中文)

程序使用三線制,內(nèi)通過修改寄存器數(shù)值,改成二線制以及四線制。

高精度設(shè)備滿足誤差預(yù)算:
15位ADC分辨率,標(biāo)稱溫度分辨率為0.03125°C (隨RTD非線性變化);
整個工作條件下,總精度保持在0.5°C (0.05%滿量程);
全差分VREF輸入;
轉(zhuǎn)換時間:21ms (最大值);
集成故障檢測,增加系統(tǒng)穩(wěn)定性:



單片機源程序如下:
  1. #include "max31865.h"
  2. #include "spi.h"
  3. #include "delay.h"

  4. //max chushihua
  5. void MAX31865_Int(void)
  6. {
  7.         
  8.         GPIO_InitTypeDef        GPIO_InitStructure;
  9.                
  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PB端口時鐘
  11. //        MAX31865_DRDY_APBxClkCmd(GPIO_Pin_11, ENABLE);
  12.         
  13.         
  14.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  15.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽輸出
  16.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度為50MHz
  17.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                //初始化GPIB15,14,13
  18.         
  19.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  20.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;        //推挽輸出
  21.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                //初始化GPIB15,14,13
  22.         
  23.         SPI2_Init();
  24.         SPI2_SetSpeed(SPI_BaudRatePrescaler_16);
  25. }
  26. /* 向MAX31865發(fā)送數(shù)據(jù) */
  27. void MAX31865_SendData(uint8_t addr , uint8_t data)
  28. {
  29.         SPI_MAX31865_CS_LOW();

  30.         SPI2_ReadWriteByte(addr);

  31.         SPI2_ReadWriteByte(data);

  32.         SPI_MAX31865_CS_HIGH();
  33. }

  34. /* 從MAX31865讀取數(shù)據(jù) */
  35. uint8_t MAX31865_ReceiveData(uint8_t addr)
  36. {
  37.         uint8_t data;

  38.         SPI_MAX31865_CS_LOW();


  39.         SPI2_ReadWriteByte(addr);

  40.         data = SPI2_ReadWriteByte(addr);

  41.         SPI_MAX31865_CS_HIGH();
  42.         return data;
  43. }


  44. //void MAX31855_ReadData()
  45. //{
  46. //        u32 data=0;
  47. //        int i;
  48. //        SPI_MAX31865_CS_LOW();
  49. //        delay_ms(1);
  50. //        for(i=31;i>=0;i--)
  51. //                 GPIOA_MAX31855_SCK_H;
  52. //                        delay_ms(1);
  53. //               

  54. //}
復(fù)制代碼
  1. #include "stm32f10x.h"
  2. #include "spi.h"
  3. //#include "./usart/bsp_usart_dma.h"
  4. #include "max31865.h"
  5. #include "lcd1602.h"
  6. #include "delay.h"
  7. #include "usart.h"
  8. //uint8_t read_temp_HIGH;
  9. //uint8_t read_temp_LOW;
  10. //uint16_t read_temp;
  11. u8 i;
  12.    u16 s1;
  13.    u16 s2;
  14.          u16 s3=0;
  15.          u32 s4=0;
  16.          u16 s5;
  17.          unsigned long wd=0;
  18. int main(void)
  19. {
  20.                 SystemInit();
  21.                 delay_init();                     //延時函數(shù)初始化         
  22.                 LCD1602_Init();                        //1602初始化
  23.                 SPI2_Init();                        //spi初始化
  24.                 MAX31865_Int();                        //MAX初始化ADC1
  25.                 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
  26.                 uart_init(115200);                 //串口初始化為115200
  27.         
  28.         while(1)
  29.         {        
  30.                
  31.                 MAX31865_SendData(MAX31856_CONFIG_3WIRE,0xc1);
  32.                 MAX31865_SendData(MAX31856_CONFIG_REG,0xf2);    //11110010
  33.                 s1=MAX31865_ReceiveData(MAX31856_RTDMSB_REG);
  34.                 s2=MAX31865_ReceiveData(MAX31856_RTDLSB_REG);
  35.                 s3=(s1<<8) | s2;
  36.                 printf("s3:%x",s3);
  37. //                delay_ms(50);
  38.                 s3=s3>>1;
  39. //                s3=s3&0xfffe;
  40.                
  41.                 wd=(s3/32)-256;
  42.                 printf("wd:%d\r\n",wd);
  43.                 LCD1602_Show_Str(0,0,"WD:");
  44. //                LCD1602_Write_Dat(wd/100%10+0x30);
  45.                 LCD1602_Write_Dat(wd/10%10+0x30);
  46. //                LCD1602_Show_Str(5,0,".");
  47.                 LCD1602_Write_Dat(wd%10+0x30);

  48.                 LCD1602_Show_Str(9,0,"^C");

  49.         }
  50. }
復(fù)制代碼


所有資料51hei提供下載:
MAX31865_PT100_源代碼.7z (192.12 KB, 下載次數(shù): 430)
max31865資料.zip (457.42 KB, 下載次數(shù): 192)





作者: 984055    時間: 2022-3-14 18:41
樓主您好,這款測量的溫度范圍是多少?
作者: 梁廷明    時間: 2022-4-27 10:43
984055 發(fā)表于 2022-3-14 18:41
樓主您好,這款測量的溫度范圍是多少?

測量范圍是根據(jù)PTC的器件參數(shù)決定
作者: 83286924    時間: 2022-6-10 18:46
您好,這個精度能達到多少
作者: 787384900    時間: 2022-11-27 19:26
感謝樓主分享,模塊收到了測試是否可行
作者: 椰子01    時間: 2023-8-14 19:49
剛好需要來參考
作者: 51hei1005    時間: 2023-10-29 18:36
程序里用的SPI2,管腳B13/14/15。為什么帖子里面的原理圖畫的PA4/5/6/7呢?本想按圖接呢,發(fā)現(xiàn)對不上
作者: 249449417@qq.co    時間: 2023-11-6 17:05
下載看了下,沒原理圖呢?
作者: czhaii    時間: 2023-12-7 18:58
NICE.
作者: huaishang    時間: 2024-10-2 19:18
謝謝樓主分享,學(xué)習(xí)學(xué)習(xí)!!
作者: huaishang    時間: 2025-1-1 09:43
感謝樓主分享




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1