电子入坑百科全书

电子入坑百科全书(其实不全)

前言

去年俺写过 一篇文,讲了些电子入门的小知识,但现在看来,那篇文章还是没有形成一个完整的体系orz,观感感觉还是七零八碎的,遂重新写一篇。

当然不是全部推倒重来,肯定是有借鉴前文的~

这篇文章由我主笔,E萌工作室全员参与一起完成。
由于内容全面且繁杂,篇幅很长,所以暂时未完工~
请持续关注哟——

电子技术改变世界!

0->铺垫->学习技能++

0.1->使用搜索引擎

遇到问题时,可能很多人的第一反应是求助于他人?
🐟刚刚开始学技术的时候也是这样想的…可在初中那时候,身边找不到能问的人呀~
于是我就学会了用搜索引擎的习惯———回过头来看,这确实是最佳的学习方法。

搜索引擎是什么样的东西呢?我们来看看它的wiki定义:

搜索引擎(英语:search engine)是一种信息检索系统,旨在协助搜索存储在计算机系统中的信息。搜索结果一般被称为“hits”,通常会以表单的形式列出。网络搜索引擎是最常见、公开的一种搜索引擎,其功能为搜索万维网上储存的信息。

万维网(World Wide Web)是现代社会的基石。我们所获取的很多信息都来自网络,而搜索引擎正是网络世界的入口~
比较知名的搜索引擎有


BFLOC6.pngBFLbU1.jpg

以上2个都是我常用的搜索引擎,它们是互联网世界的入口,它们不间断地搜集互联网上的公开资源并按照网站特定的属性分类(比如商业、教育、文献资料、公司、组织等官网)并排序,以此为基础为用户提供搜索服务。

不知道大家遇到了不会的问题的时候是怎么查资料的…俺发现周围的长辈们在用百度的时候,输入的搜索词都是以拟人化的语气去提问,比如:

  • 生病感冒了怎么办?
  • 安卓手机怎么装QQ?
  • ……

我想说的是,日常生活的问题这样提问…问题不大。
但是
如果是查询技术类问题,那你也许应该好好斟酌一下你的用词了~我们举个栗子对比一下:

使用2种风格在Baidu搜索

BFjNNR.png

使用Bing国内版搜索

BFjw36.png

使用Bing国际版+英文关键词搜索

BFjU41.png

使用Google搜索

BFjBjO.png

0.2->结论

相信你看完上面的搜索结果,心中已经大致有了一个排行~

我简单总结如下就是:

  • 使用关键词检索,而不是拟人语气
  • 少用baidu,少用baidu,少用baidu(重要的事情说三遍~)
  • 抓住问题重点,如果不知道重点在哪应该向有经验的人请教
  • 会fq的话,能用Google尽量用Google,不能fq的话就用Bing,Bing也很强大。

附上Bing的网址: https://cn.bing.com

0.3->使用百科和资源站

网页百科是知识大辞典(百度百科除外),在这里推荐维基百科,但是国内某些特殊原因上不去,所以你可以使用维基百科的国内镜像站—— 万维百科

除开百科之外,互联网上还有非常多优质的资源可供学习使用。常见的分为几种:

0.4->搜索示例

比如我在学51单片机的时候需要点亮数码管:

  • Bing搜索——51 数码管

用stm32的adc完成一系列操作:

  • Bing搜索——stm32 adc xxx(操作,比如dma、中断等等)

用Verilog在FPGA上实现DDS:

  • Bing搜索——Verilog DDS

……

1->硬件入门->理论篇

说到硬件,当然电路分析基础是最重要的啦~
相信大家高中都学过一些基础的电路分析了,比如欧姆定律,串并联和混连电路,如果有些遗忘了可以回去复习一下:)

来到大学,电路分析课程会讲 KCL/KVL (基尔霍夫定律),学会这些你就能掌握基本的电路分析技能了~

差点忘了, 电容(Capacitor)电感(Inductor) 也是构成电路的基础元件,你需要了解它们的特性,以及它们在电路中的作用,还有典型的用途。

BibhAP.jpg

学完电分之后,你还要学习 模拟电路基础数字电路基础 ,这两门课就开始有难度了~

BiOkY6.md.jpg

不过别担心,我们初学阶段不需要完全掌握它们,我们只需要了解最基本的概念和专业名词,就可以上手做些小东西:D

前面说过的,学习的过程中遇到不会的问题再去查阅资料,是最有效的学习方法之一哦~

这里我们简单介绍一下基础概念~

1.1->电源——生命之源

提到电源…总是让我想起过去很多奇妙的提问…

比如:

  • 电路为什么要接地?
  • 共地是什么意思?
  • Vcc是什么?Vss又是什么?
  • 。。。。。。

总之,电源是电子系统和动力之源,往往很多问题都围绕电源展开…
新人最常见的问题就是如上3个最简单也是最基础的问题——概括一下就是:电源总线、接地、共地问题
有问题不丢人,毕竟我刚入门的时候也花了好长时间才搞清楚这些问题(捂脸),那么我们来解答一下~

1.1.1->电源总线(Power BUS)

BF9LkQ.md.png

如上图所示,最左边是一个萌萌的电源,电压E我们就让他等于5V吧~
中间是这个电源串联了一个限流电阻,接到了一颗发光二极管上,这时候我们在上方标注了一个符号Vcc,下方标注了一个符号GND,Vcc代表的是 正电源总线(BUS) ,一张电路图中所有连接到Vcc标记的线路都是连接到一起的~,同样地,对地也是同理!

BFiPJJ.md.png

然后我们再看最右边的图,我们没有画出电源,只用VccGND符号来表示电源,很简便地就完成了这条支路的连接。

下图是一些常见的电源符号,我们常说的其实是一个参考电压点,我们一般在电路中规定上的电压为0V,其他节点的电压都是相对电压取值的。

BF9noQ.md.png

1.1.2->正负电源与参考地(di(四声))

另一个让人迷惑的概念就是双电源了,也就是正负电源。
正负电源可以 等效成2个直流电源串联而成,如图所示,2个12V的电源串联形成了一个24V的电源,把中间的连接点取出来作为我们的 参考地,记为GND,Vss处相对于GND的电压是-12V,Vcc处相对于GND的电压是+12V,这样我们就得到了正负双电源。(时刻牢记电压是一个相对值,必须要有一个参考点~)

BFi3QI.md.png

1.1.3->常见的电源

相信大家对电源并不陌生。笔记本电脑的充电器、手机充电器、路由器的电源,都是生活中常见的电源。

在我们做开发时,一般的开发板会从USB端口取电,一般是电脑上的USB端口,兼具供电和通信的能力(真是方便的接口呐~ )

当然,USB的供电能力是有限度的,一般电脑的USB接口默认只能输出5V电压,电流最高一般在2A左右,如果需要较大的电流,还是需要外接5V电源~

BFklrt.png

做实验的时候,需要12V电源,或者其他电压、电流规格的电源,这时候就需要可调稳压电源(这可是个好宝贝.jpg)
这种电源具有连续可调电压(比如0V-30V)输出能力,并且能够对输出进行精确限流(限制电流大小,保护可能有风险的电路)

BFAee0.md.jpg

1.2->数字电路基础——二进制

说完了电源,我们来说说数字电路。

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

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

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

1.3->数字抽象

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

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

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

BFSJ10.md.png

但是真实世界中怎么可能所有的信号都如我们所愿是标标准准的稳定电压呢?如果电压为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.4->数字电路的真值表

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

  • Note: AND Gate – 与门
  • NOR Gate – 或非门
  • OR Gate – 或门
  • Exclusive OR Gate – 异或门


ueYaan.png

1.4.1->波形图/时序图

如果有一个序列信号通过逻辑门,会发生什么样的奇妙反应呢?

画一下吧~

A信号输入非门

BFZPJO.png

A、B信号输入与门,C为输出

BFZCFK.png

像上面这样以时间为横轴,电压(电平)为纵轴的图,被称作 信号的波形图。大家以后看到了要会认~

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

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


uA7OaR.gif

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

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


uA7XI1.jpg

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

2->硬件入门->物理链接

学会了一些简单的电路入门之后,我们就可以着手制作我们的小项目了~
是的你没有看错,不上手做点东西,我怎么知道我不能做呢?

要把一张电路图转换成真实的元器件,并让他们按照电路图所描述的连接方式连接起来,我们通常需要用电路板

2.1->印刷电路板

BxbNlD.jpg

图中的板子是经过复杂工序制造出来的 印制电路板(Printer Circuit Board,简称PCB),PCB用于设计成熟的电路结构并用于量产。比如我们的手机、电脑、相机、电子手表等常用电子设备和电器中,是一定存在PCB的。

PCB的设计流程对于初学者过于复杂,我们还是推荐用如下2种方式完成你的入门电路哦~

2.2->洞洞板(万用板)

但是我们做所有电路都必须用这种复杂的制作方法吗?当然不是。我们在搭建简易电路或者验证电路功能的时候,可以用 洞洞板,也叫万用板来完成,将元件安装在其上,然后在背面用焊锡走线,亦或是用导线飞线,就能完成简单电路的组装。

以下电路来自于@CNPP同学~

BxqfgO.jpgBxqhvD.jpg

先来看正面:
这个板子上安装了好几个电子模块,这些模块都有几个针脚引出,可以插进洞洞板并焊接上,偏右上的黑色框框是PDIP-40的芯片座,这里将会安装一个40脚的51单片机。
当然除了模块,还有一些元器件如电位器、轻触开关、电解电容等元件被固定并焊接在这块洞洞板上。

再来看看反面:
银白色线的就是焊锡丝被熔化后吸附在洞洞板背面的焊盘上,并由于液态金属的表面张力而连接在一起,用烙铁适当挑拨即可让他们连成一条线,达到走线的目的。

而带有蓝色线皮的导线就是跳线。因为有的地方用焊锡铺路过去是走不通的,所以我们还需要适当地跳线。

一般洞洞板的孔间距是2.54mm,为什么呢?因为这是英制单位,1 inch = 25.4mm,现在工业界还是习惯用这种规范,俺也不懂为什么= =
一般1/4w直插电阻会占用4个格子,瓷片电容占用2-3个格子,小电解电容也是2-3个格子…具体的自己玩一玩就熟悉啦(。・∀・)ノ

2.3->面包板

虽然它叫这个名字..但它可是不能吃哦pap
为了讲解方便我们设一个x-y二维坐标系~ 向右为x方向,向上为y方向

如图是面包板的正面和底部解剖图,我们可以看到:

  • 中间部分x方向是由金属片连接在一起的,而在正中间是被断开的
  • 同时在中间部分的金属片在y方向上是彼此绝缘(不连接)的
  • 在左右两侧,金属片在x方向上彼此绝缘,在y方向上连成一条

BxbtSO.jpg

那么我们可以像这样把元器件插到面包板的洞洞里,并且用跳线把整个电路连接起来,就像这样:

BxxW8I.jpg

emmmm这个做的有点丑,是Wiki上的图,其实是可以做的很好看的~

关于更详细的面包板的教程,请参考 创元素

3->硬件入门->准备工作

3.1->搭建自己的工作室

如果想做什么东西…首先我们得有个工作环境。
当然如果没有能够长期使用的实验室工位的话,最好还是自己搭建一个属于自己的工作环境咯~

一个合格(优雅的)工作环境包含以下几个point:

  • 足够大的桌面 ——放置一台电脑/显示器,同时留出焊接和摆放元器件和工具的空间
  • 良好的电源供应 ——至少得保证满载2kw的功率供给啦,同时需要很多插排来连接很多工具和仪器
  • 稳定的网络连接 ——没网怎么上网嫖代码?(bushi)
  • 保证通风顺畅 ——焊接或者加工什么东西的时候会产生令人不适的气体,最好能及时排出房间哦?
  • 充足光照 ——没有阳光的话就挂个LED灯~
  • 消防安全 ——任何封闭场所都需要注意的point

CNPP同学在寝室搭建的临时工作台长得像这样:
啊,如果你想品茶,也可以在工作台上放上一个茶杯——

DSnWad.jpg

图中是一个模拟示波器,在其上的铁壳子是电源(还有他的橙子)

DSn5Gt.jpg

3.2->要准备什么工具?

以下罗列的工具并不全是必买的,根据自己的情况可以适当增配或者减配设备哦。

首先,草稿纸、铅笔、剪刀、中性笔、直尺、剪刀、裁纸刀是可以有的~
这些都是作图,亦或是打草稿,加工小部件时需要的基础工具

DSnIRP.jpg

然后就是小毛刷子(清洁桌面/电路板)、斜口钳(修剪过长的引脚)、砂纸(打磨用)、镊子(夹住小元件)、笔刀(用来切割),这些工具能帮助你做出精美的电路板,并保持工作台的整洁。

DSnda9.jpg

接下来是螺丝刀、油性记号笔(做标记)、矬子(打磨)、铜刷(配合打磨、清洁)、剥线钳(如其名)、游标卡尺(精确测量),这些也是常用的工具。

DSnaVJ.jpg

(当然,你可以直接买一套便宜的螺丝批,常用的螺丝刀就齐全了~)

DSntrF.jpg

热熔胶和热熔胶枪,这是个好东西,常常用来固定一些简单的小部件

DSnYKU.jpg

电烙铁和烙铁架,电子必不可少的焊接工具,如果想要长期使用可以购置一个能控温的焊台,比如T12

DSnGvT.jpg
DSnNb4.jpg

焊锡丝、松香(不推荐)、助焊剂,这些是我们焊接使用的耗材。

DSnBP1.jpg

哦,当然,你可能还需要一些劲大的工具,比如这种大钢锉刀

DSnw5R.jpg

洞洞板,上面我们说过,用他们来做一些简单的电路再合适不过了~

DSnr26.jpg

元件盒,用来收纳、整理各种不同类型的电子元件和机械元件

DSnD8x.jpg

一些单片机开发板(最小系统板),想要玩单片机的话,用最小系统板是再合适不过了~!

DSnsxK.jpg

移动电源,有时候意外地好用

DSn6KO.jpg

数字万用表,是我们用来测量各种电路故障地利器,是我们的手中剑
这种东西有便宜的也有贵的,如果想要长期用,推荐你买一个100以上的万用表~

DSncrD.png
DSnRVH.png
DSnfIA.png
DSn4PI.jpg

4->软硬结合->大(单)盘(片)鸡(机)

嗯。。。因为在我google查资料写这一段的时候查到了瑞萨的一个 系列教程,我觉得写的很好,但是他用的单片机是他自家的(广告,understood),我也懒得动脑了,决定直接Ctrl C+V #滑稽
^^^^^^^^^^^本小章节版权归瑞萨公司所有^^^^^^^^^^^
让我们开始正文!哈吉马路yo~

4.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。

(看起来很复杂难懂,其实不用记住√)

4.2->单片机的梦乡

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

4.2.1->ROM

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

4.2.2->RAM

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

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

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

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


uEcoyq.jpg

不安装单片机的LED电路

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


uEcTO0.jpg

使用单片机的LED电路图

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

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

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

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

不仅如此,单片机还能完成很多非常复杂的功能,往往高级的单片机会将诸多外设直接集成在片内,比如:

  • ADC/DAC模块
  • SPI/I2C/CAN/USART控制器
  • 高精度定时器
  • FPU/DSP单元(数字信号处理器,用于加速高负荷下的浮点运算)
  • balabala…

往往这些复杂的外设用标准逻辑IC是难以实现的,而单片机在设计时就封装好了这些硬件外设,外设由单片机的总线控制器统一控制,用户可以编写很简单的代码即可使用这些外设。

B439g0.jpg

上图所展示的是STM32F407ZET6单片机的内部外设资源图。我们可以清晰地看到它集成了非常多的高级外设~

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

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

4.4.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,可通过此端口引出

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

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

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

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


uMHxMj.jpg

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

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


uMOBY6.jpg

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

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

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

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

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


uMb9Zq.jpg

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

普通单片机上复位信号必须在一定时间内保持低电平。具体时间记载在硬件手册和数据手册上。必须根据这个时间的长短来确定电阻R和电容C。但是这个RC的值一般取经验值(R=1k~10k,C=100nF)就可以~

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

4.5->终于见面了,Arduino君!

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

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

4.5.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官网 看看,虽然是全英文…不过我相信大家都有办法看懂~

4.5.2->Arduino开发环境

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

在第二章我们讲解了单片机的基本功能,但我们并没有讲如何为单片机编程。在单片机刚出现时,人们使用汇编等底层语言为其编程,因为那时还未出现高级语言如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。


uhv3in.png

4.5.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

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

5->软件入门->C语言与编译过程

我们虽然要学习硬件,但是软件也不能落下~
C语言是我们学习电子的基础,我们不需要掌握很多算法,但是要熟悉C语言的语法。怎样熟悉呢?当然是——

Do more Exercise!

在这里推荐学习资源:

  • 《C Primer Plus》——经久不绝的入门经典
  • 菜鸟教程
  • 其他的参考书等 欢迎补充

5.1->代码的编译过程

了解了语法之后,我们最好了解一下程序的编译过程。

我们的代码是由 编译器(compiler) 进行编译的,Wiki百科对于其解释如下,我觉得非常清晰:

编译器(compiler)是一种计算机程序,它会将某种编程语言写成的源代码(原始语言)转换成另一种编程语言(目标语言)。 它主要的目的是将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序,翻译为计算机能解读、运行的低阶机器语言的程序,也就是可执行文件。编译器将原始程序(source program)作为输入,翻译产生使用目标语言(target language)的等价程序。源代码一般为高级语言(High-level language),如Pascal、C、C++、C# 、Java等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。

就拿我们最熟悉的C语言举例,C语言的编译过程如图所示:

B4Y5lR.png

上述这个过程是简化的框图,在任何操作系统或硬件平台上,编译的过程大同小异,基本可以用上图概况。

我翻译了一下如下图所示:

B4yr6O.png

是不是太复杂了orz
没关系,我们不必了解编译器的内部过程,我们可以将其简单地视作一个black box,输入一个/一堆源程序,最后得到一个二进制机器代码(可执行文件)

B4yD1K.png

5.2->代码是如何在单片机上运行的?

相信很多人对此存在疑惑。我在这里用我所了解的浅显知识简单解释一下…

前面我们说到,单片机有RAM和ROM,而现在多数单片机的ROM是FLASH存储器,它是一种非易失性存储器,我们将数据烧写进去之后,断掉它的电源,其中存储的数据并不会消失。同时它也是允许在操作中被多次擦或写的存储器~

在上一步中,我们得到了单片机可以执行的二进制机器代码,通过编程器将这个代码烧写(Program,也有编程、烧录等说法)到单片机的Flash存储器中,作为我们的代码段保存在单片机里。

下图是一款stm32单片机的总线矩阵(Bus matrix)框图。在框图的右边,我们可以看到Flash Memory块,连接了一个Accel(读取加速单元)之后,有2条总线连接到总线矩阵上,分别为:

  • ICODE – Instruction Code(指令码)
  • DCODE – Data Code(数据码)

通过互联总线矩阵,Flash的引出线被连接到ARM Cortex-M4内核(CPU)上,同时还可以连接到其他地方比如RAM、DMA控制器、FSMC等

B4fhVO.png

单片机的工作流程是这样de:

  1. 单片机在上电/复位时,会执行一段Bootloader代码,这段代码的作用就是选择从哪种代码存储介质来启动单片机。一般默认是从Flash存储器直接运行~
  2. 执行完Bootloader代码之后,CPU从Flash的特定地址单元开始,逐个地把我们编写的程序翻译成的机器代码指令读取出来,送入CPU去执行,读取的指令通过ICODE总线来传输,如果在执行的过程中需要访问存储在Flash中的常量,那么读取的数据可以通过DCODE总线来传输至CPU。
  3. (Static)RAM用来存放CPU执行过程中需要用到的变量或数据,它可以高速地与CPU进行数据交换,但是其中的数据在单片机电源断开后不会保留。
  4. 总的来说,CPU从代码存储区逐条读取需要执行的机器指令,如果遇到死循环结构将会重复执行这其中的代码(比如while(1))

至于什么是指令(Instruction)…这里不详细讲啦 你可以理解为军官给士兵下发的命令~
可以看看万维百科:指令集架构

5.3->代码如何下载到单片机上?

我们需要对应单片机的下崽器

常见的单片机以及它们的下载器大概是这样的…

  • 51/AVR单片机 USB转串口下载器/USB ASP/USB ISP等
  • STM32 ST-LINK/J-LINK/CMSIS DAP等
  • MSP430 ti官方下载器
  • ……

一般买官方的开发板/评估板,板子上是会自带下载器的…
如果是用最小系统板,那么我们需要一个对应单片机的下载器来为单片机编程。具体就不展开咯~

6->软硬结合->计算机硬件组成

7->软硬结合->一些实际项目

8->实践->设计一个单片机最小系统

9->核心->解决问题的思路与方法

10->进阶->向更高层进发!

发表评论