大疆开发板A型基于HAL库驱动M3508直流无刷电机及PID控制

2023-05-16

1.首先,我们先了解一下大疆开发板A型的资料,官方有提供

官网:RoboMaster 机甲大师赛

芯片型号STM32F427IIH6

2.了解M3508直流无刷电机的资料,官网有提供

 

 3.于是我找到了C620电调的资料,官网有提供

 4.好了,现在控制芯片和控制方式都清楚了,接下来按照说明手册接好线后就可以开始配置STM32CubeMX

1)新建new project,选择开发板A型的芯片

2)打开外部高速时钟

这是我的时钟树配置

3)我选择用can总线指令控制,所以根据开发版A型原理图打开相应的接口

其中can1为电调专用接口,can2为DJI OnboardSDK和Robomaster UWB定位系统用

 我这里选择can1,并在原理图中找到引脚,在STM32CubeMX中打开

 打开接收中断

按照C620手册要求CAN的通信速率的1Mbps配置

71.42857142857143ns∗(10 +3+1) = 1000ns = 1us=1mbps

 

4)为了兼容大疆的驱动文件,把can1和can2的参数配置成一样

 5)开启24V电源

开发板A型24V输出电源默认关闭,只有12V可用,由M3508电机使用手册可知,电机的额定电压是24V

 根据开发板A型原理图找到控制24V输出电源的引脚

在STM32CubeMX中配置

6) 常规配置及生成代码

注意生成路径不要有中文 

5. 配置工程文件(keil5MDK)

1)移植大疆给的CAN驱动库文件

2) 在工程中手动添加移植文件的路径

 3)把移植文件添加到工程,并编译一下看看有没有出错

 6.调用函数驱动M3508

1)包含驱动的头文件

#include "bsp_can.h"
#include "CAN_receive.h"

 2)初始化CAN总线的屏蔽滤波器并开启24V输出电源

 

	can_filter_init();
	
	HAL_GPIO_WritePin(GPIOH, GPIO_PIN_2, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOH, GPIO_PIN_3, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOH, GPIO_PIN_4, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOH, GPIO_PIN_5, GPIO_PIN_SET);
	
	HAL_Delay(10);

3)调用函数

CAN_cmd_chassis(int16_t motor1, int16_t motor2, int16_t motor3, int16_t motor4);
HAL_Delay(10);

 要注意的是输入电流值不得超过规定范围

 最后编译工程烧录到开发板,电机就能动啦!刚开始建议固定好电机,调的速度不要太高!注意安全!

7.PID控制

1)移植官方PID文件

2)把移植文件添加到工程

2)包含头文件 ,并编译一下看看有没有出错 

#include "pid.h"

3)声明PID数据结构体,电机数据指针和目标速度变量及PID的三个参数

pid_type_def motor_pid;	//声明PID数据结构体
const motor_measure_t *motor_data;//声明电机结构体指针
int set_speed = 0;//目标速度
const fp32 PID[3]={P,I,D};

这里PID需要自行调参,文章最后有推荐调参工具

4)初始化PID和对应电机的数据指针

PID_init(&motor_pid,PID_POSITION,PID,16000,2000);//结构体,计算模式,参数,最大输出,最大积分输出
motor_data = get_chassis_motor_measure_point(0); //获取电机数据指针编号范围(0~3)

 5)使用PID公式并将计算出的电流发送至CAN总线

PID_calc(&motor_pid,motor_data->speed_rpm,set_speed);//结构体,实际速度,设定速度
CAN_cmd_chassis(motor_pid.out,motor_pid.out,motor_pid.out,motor_pid.out);//PID输出
HAL_Delay(2);

8.调参工具

1)STM32CubeMonitor

2)STMStudio

下载官网:STMicroelectronics: Our technology starts with you - STMicroelectronics


如果对你有帮助,谢谢你的点赞支持!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大疆开发板A型基于HAL库驱动M3508直流无刷电机及PID控制 的相关文章

随机推荐

  • NRF24L01+模块:一对一双向通信,成功!

    查找了很多资料 xff0c 好多都是复制粘贴转发 xff0c 或者安装英文手册直译的 xff08 比如我自己上篇笔记 xff0c xff0c xff09 xff0c 看完还是一脸懵逼 xff0c 没几个可行的 xff0c 推荐几个比较实在的
  • NRF24L01几个函数的分析

    首先看两个版本关于NRF的宏定义 xff1a 开发板 xff1a 遥控器 xff1a 1 xff0c 最基本的读写函数 xff0c 函数的返回值就是读来的数据 xff0c 形参就是写入的数据 stm32mini开发板例程中 xff1a sp
  • stm32f103之HC_SR04超声波测距

    参考资料 xff1a stm32与HC SR04超声波传感器测距 HC SR04超声波测距注意事项 STM32 驱动HC SR04超声波测距模块 HC SR04初识 HC SR04 超声波原理图讲解与时序分析与arduino使用 HC SR
  • stm32之蓝牙模块HC-05使用

    参考资料 xff1a 常用模块 HC 05蓝牙串口通信模块使用详解 xff08 实例 xff1a 手机蓝牙控制STM32单片机 xff09 HC 05蓝牙模块使用教程 HC 05蓝牙模块使用记录 补充与理解 xff1a 套餐有两个板子 一个
  • MPU9250的MPL移植_HAL库(以STM32F103为主控)

    准备材料 xff1a 驱动库 xff1a motion driver 6 12 硬件 xff1a 正点原子MINI STM32f103RCT6硬件IIC PB8 PB9 GY 91模块 看图可知AD0接地 xff0c 地址是0X68 硬件连
  • MPU9250简单快速更改MPL驱动,方便使用MPL和DMP

    附件准备材料 xff1a 我自己的资料MPU9250 c和MPU9250 h 1 xff0c 使用stm32cubemx配置好IIC 2 xff0c 在c c 43 43 处加入宏定义MPU9250 EMPL 最后为 xff1a USE H
  • 重定向printf,不使用微库,采用ARM Compiler 6 报错如何解决?

    复制正点原子的以下代码 xff0c 不使用微库 xff0c 采用ARM Compiler 6 报错 xff1a 报错 xff1a pragma import is an ARM Compiler 5 extension and is not
  • uint8_t / uint16_t / uint32_t /uint64_t 这些数据类型是什么?

    uint8 t uint16 t uint32 t uint64 t 都是别名 xff0c c语言中有哪些数据类型 xff1f 怎么样取别名 在C语言中有6种基本数据类型 xff1a short int long float double
  • 使用stm32c8t6和mpu6050制作一台穿越机

    飞控部分 xff1a 介绍 xff1a 使用stm32c8t6和mpu6050制作一款低价飞控 xff0c 固件用的是开源的betaflight 3 2 5 NAZE xff0c 飞行噪声很小 xff0c 可能是桨叶好 xff0c 乾丰5寸
  • 小米平衡车plus放久后无法充电解决办法

    半年没在家 xff0c 电池没充电 xff0c 回来后发现已经无法充电 xff0c 看了网上一些 激活神器 的产品 xff0c 有人说是智商税 xff0c 我猜那个东西也没什么神奇的东西 xff0c 像这款plus的充电线上3孔的 xff0
  • c语言宏函数怎么传递宏参数_C语言中的宏参数评估

    c语言宏函数怎么传递宏参数 We can define a function like Macro in which we can pass the arguments When a Macro is called the Macro bo
  • MiniFly V1.1开源四轴驱动代码分析八:旋转矩阵、控制分配矩阵等分析介绍

    很久没更新 看见订阅数量持续增加 感觉得加点料才对得起大家的 旋转矩阵 前言 在网上搜索到的一下关于旋转矩阵的表达形式 看起来很像 都是三角函数组合成 不同资料的正负号或者字母不一样 甚至一些是有模有样的复制粘贴 看的脑壳疼 旋转矩阵的形式
  • 数据区、栈区、堆区、代码区

    简介 1 栈区 stack xff1a 由系统的编译器自动的释放 xff0c 主要用来存放方法中的参数 xff0c 一些临时的局部变量等 xff0c 并且方法中的参数一般在操作完后 xff0c 会由编译器自动的释放掉 2 堆区 heap 由
  • 上位机PC控制UR3机器人实现方式

    一 在计算机上安装urx 库 终端输入 xff1a pip install urx xff1b 参考和例程下载见 xff1a https github com SintefManufacturing python urx xff1b 二 利
  • STM32实战项目-串口打印

    前言 xff1a 本小结主要实现串口打印功能 xff0c 主要将上一结的状态机运行次数 xff0c 通过串口在串口终端上打印出来 xff0c 硬件电路上主要是TTL转USB驱动电路 xff0c 软件上主要有状态机函数 xff0c 串口发送函
  • CURL详解

    原文链接 xff1a https www cnblogs com xishaonian p 6550613 html span class token number 1 span CURL详解 span class token number
  • STM32F103C8T6串口通信

    STMF103C8T6串口通信 串口相关的固件函数 xff1a mainusart cusart h 串口作为 MCU 的重要外部接口 xff0c 同时也是软件开发重要的调试手段 xff0c 其重要性不言而喻 关于STM32F103C8T6
  • 单片机(中断系统-串口通信)

    1 RETI 中断操作指令 这条指令的功能和RET指令相似 xff0c 2条指令的不同之处是 xff1a 本指令清除了中断响应时 xff0c 被置1的MCS 51内部不可寻址的 优先级生效 触发器清零 中断程序完成后 xff0c 一定要执行
  • ESP32 for arduino 的3个hardware serial

    在arduino IDE的开发环境中 xff0c 如果使用的开发板不是arduino的开发平台 xff0c 而是ESP32模组的开发板 xff0c 那么在实际开发中由于ESP32的支持库与arduino不同 xff0c 会使得我们在使用一些
  • 大疆开发板A型基于HAL库驱动M3508直流无刷电机及PID控制

    1 首先 xff0c 我们先了解一下大疆开发板A型的资料 xff0c 官方有提供 官网 xff1a RoboMaster 机甲大师赛 芯片型号STM32F427IIH6 2 了解M3508直流无刷电机的资料 xff0c 官网有提供 3 于是