电子入门教程[00]—Beginning from Zero.

电子入门教程[00]—Beginning from Zero.

本系列教程面向初入电子的童鞋,用语尽量做到简洁易懂,同时慢慢引进专业的概念,让零基础的童鞋也能轻松读懂并具有制作价值。这期算是本系列的前传了~,我们来认识一些电子有关的基础概念。
鉴于本人才疏学浅,这篇教程也是边google边写的,而且我语言表达能力不太好23333,有些不通顺的地方,也有概念或者常识错误的地方,还恳请各位大佬批评指正。

一.数字化的世界(Digitalized world)

21世纪是信息时代balabala…(此处省略一万字)。想必大家都听说过 数字电路 这个词?(什么?你高中物理没学过逻辑门?当我没说嘤嘤嘤)


uAcgHO.png

1.1->数字世界的基础->二进制

一个机械开关的状态只有2种,开(1)和关(0),而在电子电路中,构成复杂逻辑电路的基础就是 "开关"

我们日常生活习惯采用10进制计数和运算,但是把一个十进制数丢给计算机的逻辑运算单元,它可“不能理解”,需要将其转换成二进制再喂给它吃…

这是因为在我们的逻辑电路中,与或非三种基础逻辑门的真值表都只有2种电平状态—0和1,而计算机的运算单元都是由许多逻辑门组合而成的,我们可以将其视作一个 黑箱(Black Box) ,输入的数据(信号)必须是二进制,输出也是二进制。
如果我们需要将这些二进制转换为十进制或者其他进制,就是上层程序的工作了。

1.2->字节

8个一组的 比特位(bit) 称为 字节(byte) ,它能表示2^8=256个数字(即0-255)。在计算机内存中存储数据习惯用字节做单位,而不用单独的比特位。

下图可以让你对计算机文件大小换算一目了然~

左侧从上到下单位分别是B,KB,MB,GB,TB。(看看你的硬盘是多大的?)


uAdm0s.png

1.3->处理器的位(bits)数

处理器处理的一组数据称为 字(word),字的大小在不同的计算机平台上并不一样,它取决于处理器的结构,例如32位处理器处理的字大小是32位,64位处理器处理的字大小就是64位…在单片机,嵌入式等领域,8位和16位也是非常常用的,比如Arduino UNO开发板的MCU,型号为ATMEGA328P的单片机就是8位单片机。

1.4->数字抽象

在物理世界中,大部分物理变量是连续的,例如电压值,振动频率,物体位置,电流大小。而这些量如何被数字计算机系统正确地采集并存储呢?我们需要对它们进行数字化抽象~

1.5->抽象的背后

数字系统采用离散取值的变量(0和1),而这些变量需要由连续的物理量来表示…于是科学家们使用了奇妙的技术手段,定义了 逻辑电平 这一概念。

现在我们用二进制信号A来表示一根电缆上的电压信号。当电压为0v时,A = 0;当电压为5v时,A = 1;这个系统中规定5v为高电平信号,0v为低电平信号(电压都是相对于数字电路的参考地取值,一般都为电源负极)。

但是真实世界中怎么可能所有的信号都如我们所愿是标标准准的稳定电压呢?如果电压为4.9v,0.0000001V,A就无法取值了吗?答案当然是不会啦! 请看下图


uAg3Ie.png

中间那个 三角形的菊花 是一个数字逻辑门,输入输出都为 抽象化的数字信号

刚刚我们担心的问题是电压在2个标准线上下波动的情况,我想在上图中聪明的你已经在图中的左侧找到了答案。

是的,只要电压在3.5-5V的范围内,逻辑门的输入都被识别为 “1”,在0-1.5V的范围内,逻辑门的输入都被识别为“0”。

而看向右图,输出电平也不一定会是我们所期望的那样为绝对的5V或0V啦。由于电路中的各种元件参数差异及电源工作状况好坏,输出可能会在5V或者0V上下有微小的波动,这些都是可以被接受的。

需要注意的是,上图的标准是 CMOS 标准,除此之外在数字电路里还有常用的 TTL 标准。见下图↓↓↓

Note: 图中Vcc代表电源正极,下面那个三角形的3条横线代表接地符号,在这里也就是电源负极


uAguKx.png

1.6->数字电路的真值表

逻辑电路的真值表描述了它的输入输出关系,下图就是一个非常清晰的逻辑表。

Note: AND Gate-与门

NOR Gate-或非门

OR Gate-或门

Exclusive OR Gate-异或门


ueYaan.png

1.7->逻辑门的本质->(当然不是复读机)

数字逻辑门看起来很神秘,尤其是在现代电子工业发达到这种程度时,集成电路的集成度越来越高,未曾了解过的人根本无从知道一块块集成电路里藏了什么幺蛾子(乱入),,,
其实很简单,所有的电路都是由最基础的电阻,电容,晶体管等构成的,比如下面这个最简单的 非门


uA7OaR.gif

它就是由一个三极管,2个电阻构成的。当然实际的逻辑门为了提升性能和满足某些特定的要求,还会为这个电路添加一些别的用于提升工作稳定性的元件或支路(比如输入超压保护、输出过流保护等),但那是后话啦。

了解了最基础的逻辑门是如何组成的之后,也就不难理解庞大的计算机是如何组成的了。。现代的商用CPU制程已经达到了稳定的10nm级别,单块CPU里集成数以亿计的晶体管,里面无非就是一大堆逻辑门嘛(暴言,不要信),比如下面的 Intel 8008 计算机电路图,感兴趣的话请 >点击我< 查看更多信息。


uA7XI1.jpg

这些方块一样的东西可以称其为各种 模组(modules) ,这些模组在计算机中都有特定的功能和相应的职责,比如指令解码,运算器,内存,I/O控制模块等(在这里不解释CPU原理了,感兴趣请自行google)…而这些复杂的模组都是由最基本的逻辑门组合而成的,只不过内部电路结构非常复杂,估计也没人想看,咳咳。

二.从大到小,从软件到电路

2.1->可爱的单片姬(雾)

嗯。。。因为在我google查资料写这一段的时候查到了瑞萨的一个 系列教程,我觉得写的很好,但是他用的单片机是他自家的(广告,understood),我也懒得动脑了,决定直接Ctrl C+V #滑稽

^^^^^^^^^^^本小章节版权归瑞萨公司所有^^^^^^^^^^^

让我们开始正文!哈吉马路yo~

2.1.1->单片机是控制电子产品的大脑(划重点)

现如今,我们生活中的许多电器都使用了单片机。例如:手机、电视机、冰箱、洗衣机、以及按下开关,LED就闪烁的儿童玩具。那么,单片机在这些电器中究竟做了些什么呢?

单片机是这些电器动作的关键,是指挥硬件运行的。例如:接收按钮或按键的输入信号,按照事先编好的程序,指挥马达和LCD的外围功能电路动作。

那么,单片机是如何构成的呢?(图1)


uAXmDO.jpg

notes:图中的 MCU = "Micro Controller Unit",就是单片机的意思

"CPU" = "Central Processing Unit"",就是我们说的中央处理器

若想了解CPU,DSP,MCU的区别,可参考这里

单片机是由CPU、内存、外围功能等部分组成的。如果将单片机比作人,那么CPU是负责思考的,内存是负责记忆的,外围功能相当于视觉的感官系统及控制手脚动作的神经系统。

以下是砖业解释(雾):

单芯片单片机是指:将CPU,ROM,RAM,振荡电路,定时器和串行I/F等集成于一个LSI的微处理器。单芯片单片机的基础上再配置一些系统的主要外围电路,而形成的大规模集成电路称为系统LSI。

2.1.2->单片机的梦乡

内存是单片机的记忆装置,主要记忆程序和数据,大体上分为ROM和RAM两大类。

ROM

ROM(Read Only Memory)是只读内存的简称。保存在ROM中的数据不能删除,也不会因断电而丢失。ROM主要用于保存用户程序和在程序执行中保持不变的常数。
大多数的单片机都用闪存 (Flash) 作为ROM。这是因为闪存不仅可以象ROM一样,即使关机也不会丢失数据,而且还允许修改数据。

RAM

RAM(Random Access Memory)是可随机读/写内存的简称。可以随时读写数据,但关机后,保存在RAM中的数据也随之消失。主要用于存储程序中的变量。

虽然单片机拥有“记忆”,但是它并不会做梦啦~因为它存储的是逻辑严密的数字化信息,并没有人类大脑的神经元结构 (当然如果你在单片机上跑某个AI算法它说不定就会做梦了,还能梦到电子羊~(Blade Runner警告))

2.2->为什么要使用单片机?

为什么很多电器设备都要使用单片机呢?
让我们用一个点亮LED的电路为例,来说明。如下图所示,不使用单片机的电路是一个由LED,开关和电阻构成的简单电路。


uEcoyq.jpg

不安装单片机的LED电路

使用单片机的电路如下图所示。


uEcTO0.jpg

使用单片机的LED电路图

很显然,使用单片机的电路要复杂得多,而且设计电路还要花费精力与财力。好像使用单片机并没有什么优点。但是,现在下结论还为时尚早。

如果我们让这个电路做一些比较复杂的操作,会怎么样呢?

例如:如果我们希望LED在按下开关后,经过一段时间再点亮或熄灭,那么,对于安装有单片机的电路来说,只需更改单片机中的程序就可以了,并不需更改原电路。另一方面,对于没有单片机的电路来说,就必须在元电路中加入定时器IC,或者用标准逻辑IC和FPGA构成逻辑电路,才能实现这个功能。

也就是说,在更改和添加新功能时,带有单片机的电路显然更加容易实现。这正是电器设备使用单片机的原因。单片机可真是个方便的东西哦~

2.3->单片机的外围功能电路

notes:从本小节开始我们使用Arduino UNO为例进行讲解,因为瑞萨的教程用的是他们自己的单片机…咳咳,那个瑞萨的有点复杂哈哈哈哈哈

2.3.1->"动力之源"-电源电路

与迄今为止所学的各种电路相同,单片机的工作也需要电源。因此,单片机的外部都连接有像电池等电源部分。我们的常识一般是“如果供电不正确,电路很大概率不会正常工作”。事实上,在数字电路中,供电达不到要求是个致命的错误,给单片机的供电电压过高会直接烧毁它,而电压过低单片机则完全不会工作。因此了解如何正确地为单片机供电是非常有必要的~!

我们以Arduino UNO开发板为例,讲解一下型号为ATMEGA328P(UNO的主芯片)的单片机的电源电路。


uMbCd0.jpg

一般单片机中常见的工作电压有5V,3.3V,1.8V等,我们可以称这些不同的供电电压为 "电平标准""供电标准"。而Arduino UNO就是5V电平标准的单片机。
仔细看上图发现,通过左上角的USB连接端子可以外接USB供电,通过左下角的黑色电源插接端子也可以供电。
等等,不是说这个单片机必须只能用5v供电吗,为什么图上标注的是7-12V?

这时候我们只要翻开它的电路图,找到如下部分:

Arduino UNO 参考电路图设计可在此查看 >点击我<


uMq17q.jpg

这里左边的方块代表上图那个 "7-12v电源输入插座",而中间那2个方块的作用是把7-12V范围内的电压降到5V,供给我们的单片机使用。感兴趣的同学可以查找它们的型号并翻看数据手册,你会发现它们叫做 "LDO",意思就是 线性低压差稳压器,专门用于在输入输出电压差较低的场景下对输入电压降压,输出一个所需的稳定的工作电压。

而如果我们通过USB端子供电,则不需要考虑LDO啦。因为USB协议的标准供电电压就是+5V,直接供给我们的单片机使用即可。而且LDO的输出和USB供电的5V总线是并联关系,只要有任意一个电源被接上,单片机就可以正常地工作。(在有的3.3V电平标准单片机如大部分STM32系列单片机的电源电路上,通过USB供电 也需要加上输出电压为3.3V的LDO 以保证单片机能正常工作不被烧毁。)

同时,在开发板的两侧排针母座上,可以通过跳线或杜邦线插接的形式引出我们的供电,以方便外围电路的供电及工作。

5V —> LDO输出/USB的5V电压总线,引出可作为外部电路的电源正极(对GND电压为5V)

GND —> 整个电路的公共地(也就是电源负极),引出外部电源时板上电路和外部电路必须 共地,即作为外部电路的电源负极

3.3V —> 为了兼容某些需要3.3V供电的外部电路而在UNO板子上专设了一个3.3V的LDO,可通过此端口引出

2.3.2->“总指挥”-时钟电路

大家都有过军训的经历。在踢正步走队列的时候,需要一个统一的信号来保证队列的一致性和同步性,没有了这个信号,队列就走不齐,想必大家没少因为这个挨教官骂23333

计算机是一种严格的 时序电路,意思是每一次运算或操作都需要按照一个稳定的 "节拍"来进行,单片机也不例外。单片机需要在外部连接一个振荡电路以提供 时钟信号 ,这个信号就像队列的节拍一样,保证着单片机的稳定工作。所以我们可以把这种电路称为 “总指挥”-时钟电路

获取时钟信号的通常做法是采用一颗晶体振荡器(晶振-Crystal),这种振荡器在通电后便会自己产生恒定频率的振荡信号,虽然这个信号的频率可能会因环境温度和内部材料的变化而改变(这种变化叫做 漂移 ,因温度改变叫 温漂)。但是在要求不高的情况下我们可视它产生的信号为恒定频率 (定频) 的信号。


uMHxMj.jpg

如上图所示,由单片机的外部输入的时钟信号叫做 外部时钟信号。而现在有很多单片机厂商为了降低系统成本、体积和功耗,在单片机的内部集成了时钟源,意思就是说通过一定的软件配置,可以从单片机内部的时钟源获取时钟信号,不再需要连接外部晶振。

而在我们的Arduino UNO上,一个16Mhz振荡频率的晶振被连接在了ATMEGA328P的2个时钟脚上。如下图所示。


uMOBY6.jpg

晶振的两端并联了一个阻值为1MΩ的电阻R2,对地(GND)串联了2个非常小的电容(通常为皮法(pF)级别,一般不超过30pF),这些额外的辅助电路是为了确保晶振产生 更稳定的振荡信号 而设计的。

2.3.3->"闹钟"-复位电路

这一段里我是个只会复制粘贴的冷酷机器人= ̄ω ̄=

刚刚接通电源的单片机内部处于不稳定的状态,CPU无法正常运转。因此,就需要进行单片机状态初始化,这就叫做复位。单片机带有复位信号输入引脚,可以将这个信号调至低电平状态后让单片机复位。也就是说通过输入复位信号来彻底叫醒单片机进入工作状态。

接下来讲解一下复位的时序。只有在向单片机提供稳定的时钟信号和电源的状态下才能实现复位,同时需将复位信号调至低电平。为了实现这种状态,需要将相比电源上电稍迟一步上电的电路与复位输入引脚相连接。这种电路在电源上电后通过电阻电流慢慢流向电容,电压缓缓上升。因此,电源上电后经过一段时间可以形成解除复位的电 路。这种外部电路称为“上电复位电路”。


uMb9Zq.jpg

如上图所示,上电复位电路左侧的电路称为“手动按钮复位电路”。这是通过手动按下按钮后让单片机进入初始化状态的电路。

普通单片机上复位信号必须在一定时间内保持低电平。具体时间记载在硬件手册和数据手册上。必须根据这个时间的长短来确定电阻R和电容C。

而在我们的UNO板上…我实在是懒得找复位电路了(其实是画的有点拐弯抹角我懒得重新画一遍( ̄▽ ̄)"),大家只要知道UNO的复位按键在板子正视图的左上角就行~

三.终于见面了,Arduino君!

本节主要介绍Arduino的家庭和开发方法,但是在查找资料时我发现了W3CSchool上已经有成体系的Arduino教程,我想我也没必要作搬运的工作…

所以在这里只是最简单的介绍,想要系统性地学习可以移步至 >w3cschool的Arduino教程<

3.1->Arduino的幸福大家庭

"Arduino is an open-source electronics platform based on easy-to-use hardware and software. It’s intended for anyone making interactive projects."

译:Arduino是一个基于简单易用的软硬件工具链的开源电子平台,它为任何制作交互性产品的人而生。

重要的事情说三遍:
请注意,Arduino不是一个单片机,更不是一个开发板,而是一个开源电子平台!
请注意,Arduino不是一个单片机,更不是一个开发板,而是一个开源电子平台!
请注意,Arduino不是一个单片机,更不是一个开发板,而是一个开源电子平台!

这个概念可以这样理解…说到全球最大同性交友网站"Github",它并不是一个程序,更不是一个IDE,而是一个开源社区平台…

啊这个比喻不太好,换一个8…这么说,"华为手机"不是一部手机,"华为手机"有一套产品线,从低端机到高端机都有,有很多种不同的型号。

Arduino家族的每个开发板都有一个独特的代号,比如最经典的UNO,稍微高端一些的MEGA2560,小巧一些的如Nano,Mini,自带通信模块的YUN,Ethernet,UNO WIFI等等…

另外一点,Arduino是开源电子平台,意味着它每一个开发板的原理图和PCB板设计文件都是免费公开的,任何人都可以下载并使用这些设计文件制作自己的Arduino,所以并不存在所谓的 原版,社区官方会有生产这些开发板,非官方的开发者也可以,所以国内很多电子厂也在生产,也就是我们在淘宝上看到的低价Arduino,一般来说官方正版这种渠道的Arduino开发板的工艺和元件用料会好一个档次,看着也更赏心悦目…但是如果你穷/不想在这方面投入很多财力,选择购买廉价的开发板是完全没有题的,它们的性能参数都是一样的,可以互相代换。

希望大家可以去 Arduino官网 看看,虽然是全英文…不过我相信大家都有办法看懂~


uhv3in.png

3.2->Arduino开发环境

接下来我们来港港如何上手Arduino。

在第二章我们讲解了单片机的基本功能,但我们并没有讲如何为单片机编程。在单片机刚出现时(大概上世纪90年代吧),人们使用汇编等底层语言为其编程,因为那时还未出现高级语言如C,python,Java等。

众所周知汇编语言是及其复杂且低效的(这里的低效是指开发过程,并不是指汇编语言运行效率低!!),当高级语言出现后,单片机的编程语言逐渐被C语言等高级语言取代。现在在单片机上最广泛使用的编程语言是C语言。但是在我萌的Arduino平台,C++ 语言(基于wiring C 封装)则是主流。你要问我深层次的原因,俺也不知道,感兴趣请自行google哦~

通常,最方便的开发平台是 Arduino IDE,通过这里下载windows系统版本请点击右侧的 Windows Installer or Windows ZIP file。如果你用mac,请点击Mac OS X,如果你用linux…我相信你懂下哪个#滑稽


uhvqOS.jpg

IDE:Intergrated Development Environment,也就是集成开发环境,IDE软件可以帮你配置并设置好开发项目所需要的很多设置,让你更方便,更快捷地进行开发。别的IDE还有如Visual Studio,Codeblocks,Keil,Dev C++,Pycharm等…

打开Arduino IDE,文件->示例中,有很多官方自带的示例程序可供参考学习。像下图这样↓↓↓


uhxq91.gif

打开项目->加载库,可以调用网上开源的硬件外设驱动代码~(具体怎样调用之后再说)。

打开工具->开发板,可以选择自己正在开发的开发板型号,如果这个型号不选对是无法为你的单片机烧录程序的!


uhxHhR.gif

写好一个程序后,需要编译以验证程序有没有错误,编译完成后,把开发板通过USB线连接到电脑USB端口,确保装好了驱动程序,这时在工具->端口应该看到你的开发板和它对应的COM端口号,选择正确后就可以把程序烧录进单片机了。大致操作流程如下图↓↓↓


uhznEQ.gif

当然如果你有开发单片机和使用IDE,文本编辑器的基础的话,也可以试试Visual Studio / VSCode。

3.3->Arduino UNO和它的邻居们

我们只需要一个开发板就可以完成所有实验吗?答案当然是Noooooooo!!

窝们历经千辛万苦,终于明白了怎么给Arduino写代码,但我们手里只有一块板子能做什么呢QAQ

我们要点灯,就需要跳线、LED和电阻

我们要驱动液晶屏,就需要液晶屏、跳线和面包板

我们要驱动蜂鸣器,就需要跳线、三极管、电阻、面包板、蜂鸣器

我们要做物联网,就需要wifi/ethernet模块、面包板、跳线、网线和路由器

……

总之,我们的Arduino太孤单可不好。Arduino需要邻居,单片机这个主控者(Master)离开了被控器件(Slave),也就是各种外围设备,简称外设,单片机的意义又何在呢?

OLED屏幕


uhzJDU.jpg

ESP8266 WIFI模块


uhzYbF.jpg

And so on.


uhzUUJ.jpg

至于如何一个个地征♂服它们,请持续关注之后的文章啦。

四.尾声

本系列教程的Zero篇就此完结!
就这篇文章断断续续写了2个多星期(累死我了1551),我甚至有点怀疑我以后的产率…
咳咳,这不是问题。产出肯定是有的,至于产率得看那段时间忙不忙。
看完了这篇文,请接着看下一篇:

电子入门教程[01]—我的代码流成了灯

—————————我是分割线—————————

写在后面

我为什么要写这个系列教程

当我还是一个初中生的时候,我喜欢上了电子。
可是没有人可以教我,没人能给我提供资源学习、实验,唯一能探讨的对象就只有学校里的物理老师。。。也曾经带周边几个基友入坑,但他们也都是一时兴起,很快退坑 🙁
就这样,我最大的信息来源就是互联网啦,论坛,贴吧,各种网站都是我曾常驻的地方,从中学到了不少,做了不少有意思的作品,这让身为中学生的我非常自豪。但过程非常艰辛,曾经自学51单片机时,学到定时器,看到那一个个树状时钟图就开始懵逼,继续啃下去的信心也被消磨殆尽。
所以我很清楚小白在没有任何帮助和条件的情况下开始学电子,是多么的困难和劝退…
来到了大学,遇见了以前梦寐以求的,一群志同道合的朋友。我们交流过后,发现大家都是这么“爬”过来的,我们也叹于圈子太小,喜欢电子的人太少,于是萌生了办这个工作室平台的想法。咱们主要是不想好不容易有人对电子感兴趣了,但自己学得太艰辛,最后还被劝退。我们希望更多人喜欢上电子这一行业。
所以就有了这个我们自费搭建的网站(说是用爱发电好像也不为过23333),希望我们的工作能帮到新人。

其实吧…我们在现实中话都不多,但是聊到技术能扯几天几夜:)
所以我们想着在现实中教学不如在网上写文章效果好,也来的方便许多。
电子是一个非常复杂、综合的领域,知识点和tips很多很杂,如果一次全都吐出来会非常不成体系且看着就非常凌乱,大家也不难发现在网上找不到什么成体系的教程,大多数教程也只是照本宣科,毫无意义。所以我们想通过一系列教程来表述这些杂散的points,循序渐进,把这个体系完整地体现在我们面前。这对我们来说是一个挑战,不过我们乐于做这件事,也自然是愿意接受挑战,想把这件事做好
在这里要特别感谢我的朋友们和我一起办这件说小不小说大不大的事,也要感谢所有支持我们的工作、帮助我们宣传的友人~

也欢迎大家加入我们的讨论QQ群,有一群热爱电子的伙伴在里面和你一起玩耍,如果你在本站有什么看不懂的地方或者找到了某些错误,也可以在群里与我们交流讨论鸭~
QQ群:637464976

后记-参考资料

发表回复

这篇文章有 2 个评论

  1. 第 蒜香脚皮页

    夏老师tql