这里仅总结一下IO控制相关及这种总线等  ~持续更新 第5部的啊   

这个感觉也有关就放这了 方便自己好找

一、NPN型三极管的工作原理

    NPN型三极管,由三块半导体构成,其中两块N型和一块P型半导体组成,P型半导体在中间,两块N型半导体在两侧,三极管是电子电路中最重要的器件,他主要的功能是电流放大和开关的作用。

    实际上,只要你了解了三极管的特性,对你使用单片机就顺手很多了。大家其实也都知道三极管具有放大作用,但如何去真正理解它,却是你以后会不会使用大部分电子电路和IC的关键。

    我们一般所说的普通三极管是具有电流放大作用的器件。其它的三极管也都是在这个原理基础上功能延伸。三极管的符号如下图左边,我们就以NPN型三极管为例来说说它的工作原理。 

嵌入式分享~IO相关5 ##_数据

    它就是一个以b(基极)电流Ib来驱动流过CE的电流Ic的器件,它的工作原理很像一个可控制的阀门。

嵌入式分享~IO相关5 ##_嵌入式硬件_02

  左边细管子里蓝色的小水流冲动杠杆使大水管的阀门开大,就可允许较大红色的水流通过这个阀门。当蓝色水流越大,也就使大管中红色的水流更大。

    如果放大倍数是100,那么当蓝色小水流为1千克/小时,那么就允许大管子流过100千克/小时的水。

    三极管的原理也跟这个一样,放大倍数为100时,当Ib(基极电流)为1mA时,就允许100mA的电流通过Ice。

    这个原理大家可能也都知道,但是把它用在电路里的状况能理解,那单片机的运用就少了一大障碍了。

    最常用的连接如下图:

嵌入式分享~IO相关5 ##_嵌入式硬件_03

 我们来分析一下这个电路,如果它的放大倍数是100,基极电压我们不计。基极电流就是10V÷10K=1mA,集电极电流就应该是100mA。

    根据欧姆定律,这样Rc上的电压就是0.1A×50Ω=5V。那么剩下的5V就吃在了三极管的C、E极上了。

    好!

    现在我们假如让Rb为1K,那么基极电流就是10V÷1K=10mA,这样按照放大倍数100算,Ic就是不是就为1000mA也就是1A了呢?假如真的为1安,那么Rc上的电压为1A×50Ω=50V。    

    啊?50V!都超过电源电压了,三极管都成发电机了吗?其实不是这样的。

    见下图:

 

嵌入式分享~IO相关5 ##_嵌入式硬件_04

    我们还是用水管内流水来比喻电流,当这个控制电流为10mA时使主水管上的阀开大到能流过1A的电流,但是不是就能有1A的电流流过呢?

    不是的,因为上面还有个电阻,它就相当于是个固定开度的阀门,它串在这个主水管的上面,当下面那个可控制的阀开度到大于上面那个固定电阻的开度时,水流就不会再增大,而是等于通过上面那个固定阀开度的水流了,因此,

    下面的三极管再开大开度也没有用了。

    因此我们可以计算出,那个固定电阻的最大电流10V÷50Ω=0.2A也就是200mA。

    就是说在电路中三极管基极电流增大集电极的电流也增大,当基极电流Ib增大到2mA时,集电极电流就增大到了200mA。当基极电流再增大时,集电极电流已不会再增大,就在200mA不动了。

    此时上面那个电阻也就是起限流作用了。

    下面我们来理解单片机内的IO的状况:

 

嵌入式分享~IO相关5 ##_数据_05

  在单片机内有P1-P3的24个IO口的电路都如上图那样。

    平常我们用电子电路的目的是最终让目标器件工作,例如让发光二极管亮起来,让电机正常转起来,从根本上说就是让这些器件获得一定的电流让它做功。例如要让发光二极管亮一般就需要1mA以上的电流。

    但是,单片机是智能芯片,它可以通过检测各IO口的电压值来做出逻辑分析和判断,并能输出高或低电压作为结果信号,因此可以看出,单片机的各IO口注重的是所产生的电压而不是流过R和三极管的电流。

    那么单片机内IO口的电压和电流的关系又是怎么样的呢?

    我们还是用水管流水的例子来说明:

嵌入式分享~IO相关5 ##_三极管_06

 假设我们让R的这个阀开的较大,让下面那个控制阀全关,这时如图1所示可以看出P点的压力就是水箱的压力。当我们将下面的控制阀全开,如图2所示,则水将以很大的水流流过管线,而此时P点的压力为0。这个原理和电子电路很相似。    

    通过三极管的关闭或开大来使输出点P测得的逻辑量为1(电源电压)或0(0电位)。

    但这个过程有一个问题,就是当需要P点输出为0时,三极管将开得很大,流过的电流很大,单片机上有32个IO口,这样消耗的电能就很多。

    有没有办法改进呢?有!见下图:

嵌入式分享~IO相关5 ##_嵌入式硬件_07

  见图3,如果我们将上面那个阀门R关得很小,将下面的控制阀全关,这时P点的压力仍旧会是水箱的压力,和上面图1是一样的。但当我们将控制阀开大时,如图4,P点的压力虽然也同样为0,但这时通过的水流就大大减少了。这样我们既能输出1或者0。但消耗的水却很少。    

    单片机里的电路正是这样做的,它上面的电阻R大约为50K,最大电流是5V÷50K=0.1mA。

    也就是说,当P输出1时,不消耗电流,当P输出0时消耗的电流为0.1mA。正因为它的上拉电阻R很大,因此对于初学者来说,要它直接驱动发光管或其它的负载就要有一定的方法技巧了。

    这里我再和大家一起分析一下IO口外接负载时的各种情况:

 

嵌入式分享~IO相关5 ##_三极管_08

 我们先来看看接TTL器件的情况,当P1.0接到74HC373的一个输入脚上时,因为TTL器件的输入阻抗很高,大约几百K到M欧姆级。    

    这就相当于P1.0接了个500K(我们假设为500K)的电阻到地。这样当三极管导通时,P1.0点为低电平,0.1mA的电流经Rc然后流过三极管一地,Ri上没有电流流过。而当三极管截止后,电流就由Rc流过再通过Ri流到地。由于电阻分压的作用,在Rc和Ri上各有部分电压,P1.0点的电压为Rc和Ri的分压。

    总电流=5V÷(50K+500K)=0.009mA;

    则P1.0点的电压=0.009mA×500K=4.5V。

    TTL规定输出2.4-5V为高电平;输出0.4-0为低电平。因此这样接是正确的。

    下面我们再来看看用S51来驱动发光管的情况:

嵌入式分享~IO相关5 ##_嵌入式硬件_09

先来看看图7的情况,很显然,发光管的方向为上正下负,只有P1.0为高电位才能点亮发光管,要让S51的P1.0为高电位,就必须使三极管截止。当三极管截止后,电流经Rc流到发光管再从发光管流到地。

    要让发光管导通必须要在发光管两端有超过2.1V的门坎电压。因此流过发光管的电流=(5V-2.1V)÷50K=0.058mA的电流,你们说发光管能亮吗? 

    再来看图8。

    由图可以看出,要想让发光管导通P1.0就必须为低电位。那P1.0口的三极管必须得导通。

    当三极管一导通后,电流一路流过Rc到三极管再从三极管流到地。另一路在发光管上消耗掉2.1V的电压。

    然后一路几乎没有阻力地流过三极管,而IO口的三极管最大电流不能超过15mA,超了就会烧坏三极管,因此这个接法不正确。

    那么如何才能让这两种接法都可以驱动发光管呢

    见下图:

嵌入式分享~IO相关5 ##_三极管_10

先看图9,在P1.0端和Vcc间接上个电阻Ri。当三极管导通时有两路电流都要从它的CE极流过,一路是内部R上的0.1mA电流,另一路就是Ri上的电流,为了不让三极管过流而烧坏我们就要确定它的电阻值。

    Ri=5V÷15mA=0.333K,就大约是330欧姆。这时流过三极管的电流就大约为15mA,此时发光管是不亮的。

    当三极管截止后,这两路电流就都要从发光管流过了,这时流过发光管的电流是多少呢。

    S51的内部电阻上流过的电流为(5V-2.1V)÷50K=0.06mA,很小我们可以忽略不计了。

    流过Ri上的电流为(5V-2.1V)÷330Ω=0.0087A,也就是8.7mA。已经能让发光管比较亮了。

    这样驱动是可以的,但发现没有,发光管不亮时所消耗的电流比发光管点亮时消耗的电流还要大。

    如果用许多个IO口去点亮很多发光管的话这样的电路就不经济了。好!这就是P1.0高电平直接驱动发光管的状况。 

    再来看图10,在和发光管串联一个电阻后接在Vcc和P1.0之间。当三极管导通时,也是两路电流都汇合后从三极管的CE流过,内部电阻上的电流仍为0.1mA,发光管上的电流就要由电阻Ri和发光管共同来保证不让三极管的CE超过15mA,则电阻的确定为(5V-2.1V)÷15mA=0.193K,大约是200欧姆。这样流过发光管的电流就约为15mA,发光管比较亮了。当三极管截止后,就阻断了这两路电流的通路,因此不消耗电流。

    这个电路是P1.0低电平直接驱动发光管的状况,可以看出这个电路当发光管被点亮时消耗15mA的电流,而熄灭时就不消耗电流,因此这个电路是最适合用的。S51直接驱动数码管一般也都是采用这个电路原理。 

    下面是数码管的原理图:

嵌入式分享~IO相关5 ##_数据_11

二、ROM、RAM、FLASH、DDR、EMMC

嵌入式分享~IO相关5 ##_嵌入式硬件_12

简单解释

1、ROM只读存储器,内容写入后就不能更改了,制造成本比较低,常用于电脑中的开机启动如启动光盘bios,在系统装好的电脑上时,计算机将C盘目录下的操作系统文件读取至内存,然后通过cpu调用各种配件进行工作这时系统存放存储器为RAM。

PROM:可编程程序只读存储器,但是只可以编写一次。

EPROM:可抹除可编程只读存储器,可重复使用。

EEPROM:电子式可抹除可编程只读存储器,类似于EPROM但是摸除的方式是使用高电场完成。

2、RAM随机存取存储器,也叫主存,是与CPU直接交换数据的内部存储器,可以随时读写,而且速度快,通常作为操作系统或其他正在运行程序的临时数据存储介质。RAM工作时可以随时从任何一个指定地址写入或读出信息。他与ROM的最大区别是数据的易失性,断电丢失。RAM在计算机和数字系统中用来暂时存储程序、数据和中间结果。手机和电脑的运行内存都是使用ram为存储空间,内存条的作用是增加运行ram空间。

SRAM:静态随机存储器,SRAM存放的信息在不停电的情况下能长时间保留,状态稳定,不需外加刷新电路,从而简化了外部电路设计。常作为Cache。

DRAM:动态随机存储器,DRAM与SRAM相比具有集成度高、功耗低、价格便宜等优点,所以在大容量存储器中普遍采用。DRAM的缺点是需要刷新逻辑电路,且刷新操作时不能进行正常读,写操作。常作为主存储器。

SDRAM:同步动态随机存取内存。就是DDR,被分为DDR1、DDR2、DDR3。

3、FLASH是一种非易失性内存,闪存的物理特性与常见的内存有根本性的差异:目前各类 DDR 、 SDRAM 或者 RDRAM 都属于挥发性内存,只要停止电流供应内存中的数据便无法保持,因此每次电脑开机都需要把数据重新载入内存;闪存在没有电流供应的条件下也能够长久地保持数据,其存储特性相当于硬盘,这项特性正是闪存得以成为各类便携型数字设备的存储介质的基础。Flash分为nor flash和nand flash。

NOR FLASH:它的特点就是可以在芯片内执行,应用程序可以直接在闪存中运行,不必把代码读入系统RAM。在1~16M下的小容量有很高的的成本效益,但是很低的写入和擦除 速度大大影响了它的性能。他的读取和我们常见的SDRAM的读取是一样。

NAND FLASH:Nand-flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,如嵌入式产品中包括数码相机、MP3随身听记忆卡、体积小巧的U盘等。读取是以一次读取一块的形式来进行的,通常是一次读取512个字节。用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash还作上了一块小的NOR Flash来运行启动代码。

4、eMMC:  eMMC 存储器 eMMC (Embedded Multi Media Card) 为MMC协会所订立的,eMMC 相当于 NandFlash+主控IC ,对外的接口协议与SD、TF卡一样,主要是针对手机或平板电脑等产品的内嵌式存储器标准规格。eMMC的一个明显优势是在封装中集成了一个控制器,它提供标准接口并管理闪存,使得手机厂商就能专注于产品开发的其它部分,并缩短向市场推出产品的时间。这些特点对于希望通过缩小光刻尺寸和降低成本的NAND供应商来说,同样的重要。
    eMMC由一个嵌入式存储解决方案组成,带有MMC(多媒体卡)接口、快闪存储器设备(Nand Flash)及主控制器,所有都在一个小型的BGA 封装。接口速度高达每秒52MBytes,eMMC具有快速、可升级的性能。同时其接口电压可以是 1.8v 或者是 3.3v。

    现在很多智能电视已经逐步抛弃Nor或Nand,使用更为先进的eMMC芯片,然而普通编程器无法读写eMMC芯片,新开发的可支持eMMC芯片烧写的编程器性价比高,还能支持Nor、Nand芯片,支持全面、功能强大

三 、CAN总线两个终端电阻的作用

CAN总线终端电阻,一般来说都是120欧姆,实际上在设计的时候,也是两个60欧姆的电阻串起来,而总线上一般有两个120Ω的节点,基本上稍微知道点CAN总线的人都知道这个道理。

嵌入式分享~IO相关5 ##_数据_13

但是作为学渣的我,知道这个是在各种标准以及各种数据手册和应用笔记里面常用的电阻值,但是这两个终端电阻的具体作用是什么呢?之前就知道阻抗匹配,但是究竟匹配的是什么呢?

然后我就上知乎遨游了一下,半抄半写的总结了下面的这些知识点。知道终端电阻的作用,对于日常工作中波形不稳定等问题,也能更快的找到问题的原因。

终端电阻的作用

CAN总线终端电阻的作用有3个:

1、提高抗干扰能力,让高频低能量的信号迅速走掉

2、确保总线快速进入隐性状态,让寄生电容的能量更快走掉;

3、提高信号质量,放置在总线的两端,让反射能量降低。

一)、提高抗干扰能力

CAN总线有“显性”和“隐性”两种状态,“显性”代表“0”,“隐性”代表“1”,由CAN收发器决定。下图是一个CAN收发器的典型内部结构图,CANH、CANL连接总线。

嵌入式分享~IO相关5 ##_嵌入式硬件_14

总线显性时,收发器内部Q1、Q2导通,CANH、CANL之间产生压差;隐性时,Q1、Q2截止,CANH、CANL处于无源状态,压差为0。

总线若无负载,隐性时差分电阻阻值很大,内部的MOS管属于高阻态,外部的干扰只需要极小的能量即可令总线进入显性(一般的收发器显性门限最小电压仅500mV)。这个时候如果有差模干扰过来,总线上就会有明显的波动,而这些波动没有地方能够吸收掉他们,就会在总线上创造一个显性位出来。所以为提升总线隐性时的抗干扰能力,可以增加一个差分负载电阻,且阻值尽可能小,以杜绝大部分噪声能量的影响。然而,为了避免需要过大的电流总线才能进入显性,阻值也不能过小。

二)、确保快速进入隐性状态

在显性状态期间,总线的寄生电容会被充电,而在恢复到隐性状态时,这些电容需要放电。如果CANH、CANL之间没有放置任何阻性负载,电容只能通过收发器内部的差分电阻放电,这个阻抗是比较大的,按照RC滤波电路的特性,放电时间就会明显比较长。我们在收发器的CANH、CANL之间加入一个220PF的电容进行模拟试验,位速率为500kbit/s,波形如图,这个波形的下降沿就是比较长的状态。

嵌入式分享~IO相关5 ##_三极管_15

为了让总线寄生电容快速放电,确保总线快速进入隐性状态,需要在CANH、CANL之间放置一个负载电阻。增加一个60Ω的电阻后,波形如图,从图中看出,显性恢复到隐性的时间缩减到128nS,与显性建立时间相当。 

嵌入式分享~IO相关5 ##_单片机_16

三)、提高信号质量

信号在较高的转换速率情况下,信号边沿能量遇到阻抗不匹配时,会产生信号反射;传输线缆横截面的几何结构发生变化,线缆的特征阻抗会随之变化,也会造成反射。

能量发生反射时,导致反射的波形与原来的波形进行叠加,就会产生振铃。

在总线线缆的末端,阻抗急剧变化导致信号边沿能量反射,总线信号上会产生振铃,若振铃幅度过大,就会影响通信质量。在线缆末端增加一个与线缆特征阻抗一致的终端电阻,可以将这部分能量吸收,避免振铃的产生。

别人进行了一个模拟试验(图片都是我抄过来的),位速率为1Mbit/s,收发器CANH、CANL接一根10m左右的双绞线,收发器端接120Ω电阻保证隐性转换时间,末端不加负载。末端信号波形如图所示,信号上升沿出现了振铃。

嵌入式分享~IO相关5 ##_三极管_17

 

若双绞线末端增加一个120Ω的电阻,末端信号波形明显改善,振铃消失。 

嵌入式分享~IO相关5 ##_嵌入式硬件_18

一般在直线型拓扑中,线缆两端即是发送端,也是接收端,故线缆两端需各加一个终端电阻。

而在实际应用过程中,CAN总线一般都不是完美的总线式的设计,很多时候是总线型和星型的混合结构,这个时候一般都将CAN终端电阻布置在线束最远的两端,来尽量的模拟CAN总线的标准结构。

为什么选120Ω?

什么是阻抗?在电学中,常把对电路中电流所起的阻碍作用叫做阻抗。阻抗单位为欧姆,常用Z表示,是一个复数Z= R+i( ωL–1/(ωC))。具体说来阻抗可分为两个部分,电阻(实部)和电抗(虚部)。其中电抗又包括容抗和感抗,由电容引起的电流阻碍称为容抗,由电感引起的电流阻碍称为感抗。这里的阻抗是指Z的模。

任何一根线缆的特征阻抗都可以通过实验的方式得出。线缆的一端接方波发生器,另一端接一个可调电阻,并通过示波器观察电阻上的波形。调整电阻阻值的大小,直到电阻上的信号是一个良好的无振铃的方波,此时的电阻值可以认为与线缆的特征阻抗一致。

采用两根汽车使用的典型线缆,将它们扭制成双绞线,就可根据上述方法得到特征阻抗大约为120Ω,这也是CAN标准推荐的终端电阻阻值,所以这个120Ω是测出来的,不是算出来的,都是根据实际的线束特性进行计算得到的。当然在ISO 11898-2这个标准里面也是有定义的。

嵌入式分享~IO相关5 ##_嵌入式硬件_19

为什么功率还要选0.25W?

这个就要结合一些故障状态也计算,汽车ECU的所有接口都需要考虑短路到电源和短路到地的情况,所以我们也需要考虑CAN总线的节点短路到电源的情况,根据标准需要考虑短路到18V的情况,假设CANH短路到18V,电流会通过终端电阻流到CANL上,而CANL内部由于限流的原因,最大注入电流为50mA(TJA1145的规格书上标注),这时候120Ω电阻的功率就是50mA*50mA*120Ω=0.3W。考虑到高温情况下的降额,终端电阻的功率就是0.5W。