2022徐特立科学营&BIT机器人队电控课程讲义
目录
\(\cdot\)电控简介
\(\cdot\)认识单片机
什么是单片机
时钟-单片机的脉搏
\(\cdot\)外设及应用
GPIO
PWM
定时器
UART
\(\cdot\)中断
内部中断
外部中断
\(\cdot\)总结
电控简介
电控需要做什么?
一个机器人的制作可以简要的分成4个部分,机械结构,硬件电路设计,电控(嵌入式设计),机器视觉。
电控需要做的就是进行嵌入式程序的编写并且完成对机器人的调试工作,对C语言基础有一定的要求,可以熟练掌握数据类型,循环、选择、分支结构,函数,数组,指针,结构体等C语言常用语法。然后,我们就可以用C语言编写嵌入式程序,烧录到单片机中,让单片机根据代码,通过外设实现功能。
认识单片机
什么是单片机
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。
我们可以用更加浅显的方式理解单片机,单片机就是一块有着很多引脚的芯片,将每个引脚通过pcb走线引出来,就是我们使用的开发板。因此同一块芯片,根据需要的不同,可以做出不同的开发板。如下图所示,就是STM32F103系列的一块开发板,是初学者常用的开发板之一。
简言之,单片机可以分为CPU,内存和IO这样三个模块
时钟-单片机的脉搏
简单的说,时钟是单片机的脉搏,是单片机的驱动源,使用任何一个外设都必须打开相应的时钟。这样的好处是,如果不使用一个外设的时候,就把它的时钟关掉,从而可以降低系统的功耗,达到节能,实现低功耗的效果。每个时钟tick,系统都会处理一步数据,这样才能让工作不出现紊乱。
在学习单片机的外设之前,我们需要先了解时钟。我们可以把单片机的时钟形象的比喻成单片机的脉搏,而时钟电路就是一个振荡器,给单片机提供一个节拍,单片机执行各种操作必须在这个节拍的控制下才能进行。因此单片机没有时钟电路是不会正常工作的。时钟电路本身是不会控制什么东西,而是你通过程序让单片机根据时钟来做相应的工作。
外设及应用
GPIO
GPIO=General Purpose Input Output,通用输入输出。
顾名思义,input输入就是读取引脚的高低电平,output输出就是设置引脚的高低电平。
GPIO是单片机最基本的功能,简单的说,单片机的电平高低,单片机的0和1的实现就靠它。单片机对外设的所有操作都通过GPIO进行的。
GPIO 可以配置成八种模式:输入浮空,输入上拉,输入下拉,模拟输入,开漏输出,推挽输出,推挽式复用功能,开漏复用功能。
在单片机的外设中,GPIO口一是个比较重要的概念,用户可以通过GPIO口和硬件进行数据交互(如UART),控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。GPIO口的使用非常广泛。
那么GPIO可以用在哪里呢?
从最基础的点亮一个led,到控制气阀使工程机器人的机械臂运动,再到连接传感器感知温度湿度,电压电流,甚至到远距离通信和搭建网络服务器,都离不开GPIO的应用。
PWM
PWM原理
\(\circ\)PWM即为脉冲宽度调制Pulse width modulation,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
\(\circ\)控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。
频率和占空比
频率和占空比是PWM中非常重要的两个概念。
\(\circ\)pwm的频率是指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期);也就是说一秒钟PWM有多少个周期。
单位: Hz pwm的周期:周期=1/频率
\(\circ\)PWM 输出的频率也会影响最终的 PWM输出效果,PWM 输出的频率越高,最终输出的“连续性”越好,越接近模拟信号的效果,频率低则会增强离散性,最终的输出效果会有比较强的“突变”感。
\(\circ\)占空比是一个脉冲周期内,高电平的时间与整个周期时间的比例。
周期: 一个脉冲信号的时间 脉宽时间:高电平时间
脉宽时间占总周期时间的比例,就是占空比
单位: % (0%-100%) 表示方式:20%
√ 比方说周期的时间是5ms,脉宽时间是4ms 那么低电平时间就是1ms 总的占空比 4/(4+1)= 80%
PWM对舵机的控制
舵机的控制就是通过一个固定的频率,给其不同的占空比的,来控制舵机不同的转角。舵机的频率一般为频率为50HZ,也就是一个20ms左右的时基脉冲,而脉冲的高电平部分一般为0.5ms-2.5ms范围。来控制舵机不同的转角。
500-2500us的PWM高电平部分对应控制180度舵机的0-180度。
以180度角度伺服为例,那么对应的控制关系是这样的:
高电平脉冲时间 | 舵机角度 |
---|---|
0.5ms | 0度 |
1.0ms | 45度 |
1.5ms | 90度 |
2.0ms | 135度 |
2.5ms | 180度 |
PWM对电压的控制
单片机的IO口输出的是数字信号,IO口只能输出高电平和低电平。假设高电平为5V 低电平则为0V 那么我们要输出不同的模拟电压,就要用到PWM,通过改变IO口输出的方波的占空比从而获得使用数字信号模拟成的模拟电压信号。理论上来讲,通过对连接和断开时间的控制,可以输出0~5V之间任意大小的模拟电压。
比方说 占空比为50%,那就是高电平和低电平时间各占一半,也就是50%的占空比,在一定的频率下,就可以得到模拟的2.5V输出电压,那么75%的占空比 得到的电压就是3.75V。
定时器
定时器与计数器
定时器实际上是单片机中的一个内部外设。常常与计数器共同出现,计数器也是一个内部外设。
计数器,顾名思义是用来计数的,就和我们的秒表一样,计数器每经过一段时间都要计一个数,且计数周期固定。因此到了一定时间只要用计数值×计数时间周期,就能得到一个时间段,这个时间段就是我们定的时间(这就是定时器了)。
定时器/计数器作为单片机的外设,主要用来实现定时执行代码的功能。定时器相对于单片机来说,就好像闹钟相对于人来说意义一样。单核的CPU是单线程的,只能干一件事情,干完这件事情完去干另一件事情需要定时器来提醒。在单片机执行主程序的同时,通过定时器的计时功能,定时器会在计时结束的时候产生一个中断信号提醒CPU,CPU去处理中断并去执行预先设定好的事件.
√ (对,这也就是我们后面要提及的定时器中断,是单片机外部中断的一种)
UART
UART原理
UART,即通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在UART上追加同步方式的序列信号变换电路的产品,被称为USART(Universal Synchronous Asynchronous Receiver Transmitter)。
串行通信就是串口将数据逐位按顺序在一条传输线上传送,它通信方式分为单工方式、半双工方式和全双工方式。此外还有一种并行通信,它是将数据的各位用多条数据线同时进行传送。
UART通信协议
UART的数据结构分为起始位、数据位、奇偶校验位、停止位、空闲位,此外还有一个重要的参数——波特率。
\(\cdot\)起始位:位于整个数据的做前端,发出的一个逻辑”0”的信号,表示传输字符的开始。
\(\cdot\)数据位:紧接着起始位之后。资料位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。
\(\cdot\)奇偶校验位:数据位加上这一位后,使得数据中“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。该位数据也可以不添加。
\(\cdot\)停止位:它是一个字符数据的结束标志,位于数据的末尾。可以是1位、1.5位、2位的高电平。
\(\cdot\)空闲位:位于传送的数据之外,为处于逻辑“1”状态,表示当前线路上没有数据传送。
\(\cdot\)波特率:是衡量数据传送速率的指标。表示每秒钟传送的符号数(symbol)。一个符号代表的信息量(比特数)与符号的阶数有关。使用UART连接通信的两个设备的以上因素必须完全一致才能实现设备之间的数据通信。
以下是UART工作时发送方与接收方的状态。
\(\cdot\)发送方:传送时先输出起始位“0”作为联络信号,接着为数据位、奇偶校验位和停止位。字符之间允许有不定长度的空闲位。
\(\cdot\)接收方:接收方是依靠字符帧格式来判断发送方是何时开始发送,何时结束发送的。传送开始后,不断检测传输线的电平状态,当收到一系列的“1”(空闲位或停止位)之后,检测到一个“0”,说明起始位出现,就开始接收所规定的数据位和奇偶校验位以及停止位。
当已经读了一帧数据后并且高电平持续时间 >(发送时一个高低电平的持续时间 * 停止位) :认为传输停止。
如果这时UART 的中断处于使能状态,则会进入中断函数。
√ (对,这也就是我们后面要提及的UART中断,也是单片机外部中断的一种)
UART用来做什么
从原理和串口通信协议的角度去理解UART未免过于晦涩,所以我们先用我们身边随处可见的无线通信来认识一下UART。
\(\cdot\)蓝牙+UART(无线方式)
蓝牙是一种流行的无线通信标准。在我们身边随处可见蓝牙的身影,我们的无线耳机、鼠标、键盘、手机、电脑都支持蓝牙。蓝牙支持无线的点对点连接,通过蓝牙模块进行无线的发射与接收。目前,最流行的HCI(主机控制器接口)是通用异步接收器与发射器(UART)和通信串行总线(USB)连接的。
如下图的蓝牙模块,我们可以看到有四个引脚,VCC,GND,RXD,TXD。
TXD:发送数据端,要接单片机的RXD
RXD:接收数据端,要接单片机的TXD
这样蓝牙模块就可以进行上位机(可以直接发送操作指令的计算机或单片机,比如手机或者面板)和单片机之间的数据传输。
通过蓝牙+UART,我们可以在手机的app上做出简易的摇杆,控制小车的运动。除此之外,我们在进行机器人调试的时候,很多时候有线的调试方式不方便,我们就可以在手机上通过蓝牙进行无线的实时调试,并对相关的参数和偏置数据进行修改。
\(\cdot\)板间通信(有线方式)
TX:发送数据端,要接对面设备的RX
RX:接收数据端,要接对面设备的TX
GND:保证两设备共地,有统一的参考平面
中断
什么是中断
中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
内部中断
内部中断:是指因硬件出错(如突然掉电、奇偶校验错等)或运算出错(除数为零、运算溢出、单步中断等)所引起的中断。内部中断是不可屏蔽的中断。
外部中断
外部中断:一般是指由计算机外设发出的中断请求,如:键盘中断、打印机中断、定时器中断等。外部中断是可以屏蔽的中断,也就是说,利用中断控制器可以屏蔽这些外部设备 的中断请求。
在前面我们提到的TIM中断(定时器中断),UART中断都是外部中断,是由单片机的外设发出的中断,除此之外,外部中断还有按键中断和can中断等等。
我们用“烧开水”的例子比喻中断:
烧开水例子 | 单片机中断 |
---|---|
1.发生突发事件(水烧开了) | 中断事件发生 |
2.产生一个突发的信号(提醒装置响起) | 产生中断信号 |
3.接收到中断信号并暂停当前手中的事,去处理突发事件(不看电视了,去倒开水) | 单片机接收到中断信号,停止执行当前函数,跳转至中断处理函数 |
总的来说,中断就是停止执行当前函数,转而去执行其他函数,执行完之后再回来执行原函数。
总结
本次科学营电控部分浅要的介绍了单片机和与机器人相关的外设及应用,因为时间关系,没有在代码层面去实现这些功能,如果对电控感兴趣可以参考北京理工大学机器人队的薪火培训资料进行深入的学习。
https://www.cnblogs.com/bit-dreamchaser/
在单片机之外,制作一个机器人还需要对控制类算法有一定的掌握,并且了解一些硬件的知识;在技术之外,更需要的是对于机器人的热爱和耐心,相信在未来我们都可以成为出色的工程师,永远拥有闪闪发光的梦想。
2022-07-19 20:04:24 星期二