色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

CW32模塊使用 MLX90614無接觸測溫傳感器

CW32生態社區 ? 來源:CW32生態社區 ? 作者:CW32生態社區 ? 2024-11-14 17:50 ? 次閱讀

MLX90614 系列模塊是一組通用的紅外測溫模塊。在出廠前該模塊已進行校驗及線性化,具有非接觸、體積小、精度高,成本低等優點。被測目標溫度和環境溫度能通過單通道輸出,并有兩種輸出接口,適合于汽車空調、室內暖氣、家用電器、手持設備以及醫療設備應用等。測溫方式可分為接觸式和非接觸式,接觸式測溫只能測量被測物體與測溫傳感器達到熱平衡后的溫度,所以響應時間長,且極易受環境溫度的影響;而紅外測溫是根據被測物體的紅外輻射能量來確定物體的溫度,不與被測物體接觸,具有影響動被測物體溫度分布場,溫度分辨率高、響應速度快、測溫范圍廣、不受測溫上限的限制、穩定性好等特點,所以我們選擇mlx90614來作為紅外測溫模塊。

單片機與mlx90614紅外測溫模塊之間通信的方式是“類IIC”通信,意思就是通信方式跟IIC通信方式很像但又不是IIC,它有另外一個名字叫做SMBus。SMBus (System Management Bus)是 1995 年由 intel 公司提出的一種高效同步串行總線,SMBus 只有兩根信號線:雙向數據線和時鐘信號線,容許 CPU 與各種外圍接口器件以串行方式進行通信、交換信息,即可以提高傳輸速度也可以減小器件的資源占用,另外即使在沒有SMBus 接口的單片機上也可利用軟件進行模擬

1、模塊來源

模塊實物展示:

wKgaomc1x9WAD7yOAAATWJHUNuA281.jpg


資料下載鏈接:
https://pan.baidu.com/s/1AsEBvVCiNAvTKqTeGSA60w
提取碼:g06n

2、規格參數

工作電壓:4.5~5.5V

工作電流:1.3~2.5mA

以上信息見廠家資料文件

3、移植過程

我們的目標是將例程移植至CW32F030C8T6開發板上【能夠測量物體溫度和環境溫度的功能】。首先要獲取資料,查看數據手冊應如何實現讀取數據,再移植至我們的工程。

3.1查看資料

MLX90614中有兩個存儲器,分別為EEPROMRAM

MLX90614中共有32個字長為16位的EEPROM存儲單元,其地址為000H—01FH。EEPROM中所有的寄存器都是可以通過SMBus進行讀取,但只有部分寄存器是可以進行改寫的(地址為0x00, 0x01, 0x02, 0x03, 0x04, 0x05*,0x0E, 0x0F, 0x19)。可改寫部分如下圖所示。因在出廠前模塊已進行校驗及線性化,所以我們直接使用默認參數,不需要修改。

wKgZomc1x9WAUAqgAABQPNXj6Y0849.jpg

wKgZomc1x9uAd0YwAAB93v_WcoI622.jpg

MLX90614中總共有32個17位的RAM存儲單元,用戶不能通過RAM來寫入數據,只能讀取RAM中的部分存儲單元讀取16位存儲數據。其采集的環境溫度數據保存在地址06H存儲單元中,采集的被測物體溫度數據存儲在07H存儲單元中。因此運用存儲在RAM地址中的數據,通過公式的計算,可以得到環境溫度Ta及被測物體溫度數據To。

wKgaomc1x9uAaSjmAABKEBGcpjY365.jpg

需要注意的是數據的低8位在前面,高8位在后。

wKgZomc1x9yAB3CCAAB_qI9TIAc675.jpg

器件地址(Slave Address)在數據手冊中有說明,默認器件地址為0X5A;

wKgaomc1x9yAPE0eAADMBBBZtO8770.jpg

命令(Command)是根據要控制的是RAM還是eeprom來決定一個字節中的BIT7~BIT5。剩余的BIT4~BIT0由要操控的地址決定。

wKgZomc1x92APrCdAABa1tudC4g239.jpg

例如,我要讀取RAM的Ta溫度數據,則命令組成見下表。其中RAM地址為000x_xxxx,Ta溫度數據地址為0x06=0000_0110,只取低5位則為xxx0_0110。

wKgaomc1x92AB0A5AAAkLHuI5Y0186.jpg

PEC是一個多項式為X8+X2+X1+1的CRC-8校驗數據。

在數據手冊中舉了兩個例子。其中0xB4為器件地址左移一位后的值。

wKgaomc1x-OAEwYQAACdgLSntN8230.jpg

得到溫度的原始數據后,根據數據手冊的說明進行換算即可得到溫度。

wKgZomc1x-OAICLdAABV6ovySeo755.jpg

以上是手冊中舉了一個例子,如果讀取到的溫度數據是0X3AF7,其10進制為15095,將10進制數 除以50或者乘以0.02得到301.9,再減去273.15即可得到實際溫度。

溫度 = 溫度原始數據 * 0.02 - 273.15

該溫度換算公式對To和Ta都適用。

3.2引腳選擇

wKgaomc1x-SAaWaKAAFuGlZ6O0o874.jpg

模塊接線圖

3.3移植至工程

工程模板參考入門手冊的工程模板

移植步驟中的導入.c和.h文件與【CW32模塊使用】DHT11溫濕度傳感器相同,只是將.c和.h文件更改為bsp_mlx90614.c與bsp_mlx90614.h。這里不再過多講述,移植完成后面修改相關代碼。

在文件bsp_mlx90614.c中,編寫如下代碼。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-20     LCKFB-ALP    first version
 */

#include "bsp_mlx90614.h"
#include "stdio.h"


/******************************************************************
 * 函 數 名 稱:MLX90614_GPIO_Init
 * 函 數 說 明:MLX90614的引腳初始化
 * 函 數 形 參:無
 * 函 數 返 回:無
 * 作       者:LC
 * 備       注:MLX90614是5V,而且開發板開發板的引腳輸出是3.3V,
 *             故設置引腳模式時,必須設置為開漏模式
******************************************************************/
void MLX90614_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct; // GPIO初始化結構體

    RCC_MLX90614_ENABLE();        // 使能GPIO時鐘

    GPIO_InitStruct.Pins = GPIO_SCL|GPIO_SDA;             // GPIO引腳
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;           // 開漏輸出
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;              // 輸出速度高
    GPIO_Init(PORT_MLX90614, &GPIO_InitStruct);              // 初始化
}


/******************************************************************
 * 函 數 名 稱:IIC_Start
 * 函 數 說 明:IIC起始時序
 * 函 數 形 參:無
 * 函 數 返 回:無
 * 作       者:LC
 * 備       注:無
******************************************************************/
void IIC_Start(void)
{
        SDA_OUT();

        SDA(1);
        delay_us(5);
        SCL(1);
        delay_us(5);

        SDA(0);
        delay_us(5);
        SCL(0);
        delay_us(5);

}
/******************************************************************
 * 函 數 名 稱:IIC_Stop
 * 函 數 說 明:IIC停止信號
 * 函 數 形 參:無
 * 函 數 返 回:無
 * 作       者:LC
 * 備       注:無
******************************************************************/
void IIC_Stop(void)
{
        SDA_OUT();
        SCL(0);
        SDA(0);

        SCL(1);
        delay_us(5);
        SDA(1);
        delay_us(5);

}

/******************************************************************
 * 函 數 名 稱:IIC_Send_Ack
 * 函 數 說 明:主機發送應答或者非應答信號
 * 函 數 形 參:0發送應答  1發送非應答
 * 函 數 返 回:無
 * 作       者:LC
 * 備       注:無
******************************************************************/
void IIC_Send_Ack(unsigned char ack)
{
        SDA_OUT();
        SCL(0);
        SDA(0);
        delay_us(5);
        if(!ack) SDA(0);
        else     SDA(1);
        SCL(1);
        delay_us(5);
        SCL(0);
        SDA(1);
}


/******************************************************************
 * 函 數 名 稱:I2C_WaitAck
 * 函 數 說 明:等待從機應答
 * 函 數 形 參:無
 * 函 數 返 回:0有應答  1超時無應答
 * 作       者:LC
 * 備       注:無
******************************************************************/
unsigned char I2C_WaitAck(void)
{
        char ack = 0;
        unsigned char ack_flag = 10;
        SCL(0);
        SDA(1);
        SDA_IN();
        delay_us(5);
        SCL(1);
        delay_us(5);

        while( (SDA_GET()==1) && ( ack_flag ) )
        {
                        ack_flag--;
                        delay_us(5);
        }

        if( ack_flag <= 0 )
        {
                        IIC_Stop();
                        return 1;
        }
        else
        {
                        SCL(0);
                        SDA_OUT();
        }
        return ack;
}

/******************************************************************
 * 函 數 名 稱:Send_Byte
 * 函 數 說 明:寫入一個字節
 * 函 數 形 參:dat要寫人的數據
 * 函 數 返 回:無
 * 作       者:LC
 * 備       注:無
******************************************************************/
void Send_Byte(uint8_t dat)
{
        int i = 0;
        SDA_OUT();
        SCL(0);//拉低時鐘開始數據傳輸

        for( i = 0; i < 8; i++ )
        {
                SDA( (dat & 0x80) >> 7 );
                delay_us(1);
                SCL(1);
                delay_us(5);
                SCL(0);
                delay_us(5);
                dat

在文件bsp_mlx90614.h中,編寫如下代碼。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-20     LCKFB-ALP    first version
 */

#ifndef _BSP_MLX90614_H_
#define _BSP_MLX90614_H_

#include "board.h"

//端口移植
#define RCC_MLX90614_ENABLE()   __RCC_GPIOA_CLK_ENABLE()
#define PORT_MLX90614               CW_GPIOA


#define GPIO_SDA                    GPIO_PIN_1
#define GPIO_SCL                    GPIO_PIN_0

//設置SDA輸出模式
#define SDA_OUT()   {        
                        GPIO_InitTypeDef GPIO_InitStruct;                
                        GPIO_InitStruct.Pins = GPIO_SDA;                 
                        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;      
                        GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;         
                        GPIO_Init(PORT_MLX90614, &GPIO_InitStruct);         
                     }
//設置SDA輸入模式
#define SDA_IN()    {        
                        GPIO_InitTypeDef GPIO_InitStruct;                
                        GPIO_InitStruct.Pins = GPIO_SDA;                 
                        GPIO_InitStruct.Mode = GPIO_MODE_INPUT_PULLUP;   
                        GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;         
                        GPIO_Init(PORT_MLX90614, &GPIO_InitStruct);         
                    }
//獲取SDA引腳的電平變化
#define SDA_GET()       GPIO_ReadPin(PORT_MLX90614, GPIO_SDA)
//SDA與SCL輸出
#define SDA(x)          GPIO_WritePin(PORT_MLX90614, GPIO_SDA, (x?GPIO_Pin_SET:GPIO_Pin_RESET) )
#define SCL(x)          GPIO_WritePin(PORT_MLX90614, GPIO_SCL, (x?GPIO_Pin_SET:GPIO_Pin_RESET) )



void MLX90614_GPIO_Init(void);
float MLX90614_Read(unsigned char SlaveAddr, unsigned char RegAddr);

void IIC_Stop(void);
#endif

4、移植驗證

在自己工程中的main主函數中,編寫如下。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-20     LCKFB-ALP    first version
 */
#include "board.h"
#include "stdio.h"
#include "bsp_uart.h"
#include "bsp_mlx90614.h"

int32_t main(void)
{
    board_init();        // 開發板初始化

    uart1_init(115200);        // 串口1波特率115200

    MLX90614_GPIO_Init();
    printf("Startrn");
    while(1)
    {
        float t = MLX90614_Read(0X5A, 0X07);
        if( t != 0)
        {
            printf("temperature = %.2frn", t);
        }
        delay_ms(1000);
    }
}

移植現象:測量手心溫度為36℃左右。

wKgZomc1x-SAP8VhAAC7wnooxI0678.jpg

模塊移植成功案例代碼:

鏈接:https://pan.baidu.com/s/1Ts1A7Eqng7yCa2YabmI6_A?pwd=LCKF

提取碼:LCKF

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2550

    文章

    51035

    瀏覽量

    753063
  • CW32
    +關注

    關注

    1

    文章

    203

    瀏覽量

    626
收藏 人收藏

    評論

    相關推薦

    MLX90614紅外溫度傳感器的驅動設計與實現

    紅外溫度傳感器一般用于非接觸式的溫度檢測。在我們的系統中經常會有這樣的需求。所以我們將其設計為通用的驅動庫以備復用。這一篇我們將講述MLX90614紅外溫度傳感器驅動的設計與實現。
    發表于 12-12 14:53 ?7466次閱讀
    <b class='flag-5'>MLX90614</b>紅外溫度<b class='flag-5'>傳感器</b>的驅動設計與實現

    基于MLX90614的非接觸式體溫測量系統設計

    根據輻射測溫原理設計制作溫度測量系統。采用Melexis公司的MLX90614接觸測量的紅外溫度傳感器,通過SMBus協議與AT89S51單片機通訊,并通過單片機系統驅動液晶顯示
    發表于 03-08 14:37

    紅外測溫傳感器MLX90614測溫的響應時間是多少??????

    紅外測溫傳感器MLX90614測溫的響應時間是多少??????
    發表于 05-16 20:59

    怎樣去設計一種基于MLX90614和OpenMV-H7的溫度傳感器

    MLX90614系列模塊是什么?OpenMV-H7又是什么?怎樣去設計一種基于MLX90614和OpenMV-H7的溫度傳感器呢?
    發表于 11-10 07:49

    為什么無法使用MSP430進行調試MLX90614紅外測溫傳感器

    在用MSP430G2553調試MLX90614紅外測溫傳感器時,輸出的值始終為-273.1,我認為應該是讀取寄存內容為0所致,我的程序使用STM32程序修改后進行調試的,原32程序輸
    發表于 11-29 06:08

    MLX90614簡介

    1.MLX90614簡介MLX90614是一款價格昂貴的非接觸式紅外溫度傳感器,尤其在疫情的影響下,其價格更是高不可攀,該傳感器主要用于不能
    發表于 12-08 06:51

    mlx90614進行紅外測溫的方法

    做項目使用了NRF51822,要用mlx90614進行紅外測溫,分享一下相關的使用。mlx90614是一款紅外非接觸溫度計,有多個型號,BAA、DCI等,不同封裝的
    發表于 01-10 08:17

    MLX90614醫用級紅外溫度傳感器的驅動程序編寫

    咚咚咚————【封裝驅動】MLX90614醫用級紅外溫度傳感器,自己編寫封裝的驅動程序。/********************************************主控芯片:STM32
    發表于 01-25 07:09

    MLX90614系列傳感器搭配DM小板完成精準測溫

    。小板搭載我邁萊芯MLX90614全系列傳感器及我司定制的DM801DH傳感器,使用方便。模組通信方式為串口TTL通信,并且人體溫度數據 我司已轉換為十進制,也可以通過串口調試工具在電腦上安裝調試助手查看
    發表于 11-22 13:37

    如何使用 MLX90614 紅外測溫儀實現 SMBus 通信

    本文檔介紹了 PIC 微控制中的 MLX90614 紅外溫度計 SMBus 通信。本文檔還介紹了紅外測溫儀的應用,以及典型電路示例和所用開發工具的匯編程序和 C 示例。 范圍 本應用筆記介紹了如
    的頭像 發表于 06-21 17:47 ?8182次閱讀
    如何使用 <b class='flag-5'>MLX90614</b> 紅外<b class='flag-5'>測溫</b>儀實現 SMBus 通信

    使用STM8S和MLX90614手持非接觸紅外測溫槍設計的工程文件和程序

    基于STM8S手持非接觸紅外測溫MLX90614 額溫槍設計,包含原理圖、PCB、源程序等
    發表于 02-04 08:00 ?0次下載
    使用STM8S和<b class='flag-5'>MLX90614</b>手持非<b class='flag-5'>接觸</b>紅外<b class='flag-5'>測溫</b>槍設計的工程文件和程序

    溫度傳感器MLX90614的STM32驅動實現

    1.MLX90614簡介MLX90614是一款價格昂貴的非接觸式紅外溫度傳感器,尤其在疫情的影響下,其價格更是高不可攀,該傳感器主要用于不能
    發表于 11-25 20:06 ?67次下載
    溫度<b class='flag-5'>傳感器</b><b class='flag-5'>MLX90614</b>的STM32驅動實現

    基于STM32的MLX90614人體紅外測溫

      今天分享一個項目是做一個紅外測溫的。這個東西網上都有現成的資料和代碼,做起來不難。關于紅外測溫用的芯片是mlx90614。...
    發表于 01-26 19:06 ?85次下載
    基于STM32的<b class='flag-5'>MLX90614</b>人體紅外<b class='flag-5'>測溫</b>槍

    使用mlx90614 ir進行非接觸式溫度測量

    電子發燒友網站提供《使用mlx90614 ir進行非接觸式溫度測量.zip》資料免費下載
    發表于 10-31 11:19 ?1次下載
    使用<b class='flag-5'>mlx90614</b> ir進行非<b class='flag-5'>接觸</b>式溫度測量

    使用MLX90614紅外非接觸式溫度傳感器

    電子發燒友網站提供《使用MLX90614紅外非接觸式溫度傳感器.zip》資料免費下載
    發表于 11-11 15:21 ?8次下載
    使用<b class='flag-5'>MLX90614</b>紅外非<b class='flag-5'>接觸</b>式溫度<b class='flag-5'>傳感器</b>
    主站蜘蛛池模板: 在线免费观看国产精品| 欧美亚洲国产免费高清视频| 国产情侣真实露脸在线| 抽插喷S骚爽去了H| av天堂网站avtt2017| 99久久精品费精品国产| 51精品国产AV无码久久久| 在线 自拍 综合 亚洲 欧美| 亚洲中字慕日产2020| 亚洲欧洲日产国码久在线| 亚洲免费三区| 亚洲精品另类有吗中文字幕| 亚洲乱码国产乱码精品精98| 亚洲精品蜜桃AV久久久| 亚洲理论片在线中文字幕| 亚洲综合国产在不卡在线| 一本色道久久综合亚洲AV蜜桃| 亚洲一二三产品区别在哪里| 亚洲伊人久久综合影院2021| 影音先锋 av天堂| 真实国产精品视频国产网| 竹菊精品久久久久久久99蜜桃| 中文字幕本庄优花喂奶| 123超碰在线视频| 99精品视频免费观看| 超碰超碰视频在线观看| 国产99视频在线观看| 国产精品涩涩涩视频网站| 果冻传媒在线播放| 久久人妻无码毛片A片麻豆| 蜜臀AV精品一区二区三区| 欧美成人momandson| 秋霞电影网午夜鲁丝片| 台湾佬休闲中性娱乐网| 新影音先锋男人色资源网| 伊人久久大香线蕉资源| 99精品AV无码一区二区| 国产a在线不卡| 精品国产乱码久久久久久人妻| 美女医生深夜在家裸睡惨死| 秋霞鲁丝片Av无码|