萤火工场 CEM5826-M11 毫米波雷达模块测评
分享作者:user202505087040
评测品牌:萤火工场
评测型号:CEM5826-M11
发布时间:2025-09-28 10:45:47
2 1
前言
开源口碑分享内容
一、产品介绍
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