上一篇《要不,咱们简单设计个车?(整车及软件框架)》介绍了”车力巨人“的外观及软件架构,这篇看一下软件的具体实现。
1 数据解码
参考小车控制器的模型,遥控数据包含4个属性,封装到vector中并通过Bt Radio发送出来。小车端接收到数据后,通过Bluetooth Data子系统解码。解码的模型如下图所示:

Vector的长度为32 Byte,通过Index Vector Block分别获取前4个字节的内容并做对应的数据转换。传输过程中的数据采用的是uint8型,读取的加速度转换为int8读取控制器的方向(向前或向后),转换为double是因为Simulink默认数据类型为double,不采用默认数据类型要改动的东西比较多。
2 舵机控制
舵机控制子系统如下:

说明如下:
- 舵机控制追加死区,避免控制器微小的晃动导致舵机角度变化
- 加上常量90,重新定位舵机的中心角度为90度
- 舵机的控制信号用的是micro:bit的Pin15
- 输出舵机角度到实时显示
3 前车灯控制
前车灯控制子系统模型如下:

这是一个外部触发系统,控制器micro:bit的A 按钮按下时,会触发这个子系统执行。内部定义了当前灯光的状态,输出灯光控制信号。每次系统触发时,会对状态进行取反操作。
4 灯光控制
灯光控制子系统如下:

用到了2个Pin,分别是13(前)和16(后),每个信号控制2个LED灯。
5 马达控制
马达控制子系统模型如下:

由2个子系统构成:
- 障碍物检测,及
- 马达驱动状态机
障碍物检测时,小于50cm的距离判断为检测到障碍物,需要处理。由于HC-SR 04偶尔会出现无法检测到脉冲信号的情况,这时驱动返回-1,因此这里增加了2次读取到的返回会值为-1时,按检测到障碍物处理。检测的模型如下:

马达控制的状态机如下:

检测到障碍物,或者控制器micro:bit的B按钮被按下,则执行刹车逻辑;否则根据控制器的倾斜角度,进行向前或向后的加速。
刹车的处理如下,采用PID算法,根据马达的转动方向,给出相反的电压及PWM信号,目标是将车速降为0:

马达控制的模型如下,用到6个Pin,Pin4和Pin7对应2个马达的PWM输出。其中,PWM的频率要设置为50Hz,因为micro:bit的PWM默认使用通道0,连接到这个通道上的还有舵机,舵机要求使用50Hz的频率。

6 车速计算
车速计算采用100ms的计算周期。车轮直径65mm,编码器轮子每转一圈产生260个脉冲,车速计算采用2个轮子编码器的平均值:

7 行驶距离计算
行驶距离采用计算后的车速每100ms累加一次,模型如下:

8 实时显示
最后是实时显示系统,模型中采集到的数据,通过OLED显示。模型如下:

本文详细介绍了智能车的软件实现,包括数据解码、舵机控制、前车灯控制、灯光控制、马达控制、车速计算、行驶距离计算以及实时显示等关键模块。在数据解码中,通过BluetoothData子系统解析遥控指令;舵机控制加入死区处理,并调整中心角度;马达控制采用了PID算法,并结合障碍物检测进行智能驾驶。此外,还涉及了灯光和车速的实时显示功能,实现了全面的车辆控制系统。
9460

被折叠的 条评论
为什么被折叠?



