基于stm32和富斯遥控器的SBUS波形分析和通讯实现

简介

最近一个小项目用到了富斯的遥控器(使用的SBUS协议),目的是实现通过遥控器的各个通道对小车进行简单控制(移动、灯光、不同工作模式等),一点小经验和大家分享下。SBUS网上的资料很多,本篇更偏向于新人对SBUS的快速理解和直接应用,对一些不太常用的细则不再进行介绍。
因为是第一次使用SBUS协议,根据个人习惯在学习通讯协议时喜欢对照着实际波形理解,如果有朋友对硬件有简单了解,建议接触新的通讯协议时也用示波器配合实际波形来学习,能发现很多细节。当然这个不是必须的,仅是个人建议而已,实际波形我也会贴出供感兴趣的朋友参考。
其他细节如有疏漏还请各位指出,共同进步。

软件环境和硬件搭建

软件环境

编译软件:KEIL MDK
库:STM32标准库
单片机I/O使用:PC11(串口USART4 RX端,TX端不接即可)
单片机外设使用:USART4(接收遥控数据)、TIM3(定时验证数据正确性)

硬件搭建

发射装置:富斯遥控器FS-I6S
接收装置:接收机IA10B
MCU控制板:STM32F407电路板
外接电路:简单的三极管反向电路(必须)

发射装置和接收装置之间只要是SBUS通讯方式,不同型号理论来说影响不大,程序可以通用。
因为只需要用到单片机的串口(为了验证数据的正确性笔者多用了个定时器TIM3),所以只是实现通讯的话电路要求比较简单,只要能正常工作并带有串口外设的单片机板即可,比如某宝上卖的STM32F103最小系统板。
由于SBUS逻辑电平和常用的串口通讯极性刚好相反,所以需要搭建一个简单的三极管反向电路,电路参考下图。
三极管反向电路
遥控器需要配置为SBUS输出模式:
在这里插入图片描述

接收机接线如下:
绿线为信号线-----接三极管反向电路的输入端(Single)
黄线为电源+线-----接5V电源
蓝线为电源地线 -----接电源GND
在这里插入图片描述在这里插入图片描述总体连接如下:
在这里插入图片描述

SBUS协议

SBUS协议

SBUS协议其实就是串口通讯(USART)的应用层协议,它的本质还是USART通讯。可以粗暴理解为一帧SBUS数据是由连续发送或接收25个字节(即25次)的串口数据构成,第一个字节固定为0x0F,最后一个字节固定为0x00,中间23个字节和起来构成了所需数据。所以使用它在程序上还是使用串口,只不过在串口配置上必须按照以下参数配置:
串口波特率为100000,数据位为8位2个停止位,校验,无硬件控流
Sbus的编码方式为每11位为一个数据,除去第一个字节和第25个字节,需要把中间23个字节的常规8位数据合在一起,并按每11位为一组的格式进行解析处理。具体解析方法网上教程较多,不再赘述。如果不想了解具体解析方法,可直接引用下文的解析函数得出解析后的结果即可。

SBUS波形分析

位长度:
SBUS的波特率固定为100K,所以每传输一位的时间为:1/100K=10us,
随机用示波器抓取了一位,实测结果略微有误差为11.7us,在接受范围内。
在这里插入图片描述

字节长度:
SBUS一帧由25次串口接收或发送构成(25个字节),每次串口发送有12位组成:1个起始位+8个数据位+1个偶校验位+2个停止位。下图为截取一帧SBUS前几个数据字节波形。由于发送顺序遵循LSB(低位优先)原则,所以需要注意每个字节高位和低位的波形和实际结果颠倒的。如波形第一个字节为0xF0,实际数据为0x0F。
SBUS一帧共有25个字节构成,其波特率为100K,所以可在这里插入图片描述
帧长度
SBUS一帧由25个字节构成,每个字节12位,每位长度10us,总长度=10us12位25个字节=3000us(纠正:图中3000us单位错打成了3000ms)。
在这里插入图片描述帧间隔
SBUS两帧间间隔约4.68ms,如果要求不能漏掉任何一帧,则需要注意其他程序处理时间必须在4.68ms内,不能影响一下帧的接收。
在这里插入图片描述

程序部分

程序流程

程序执行流程:上电-----配置外设(USART4、TIM3,默认使能都为关闭状态,TIM3定时3ms)-----等待PC11出现持续一段时间的高电平后使能USART4,等待接收第一个字节(等待的持续高电平即为两帧间的高电平间隔部分,确保能从第一个字节接收)-----当串口收到数据后使能TIM3-----当TIM3时间到后关闭TIM3和USART4判断串口是否是刚好收到25个字节-----是则执行解析函数,不是则为接收错误-----重新等待持续的高电平。

Created with Raphaël 2.2.0 上电 初始化USAER4、TIM3 读取PC11电平 是否出现持续的高电平? 使能USART4,等待接收第一个字节 收到第一个字节则使能TIM3 TIM3时间满后(3ms)判断是否完整收到25个字节
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值