本帖最后由 聪聪哥哥 于 2025-3-8 15:49 编辑
一:模块信息
CEM5826-M11是一款高灵敏度 24GHz毫米波人体微动存在检测雷达模块。区别于传统雷达通过检测人体移动的大幅度动作或肢体动作来判断人体存在,本模块主要特点是在传统人体感应雷达的功能基础上,同时具备检测积累人体微动幅度的运动,来判断人体的存在的功能。因此相比传统多普勒雷达来说,具备一定范围内的存在检测,准确率更高。不易漏报。
二:模块的功能及工作原理
本系统利用电磁波多普勒效应对运动目标进行探测。通过发射天线发射出24GHz电磁波信号,该电磁波信号遇到运动物体时会反射回带有频偏的 24GHz电磁波信号,此频偏即为多普勒频偏,反射回的信号被接收天线接收,通过对多普勒频偏及中频IQ相位的采集计算分析可以较为灵敏地探测出附近的运动物体以及运动物体是靠近还是远离。当探测到有运动物体靠近时VO输出高电平,无运动物体靠近时 VO 输出低电平。
三:技术参数如下:
实测电流与手册保持一致基本上没有任何误差;
四:软件配置如下所示:
使用串口3接收 毫米波雷达数据,然后通过串口1上传到PC端;
由于该模块上传的数据速度比较快,所以这里把优先级的配置的高一些,防止被其他的模块所打断。
这里重申一下中断的知识:
STM32的串口中断是指当串口收到数据时,cpu会产生串口中断信号信息,通知单片机内部的中断服务函数去处理数据。此时,在串口中断服务程序中,我们可以将数据先放到串口的接收串口缓冲区内,当把所有的数据接收完整时,再去调用串口处理函数。
通俗的说:串口中断服务函数需要使用中断接收功能实现。当有新的数据到达串口时,单片机触发中断请求,从而程序运行到中断服务程序里面。中断服务程序在处理完接收到的数据后,可以根据当时的要求进行处理。采用中断的方式优点是:提高单片机的运行效率,减少了资源浪费。
我所使用的是DMA接收和串口的空闲中断完成数据的接收与转发;主要代码如下所示:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart ->Instance ==USART1)
{
temp = USART1->RDR;
HAL_UART_Receive_IT(&huart1, (unsigned char *)RX1buffer, 23); //开启接收中断
HAL_UART_Transmit_IT(&huart1,(unsigned char *)RX1buffer,23);
rxBuffer1[recPoint++] = temp;
// HAL_UART_IRQHandler(&huart1);
if(recPoint >=23) recPoint = 0 ;
HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_12);
}
else if (huart ->Instance ==USART3)
{
temp = USART3->RDR;
HAL_UART_Transmit_IT(&huart3,(unsigned char *)rxBuffer3,21);
rxBuffer3[recPoint++] = temp;
// HAL_UART_IRQHandler(&huart3);
// if(recPoint >=20)
recPoint = 0 ;
HAL_UART_Receive_IT(&huart3, (unsigned char *)rxBuffer3, 21); //开启接收中断
五:实物测试如下图所示:
|