【RoboMaster】舵机驱动&蓝牙模块教程

2023-05-16

本文是为参加2021赛季北京理工大学机器人队校内赛所写的简单教程,意在帮助参赛选手快速了解校内赛所需模块的使用方法,以及其与薪火培训知识的联系。

舵机驱动

硬件接线

舵机

舵机是由直流电机、减速齿轮组、传感器和控制电路组成的一套自动控制系统。与直流电机不同,舵机只能在一定角度内转动,且发送的信号指定的是输出轴应旋转至的角度。
常见舵机引出线为红棕黄或红黑白3色,其中红色为电源线,接5V;棕色或黑色为地线,接GND;黄色或白色为信号线,接GPIO口。

驱动原理

我们利用信号线给舵机发送一系列周期信号,通过控制周期信号内高电平的持续时间,来达到控制舵机应转动至的角度的目的。参加过薪火培训的同学可能会回忆起,这就是使用PWM方式来控制舵机。
PWM控制舵机角度

现在,以MG996R的180度舵机为例,我们来解读其相关参数的含义:

参数名称数据含义
工作电压4.8~7.2V电源线应该接在5V上
转动角度180度旋转角度的范围为0°~180°
工作频率50Hz信号周期为20ms,许多舵机都能工作在此频率下
脉冲宽度0.5ms~2.5ms若1个周期内高电平持续0.5ms,则意味着应旋转至0°位置;若持续2.5ms,则旋转至180°位置;在0.5~2.5ms内,脉冲宽度与输出轴角度成线性关系

需要注意的是,不同型号的舵机的参数可能会有所不同,具体参数还请查询手册。

示例代码

同样以“驱动原理”中的参数为例,我们设置PA1为TIM2_CH2模式,使用高速晶振产生72MHz系统时钟信号。设置分频为72-1,则分频信号频率为1MHz;设置自动重载为20000-1,则每1/1000000*20000s=20ms产生自动重载事件,即设置信号周期为20ms。脉冲宽度应在0.5~2.5ms内,则捕获比较寄存器应设置在500 ~ 2500之间。将目标角度缩放为对应的CCR值,传入捕获比较寄存器,即可实现通过PWM控制舵机角度。关于PWM存在疑问的,可以第2周薪火培训的线下课视频和示例工程。

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);//初始化
uint16_t signal;//传入捕获比较寄存器的值
uint16_t angle=0;//设置目标角度
signal=(uint16_t)((angle-90)*100.0/9+1500);//将目标角度换算为1个周期内高电平持续时间
while (1)
{
	__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,signal);//输出PWM信号
}

蓝牙模块

硬件接线

我们使用的蓝牙模块为BT-04或HC-06,如下图所示。
蓝牙模块
将其根据如下方式与单片机相连接即可。

蓝牙模块STM32单片机
VCC5V
GNDG
RXDTX(你设置为TX的GPIO口)
TXDRX(你设置为RX的GPIO口)

配置蓝牙模块

蓝牙模块在使用前可以对其波特率、名称、密码等参数进行设置,尤其是波特率,必须与之后串口通信的波特率保持一致。蓝牙模块有2种工作模式,即命令响应工作模式和自动连接工作模式。当模块处于自动连接工作模式时,将自动根据事先设定的方式传输数据;当模块处于命令响应工作模式时,能执行AT命令,用户可向模块发送各种AT指令,为模块设定控制参数或发布控制命令。用AT命令设置的参数掉电后依然保存,下次上电使用时无需重新设置。蓝牙模块在上电且未配对情况下自动进入AT模式,默认波特率通常为9600。
将USB转TLL模块与蓝牙模块按照下表连接,USB转TLL模块的USB口接到电脑上。

蓝牙模块USB转TLL模块
VCCVCC
GNDGND
RXDTXD
TXDRXD

打开串口调试助手(如薪火培训大礼包中的XCOM),就可以发送AT指令了,常用的指令包括:

  1. 测试通讯
    发送:AT
    返回:OK
  2. 设置波特率
    发送:AT+BAUD1
    返回:OK1200
    其中BAUD1可改为BAUD2、BAUD3等,对应不同的波特率,对应关系如下表所示。常用波特率为9600、38400和115200。
指令波特率
BAUD11200
BAUD22400
BAUD34800
BAUD49600
BAUD519200
BAUD638400
BAUD757600
BAUD8115200
  1. 设置串口参数
    发送:AT+UART=<Param1>,<Param2>, <Param3>
    返回:OK
    Param1为波特率,Param2为停止位,Param3为校验位。其中,若Param2为0,则设置1位停止位;若Param2为1,则设置2位停止位。若Param3为0,则无校验位;若Param3为1,则为奇校验;若Param3为2,则为偶校验。例如,发送AT+UART=9600,0,0,则设置波特率为9600,1位停止位,无校验位。
  2. 获得串口参数
    发送:AT+UART?
    返回:+UART:<Param1>,<Param2>,<Param3> OK
    参数含义与设置串口参数时一致。
  3. 获得蓝牙模块地址
    发送:AT+ADDR?
    返回:+ADDR:<Param> OK
  4. 设置设备名称
    发送:AT+NAME=<Param>
    返回:OK
  5. 获得设备名称
    发送:AT+NAME?
    返回:+NAME:<Param> OK
  6. 设置模块密码
    发送:AT+PSWD=<Param>
    返回:OK

驱动方式

我们使用的蓝牙模块实质上是个蓝牙转串口的设备,封装了和蓝牙有关的部分,因此我们无需了解蓝牙协议,只要了解串口通信,即可使用蓝牙模块。对于串口通信的收发方式有疑问的同学,可以回看薪火培训串口通信相关的线下课录制和示例视频。
现在我们以BT-04为例,演示通过手机蓝牙控制STM32单片机(当然,也可以通过上位机控制)。
首先下载一个手机蓝牙串口助手,在应用市场里可以找到很多类似的应用,如“蓝牙串口”、“蓝牙调试助手”等,此处使用的是“蓝牙调试器”。完成蓝牙模块和单片机的接线,并给单片机上电后,在app中找到我们的蓝牙模块并连接,密码一般为0000或1234。
手机与蓝牙模块配对
编写串口通信收发数据的工程,并烧录到单片机中。打开debug模式,将接收数据添加到watch中,在手机蓝牙串口助手中发送数据,即可在watch中观察到接收数据变化。我们可以利用收到的数据控制单片机的其它外设,或者将单片机运行的结果发送给手机蓝牙串口助手。
手机发送“A”
单片机收到数据“A”

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

【RoboMaster】舵机驱动&蓝牙模块教程 的相关文章

  • 数组名取址&a+1和a+1

    第一天 xff0c 取址数组名 amp a C语言中的指针很重要 xff0c 关于指针的使用 xff0c 牛逼的那是真牛逼 xff0c 不行的那是真不行 xff0c 为了加深印象 xff0c 争取做到每日一练 xff01 如有错误 xff0
  • Jetseon TX2 & IntelRealsense D435i & Python

    Jetseon TX2 amp IntelRealsense D435i amp Python amp Socket 一 IntelRealsense Python Wrapper GitHub 1 Installation pip ins
  • 无人机仿真SLAM_gazebo&promethues

    无人机仿真 总体概述系统要求 PX4固件简介无人机固件整体框图无人机软件框图无人机硬件模型 Mavlink模块位置估计与姿态估计模块安装与编译二次开发 机载计算机程序控制模块估计模块仿真模块SLAM模块SLAM效果演示 总体概述 无人机仿真
  • LLVM/clang & lib路径 & 测试代码

    部分转载自 xff1a Ubuntu编译安装llvm clangUbuntu14 04 Linux安装LLVM clang 3 7 xff08 带有标准库 libc 43 43 xff0c libc 43 43 abi xff09 所需即所
  • 虚拟化技术介绍 & hypervisor简介

    什么是虚拟化 xff1f 虚拟化 xff08 英语 xff1a Virtualization xff09 是一种资源管理技术 xff0c 是将计算机的各种实体资源 xff0c 如服务器 网络 内存及存储等 xff0c 予以抽象 转换后呈现出
  • 计算机图形学方向和前景&&3D

    我是刚入坑计算机图形学的小菜鸟 xff0c 在百度上搜索计算机图形学方向和前景和3D xff0c 几乎不能搜到什么有用的东西 xff0c google还能搜到些有用的 xff0c 但是需要翻墙 恰好前几天山大承办的games xff0c 北
  • 【CCF推荐专区】计算机类优质SCI&EI好刊,期刊质量高,部分期刊仅有少量版面

    x1f308 智能传感类 xff08 TOP xff09 CCF C类 期刊简介 IF 7 0 8 0 xff0c JCR1区 xff0c 中科院2 1区 检索情况 SCI amp EI 双检 xff0c 正刊 xff0c CCF C类 征
  • ElasticSearch学习&&理解

    注 xff1a 本篇的es基于7 5 1版本 目录 Elasticsearch是什么 xff1f ElasticSearch的环境搭建 ElasticSearch的名词 ElasticSearch查询出的数据格式 ElasticSearch
  • (5)py接口自动化之配置文件&数据库连接详解

    目录 一 配置文件 ini amp yaml 1 作用 2 ini A 语法 B 特点 C 操作方法 3 yaml A 安装第三方库 B 支持的数据类型 C 特性 D 语法 E 数据读取 二 数据库连接与pytho配置文件 1 安装数据库
  • 【浅墨著作】《逐梦旅程:Windows游戏编程之从零开始》勘误&配套源代码下载...

    I 39 m back 恩 xff0c 几个月不见 xff0c 大家还好吗 xff1f 这段时间真的好多童鞋在博客里留言说或者发邮件说浅墨你回来继续更新博客吧 woxiangnifrr童鞋说每天都在来浅墨的博客逛一下看有没有更新 xff0c
  • 数组名a+1和&a+1的区别

    C C 43 43 里面的数组名字会退化为指针 xff0c 所以数组名a实际指的是数组的第一个元素的地址 而数组名作为指针来讲有特殊性 xff0c 它正在它所指向的内存区域中 xff0c amp a的值和a的数值是相同的 xff08 可以输
  • 【STM32】 利用paho MQTT&WIFI 连接阿里云

    ST联合阿里云推出了云接入的相关培训 xff08 基于STM32的端到端物联网全栈开发 xff09 xff0c 所采用的的板卡为NUCLEO L4R5ZI板 xff0c 实现的主要功能为采集温湿度传感器上传到阿里云物联网平台 xff0c 并
  • 【RoboMaster】舵机驱动&蓝牙模块教程

    本文是为参加2021赛季北京理工大学机器人队校内赛所写的简单教程 xff0c 意在帮助参赛选手快速了解校内赛所需模块的使用方法 xff0c 以及其与薪火培训知识的联系 舵机驱动 硬件接线 舵机是由直流电机 减速齿轮组 传感器和控制电路组成的
  • 【日志工具】g3log_6_ROS1中g3log的安装&使用

    ROS1中g3log的安装 amp 使用 基于ros1 melodic版本进行封装使用 g3log库安装 git clone https span class token operator span span class token com
  • 关于&&和||的优先级问题

    span class token macro property span class token directive keyword include span span class token string lt stdio h gt sp
  • cmake & CMakeLists.txt

    文章目录 前言先从体验开始1 一个最简单的例子 xff1a 2 例子升级 xff0c 将hello c生成为一个库 xff1a 3 例子升级 xff0c 将源代码和库分开放 xff1a 4 让可执行文件在 bin 目录 xff0c 库文件在
  • cv::imread(cv::String const&, int)’未定义的引用

    在 Makefile文件的195 行 LIBRARIES 43 61 opencv core opencv highgui opencv imgproc 后面添加 xff1a opencv imgcodecs opencv videoio修
  • ROS速成之发送&接收消息

    人真的老了 xff0c 扔了个周末 xff0c 完全不记得干了什么 论纪录的重要性啊 xff0c 当时觉得明白的很 xff0c 你扔两天试试 xff1f 扔一年试试 xff1f 扔几年试试 xff1f 最近参加的各种项目脑疼眼乏 xff0c
  • RoboMaster机器人运行教程(一)

    1 环境配置 系统 xff1a ubuntu16 04 xff0c 安装ROS 2 基础学习 需要C 43 43 和python基础 xff0c 和ROS的基础知识 xff0c 网上有很多教程 xff0c 推荐知乎大佬教程 xff1a 我的
  • Cmake入门&运行保存C/C++文件

    Cmake入门 amp 运行保存C C 43 43 文件 在ubuntu创建 保存 运行c 43 43 文件CMake入门创建文件编译 参考 最近在学习Intel realsense T265双目视觉 xff0c 其中一步需要创建源文件ma

随机推荐

  • 文件缓冲区

    系统自动在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区从内存向磁盘输出数据 xff0c 必须先送到内存中的缓冲区 xff0c 装满缓冲区后才一起送到磁盘 如果从磁盘向计算机读入数据 xff0c 则一次从磁盘文件将一批数据输入到内存缓
  • 【UE4学习】5.相机和蓝图进阶

    文章目录 相机基础Project Setting控制输入按键事件控制相机设置追踪目标CameraManager实现相机切换API接口与多态蓝图之间的通信方式GameMode 43 Manager显示当前相机信息事件调度器Sequencer入
  • 动态绑定实现的原理

    当用virtual关键字来声明一个成员函数 xff0c 编译器机会根据动态绑定机制在幕后完成一些工作 当编译器发现类中有虚函数的时候 xff0c 编译器会创建一张虚函数表 xff0c 把虚函数的函数入口地址放到虚函数表中 xff0c 并且在
  • 模板函数实现数组排序

    template lt class T gt void sortfun T arr int len int i j T tmp for i 61 0 i lt len 1 i 43 43 for j 61 i j lt len 1 j 43
  • 静态转换和动态转换

    1 静态转换 静态转换用于 xff0c 普通数据类型间的转换 xff0c 具有继承关系的父子类指针或引用的转换 class Dad class Son public Dad class MyClass 基础类型转换 void test1 i
  • 文件的原子操作

    文件的原子操作是指一个操作一旦启动 xff0c 则无法能被破坏它的其它操作打断 1 写文件原子操作 无论是两个打开 xff0c 还是dup xff0c 同时操作一个文件都可能引起混乱 xff0c 解决这个问题的方法是 xff0c 可以通过O
  • 目录操作

    创建目录 xff1a int mkdir const char pathname mode t mode xff1b pathname xff0c 路径 xff1b mode xff0c 目录访问权限 xff1b 返回值 xff1a 成功
  • 【UE4学习】6.粒子系统

    文章目录 粒子系统常用参数Simple Sprite Burst EmitterEmitter SettingsEmitter SpawnEmitter UpdateParticle SpawnParticle UpdateAdd Even
  • java中Array/List/Map/Object与Json互相转换详解

    JSON JavaScript Object Notation xff1a 是一种轻量级的数据交换格式 一 JSON建构有两种结构 xff1a 对象和数组 1 对象 xff1a 对象在js中表示为 扩起来的内容 xff0c 数据结构为 ke
  • ZipInputStream解压远程文件报错,java.lang.IllegalArgumentException: MALFORMED[1]

    我遇到的问题是报的这个错java lang IllegalArgumentException MALFORMED 1 at java util zip ZipCoder toString ZipCoder java 65 不是 java l
  • OAuth2.0接百度平台进行授权

    百度开发文档 xff1a https openauth baidu com doc regdevelopers html 1 注册开发者账号并创建一个应用 2 创建应用后 xff0c 获取API Key和Secret Key 3 创建一个S
  • Spring 中最常用的 11 个扩展点

    1 自定义拦截器 spring mvc拦截器根spring拦截器相比 xff0c 它里面能够获取HttpServletRequest和HttpServletResponse等web对象实例 spring mvc拦截器的顶层接口是 xff1a
  • 经典排序算法

    https juejin cn post 7198840786766102589
  • SpringBoot项目启动加载时排除某一个类

    在Application启动类上 xff0c 用这个注解就可以指定某个类不加载进容器 64 ComponentScan
  • 手写一个生产者/消费者模式(三种方式实现)

    这种设计模式需要满足以下三点要求 xff1a xff08 1 xff09 生产者生产数据到缓冲区中 xff0c 消费者从缓冲区中取数据 xff08 2 xff09 如果缓冲区已经满了 xff0c 则生产者线程阻塞 xff1b xff08 3
  • Android中Okhttp,Volley,Retrofit网络框架优缺点及对比

    Okhttp xff1a Square 公司开源的 OkHttp 是一个专注于连接效率的 HTTP 客户端 OkHttp 提供了对 HTTP 2 和 SPDY 的支持 xff0c 并提供了连接池 xff0c GZIP 压缩和 HTTP 响应
  • Google身份验证服务端实现

    import org apache commons codec binary Base32 import org apache commons codec binary Base64 import javax crypto Mac impo
  • 下载jdk8登录账号

    目前在官网下载低于jdk1 8的java jdk的时候需要登陆 xff0c 这边分享一个账号 xff0c 方便下载 2696671285 64 qq com 密码 xff1a Oracle123
  • idea中maven项目 jar包下载不完整解决办法

    有时从git上clone项目 xff0c maven工程 xff0c 有时候pom xml在project标签处报错 xff1a Failed to read artifact descriptor for xxx jar 这种有时候时ja
  • 【RoboMaster】舵机驱动&蓝牙模块教程

    本文是为参加2021赛季北京理工大学机器人队校内赛所写的简单教程 xff0c 意在帮助参赛选手快速了解校内赛所需模块的使用方法 xff0c 以及其与薪火培训知识的联系 舵机驱动 硬件接线 舵机是由直流电机 减速齿轮组 传感器和控制电路组成的