自学笔记5

1月15日

1.循环套结构体要在结构体中声明变量,所以最外部尽量使用typedef struct

在这里插入图片描述

1月17日

RM底盘控制

由于之前两天生病,就没有更新,但RM小车的底盘代码控制已经写完,所以今天我会将从头开始更新整个底盘控制的实现,包括说明书如何看,如何选择引脚,如何配置端口(等于系统的弄一遍),本次将会使用HAL库,以后后续将会将标准库代码补上(目前还太菜)

软件

  1. STM32CUBEMX5.01uvision5(主要用于引脚使能,常规配置)
  2. 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(也就是下一个)我会把具体的代码从头给一遍


版权声明:本文为weixin_44109556原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。