「2019-3」【每周分享】简单介绍一下什么是单片机。
![火星探索](https://hz-rm-bbs-web-prod.oss-cn-hangzhou.aliyuncs.com/avatar/pre/v1/000017620_avatar_big.jpg)
早上,电子闹钟将我们唤醒,我们打开热水壶,它开始咕噜咕噜地烧水,微波炉“叮”地一声,早餐就热好了。
这些电子设备能够实现功能,都是因为背后有一些神秘的小家伙,默默地操控这一切。
这些黑乎乎的小家伙就是单片机,它们可以传输信息,进行简单的逻辑运算,并且实时性很高,控制机器按照设定好的要求运作,长这个样子:
生活中,无论是工业机器人、服务机器人还是家用机器人,都有许多传感器,譬如温度传感器、激光雷达、摄像头等等,它们相当于机器人的感知器官(眼睛、皮肤等等),使机器人能够自主感知周围环境。此外,机器人还有许多动力装置,比如电机和气缸,它们就像肌肉,让机器人动起来。
那么,机器人从“感知外界”到“做出反应”,还需要一个大脑将它们关联起来,单片机就充当了这个大脑。
单片机与它们连接,用各种各样的通信方式去沟通,比如串口,I2C,CAN等等,就像人类用写信、发邮和打电话之类不同的方式沟通一样。从而获取传感器的数据,处理数据,最后控制动力装置运动。
这个神奇的小东西,到底什么来头?
什么是单片机?
单片机(Single Chip Microcomputer, 单片微型计算机),又称微控制器(Micro Controller,Unit, MCU)。顾名思义,就是单块芯片做成的微型计算机。我们需要事先将程序烧入单片机中(相当于设定好它的工作内容是什么),然后将它搭载在电路板上工作。
那么,单片机里面都有些什么呢?
单片机是单个芯片做成的“微型计算机”。单片机虽小,电脑的“五脏”:运算器、控制器、存储器、输入设备、输出设备,它一应俱全。
在电脑里,运算器和控制器被合成 CPU,单片机里也是如此,用于做数据计算。电脑的存储器包括硬盘和内存,在单片机里分别对应的是 ROM 和 RAM,用于储存数据。
输入设备和输出设备是计算机和外界沟通的工具。电脑主机通过 USB 连接鼠标键盘,通过 HDMI 或 VGA 口连接显示屏(现在还有其他的方式,比如蓝牙来完成连接)。而单片机的输入输出设备是四周遍布的引脚,这些引脚可以与外界交流。
除了这些之外,单片机内有还有时钟电路、定时/计数器和中断系统,它们和控制器一起保证着整个单片机的有序运行。
在 RoboMaster 赛场上,机器人接收信号后,能够快速处理信息,并做出相应动作,也是单片机的功劳。
下面就分别介绍单片机各个部位的原理和作用。
CPU:控制器、运算器与寄存器
单片机是集成数字电路芯片,也就是靠数字电路来传输数据。数字电路主要处理二进制的数字信号,所有的数字、指令都是用 1 和 0 这样的二进制码存储的。每一个 1 或 0 称为一个位(bit)。
通常数字电路有阈值电压,超过阈值电压则被认为是高电平(数字 1),低于阈值电压则被认为是低电平(数字 0)。在电路受到轻微干扰的时候(比如说 5V 变成 4.9V),只要还在阈值电压之上就视为高电平,就保证了计算的稳定性。
CPU 是由很多三极管(transistor)组成的。三极管是一个电子开关,可以通过左边那只手来控制右边电路的导通和截止。
三极管通过一些特定的组合方式,形成了与、或、异或、非等等的门电路(logic gates)。不同的门电路代表对数字信号进行不同的处理。
这些门电路再通过一定的组合,形成了加、减、移位之类的基本模块(basic modules)。正是这些模块在处理数字电路中的 0 和 1,对数据做加减法,有了加减法,就可以做乘除法,进一步就能进行各种复杂的数学运算。
比如说机器人的运动控制中,电机的速度参数、角度参数都会以二进制编码的高低电平信号传入单片机中进行 PID 运算等等,而运算得到的控制量也会以二进制编码的高低电平信号反馈给电机。
运算器和控制器中还有一个叫做寄存器的东西,用于暂时存放控制信息和数据信息。这些与非门电路除了能构成运算电路外,还能构成锁存器电路,寄存器就是由锁存器电路实现的。
存储器:RAM和ROM
RAM(Random Access Memory, 随机存取存储器)
在运算的时候,会产生大量的临时数据,这些数据被记录在一个叫做 RAM 存储器里。RAM 就像一本魔法草稿本,上面处理的数据是会快速更新的,CPU 会按程序的要求,在 RAM 的特定位置读写数据。
但由于技术所限,目前的 RAM 都需要电来维持体内数据的存在。一旦失去电源,RAM 内的数据就会全部消失。
ROM(Read-Only Memory,只读内存)
CPU 想要工作,需要我们事先写好工作流程(指令或程序),这个工作流程就被刻在了一个叫 ROM 的存储器里。有些数据需要长期保存,比如说机器人今天学到的新知识,也会被写到 ROM 上。
ROM 就像一个石碑,上面记的程序是固定不变的,能够在断电后继续保持体内的数据(失电保护),但它的读写速度较慢。
CPU 工作的时候,控制器会把程序的位置(程序地址)记录在寄存器中,运算器再通过这个地址找到 ROM 里的程序进行运算,这个过程也少不了连接这些部件的通信通道——内总线。
早先的 ROM 都是只读的,也就是出厂的单片机的程序无法修改。后来科学家们发明了各种可以擦的 ROM,比如说可以用紫外线“魔法”将石碑恢复原貌的 EPROM,可以用电“魔法”将石碑恢复原貌的 EEPROM 等等。
输入/输出设备:并行 I/O 端口和串行通信端口
单片机用密密麻麻的引脚与外界联系,它们就像电脑上的 USB、HDMI、网口等插口。引脚往往拥有多种功能,就像奥特曼可以切换不同形态来改变功能。引脚也可以通过程序更改功能(术语叫复用功能)。
并行 I/O 口
单片机四周的许多引脚都可以被复用为 I/O口。I/O 口可以设置为输入(Input)模式或输出(Output)模式,1 和 0 用高低电平表示。
输出状态下,I/O口可以作为开关,甚至输出电流来驱动外部设备。我们就曾经教过大家用I/O口点圣诞树的灯:《圣诞节撩妹指南:教你做一棵BlingBling的圣诞树!》
如果跟外界进行简单通信,通过多个引脚并排输出,就可以控制一些 LCD 显示屏。
这种通信方式用了大量的引脚,理论上数据传输率高,但是由于传输过程需要保持时序一致,导致速度有限、易受干扰。
串行通信
在机器人比赛中,机器人往往会搭载多块单片机和电脑,它们之间通常采用通信效率更高的串行通信。串行通信通过少量的引脚发送变化的电平来交流。
虽然理论上引脚少了会降低传输效率,但因为不需要保持每个引脚的时序一致,所以反而耗时更短。
中断
无论是个人电脑还是单片机,在工作中都少不了一个帮手——中断。
中断是指,正常程序运行过程中出现特殊情况需要处理,处理器就会自动停止当前运行程序,并转入处理新情况的程序,处理完毕后又返回之前被暂停的程序继续运行。
中断机制提高了系统效率,在维持系统可靠工作的同时,又满足了实时处理要求。为什么会有特殊的情况需要处理呢? 我们举个例子:
在 RoboMaster 赛场上,当机器人在运动时,裁判系统会同时传来信息,告诉你机器人现在的功率、速度等等。这时单片机会停止机器人运动,并且记下当前的程序运行到哪了,然后去运行接收裁判系统数据的程序,接收完再回来继续运行机器人运动的程序。
由于这个过程耗时十分之短,机器人实现了“近似的”一边控制运动一边接收数据的功能。
再比如,我们日常会一边美滋滋地看电影,一边在后台下载其他资源,我们会以为这两件事在同步进行。其实,电脑是通过中断功能“假装自己同步进行”,不停地在播放电影和下载资源之间来回切换,切换速度快到我们感受不到。
切换速度再快也会有个极限,这个极限就是单位时钟周期。
时钟
所有的数字系统的工作都离不开一个东西——时钟。这里说的时钟不是家里挂的钟或者手上戴的表,而是一种基准信号。就像队列齐步走的时候,有人在喊一二一,大家会跟着喊的节奏来走路。单片机的工作节奏就是跟着时钟走的。
无论是计算机还是单片机,在一个时钟周期里都只完成一个最基本的操作,时钟周期越小,处理器工作频率越高,因此时钟频率是处理器性能的重要衡量标准。但根据指令的复杂程度不同,完成一个指令的所需的时钟周期也是不同的,所以时钟频率也并不等同于指令执行速率或系统总体性能。
单片机的入门
单片机在许多竞赛中都扮演着十分重要的角色,想要入门单片机,就需要动手进行代码编程开发。其实学习单片机开发的门槛很低,大致流程是代码编写、代码编译、下载至单片机和调试。
所以,首先要学会基本的 C 语言,然后针对自己感兴趣的单片机平台去购买对应的开发板,跟着配套的教材学习单片机各个功能的实现原理与代码编程 。
一般,想要基础入门和深入理解单片机工作原理,我们可以使用 51 单片机。它内部结构简单,但编程过程比较麻烦。
51 单片机学习可阅读《新概念51单片机C语言教程:入门、提高、开发、拓展全攻略》,作者:郭天祥,电子工业出版社。
在 RoboMaster 比赛中,我们为机器人选择的单片机多是基于 ARM 内核体系的单片机,比如意法半导体公司(文中简称 ST公司)开发的 STM32F1、STM32F4 系列单片机。
若想深入学习 STM32 开发,可阅读书籍《STM32库开发实战指南:基于STM32F4》,作者:刘火良、杨森,机械工业出版社。
请问这篇文章对你有用吗?
「2019-3」【每周分享】简单介绍一下什么是单片机。