[STM32F1] 如何使用IIC方式读取max6675的温度

[复制链接]
1903|11
 楼主| aa911 发表于 2019-4-30 22:33 | 显示全部楼层 |阅读模式
STM32F1如何使用IIC方式读取max6675的温度?有做过的朋友吗?
幸福小强 发表于 2019-5-2 21:25 | 显示全部楼层
SPI的可以吗
幸福小强 发表于 2019-5-2 21:26 | 显示全部楼层
幸福小强 发表于 2019-5-2 21:26 | 显示全部楼层
  1. #include "stm32f10x.h"
  2. #include "usart.h"
  3. #include "delay.h"
  4. #include "max6675.h"

  5. int main(void)
  6. {
  7.   uint16_t temperature;
  8.   float t;

  9.   usart1_init(115200);
  10.   delay_init();
  11.   max6675_init();
  12.   
  13.   while(1)
  14.   {
  15.     temperature = max6675_readRawValue();
  16.     printf("the raw value is:%d\n",temperature);
  17.     t = max6675_readTemperature();
  18.     printf("the temperature is:%.2f\n",t);
  19.     printf("\n");
  20.     delay_ms(500);
  21.   }
  22. }
幸福小强 发表于 2019-5-2 21:27 | 显示全部楼层
  1. #ifndef __MAX6675_H
  2. #define __MAX6675_H

  3. #include "stm32f10x.h"

  4. #define MAX6675_CS1_CLK   RCC_APB2Periph_GPIOA
  5. #define MAX6675_CS1_PORT  GPIOA
  6. #define MAX6675_CS1_PIN   GPIO_Pin_4

  7. void max6675_init(void);                         //初始化max6675模块
  8. uint8_t max6675_readWriteByte(uint8_t txData); //max6675模块读写一个字节
  9. uint16_t max6675_readRawValue(void);
  10. float max6675_readTemperature(void);


  11. #endif
幸福小强 发表于 2019-5-2 21:27 | 显示全部楼层
  1. #include "max6675.h"
  2. #include "spi.h"


  3. /**
  4.   * [url=home.php?mod=space&uid=247401]@brief[/url]  max66675模块初始化
  5.   * @param  None
  6.   * @retval None
  7.   */
  8. void max6675_init(void)
  9. {
  10.   GPIO_InitTypeDef GPIO_InitStructure;
  11.   RCC_APB2PeriphClockCmd(MAX6675_CS1_CLK, ENABLE); //PORTA时钟使能
  12.   
  13.   GPIO_InitStructure.GPIO_Pin = MAX6675_CS1_PIN;  // PA4 推挽           T_CS
  14.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
  15.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  16.         GPIO_Init(MAX6675_CS1_PORT, &GPIO_InitStructure);
  17.         GPIO_SetBits(MAX6675_CS1_PORT,MAX6675_CS1_PIN);        //        T_CS=1
  18.   
  19.   spi1_init();
  20. }

  21. /**
  22.   * @brief  max6675模块读写一个字节的数据
  23.   * @param  txData:要发送的数据
  24.   * @retval 接收到的数据
  25.   */
  26. uint8_t max6675_readWriteByte(uint8_t txData)
  27. {               
  28.   return spi1_readWriteByte(txData);
  29. }  

  30. /**
  31.   * @brief  max6675模块读取测得的原始数据
  32.   * @param  None
  33.   * @retval 温度的原始数据
  34.   */
  35. uint16_t max6675_readRawValue(void)
  36. {
  37.   uint16_t tmp;
  38.   
  39.   GPIO_ResetBits(MAX6675_CS1_PORT,MAX6675_CS1_PIN); //enable max6675

  40.   tmp = max6675_readWriteByte(0XFF); //read MSB
  41.   tmp <<= 8;
  42.   tmp |= max6675_readWriteByte(0XFF); //read LSB
  43.   
  44.   GPIO_SetBits(MAX6675_CS1_PORT,MAX6675_CS1_PIN); //disable max6675
  45.   if (tmp & 4)
  46.   {
  47.     // thermocouple open
  48.     tmp = 4095; //未检测到热电偶
  49.   }
  50.   else
  51.   {
  52.     tmp = tmp >> 3;
  53.   }

  54.   return tmp;
  55. }

  56. /**
  57.   * @brief  max6675模块读取测得的原始数据
  58.   * @param  None
  59.   * @retval 温度值(单位:℃)
  60.   */
  61. float max6675_readTemperature(void)
  62. {
  63.   return (max6675_readRawValue() * 1024.0 / 4096);
  64. }
幸福小强 发表于 2019-5-2 21:27 | 显示全部楼层
该例程的测试环境为STM32f103  用到的硬件资源有 串口1(PA9 PA10)SPI1(PA4 PA5 PA6 )。
dsyq 发表于 2019-5-4 09:38 | 显示全部楼层
幸福小强 发表于 2019-5-2 21:27
该例程的测试环境为STM32f103  用到的硬件资源有 串口1(PA9 PA10)SPI1(PA4 PA5 PA6 )。 ...

我用F1的SPI读“没问题”,但用F072的SPI读出的数始终有问题。

感觉有十分之一的数据会变得离谱,请教是否该软件滤掉。
dsyq 发表于 2019-5-4 10:01 | 显示全部楼层
QQ图片20190504100005.png

精度没PT的高,成本要低一点 :)
单片小菜 发表于 2019-5-5 10:01 | 显示全部楼层
做的不错
maximQ820270087 发表于 2020-6-9 11:53 | 显示全部楼层
MAX31855
冷端补偿热电偶至数字输出转换器
高精度热电偶数字转换器IC,
【硅天下备样信息】
MAX31855KASA+T    -200°C to +1350°C     8SO
MAX31855JASA+T     -40°C to +750°C      8SO
MAX31855NASA+T    -200°C to + 1300°C    8SO
MAX31855SASA+T     -50°C to +1600°C     8SO
MAX31855TASA+T     -250°C to +400°C    8SO
MAX31855EASA+T     -40°C to +900°C     8SO
MAX31855RASA+T     -50°C to +1770°C    8SO



【MAX31855关键特性】
冷端补偿
14位、0.25°C分辨率
转换器的温度分辨率为0.25°C,
温度读数为-270°C 至+1800°C,
对于K型热电偶,在-200°C至+700°C温度范围内,保持±2°C精度。
提供K、J、N、T和E型热电偶器件版本
简单的SPI兼容接口(只读)
检测热电偶对GND或VCC短路
检测热电偶开路
应用
电器设备
汽车
HVAC
工业


【MAX31856关键特性】
提供高精度热电偶温度读数
包括8种热电偶的自动线性度修正
±0.15%(最大值,-20°C至+85°C)热电偶满幅和线性度误差
19位、0.0078125°C热电偶温度分辨率
内置冷端补偿,将系统元件数量降至最少
转换器的温度分辨率达0.0078125°C,
允许读取高达+1800°C以及低至-210°C(取决于热电偶类型)的温度读数
±0.7°C(最大值,-20°C至+85°C)冷端补偿精度
±45V输入保护,系统性能可靠
简化系统故障管理和诊断
检测热电偶开路
过温和欠温故障检测
50Hz/60Hz噪声抑制滤波,提高系统性能
14引脚TSSOP封装

【MAX31865关键特性】
高度集成降低系统成本、简化设计并缩短设计周期
简便的RTD铂电阻至数字转换器
支持100Ω至1kΩ(0°C时)铂电阻RTD (PT100至PT1000)
兼容2线、3线和4线传感器连接
spi兼容接口
20引脚TQFN和SSOP封装
高精度设计方便满足误差预算
15位ADC分辨率;标称温度分辨率为0.03125°C (随RTD的非线性变化)
整个工作条件下,总精度保持在最高0.5°C (0.05%满量程)
全差分VREF输入
转换时间:21ms (最大值)
集成故障检测提高系统可靠性
±45V输入保护
故障检测(RTD开路、RTD短路到量程范围以外的电压或RTD元件短路)
·

【DS18B20关键特性】
独特的1-Wire®接口仅占用一个通信端口
内置温度传感器和EEPROM减少外部元件数量
测量温度范围:-55°C至+125°C (-67°F至+257°F)
-10°C至+85°C温度范围内测量精度为±0.5°C
9位至12位可编程分辨率
无需外部元件
寄生供电模式下只需要2个操作引脚(DQ和GND)
多点通信简化分布式温度测量
每个器件具有唯一的64位序列号,存储在器件ROM内
用户可灵活定义温度报警门限,通过报警搜索指令找到温度超出门限的器件
提供8引脚SO(150 mils)、8引脚µSOP、3引脚TO-92封装

【MAX30208关键特性】
高准确度、高精度
   ±0.1°C精度@ +30°C至+50°C
   ±0.15°C精度@ +0°C至+70°C
低功耗
   1.7V至3.6V工作电压
   67μA测量期间工作电流
   0.5μA待机电流
   15ms积分时间
小尺寸
   2mm x 2mm x 0.75mm、10引脚薄型LGA封装
安全性和合规性
   高、地温报警
数字接口
   可配置转换温度输入引脚
   可配置中断输出引脚
   32字FIFO,用于温度数据
   提供4个I2C地址——根据需求可提供更多地址
   唯一的ROM ID,支持NIST溯源性
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

69

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部