【CEM5831E-M12 雷达模块】开发使用指南

分享作者:A0dy
作者昵称:A0dy?
评测品牌:萤火工场
评测型号:CEM5831E-M12
发布时间:2026-05-08 11:04:23
1
概要
CEM5831E-M12 雷达模块开发使用方法!!!
开源口碑分享内容

一、硬件介绍

1、开发板

STM32F103C8T6蓝色开发板, 搭载Cortex-M3内核,Flash 64KB,RAM 20KB,最高72MHz主频;


引脚图

2、雷达模块

CEM5831E-M12 是一款一发两收24GHz毫米波人体存在检测雷达模块。除了检测人体有无及距离外,还可以输出人体相对于雷达的角度,实现人体的位置检测,实现分区域联动控制,可同时检测三个运动目标。

本系统具有一个发射通道,两个接收通道,采用调频连续波(FMCW)工作模式,可对目标的距离和角度进行检测,通过检测积累人体呼吸等微小幅度的运动,来判断人体的存在情况。通过串口向主机输出目标所在的位置;



系统框图

主控MCU:N32G452CCL7(ARM Cortex-M4F内核,主频144MHz)

雷达芯片:SRK1201L


参数典型值
频率24GHz ISM
调制方式FMCW
检测距离裸板1米平挂:运动直线距离7米,存在直线距离5米
供电5V
电流120mA(平均电流)
输出串口电平3.3V
检测周期50ms
数据格式串口 16进制输出
距离精度+/-0.3m
角度误差+/-10°
检测目标数3个


接口定义

触点为2mm间距;

连接器为0.4mm间距20引脚(DF40C-20DP-0.4V(51))

需要单独飞线引出VCC / GND / RX / TX 使用;


覆盖范围


二、雷达使用

串口波特率:115200、字宽:8bit、停止位:1、奇偶校验:None

1、输出目标信息格式

头码(0xCF)+ 命令码(0x66)+ 字长(1字节:目标个数 * 8 + 3)+

目标个数(1字节)+ 目标信息(字节数=目标个数 * 8)+ 校验和(1 字节)+ 尾码(0xEF)


目标信息8字节含义

目标ID:无符号8位;

目标距离(单位cm):无符号16位,前8位是高8位,后8位是低8位;

目标速度(单位cm/s):有符号16位,前8位是高8位,后8位是低8位,速度为正表示靠近,速度为负表示远离,存在时目标速度默认为 2cm/s;

目标角度(°):有符号8位;

目标幅值:无符号16位,前8位是高8位,后8位是低8位;

例如:CF 66 0B 01 01 00 39 00 0C D3 00 10 6A EF

CF 66 0B 01:分别是头码、命令码、字长【1 * 8 + 3 = 11 = 0x0B(hex)】和 目标个数;
目标信息:【01 00 39 00 0C D3 00 10】
6A EF:分别是校验和、尾码;


2、雷达功能设置指令

命令发送与接收格式:

主机发送(定长)

帧头(0xDF) + 命令码(1字节)+ 数据位(2字节) + 尾码(0xEF)

模块返回(变长)

帧头(0xCF) + 命令码(1字节)+ 字长(1字节:数据位+校验位+尾码)+ 数据位 + 校验位(1字节) + 尾码(0xEF)


1、雷达关闭启用指令

命令:DF 0F 00 00 EF(00:为关闭雷达信号)

返回:CF 0F 00 00 DE EF


命令:DF 0F 00 01 EF(01:为打开雷达信号)

返回:CF 0F 00 01 DF EF

当发送雷达关闭命令后,主动输出目标命令码(0x66)的输出目标个数就会改为 0xFF;
当接收到 0xFF 信息后就不要处理目标个数了;

2、角度范围指令

设置角度范围

命令:DF 52 XX 00 EF(XX:为角度最大值的绝对值)

例如: DF 52 3C 00 EF

返回: CF 52 03 3C 60 EF


读取角度范围

命令:DF 53 00 00 EF

返回:CF 53 03 3C 61 EF (3C:为设置的角度范围值)

3、运动最大检测距离指令

设置最大检测距离

命令:DF 54 XX XX EF (XX XX 为最远运动检测距离,单位:cm)

例如: DF 54 02 EE EF (02 EE 表示750cm)

返回: CF 54 04 02 EE 17 EF


读取最大检测距离

命令:DF 55 00 00 EF

返回:CF 55 04 02 EE 18 EF


4、存在最大检测距离范围指令

设置存在最大检测距离范围

命令:DF 56 XX XX EF (XX XX 为最远存在检测距离,单位:cm)

例如: DF 56 02 8A EF (02 8A 表示650cm)

返回: CF 56 04 02 8A B5 EF


读取最大检测距离范围

命令:DF 57 00 00 EF

返回:CF 57 04 02 8A B6 EF


5、最小检测距离范围指令

设置最小检测距离范围

命令:DF 58 XX XX EF (XX XX 为最小检测距离,单位:cm)

例如: DF 58 00 14 EF (00 14 表示20cm)

返回: CF 58 04 00 14 3F EF


读取最小检测距离范围

命令:DF 59 00 00 EF

返回:CF 59 04 00 14 40 EF


6、角度翻转指令

设置角度翻转

命令:DF 5A XX 00 EF (XX 为角度翻转指令  默认为0:不翻转)

例如: DF 5A 00 00 EF

返回: CF 5A 03 00 2C EF


读取角度翻转

命令:DF 5B 00 00 EF

返回:CF 5B 03 00 2D EF


7、其他指令

保存设置指令

命令:DF 14 00 00 EF

查询版本号信息指令

命令:DF 41 00 00 EF


3、上位机软件使用

1、使用USB转TTL工具,连接雷达模块;


2、打开上位机软件

上位机以极坐标形式显示被测目标的坐标信息,并在坐标图上显示目标点;

(绿色代表处于静止状态,红色代表处于运动状态)

输出的坐标点正负角度是按目标相对雷达中心轴左右一一对应;

(目标处于雷达左方时,输出坐标点是负角度;处于雷达右方时,输出坐标点是正角度)

在上位机右侧输入参数,可用于设置雷达的各项参数;
参数设置后,需在下方点击设置配置即可生效;
(如不点击保存配置则断电后配置会失效,恢复最后一次保存的状态)


三、硬件连接

模块与开发板之间的引脚连接方式如下

开发板5VGNDRX(PA10)
雷达模块5VGNDTX


实物效果搭建如下


四、代码编写(Arduino IDE)

功能效果:通过串口输出雷达模块检测到的相关信息等;


主要相关代码

#define HEAD 0xCF
#define TAIL 0xEF
#define BUF_SIZE 64

byte buf[BUF_SIZE];
byte bufLen = 0;

// 目标信息
struct Target {
  uint8_t  id;
  uint16_t distance;
  int16_t  speed;
  int8_t   angle;
  uint16_t amp;
};

Target target;


void setup() {
  Serial.begin(115200);
  while(!Serial);
}


void loop() {
  while (Serial.available() > 0) {
    byte rxB = Serial.read();

    if (rxB == HEAD) {
      bufLen = 0; 
    }

    if (bufLen < BUF_SIZE) {
      buf[bufLen++] = rxB;
    }

    // 收到帧尾开始解析
    if (rxB == TAIL && bufLen > 8) {
      if (buf[0] != HEAD) {
        bufLen = 0;
        continue;
      }

      byte targetNum = buf[3];

      // 打印原始帧
      Serial.print("源格式: ");
      for (int i = 0; i < bufLen; i++) {
        if (buf[i] < 0x10) Serial.print("0");
        Serial.print(buf[i], HEX);
        Serial.print(" ");
      }
      Serial.println();


      // 解析目标
      Serial.print("目标个数:");
      Serial.println(targetNum);

      for (int i = 0; i < targetNum; i++) {
        int pos = 4 + i * 8;

        target.id       = buf[pos];
        target.distance = (buf[pos+1] << 8) | buf[pos+2];
        target.speed    = (buf[pos+3] << 8) | buf[pos+4];
        target.angle    = buf[pos+5];
        target.amp      = (buf[pos+6] << 8) | buf[pos+7];

        // 对齐输出
        Serial.print("ID:");  Serial.print(target.id);
        Serial.print("\t距离:"); Serial.print(target.distance); Serial.print("cm");
        Serial.print("\t速度:"); Serial.print(target.speed); Serial.print("cm/s");
        Serial.print("\t角度:"); Serial.print(target.angle); Serial.print("°");
        Serial.print("\t幅值:"); Serial.println(target.amp);
      }

      Serial.println("-------------------------\n");
      bufLen = 0;
    }

    if (bufLen >= BUF_SIZE) bufLen = 0;
  }
    delay(300);
}


五、效果演示

串口输出雷达模块检测到的相关信息等;

演示效果



六、雷达模块对比

CEM5861G-M11 和 CEM5831E-M12 采用FMCW调制方式,通过发射和接收信号的频率差计算目标距离,能够检测静止人体的呼吸等微小运动;

CEM5831E-M12 具备角度检测能力和多目标检测能力,可以同时跟踪多个目标,并输出每个目标的距离、速度和角度信息等;


CEM5881-M11采用CW多普勒调制方式,只能检测运动目标,无法检测完全静止的人体,但对运动目标的检测距离更远,响应速度更快;


参数CEM5861G-M11CEM5881-M11CEM5831E-M12
调制方式FMCW (调频连续波)CW (连续波 / 多普勒)FMCW (调频连续波)
天线架构一发一收一发一收一发两收
核心检测能力存在检测 + 运动检测 + 距离输出运动检测 + 微动检测 + 速度输出 + 方向识别存在检测 + 运动检测 + 距离输出 + 角度输出 + 多目标检测
典型检测距离挂高3m: 静止 3m / 移动 6m 水平安装:运动 7m / 存在 4m运动检测直线 > 8m1m平挂:运动 7m / 存在 5m
角度检测不支持不支持支持 (±10°误差)
多目标检测不支持不支持支持 (最多3个)
平均工作电流22mA@5V70mA@5V120mA@5V
供电电压3.6-5.5V DC3.6-5V DC4-6V DC
输出接口UART 串口 (16进制)
GPIO 高低电平
UART 串口 (ASCII)
GPIO 高低电平
UART 串口 (16进制)
GPIO 高低电平
波特率115200115200115200
尺寸20×20mm42×5×1.2mm (窄条)32×30mm
发射功率5dBm-11dBm
波束角110° 水平 / 110° 垂直-106° 水平 / 106° 垂直 (发射) 94° 水平 / 48° 垂直 (接收)


CEM5861G-M11 和 CEM5881-M11都是一发一收架构,只能检测目标的有无和距离或速度,无法判断目标的方位(角度);

CEM5831E-M12相对的检测功能更多,但需要单独飞线引出引脚使用,模块没有单独预留排针接口;



全部评论
暂无评论
0/144