打印
[STM32F1]

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

[复制链接]
1566|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 | 只看该作者
#include "stm32f10x.h"
#include "usart.h"
#include "delay.h"
#include "max6675.h"

int main(void)
{
  uint16_t temperature;
  float t;

  usart1_init(115200);
  delay_init();
  max6675_init();
  
  while(1)
  {
    temperature = max6675_readRawValue();
    printf("the raw value is:%d\n",temperature);
    t = max6675_readTemperature();
    printf("the temperature is:%.2f\n",t);
    printf("\n");
    delay_ms(500);
  }
}

使用特权

评论回复
5
幸福小强| | 2019-5-2 21:27 | 只看该作者
#ifndef __MAX6675_H
#define __MAX6675_H

#include "stm32f10x.h"

#define MAX6675_CS1_CLK   RCC_APB2Periph_GPIOA
#define MAX6675_CS1_PORT  GPIOA
#define MAX6675_CS1_PIN   GPIO_Pin_4

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


#endif

使用特权

评论回复
6
幸福小强| | 2019-5-2 21:27 | 只看该作者
#include "max6675.h"
#include "spi.h"


/**
  * [url=home.php?mod=space&uid=247401]@brief[/url]  max66675模块初始化
  * @param  None
  * @retval None
  */
void max6675_init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(MAX6675_CS1_CLK, ENABLE); //PORTA时钟使能
  
  GPIO_InitStructure.GPIO_Pin = MAX6675_CS1_PIN;  // PA4 推挽           T_CS
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(MAX6675_CS1_PORT, &GPIO_InitStructure);
        GPIO_SetBits(MAX6675_CS1_PORT,MAX6675_CS1_PIN);        //        T_CS=1
  
  spi1_init();
}

/**
  * @brief  max6675模块读写一个字节的数据
  * @param  txData:要发送的数据
  * @retval 接收到的数据
  */
uint8_t max6675_readWriteByte(uint8_t txData)
{               
  return spi1_readWriteByte(txData);
}  

/**
  * @brief  max6675模块读取测得的原始数据
  * @param  None
  * @retval 温度的原始数据
  */
uint16_t max6675_readRawValue(void)
{
  uint16_t tmp;
  
  GPIO_ResetBits(MAX6675_CS1_PORT,MAX6675_CS1_PIN); //enable max6675

  tmp = max6675_readWriteByte(0XFF); //read MSB
  tmp <<= 8;
  tmp |= max6675_readWriteByte(0XFF); //read LSB
  
  GPIO_SetBits(MAX6675_CS1_PORT,MAX6675_CS1_PIN); //disable max6675
  if (tmp & 4)
  {
    // thermocouple open
    tmp = 4095; //未检测到热电偶
  }
  else
  {
    tmp = tmp >> 3;
  }

  return tmp;
}

/**
  * @brief  max6675模块读取测得的原始数据
  * @param  None
  * @retval 温度值(单位:℃)
  */
float max6675_readTemperature(void)
{
  return (max6675_readRawValue() * 1024.0 / 4096);
}

使用特权

评论回复
7
幸福小强| | 2019-5-2 21:27 | 只看该作者
该例程的测试环境为STM32f103  用到的硬件资源有 串口1(PA9 PA10)SPI1(PA4 PA5 PA6 )。

使用特权

评论回复
8
dsyq| | 2019-5-4 09:38 | 只看该作者
幸福小强 发表于 2019-5-2 21:27
该例程的测试环境为STM32f103  用到的硬件资源有 串口1(PA9 PA10)SPI1(PA4 PA5 PA6 )。 ...

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

感觉有十分之一的数据会变得离谱,请教是否该软件滤掉。

使用特权

评论回复
9
dsyq| | 2019-5-4 10:01 | 只看该作者


精度没PT的高,成本要低一点 :)

使用特权

评论回复
10
单片小菜| | 2019-5-5 10:01 | 只看该作者
做的不错

使用特权

评论回复
11
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

粉丝