STM32语音控制小车(文末附代码)

本文介绍了一位博主如何将STM32小车改造成语音控制小车的过程,使用LD3320语音模块,遇到并解决了中断冲突、识别距离短等问题。最终通过调整语音模块高度实现了有效控制,同时修复了小车无限旋转的bug。
摘要由CSDN通过智能技术生成
                                **

菜鸟一只,错误之处请指出

**
前些天博主课程设计做了一个基于stm32的循迹避障小车,用的是在某宝上买的智能小车的套件,后来闲来无事想改造成一个语音控制的小车,于是又淘了一个LD3320的语音模块,通过语音命令能够控制小车前进、后退、转弯和停止。
这里附上LD3320的完整资料:http://www.waveshare.net/wiki/LD3320_Board
资料里面有stm32的例程,是用语音控制开发板的LED灯,看了资料后发现例程中使用的开发板芯片和我使用的正好相同,都是使用的stm32f103zet6芯片,所以语音模块的串口没有改动,只简单改动了一下LED灯的串口就能用了。

下面是LD3320的引脚图:
在这里插入图片描述
如果你的开发板上有对应的串口,可以直接按下图的引脚连接:
在这里插入图片描述
博主把代码烧录到板子后才发现自己的板子没有LED灯,是的,没有LED灯,博主都要哭了,于是一生气就把核心板撬掉了,换了一个指南者的板子,花费了两个小时把指南者板子上的引脚连到扩展板对应的引脚上,再烧录程序后发现程序可以正常运行。
下一步把板子装到小车上,下面是连接实物图:
正面
侧面
接下来就是程序的问题了,把语音代码和红外避障的代码整合起来,虽然听起来简单,但实际遇到很多问题,比如中断冲突等,博主呕心沥血花了一周时间查阅数据手册和开发手册,终于解决了问题。
于是赶紧把小车放到地上调试,结果遇到了一个更麻烦的问题,LD3320自带的咪头引脚很短,而语音识别的距离很近,所以小车放在地上根本无法识别语音指令,于是博主不得不接着查阅数据手册,发现35寄存器可以修改语音识别的距离,历程中默认值是0x43,值越大识别距离越远,但同时识别的准确率会严重降低,官方推荐的值为40H—55H,重新调试程序后发现语音识别的距离还不是很理想(其实并没有多大改变),不得已,只能想其他的办法。
某天博主正在吃午饭的时候,突发奇想,能不能把咪头拆下来,再引两根线出来不就解决了吗(窃喜),幸亏博主在付诸实践之前先逛了逛论坛,里面有大牛说线太长会导致信号衰减,语音无法识别,于是博主放弃了这个念头,没敢用于实践。但这个问题怎么解决呢?博主盯着手中的筷子,突然有了一个大胆的想法,用筷子把语音模块架高,
最后,博主含泪牺牲了自己的筷子解决了这个问题。
在这里插入图片描述
在这里插入图片描述
做到这里语音控制小车基本上就完成了,但博主可不是就这样轻易满足的,博主开始想的是小车转弯的角度是90度然后停下,但实际小车会一直不停的旋转,原因是输入语音命令后,代码会把语音命令写到芯片中,然后main()函数会一直循环扫描等待新的语音命令输入,在这个规程中,代码会一直执行上次输入的语音命令,于是修改了部分代码,使每次循环把语音命令清零,解决了这个问题。

#include "LD3320.h"
#include "motor.h"
#include "redvoid.h"
#include "stm32f10x_spi.h"
#include "interface.h"

uint8 nAsrStatus = 0;	
uint8 nLD_Mode = LD_MODE_IDLE;
uint8 ucRegVal;
int f=1;
int key=1;
int key1=1;
extern uint8 nAsrRes=0;
//
  • 39
    点赞
  • 268
    收藏
    觉得还不错? 一键收藏
  • 41
    评论
基于STM32的PID控制小车代码,可以分为硬件驱动部分和控制部分。 硬件驱动部分主要包括: 1. 配置STM32的GPIO口和串口,用于与小车的各个硬件模块进行通信。 2. 配置PWM输出,用于控制小车的电机。可以分别控制左右两个电机的转速。 控制部分主要包括: 1. 设置PID参数,包括比例系数(kp)、积分系数(ki)和微分系数(kd)。 2. 通过读取小车的编码器数据,实时获取小车的位置信息。 3. 根据设定的目标位置,计算出小车当前位置与目标位置之间的误差。 4. 根据误差值,通过PID控制算法计算出控制信号,用于调节电机的转速。 5. 将计算得到的控制信号转换为PWM信号,输出给电机驱动模块控制电机的转速。 PID控制算法的具体实现如下: 1. 将当前位置误差作为反馈值,与设定的目标位置误差进行比较。 2. 通过PID公式计算出控制信号,控制信号等于比例系数乘以误差加上积分系数乘以误差的积分加上微分系数乘以误差的微分。 3. 将控制信号限制在一定范围内,避免电机转速过大或过小。 4. 根据限制后的控制信号,调节电机的转速,使小车向目标位置靠近。 总结:基于STM32的PID控制小车代码主要包括硬件驱动部分和控制部分。其中硬件驱动部分配置了GPIO口、串口和PWM输出,用于与小车的硬件模块进行通信和控制控制部分主要利用PID控制算法计算出控制信号,实现对小车电机转速的调节,使小车按照设定的目标位置进行移动。
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值