萤火工场 CEM5826-M11 毫米波雷达模块测评
分享作者:user202505087040
评测品牌:萤火工场
评测型号:CEM5826-M11
发布时间:2025-09-28 10:45:47
1
前言
萤火工场 CEM5826-M11 毫米波雷达模块测评
开源口碑分享内容

一、产品介绍

CEM5826-M11是一款高灵敏度2.4GHz毫米波人体微动存在检测雷达模块。区别于传统雷达通过检测人体移动的大幅度动作或肢体动作来

判断人体存在,本模块主要特点是在传统人体感应雷达的功能基础上,同时具备检测积累人体微动幅度的运动,来判断人体的存在的功

能。因此相比传统多普勒雷达来说,具备一定范围内的存在检测,准确率更高。不易漏报。

本系统利用电磁波多普勒效应对运动目标进行探测。通过发射天线发射出2.4GHz电磁波信号,该电磁波信号遇到运动物体时会反射回带有

频偏的2.4GHz电磁波信号,此频偏即为多普勒频偏,反射回的信号被接收天线接收,通过对多普勒频偏及中频Q相位的采集计算分析可以

较为灵敏地探测出附近的运动物体以及运动物体是靠近还是远离。当探测到有运动物体靠近时VO输出高电平,无运动物体靠近时VO输出

低电平。

二、硬件组成

使用自制STM32F103RCT6主控板,与单片机连接需要连接四根线,分别是5V→5V,GND→GND,RXD→PA2,TXD→PA3。

三、代码部分

使用STM32F103RCT6主控板接收CEM5826-M11的串口信号,在通过串口发送到电脑。

#include "stm32f10x.h"                  // Device header
#include <stdio.h>
#include <stdarg.h>
#include "Serial.h"
#include "Serial.h"

uint8_t Usart_RxData;
uint8_t Usart_RxFlag;
extern uint8_t buffer[6];
extern uint8_t buffer2[6];
extern int data[9];
extern char  tx_buf[15];
char  num[10];
void Usart_Init(void)
{
		
		GPIO_InitTypeDef GPIO_InitStructure;
		USART_InitTypeDef USART_InitStructure;
		NVIC_InitTypeDef NVIC_InitStructure;
	 
		RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);	
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	
	
		//USART3_TX   GPIOB.10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//
    GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOB.10
   
    //USART3_RX	  GPIOB.11³õʼ»¯
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PB11
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//
    GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOB.11  

		
		NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
		NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//
		NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;		//
		NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//
		NVIC_Init(&NVIC_InitStructure);	//
 	

		USART_InitStructure.USART_BaudRate = 115200;//
		USART_InitStructure.USART_WordLength = USART_WordLength_8b;//
		USART_InitStructure.USART_StopBits = USART_StopBits_1;//
		USART_InitStructure.USART_Parity = USART_Parity_No;//
		USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//
		USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//

    USART_Init(USART3, &USART_InitStructure); //
    USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//
    USART_Cmd(USART3, ENABLE);                    //
}

void Usart_SendByte(uint8_t Byte)
{
	USART_SendData(USART3, Byte);
	while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
}

void Usart_SendArray(uint8_t *Array, uint16_t Length)
{
	uint16_t i;
	for (i = 0; i < Length; i ++)
	{
		Usart_SendByte(Array[i]);
	}
}

void Usart_SendString(char *String)
{
	uint8_t i;
	for (i = 0; String[i] != '\0'; i ++)
	{
		Usart_SendByte(String[i]);
	}
}

uint32_t Usart_Pow(uint32_t X, uint32_t Y)
{
	uint32_t Result = 1;
	while (Y --)
	{
		Result *= X;
	}
	return Result;
}

void Usart_SendNumber(uint32_t Number, uint8_t Length)
{
	uint8_t i;
	for (i = 0; i < Length; i ++)
	{
		Usart_SendByte(Number / Usart_Pow(10, Length - i - 1) % 10 + '0');
	}
}


void Usart_Printf(char *format, ...)
{
	char String[100];
	va_list arg;
	va_start(arg, format);
	vsprintf(String, format, arg);
	va_end(arg);
	Usart_SendString(String);
}

uint8_t Usart_GetRxFlag(void)
{
	if (Usart_RxFlag == 1)
	{
		Usart_RxFlag = 0;
		return 1;
	}
	return 0;
}

uint8_t Usart_GetRxData(void)
{
	return Usart_RxData;
}
//0xa3    0xb3    0x30    0x30    0x31    0x31    0x30    0x30    0x30
//data[0] data[1] data[2] data[3] data[4] data[5] data[6] data[7] data[8]
void USART3_IRQHandler(void)
{
	if (USART_GetITStatus(USART3, USART_IT_RXNE) == SET)
	{
		Usart_RxData = USART_ReceiveData(USART3);
		Usart_RxFlag = 1;
		USART_ClearITPendingBit(USART3, USART_IT_RXNE);
	}
}


void UsartGet(void)
{
	static int i = 0,j = 0;
	if (Usart_GetRxFlag() == 1)//´®¿Ú½ÓÊÕµ½ÐÅÏ¢
		{
		data[i++] = Usart_GetRxData();
		if(data[0]== 'v') 
		{
				if(data[2] =='-')
				{
					for(j=0;j<4;j++)
					{
						buffer[j] = data[j+2];
						//buffer[j+1] = '\0';
					}
					for(j=0;j<5;j++)
					{
						buffer2[j] = data[j+16];
						//buffer2[j+1] = '\0';
					}
				}
				else
				{
					for(j=0;j<3;j++)
					{
						buffer[j] = data[j+2];
						//buffer[j+1] = '\0';
					}
					for(j=0;j<5;j++)
					{
						buffer2[j] = data[j+16];
						//buffer2[j+1] = '\0';
					}
				}
					

			
			i = 0;
		}
	    
		}
}


全部评论
暂无评论
0/144