要不,咱们简单设计个车?(基于模型开发)

上一篇《要不,咱们简单设计个车?(整车及软件框架)》介绍了”车力巨人“的外观及软件架构,这篇看一下软件的具体实现。

1 数据解码

参考小车控制器的模型,遥控数据包含4个属性,封装到vector中并通过Bt Radio发送出来。小车端接收到数据后,通过Bluetooth Data子系统解码。解码的模型如下图所示:
在这里插入图片描述
Vector的长度为32 Byte,通过Index Vector Block分别获取前4个字节的内容并做对应的数据转换。传输过程中的数据采用的是uint8型,读取的加速度转换为int8读取控制器的方向(向前或向后),转换为double是因为Simulink默认数据类型为double,不采用默认数据类型要改动的东西比较多。

2 舵机控制

舵机控制子系统如下:
在这里插入图片描述
说明如下:

  1. 舵机控制追加死区,避免控制器微小的晃动导致舵机角度变化
  2. 加上常量90,重新定位舵机的中心角度为90度
  3. 舵机的控制信号用的是micro:bit的Pin15
  4. 输出舵机角度到实时显示

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显示。模型如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/coroutines/article/details/113861607