没有合适的资源?快使用搜索试试~ 我知道了~
基于STM32F103的MLX90614驱动.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 104 浏览量
2023-06-06
21:12:09
上传
评论
收藏 304KB PDF 举报
温馨提示
试读
11页
基于STM32F103的MLX90614驱动.pdf
资源推荐
资源详情
资源评论
$MLX90614.C
/**
******************************************************************************
*
*
基于
STM32F103
的
MLX90614
红外温度传感器驱动程序
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "stdlib.h"
#include "stm32f10x.h"
//===============================================================================
//#include "MLX90614.H"
//-- IO Operate --
#define SetBit_SDA GPIO_SetBits(GPIOB,GPIO_Pin_10)
#define ClrBit_SDA GPIO_ResetBits(GPIOB,GPIO_Pin_10)
#define SetBit_SCK GPIO_SetBits(GPIOB,GPIO_Pin_11)
#define ClrBit_SCK GPIO_ResetBits(GPIOB,GPIO_Pin_11)
#define STA_SDA GPIOB->IDR & GPIO_Pin_10
#define STA_SCL GPIOB->IDR & GPIO_Pin_11
//-- MLX90614 Command Mode --
#define RAM 0x00 //
对
RAM
进行操作
#define EEPROM 0x20 //
对
EEPROM
进行操作
#define MODE 0x60 //
进入命令模式
#define EXITMODE 0x61 //
退出命令模式
#define READFLAG 0xf0 //
读标志
#define SLEEP 0xff //
进入睡眠模式
#define RD 0x01 //
读操作
#define WR 0x00 //
写操作
//-- MLX90614 RAM Address --
#define AMBITEMPADDR 0x03 //
周围温度
#define IR1ADDR 0x04 //
#define IR2ADDR 0x05 //
#define ENVITEMPADDR 0x06 //
环境温度
-40 ~ 125
度
#define OBJ1TEMPADDR 0x07 //
目标
1
温度,检测到的红外温度
-70.01 ~ 382.19
度
#define OBJ2TEMPADDR 0x08 //
目标
2
温度,检测到的红外温度
-70.01 ~ 382.19
度
//-- MLX90614 EEPROM Address --
#define TOBJMAXADDR 0x00 //
测量温度上限设定
#define TOBJMINADDR 0x01 //
测量温度下限设定
#define PWMCTRLADDR 0x02 //PWM
设定
#define TARANGEADDR 0x03 //
环境温度设定
#define KEADDR 0x04 //
频率修正系数
#define CONFIGADDR 0x05 //
配置寄存器
#define SMBUSADDR 0x0e //
器件地址设定
#define RES1ADDR 0x0f //
保留
#define RES2ADDR 0x19 //
保留
#define ID1ADDR 0x1c //ID
地址
1
#define ID2ADDR 0x1d //ID
地址
2
#define ID3ADDR 0x1e //ID
地址
3
$MLX90614.C
#define ID4ADDR 0x1f //ID
地址
4
//-- Special Define --
#define ACK_SUCCESS 0x01 //
成功接收到应答信号
#define ACK_FAIL 0x00 //
没有收到应答信号
#define N 5
//
以上宏定义可以放在头文件里面
//============================================================================
/**
* @
功能
I2C
通信状态改变后的延时
* @
说明 无
* @
参数 无
* @
返回值 无
*/
void I2C_Delay(void)
{
Delay_us(2);
}
/**
* @
功能
产生通讯开始信号
* @
说明
MLX90614
在
SCK=1
时,检测到
SDA
由
1
到
0
表示通信开始
* @
参数 无
* @
返回值 无
*/
void I2C_Start(void)
{
SetBit_SDA;
SetBit_SCK;
I2C_Delay();
ClrBit_SDA;
I2C_Delay();
ClrBit_SCK;
I2C_Delay();
}
/**
* @
功能
产生通讯停止信号
* @
说明
MLX90614
在
SCK=1
时,检测到
SDA
由
0
到
1
表示通信结束
* @
参数无
* @
返回值 无
*/
void I2C_Stop(void)
{
ClrBit_SDA;
ClrBit_SCK;
I2C_Delay();
SetBit_SCK;
I2C_Delay();
SetBit_SDA;
I2C_Delay();
}
$MLX90614.C
/**
* @
功能
将
MLX90614
的工作模式从
PWM
模式切换到
SMBus
模式
* @
说明 从
PWM
模式切换到
SMBus
的方法是将
SCL
保持至少
1.44ms
以上的低电平
*
如果
PWM
没有使能就不需要发送请求命令
* @
参数 无
* @
返回值 无
*/
void PwmToSMBus(void)
{
ClrBit_SCK;
Delay_us(1500); //
大于
1.44ms
SetBit_SCK;
}
/**
* @
功能
退出睡眠模式
* @
说明保持
SCK
高电平后,
SDA
持续至少
33ms
低电平,
*
在退出睡眠模式后需要间隔
250ms(
典型值
)
才输出数据。
* @
参数无
* @
返回值 无
*/
void Eixt_Sleep(void)
{
SetBit_SCK;
SetBit_SDA;
I2C_Delay();
ClrBit_SDA;
Delay_ms(35); //
大于
33ms
退出睡眠模式
SetBit_SDA;
Delay_ms(260); //
大于
250ms
开始输出数据
}
/**
* @
功能
从
RAM/EEPROM
中读取一个字节数据
* @
说明 从
MLX90614
中的指定地址读取一个字节数据
,
高位在前,低位在后
* @
参数
ack_nack:
主机应答信号
* @
返回值
dat:
读取的数据
*/
uint8_tI2C_ReadByte(uint8_tack_nack)
{
uint8_ti=0;
uint8_tdat=0;
ClrBit_SCK;
Delay_us(5);
for(i=0;i<8;i++)
{
dat = dat<<1;
ClrBit_SCK;
Delay_us(5*N);
SetBit_SCK;
Delay_us(5*N);
if(STA_SDA)
{
dat = dat | 0x01;
剩余10页未读,继续阅读
资源评论
omyligaga
- 粉丝: 53
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功