基于ASR01语音识别模块的STM32小车避障系统设计与实现

1次阅读
没有评论

共计 1714 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

背景痛点

在做 STM32 智能小车项目时,语音控制常常遇到几个让人头疼的问题。首先是麦克风拾音效果差,稍微远一点就识别不到指令;其次是背景噪声干扰大,实验室里空调声、键盘声都会导致误触发;最后是指令响应延迟明显,按下按键到小车执行动作经常有半秒以上的延迟。

基于 ASR01 语音识别模块的 STM32 小车避障系统设计与实现

对比常见的语音识别模块,LD3320 虽然便宜但识别率只有 85% 左右,而且功耗较高(待机时 15mA)。ASR01 模块在测试中表现出色,识别率可达 95% 以上,待机电流仅 2mA,特别适合电池供电的小车项目。

硬件设计

电路连接图要点

  1. ASR01 的 VCC 接 3.3V(注意绝对不能接 5V)
  2. TX/RX 分别接 STM32 的 PA10/PA9(USART1)
  3. BUSY 引脚接 PA0 用于状态检测

PDM 麦克风选型建议:

  • 选用信噪比≥65dB 的型号
  • 指向性选择心型指向,减小侧面噪声干扰
  • 安装时让麦克风朝向驾驶员位置,与电机保持最远距离

核心实现

I2S 配置关键代码 (STM32CubeMX 生成基础代码后需添加):

// DMA 双缓冲配置
hi2s2.Init.Mode = I2S_MODE_MASTER_RX;
hi2s2.Init.Standard = I2S_STANDARD_PHILIPS;
hi2s2.Init.DataFormat = I2S_DATAFORMAT_16B;
hi2s2.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE;
hi2s2.Init.AudioFreq = I2S_AUDIOFREQ_16K;
HAL_I2S_Init(&hi2s2);

// 启动 DMA 接收
HAL_I2S_Receive_DMA(&hi2s2, (uint16_t*)pBuffer, BUFFER_SIZE/2);

指令解析状态机 (核心逻辑):

typedef enum {
  CMD_IDLE,
  CMD_START,
  CMD_FORWARD,
  CMD_BACK,
  CMD_ERROR
} VoiceCmdState;

VoiceCmdState ProcessASRResponse(uint8_t* data) {if(strstr((char*)data, "#START")) return CMD_START;
  if(strstr((char*)data, "#GO")) return CMD_FORWARD;
  // 其他指令判断...
  return CMD_IDLE;
}

性能优化

噪声环境测试数据

信噪比 (dB) 识别率 (%)
30 98.2
20 95.7
10 82.4

电机控制同步方案

  1. 语音线程收到指令后置位标志位
  2. 主循环检测到标志位后立即停止 PWM 输出
  3. 执行新指令前插入 50ms 消抖延时
  4. 新 PWM 参数分 5 个阶梯逐步变化(避免急启停)

避坑指南

电平转换必做防护

  • ASR01 的 IO 若接 5V 设备必须加 74LVC4245 电平转换芯片
  • 所有信号线串联 100Ω 电阻防止浪涌

训练样本增强技巧

  • 录制指令时在不同距离(0.5m/1m/1.5m)各采 3 组
  • 添加背景白噪声(-20dB)的样本
  • 男女声样本比例保持 1:1

扩展思考

RT-Thread 移植关键点

  1. 将 I2S 驱动改为 RT-Thread 设备框架
  2. 创建语音处理线程(优先级应高于电机控制)
  3. 用 RT-Thread 的 IPC 机制替代裸机标志位

连续指令缓冲方案

#define RING_BUF_SIZE 256
typedef struct {uint8_t buffer[RING_BUF_SIZE];
  uint16_t head;
  uint16_t tail;
} RingBuffer;

void PushCommand(RingBuffer* rb, uint8_t cmd) {rb->buffer[rb->head++] = cmd;
  if(rb->head >= RING_BUF_SIZE) rb->head = 0;
}

实测效果

通过示波器抓取波形,语音指令到电机响应的延迟稳定在 80-120ms 之间(包含 50ms 的消抖延时)。在实验室典型噪声环境下(空调 + 电脑风扇),5 次测试中识别准确率全部达到 96% 以上。

完整工程已开源在 GitHub:Project_ASR_Car(包含原理图、PCB 和测试视频)

这个方案在大学生智能车竞赛中经过验证,下一步计划加入神经网络降噪算法,期待与大家一起探讨改进!

正文完
 0
评论(没有评论)