资讯详情

STM32 单片机 读取 GY906 ML90614非接触式红外传感器

MLX90614是一款红外非接触温度计,由内部状态机控制物体温度和环境温度的测量和计算,进行温度后处理,并将结果通过PWM或是SMBus模式输出。MCU主要通过与MLX90614通信读取其数据

GY906模块主要分GY-906-BAA(或DAA,测距2CM),GY-906-BCC(或DCC,测距10CM)和GY-906-DCI(测距1M),这里用的是GY906-DAA模块。

最新的程序使用STM32 HAL库产生, 与GY906模块通信的SDA SCL脚部设置为泄漏输出。

STM32使用IO口模拟来和GY906的SMBus总线通信,

启动信号:

停止信号:

调用SMBus_ReadMemory即可读取float型温度值:

/******************************************************************************* * Function Name : SMBus_ReadMemory * Description : READ DATA FROM RAM/EEPROM * Input : slaveAddress, command * Output : None * Return : Data *******************************************************************************/ uint16_t SMBus_ReadMemory(uint8_t slaveAddress, uint8_t command) { uint16_t data; // Data storage (DataH:DataL) uint8_t Pec; // PEC byte storage uint8_t DataL=0; // Low data byte storage uint8_t DataH=0; // High data byte storage uint8_t arr[6]; // Buffer for the sent bytes uint8_t PecReg; // Calculated PEC byte storage uint8_t ErrorCounter; // Defines the number of the attempts for communication with MLX90614

ErrorCounter=0x00; // Initialising of ErrorCounter slaveAddress <<= 1; //2-7表示从机地址 do { repeat: SMBus_StopBit(); //If slave send NACK stop comunication --ErrorCounter; //Pre-decrement ErrorCounter if(!ErrorCounter) //ErrorCounter=0? { break; //Yes,go out from do-while{} }

SMBus_StartBit(); //Start condition if(SMBus_SendByte(slaveAddress))//Send SlaveAddress 最低位Wr=0表示接下来写命令 { goto repeat; //Repeat comunication again } if(SMBus_SendByte(command)) //Send command { goto repeat; //Repeat comunication again }

SMBus_StartBit(); //Repeated Start condition if(SMBus_SendByte(slaveAddress 1)) //Send SlaveAddress 最低位Rd=表示下一步读数据 { goto repeat;&bsp;         //Repeat comunication again         }

        DataL = SMBus_ReceiveByte(MLX90614_ACK);    //Read low data,master must send ACK         DataH = SMBus_ReceiveByte(MLX90614_ACK); //Read high data,master must send ACK         Pec = SMBus_ReceiveByte(MLX90614_NACK);    //Read PEC byte, master must send NACK         SMBus_StopBit();                //Stop condition

        arr[5] = slaveAddress;        //         arr[4] = command;            //         arr[3] = slaveAddress+1;    //Load array arr         arr[2] = DataL;                //         arr[1] = DataH;                //         arr[0] = 0;                    //         PecReg=PEC_Calculation(arr);//Calculate CRC     }     while(PecReg != Pec);        //If received and calculated CRC are equal go out from do-while{}

    data = (DataH<<8) | DataL;    //data=DataH:DataL     return data; }

与上文介绍的 HC-02蓝牙串口模块的配置和使用结合即可实现将GY906模块的温度值通过蓝牙发送到手机上。

标签: 接触式传感器头230b在线红外温度传感器传感器pec09

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台