Chaotic
// Initial states
// point 1
let x1 = 1.1
let y1 = 1.1
let z1 = -1
// point 2
let x2 = 1.1
let y2 = 1.1
let z2 = 1
const dt = 0.1
let param = {
linewidth: 1,
scale: 40,
speed: 0.01,
param_b: 0.21
}
let pName; // 用于显示参数 b 的元素
function setup() {
let canvas = createCanvas(800, 600, WEBGL);
canvas.parent('sketch-holder');
setAttributes('antialias', true);
t1 = new ...
电控 | 串口通信基础——串口中断与DMA
串口中断与DMA在前一个章节中,我们说到了串口通信的轮询模式。而且,这个模式具有以下的几个缺点:第一,阻塞主程序运行。第二,只能接收固定长度。
而这几个缺点是由其工作原理决定的。要解决这些问题,就要升级其工作原理。因此,我们需要从轮询模式的工作原理开始说起。
串口轮询模式在STM32中的每个串口的内部,都有两个寄存器:
发送数据寄存器 TDR
发送移位寄存器
当调用HAL_UART_Transmit(&huart1, data, 5, 100)的时候,STM32的CPU,会将这个要发送的data一个一个的放置到寄存器中。其放置的方法如下:
发送移位寄存器中的数据,将会按照设定的比特率,转化成高低电平,从TX引脚输出。
当前一个数据被发送出去后,发送数据寄存器TDR中的数据,会被传到发送移位寄存器。这个时候,CPU就会不断的查询TDR中是否为空,若为空,则将后一个数据传入TDR中。
如果TDR为空,CPU就会不断查询,直到所有的数据都传完(传输了固定大小5),或者超过了设置的等待时间100。
使用接收函数HAL_UART_Receive(&huart1, re ...
写在前面
Fomalhaut偶然之间,打开了一处小洞天。
Ubuntu 写入成功!
电控 | 串口通信基础——UART串口协议
UART串口协议本章节,将是UART章节的重中之重。我将详细讲述UART串口通信协议,并且会结合Robomaster官方提供的串口代码进行讲述。希望能够深入浅出地讲透UART串口协议。
UART概述UART(Universal Asynchronous Receiver/Transmitter),即通用异步收发器。其中,异步体现在只需要拉低信号就可以开始传输数据。而这也是串口协议的一个关键特征,它不需要引入时钟信号来进行操作。收发器意味着在数字IC设计中,需要设计接收器和发送器。
UART帧格式
起始位 + 数据位 + 校验位 + 停止位
起始位起始位只有一位,是”0“。当信号被拉低,就意味着一个信号需要开始被接收了。这就是UART通信异步的体现。在接收方空闲的时候,当检测到有一个低电平,则开始逐位接收数据。
在设计UART的时候,如何检测低电平,使用了电平检测电路。具体参阅 电控 | 数电理论基础——边缘检测电路 。
数据位数据位可以是5位,6位,7位,或者8位。这取决于你所要发送的数据的多少。
这就有一个问题,为什么UART的数据位是可变的呢?
由于UART是一个低速总线,每多 ...
电控 | 串口通信基础——通信传输模式
通信传输模式通信的传输模式分为三种:
单工
半双工
全双工
这三种通信模式非常好理解,下面就进行详细阐述。
单工单工通信,亦即单向通信。信号只能从发送端到接收端,且不可回复。
换句话说,信息的流动是单向的,设备之间的通信是不对称的。
半双工半双工通信,信息是双向流动的。通信双方既可成为发送端,也可成为接收端。但是,在一段发送的时候另一端只能接收。
在电控领域,半双工通信的典型用例,如RS485协议。
全双工全双工通信,信息是双向流动的。通信双方既可以成为发送端,也可以成为接收端。但是和半双工不同的是,一端在发送的同时也可以接收。发送和接收可以同时发生。
在电控领域,全双工通信的典型用例,如RS232协议。
在互联网协议,全双工的典型用例,如TCP协议。
总结一张图解决。
电控 | 数电理论基础——TTL逻辑详述
TTL逻辑详述TTL(Transistor-Transistor Logic)即晶体管-晶体管逻辑,是一种集成电路,通过使用双极晶体管,来执行逻辑功能以提供开关功能。TTL设备最重要的特性是,门的输入在未连接时,将为逻辑高电平。
TTL逻辑电平与阈值电压电平大多数的系统依赖于3.3V或5V的TTL电平。我们通常使用的STM32采用的就是3.3V的TTL电平。对于逻辑,阈值电压电平都很重要。
图中有几个参数十分重要。
$V_{OH}$:TTL设备为高信号提供的最小输出电压电平
$V_{IH}$:高电平的最小输入电压电平
$V_{IL}$:低电平的最大输入电压电平
$V_{OH}$:TTL设备为低信号提供的最大输出电压电平
如何理解呢?
输入TTL设备的电压在2V以上,被视为逻辑1;TTL设备输出给驱动高电平设备的电压在2.7V以上。这之间有0.7V的缓冲,被称作是噪声容限。
当一个信号受到了噪声干扰,超过了噪声容限,就可能出现电平反转。如何解决这个问题,详见 电控 | 串口通信基础——串口协议概述 。
如果一个信号的电压介于0.8V~2V之间,会发生什么呢?这个电压范围是不 ...
电控 | 串口通信基础——串口协议概述
串口协议概述串口通信协议最广泛的分为三种,分别是:
RS-232
RS-422
RS-485
更准确的来说,这三种应该被称作“标准”。本节内容,将对这三种标准进行详细的阐述。
标准由来最基本的串口通信最最基本的UART协议帧由3个部分构成:
起始位(1bit) + 数据位(8bit) + 终止位(1bit)
当不传输数据的时候,UART数据传输线通常保持高电平电压。当要开始传输数据的时候,发送 TX UART 会将高电平拉到低电平并保持一个周期。当接收 RX UART 检测到从高到低的电平跃迁的时候,便开始以波特率对应的频率,读取数据帧中的位。同理,当结束的时候,TX UART 会将低电平拉高,意味着一个帧串口数据结束。
面临的问题由于串口采用的是TTL逻辑,输出的高电平最低为2.4V,输出的低电平最高位0.4V。而一般来说,我们的串口通信使用TTL的高电平位5V(STM32中是3.3V),低电平位0V。这意味着,但凡遇到一些影响,就会造成很大的干扰,导致数据传输不准确。
这种影响,可以理解为有一个静电发生,就会导致某一个低电平很容易的就变成了高电平,从而被误读为高电平 ...
电控 | 串口通信基础——串行通信综述
串行通信综述在日常的学习和工作中,很经常见到一些专有名词,如:串行通信总线,串口通信等概念;同时还能见到一些不同的协议,如RS-232,RS-422,RS-485;以及单工,半双工,全双工;还有诸如接收中断,DMA中断等等。这些都是些什么内容,很多人就算已经深入了应用层,但依旧是傻傻分不清。
经过了很久的摸爬滚打,我终于将很多东西理顺了。我是一个没有经过系统培训过的电控人,因此更多的是从一个原始理念中自己感悟出来的第一手资料。我将在此进行规整。
串口通信是Robomaster乃至所有嵌入式相关领域中最重要,也是最基础的知识。本专栏:串口通信基础,将基于Robomaster应用实际场景,一米宽,万米深地剖析串口通信的概念。
串行通信与并行通信
串行通信
串行通信指的是计算机与设备之间,在同一时刻只能传输一个位(1bit)信号。传输顺序依次1bit接着1bit传输,通常在一根数据线上传输,或者一对差分线上传输。
并行通信
并行通信指的是计算机与设备之间,在同一时刻有多条线传输,能够同时传输多个bit的信号。
这两者有一定的特征和应用范围:
并行通信效率高,成本高,用于快速设备之间的 ...
电控 | S-BUS协议及其衍生协议
S-BUS协议及其衍生协议S.BUS协议是一个串行通信协议,是由FUTABA提出的舵机控制总线。
S-BUS使用RS232C串口的硬件协议作为自己的硬件运行基础。使用TTL电平,即3.3V。使用负逻辑,即低电平为”1“,高电平为”0“。波特率为100000(100k),不兼容115200。
对于串口相关知识,欲知RS232,RS485等内容,详见 电控 | UART串口通信 。
硬件电路Robomaster的C板和A板都有D-BUS电路,根据 无人机 | A3 PRO 外设进阶 可以知道,D-BUS和S-BUS实际上可以理解为是相同的。(注:好像发现了不同,详见下文)
这其实是一个非常简单的三极管电路,具备一个取反功能。S-BUS信号从基极(B)输入,从集电极(C)输出。基极输入‘0’,集电极上拉输出‘1’;基极输入’1‘,三极管被导通,则输出被下拉为’0‘,实现取反。
UART3_RX即为串口的输出端。
关于三极管相关知识,详见 电控 | 基础理论详解——三极管 。
通信协议S-BUS拥有很简洁的协议帧,一帧包括25byte的数据:
首部1byte + 数据22byte ...
无人机 | A3 PRO 外设进阶
A3 Pro 外设进阶SDKSDK (Software Development Kit),即软件开发包,一般是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等,建立应用软件时的开发工具的集合。通俗来说,就是第三方服务商提供的实现产品软件某项功能的工具包。
举例:
队长让我完成Cygnomatic网站上的某个业务功能,我觉得开发难度太大了,效率很低下。随后我了解到了华为云频台上的相关功能,于是在基于华为云SDK下,通过编码调用华为云API,可以访问华为云的资源和数据。
APIAPI (Application Programming Interface),即应用程序接口,一般是一些预先定义的函数,目的是提供应用程序与开发人员基于软件或硬件得以访问一组例程的能力,而又无需访问源码或理解内部工作机制的细节。
举例:
队长让我完成Cygnomatic网站上的无人机技术方案查询软件,我觉得要提高工作的效率,于是在写查询的代码中,引入了Megrez平台的查询接口,这样就能轻松的实现。
API和SDK的区别
API是一个函数,有特定的功能;SDK是一个很多功能函数的集合体,是一个工具包
...