PWM、PPM、S-BUS这三种信号的区别

2024-01-28 06:59
文章标签 三种 区别 bus 信号 pwm ppm

本文主要是介绍PWM、PPM、S-BUS这三种信号的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关注、星标公众,不错过精彩内容

编辑整理:strongerHuang

最近有朋友问过相关问题,我之前也研究过遥控器里面的S-BUS信号。这几种信号在实际应用中比较常见,所以今天再次分享一下。

1PWM

PWM:Pulse Width Modulation,即脉冲宽度调制。

两个重要参数:脉冲宽度(就是如下图波形高电平时间),周期(周期x频率 = 1)。

关于PWM的内容,我这里不用多说,PWM是普遍学电子或底层编程的人都知道的一种信号。STM32可以产生PWM波形,也可以检测PWM波形。具体可以参看我的以前推送过的文章。

2PPM

PPM:Pulse Position Modulation,即脉冲位置调制。

因为PWM处理简单,每条物理连线里只传输1路信号。换句话说,需要传输几个通道,就需要几组物理连线。

但在一些场合,我们并不需要直接驱动设备,而是需要先集中获取接收机的多个通道的值。所以,就衍生出了PPM,如下图:

简单来说,就是在一个周期内(20ms),传输多个不同的PWM信号,在每一个周期之间有一个间隔时间来分离。

因为每一帧信号的尾部必须加入一个足够长的空白(显著超过一个正常PWM信号的宽度)来分隔前后两个信号,每一帧能传输的信号通道最多只能到8个。这在大部分的场合已经足够了,且PPM是一个通行标准,绝大多数厂牌的遥控/接收都是支持的。

PPM通信协议:

  • 高电平有效。

  • 高电平电压:常见4.8~6V。

  • 信号周期:24ms。

  • 单个脉冲宽度:0.4ms

  • 脉冲间距:0.9ms至2.1ms

3S-BUS

S-BUS:Serial Bus,即串行总线。

简单来说S-BUS就是将PWM信号进行串行传输通信。

一个字节等于:

1个startbit + 8个数据位+ 1个奇偶校验位+ 2个停止位(8E2),波特率= 100'000 bit / s 

最高位先发送。逻辑反转(Level High = 1)

一帧数据:

每帧25个字节,帧格式如下:

[startbyte] [data1] [data2] .... [data22] [flags][endbyte]

startbyte = 11110000b (0xF0)

数据1-22 = [ch1,11bit] [ch2,11bit] .... [ch16,11bit](ch#= 0 bis 2047)

通道1使用来自data1的8位和来自data2的3位

通道2使用最后5位来自data2和来自data3 

等的6位

flags = bit7 = ch17 =数字通道(0x80)

bit6 = ch18 =数字通道(0x40)

bit5 =帧丢失,接收器上的等效红色LED(0x20)

bit4 =故障保护激活(0x10)

bit3 = n / a 

bit2 = n / a 

bit1 = n / a 

bit0 = n / a


两帧数据之间间隔时间:

  • 高速模式:7ms

  • 模拟模式:14ms

S-BUS可以使用UART控制器来实现,网上有许多教程,感兴趣的朋友可以了解一下。

关于S-BUS的内容可以参看:

https://os.mbed.com/users/Digixx/notebook/futaba-s-bus-controlled-by-mbed/

提示:公众号不支持外链接,请复制链接到浏览器下载)

推荐阅读:

电感这些细节,你知道吗?

视频 | 三相电基础知识及工作原理

电器上的这些符号有什么特别含义?

关注微信公众号『strongerHuang』,后台回复“1024”查看更多内容,回复“加群”按规则加入技术交流群。

长按前往图中包含的公众号关注

这篇关于PWM、PPM、S-BUS这三种信号的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/652838

相关文章

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

java中不同版本JSONObject区别小结

《java中不同版本JSONObject区别小结》本文主要介绍了java中不同版本JSONObject区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1. FastjsON2. Jackson3. Gson4. org.json6. 总结在Jav

数据库使用之union、union all、各种join的用法区别解析

《数据库使用之union、unionall、各种join的用法区别解析》:本文主要介绍SQL中的Union和UnionAll的区别,包括去重与否以及使用时的注意事项,还详细解释了Join关键字,... 目录一、Union 和Union All1、区别:2、注意点:3、具体举例二、Join关键字的区别&php

Spring IOC的三种实现方式详解

《SpringIOC的三种实现方式详解》:本文主要介绍SpringIOC的三种实现方式,在Spring框架中,IOC通过依赖注入来实现,而依赖注入主要有三种实现方式,构造器注入、Setter注入... 目录1. 构造器注入(Cons编程tructor Injection)2. Setter注入(Setter

java中的HashSet与 == 和 equals的区别示例解析

《java中的HashSet与==和equals的区别示例解析》HashSet是Java中基于哈希表实现的集合类,特点包括:元素唯一、无序和可包含null,本文给大家介绍java中的HashSe... 目录什么是HashSetHashSet 的主要特点是HashSet 的常用方法hasSet存储为啥是无序的

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是