毕业设计(一)
作者:互联网
1. SMBus配置
/* 1.安装工具包 */
pi@rasberrypi:~s sudo apt-get install libi2c-dev i2c-tools
/* 2.查看smbus.h文件路径 */
pi@rasberrypi:~s find / -name smbus.h
/usr/include/i2c/smbus.h
/* 3.查看liblic库的安装路径 */
pi@rasberrypi:~s whereis libi2c
libi2c: /usr/lib/arm-linux-gnueabihf/libi2c.so
/* 4.在Qt Creator .pro文件添加头文件路径和动态链接库 */
INCLUDEPATH += /usr/include/i2c
LIBS += /usr/lib/arm-linux-gnueabihf/libi2c.so
/* 5.编写应用程序,引入"C"头文件 */
extern "C"
{
#include <smbus.h>
}
2. MLX90614温度传感器介绍
2.1 电路设计
2.2 使用说明
MLX90614传感器ROM和RAM只有部分地址允许改写,可通过SMBus接口读和写,通过配置这些寄存器设置MLX90614。简单整理如表1-1、表1-2所示,具体参考MLX90614技术手册。
表1-1 RAM
RAM | ||
名字 | 功能 | 地址 |
TOmax | 测量物体温度上限设定 | 000h |
TOmin | 测量物体温度下限设定 | 001h |
PWMCTRL | PWM设定 | 002h |
Ta范围 | 环境温度设定 | 003h |
发射率校准系数 | 0.1-1 | 004h |
配置寄存器1 | 配置寄存器设定 | 005h |
SMBus地址 | 器件地址设定 | 00Eh |
表1-2 ROM
ROM | ||
名字 | 功能 | 地址 |
TA | 环境温度 | 006h |
Tobj1 | 物体温度 | 007h |
首先要确定MLX90614从器件地址,默认地址是0x5a,也可以通过i2cdetect -y 1命令查看MLX90614器件地址。其次要测试的物体不同,发射率也不同,在测试之前要设置被测对象的发射率校准系数,人体的发射率为0.95左右,查看表1-1,向004h地址的寄存器写入0xF332数据即可配置成人体发射率系数。最后读取物体温度寄存器获取温度数据并转换为实际温度,查看表1-2,007h地址保存物体温度数据,根据官方技术手册提供的简易计算公式 tempature = data*0.02 - 237.15 获得实际温度。(考虑环境温度,进行补偿比较准确)
3. 代码实现
#include "mlx90614.h"
#include <linux/i2c-dev.h>
#include <sys/ioctl.h>
#include <fcntl.h>
extern "C"
{
#include <smbus.h>
}
#define MLX90614_ADDR 0x5A
#define MLX90614_BODY_ADDR 0x07
#define MLX90614_REVISE_ADDR 0x04
#define MLX90614_REVISE_EMISSIVITY 0xF332
int smbusFd;
int Mlx90614Init()
{
smbusFd = open("/dev/i2c-1", O_RDWR);
if(smbusFd < 0)
{
return -1;
}
if(ioctl(smbusFd, I2C_SLAVE, MLX90614_ADDR) < 0)
{
return -1;
}
i2c_smbus_write_word_data(smbusFd, MLX90614_REVISE_ADDR, MLX90614_REVISE_EMISSIVITY);
return 0;
}
double GetTempature()
{
double temp;
double tempature;
temp = i2c_smbus_read_word_data(smbusFd, MLX90614_BODY_ADDR);
tempature = temp*0.02 - 273.15;
return tempature;
}
标签:i2c,ADDR,MLX90614,地址,毕业设计,smbusFd,include 来源: https://blog.csdn.net/qq_40723777/article/details/118277369