4300|3

655

帖子

29

TA的资源

版主

楼主
 

【8】蓝牙遥控平衡小车V2 [复制链接]

本帖最后由 lb8820265 于 2022-1-29 22:06 编辑
先上视频:
      小车没有用到什么高深的技术和算法,全部开源,包括PCB源文件,STM32源文件,Android端源文件,物料采购推荐,所有文件在帖子最后都有下载。大家只需要购买好相关的物料,打板焊接好烧录程序即可,建了个QQ群:187045895,欢迎加入。
    小车使用的是FreeRTOS操作系统,并配合FatFs。这里讲解下硬件,代码结构和相关功能的实现。
硬件:
    小车主要是由一块小钢炮开发板、一块PCB板、一块STA350BW语音板、三个舵机、小车支架组成,相关物料帖子最后有下载,舵机粘在了面板上,将语音板粘在舵机上,喇叭粘在语音板上,所有的接线全是用细线焊接出来的,实在是不好看呢。其中还需要将LED灯拆下,因为语音的IIC使用的是PB3与PB10,并没有使用板子留出的IIC,PB3正好是LED灯的接口,IIC这里需要注意加一个上拉电阻,不加也可以,不过偶尔会出现干扰的情况。
     注意:上面的电源模块需要先调好5V电压然后才焊接上去。如果没有使用舵机和语音那么下面的6V电压模块就可以不焊接了。
主要文件:   
      STM32端源码使用KEIL5打开,主要文件及功能如下:

文件

功能

app.c

初始化,任务创建,蓝牙接收与发送

outputdate.c

配合VisualScope软件查看波形

function.c

相关的功能函数,包括初始化,各种检测,PWM输出等

ffconf.h

FatFs文件系统的配置文件

FreeRTOSConfig.h

FreeRTOS操作系统配置文件

imu_sensor_fusion_9-axis.c

一些姿态解算算法

control.c

小车控制算法

imu_sensor_fusion.c

一些姿态解算算法

waveplayer.c

音乐播放

代码运行流程:
     整个代码分为两个部分,一个是被操作系统接管的部分,一个是独立与操作系统的部分。独立于操作系统的部分主要是用来控制小车直立,主要是出于实时性的考虑。被操作系统接管的部分,主要是为了享受操作系统带来的便利。
     先来看看独立于操作系统的部分,这里主要是由两个中断驱动的,IMU配置为fifo模式,阈值设为6,开启中断,IIC使用DMA传输,开启中断。因此流程为IMU的fifo充满6个12位数据触发外部引脚中断,在中断函数中利用IIC的DMA读取,读取完进入IIC中断,中断函数中处理数据,并进行小车控制。这里的中断不想让操作系统接管,主要原因是为了增强实时性,同时也使得系统变得简单。
     (Tips:IMU的IIC频率可以设置为1MHz,IMU的pulling模式读取数据需要将CTRL3_C寄存器中的BDU位置1,不然会有小概率出现错值)
     操作系统部分,初始化函数在on_ready();都是直接初始化,蓝牙的初始化在有专门在初始化任务执行,这是因为蓝牙的初始化会有SPI引脚中断,而由于SPI是非可重入函数,这里做了互斥量所以这里SPI中断被操作系统接管了。任务包括:蓝牙接收任务,蓝牙发送任务,音乐播放任务(当无TF不会初始化),音乐播放控制任务(当无TF不会初始化),LED闪烁任务(当有TF时时不会初始化),电压发送函数,主函数任务,SPI中断任务,蓝牙初始化任务,任务的初始化后都有注释。以后也许还会有更多的任务。
蓝牙数据协议:
    JUMA的蓝牙包将原本20字节的数据变成了1字节的type,1字节长度,18字节的数据。本协议中type发送与接收永远都是1,这里可以理解为数据帧头吧,然后长度的这一字节没有用到,怕不准,因为AndroidSDK发送是1字节type,后面接着数据,长度自动计算出来的,这个并不可靠。然后后面18个字节的数据,第一个字节是数据的ID,因为从APP发送过来的数据类型相当多(目前有7个),所以需要将数据都一一编号,这就是ID的作用了,除了数据ID有宏定义,还有数据的长度,这个主要是用来更加准确解码数据,中间的数据因为类型不同解码方式也不同,在宏定义处有解释,数据最后一位是CkeckSum。
小车控制:
     控制采用的传统的PID控制,直立采用PD控制,解算出来的角度乘以P,然后直接用陀螺仪的值乘以D,速度采用PI控制,速度差乘以D,速度的积分乘以I,这里需要将积分限幅限得相当的小,不然前进时需要小车停止,小车会向前运行一段距离然后退回到之前需要停止的点。转向就是其中一个电机加上一定的PWM值,另一个电机减去相同量的PWM值。APP的转向控制分两种情况,一种是普通模式的转向控制,一种是朝向模式的转向,朝向模式就是APP虚拟摇杆的方向或者手机的姿态就是小车运行的方向,普通模式就是给定一个转向的速度一直不停的旋转。操作模式也分为两种,一种是使用摇杆,一种是使用手机的姿态,所以两两相乘就产生了四种控制模式。三个控制直接线性融合,其中速度和直立控制的周期不同,速度控制为50ms,其实速度是对直立控制的一种干扰,所以周期需要设置的长一些。
小车姿态解算:
     小车使用了两个姿态解算,一个是使用6轴Mahony算法解算出Pitch,一个是9轴Mahony用来解算Yaw,这也就是为啥我会觉得小车没用啥高深的技术和算法的主要原因了,等小车硬件稳定后,会仔细研究姿态解算算法和控制算法。
小车物料与参考购买链接:

最新回复

跟踪一下下!!!  详情 回复 发表于 2016-6-14 08:38
点赞 关注(2)
个人签名QQ:252669569
 

回复
举报

6

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
看起来不错  推荐用51822 来做   硬件上节省成本  程序写着也省劲
 
 

回复

2万

帖子

71

TA的资源

管理员

板凳
 
非常详细 ,赞一个
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

回复

92

帖子

2

TA的资源

一粒金砂(中级)

4
 
跟踪一下下!!!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表