1月15日
1.循环套结构体要在结构体中声明变量,所以最外部尽量使用typedef struct
1月17日
RM底盘控制
由于之前两天生病,就没有更新,但RM小车的底盘代码控制已经写完,所以今天我会将从头开始更新整个底盘控制的实现,包括说明书如何看,如何选择引脚,如何配置端口(等于系统的弄一遍),本次将会使用HAL库,以后后续将会将标准库代码补上(目前还太菜)
软件
- STM32CUBEMX5.01uvision5(主要用于引脚使能,常规配置)
- Keil uvision5(代码书写,修改,调试)
相关库
硬件及相关参数
https://store.dji.com/cn所有硬件都能在大疆商城找到
1. 本次使用的是四个RM M3508电机(相关的说明书可以去官方下载,这里只讨论引脚和接受发送,暂时用不到电机参数)最大电流15A。
2. 4个RM C620无刷电机调速器(这里就只指明具体需要的CAN通信协议,剩余的参数可以去RM官网下载相关手偶明书)
电调接受报文格式
用于向电调发送控制电调的电流输出,两个标识符(0x200和0x1FF)各自对应控制四个ID的电调。控制电流值范围-16348~ 0~16348,对应电调输出的转矩电流范围-20 ~ 0 ~ 20A。
标识符0x200 帧格式:DATA
帧类型:标准帧 DLC:8字节
数据域 | 内容 | 电调 ID |
---|---|---|
DATA [ 0 ] | 控制电流值高8位 | 1 |
DATA [ 1 ] | 控制电流值低8位 | 1 |
DATA [ 2 ] | 控制电流值高8位 | 2 |
DATA [ 3 ] | 控制电流值低8位 | 2 |
DATA [ 4 ] | 控制电流值高8位 | 3 |
DATA [ 5 ] | 控制电流值低8位 | 3 |
DATA [ 6 ] | 控制电流值高8位 | 4 |
DATA [ 7 ] | 控制电流值低8位 | 4 |
标识符0x1FF 帧格式:DATA
帧类型:标准帧 DLC:8字节
数据域 | 内容 | 电调 ID |
---|---|---|
DATA [ 0 ] | 控制电流值高8位 | 5 |
DATA [ 1 ] | 控制电流值低8位 | 5 |
DATA [ 2 ] | 控制电流值高8位 | 6 |
DATA [ 3 ] | 控制电流值低8位 | 6 |
DATA [ 4 ] | 控制电流值高8位 | 7 |
DATA [ 5 ] | 控制电流值低8位 | 7 |
DATA [ 6 ] | 控制电流值高8位 | 8 |
DATA [ 7 ] | 控制电流值低8位 | 8 |
电调反馈报文形式
电调向总线上发送反馈数据
标识符0x200 + 电调ID (如:ID为1,该标识符为0x201)
帧格式:DATA
帧类型:标准帧
DLC:8字节
数据域 | 内容 |
---|---|
DATA [ 0 ] | 转子机械角度高8位 |
DATA [ 1 ] | 转子机械角度低8位 |
DATA [ 2 ] | 转子转速高8位 |
DATA [ 3 ] | 转子转速低8位 |
DATA [ 4 ] | 实际转矩电流高8位 |
DATA [ 5 ] | 实际转矩电流低8位 |
DATA [ 6 ] | 电机温度 |
DATA [ 7 ] | Null |
发送频率:1Khz
转子机械角度值范围::0 ~ 8191(对应转子机械角度0~360)
3.RobotMaster 开发板A型 STM32F427IIHx
4.中心版
5.24v电压源
6.DJI NDJ6遥控器
7.DJI DR16遥控接收器
需要的信息如下
以上就是调底盘所用的所有硬件和参数,至于底盘,我就随便用了个纸箱搭了
ps.别小看这个,算上纸箱两三千
接下来就是实际操作
STM32CUBE配置部分
硬件连接关系比较简单,之后我会出个视频说明连接关系
1.首先打开STM32CUBEMX,找到相对应的板子,
2.选择核心,这里因为我们的板子是STM32F427IIHx,所以如图选择
3.我们所使用的是系统时钟,所以在该处需要系统时钟使能,上面出现的单词在我的学习笔记1,2中我有大概的归纳过(其实就是将百度的定义复制总结了)
4.由于此处我们使用的是jtag,所以这里需要配置一下
5.我们使用的遥控器型号接收器和主控板之间的通讯方式是DBUS但是
以上取自遥控器用户手册,所以这里不能单纯的选择一个串口
易见在RM开发板用户手册中已经明确说明了,故使能PB7,但是还要接着使能PB6,因为串口通讯需要些读取和发送,不过最简单的方法是在左窗口直接使能USART1,因为pb7,pb6对应的就是USART1.
此时我们已经使能遥控器信息接收的引脚了,接下来就要具体的配置该引脚的相关信息
效果如图
然后设置一个接收中断(就是收到信息时就执行你所选定的操作
此处选择NVIC Setting也行,这个也是中断,缺点是不如DMA快(应该把)
现在关于串口的我们就配置好了
6.接下来我们使能几个灯,以后调试用的(用法例如:处于遥控器模式八号灯就闪灯,停止模式就关闭,键盘鼠标控制就持续亮灯)
首先看一下这块板子的电路图
这块板子的电路图想要找到led灯有点困难,所以使用搜索
由于连接LED灯的非主板端为高电平,所以单主板输出为低电平时,led灯才会亮,现在我们局部放大看一下引脚(ctrl+鼠标滚轴)
可见连接的为PG1 ~ PG8,所以现在要在cube中使能这些引脚,而且希望初始化是高电平状态(不亮状态)
此时我们led就配置完成了
7.接下来就是配置时钟了(这时候不配置CAN通讯是因为can通讯中有地方数据取决于时钟中APB1,如果先配置CAN,时钟树比较难配置,我们先在板子的说明书上搜索MHZ
可以看出晶振为12MHZ,我们之前就配过时钟
8.然后就到了CAN通讯配置
我们使用CAN1来作为电机的CAN通讯接口,说明书中为PD0,PD1为CAN通讯,这里寻找CAN1(期间会出现很多CAN1,但只有这个是可用的)
这里之所以为1Mbps是因为无刷电机调速器说明书中明确规定通讯比特率
然后就到设置中断了
这里我们需要的是接受到数据的时候触发一次中段,因为我们希望接受到数据的时候就将数据存储下来,而存储操作是需要中断实现的。
9.接下来我们还需要使能一个操作系统FREERTOS,因为里面的可以放入线程,比较方便(具体为什么以后会写到)
参数配置如上即可,其他不需要修改。
10.现在我们需要配置的基本都配置完了,底盘所需要的就这么多,最后就只用设置下名字等信息就行
首先是配置下名字和生成格式
然后接着按下图配置即可
现在关于配置的部分就全部结束了
最后一步
自学笔记6(也就是下一个)我会把具体的代码从头给一遍