关于一些嵌入式的基础知识

上学的时候模电数电没好好学,现在想玩了开始疯狂补课自学,太真实了

上拉电阻,下拉电阻

上下拉电阻都是为了给浮空状态的引脚提供一个确定的状态而存在的。

上拉电阻即在VCC和GPIO之间添加一个电阻,使其连通,这样GPIO就有了一个确定的高电平(直接连接电源会电流过大短路,所以需要一个电阻)。

对于上拉电阻的取值,需要根据情况确定。如果阻值太小,流过的电流就会过大,造成浪费。但是如果电阻过大,流过的电流就会太少,对于电路的驱动能力就会变弱(例如电压升高时由于电流太小,填满寄生电容速度会变慢,后面电路的升压也就会变慢,会导致整个电路的频率变慢。这种情况对高频电平变化的时候的性能是有很大影响的,例如PWM或者IIC通信)

下拉电阻则是在GND和引脚之间添加一个电阻。其作用就是给一个不确定状态的引脚提供一个低电平(因为接地了),和上拉电阻刚好相反。至于为什么也要加一个电阻,是为了防止有大电平出现的时候造成短路,烧坏原件。

除此之外,就是可以通过接地给一些寄生电容放电的路径。

推挽、开漏

                            VCC
                           ──┬──
                             │
                             │
┌─────────────┐      ┌───────┴──────┐
│             ├──────┤      mos1    │
│             │      └───────┬──────┘
│     控      │              │
│     制      │              ├─────────GPIO
│     器      │              │
│             │      ┌───────┴──────┐
│             ├──────┤      mos2    │
└─────────────┘      └───────┬──────┘
                             │
                           ──┴──
                            GND

如上图所示,GPIO由两个MOS控制,此时共有三种情况出现(两个都开启,直接短路了,那么恭喜你点亮了两个mos管)

mos1 mos2 输出
打开 关闭 高电平
关闭 打开 低电平
关闭 关闭 浮空/高阻态(相当于断路)

对于前两种情况,实际上就是推挽输出,只有mos1开启被称为推,只有mos2开启被称为挽,即推挽输出。等效示意图如下


                            VCC
                           ──┬──      │
                             │        │
                             │        │  推 高电平,VCC提供电压,GND此时没有供电,存在电势差
┌─────────────┐      ┌───────┴──────┐ │
│             ├──────┤      mos1    │ │
│             │      └───────┬──────┘ └───►
│             │              │
│             │              └─────────GPIO
│             │
│             │
│             ├──────
└─────────────┘

┌─────────────┐
│             ├──────
│             │
│             │
│             │              ┌─────────GPIO
│             │              │
│             │      ┌───────┴──────┐ ┌───
│             ├──────┤      mos2    │ │
└─────────────┘      └───────┬──────┘ │  挽,低电平,GPIO到GND间没有电势差,相当于一段导线间没有电势差
                             │        │
                             │        │
                           ──┴──      ▼
                            GND

mos1关闭的两种情况即为开漏输出模式,此时可以通过外部电路实现更多的控制。

稳压器

稳压器顾名思义是用于稳定电压的。一般来说常见的稳压器分为线性稳压器和开关稳压器(DCDC)两种类型。

在线性稳压器中,最常见的一般就是低压差线性稳压器(LDO),比如鼎鼎大名的AMS1117,其特点是输入输出电压差小(通常在几百毫伏到几伏之间),效率较高。

这种稳压器的原理就是通过在功率固定的情况下,动态调节可调电阻,使输出的电压稳定在某个固定值。也正是由于其是通过电阻来调节电压的,所以其发热量可能是比较高的(因为被电阻消耗了),并且效率也是比较低的。

但是由于这种稳压器是通过根据电压变化来动态调整阻值的,阻值的调整需要反应时间,并不会和输入电压同时变动,所以输出的电压依旧会产生一些波动,而不是严格的平稳,只是会一定程度上抑制电压的波动幅度,而这个抑制的倍率,就是线性稳压器的一个重要指标:电源(纹波)抑制比PSRR(dB) = 20 \cdot \log_{10}(\frac{\Delta V_{in}}{\Delta V_{out}}),所以输出波纹的计算公式就是\Delta V_{out} = \frac{\Delta V_{in}}{10^{PSRR/20}},可以由此计算出输出波纹的理论波动是多少(但是实际上输出的电压波动还有系统噪声等等则影响)。

而开关稳压器,是通过控制输入的占空比来调节输出电压的(就好像是疯狂手动控制开关,电压在输入电压和0之间左右横跳,输出一个PWM,最终的平均电压也就是输出电压了)。
至于将方波电压平稳成持续电压,是靠电感和电容来实现的,电感来维持电压输出,电容则负责稳定滤波和稳定电压输出。
所以基于这种实现方式,其并没有过多的能量被消耗,所以效率很高(相比起线性稳压器),发热量不大。但是也正是由于其原理,所以输出电压不如线性稳压器稳定。

所以其而这差异可以总结为下表

LDO DCDC
输出波纹平小 输出波纹大
效率低(消耗多余电压) 效率高
发热高(消耗的都拿来发热了) 发热低
成本低(便宜) 成本高
使用简单 使用复杂
自身功耗低 自身功耗高(相比于LDO来说)

占空比(Duty Cycle)是指在一个周期内,信号处于“开”状态的时间与整个周期的比值。简单来说,就是信号“开”的时间占总时间的比例。

例如,如果一个信号在1秒钟内有0.5秒是“开”的,0.5秒是“关”的,那么它的占空比就是50%。

NMOS,PMOS

无论是nmos还是pmos,其本质上都是开关,只不过是依靠电压差来控制通断的开关。

对于NMOS来说,gs两端的电压差小于一个阈值的时候,可以视为这个开关是断开的(阻值趋近于无穷大),d端就没有上电了。gs两端的电压差大于一个阈值的时候,可以视为这个开关时脸上的(阻值趋近于0),d段就正常上电了。所以如果选择一个nmos的话,如果可以输入的电压是小于这个阈值的,那么可能无法打开这个nmos(这里是指s段接地的情况,因为无法达到可以打开nmos的阈值)。

对于一个nmos来说,Vsgth是指打开nmos需要的临界电压,Rdson则是打开后这个nmos的阻值。Rdson越小则这个nmos的性能是越好的。Cgs则是指g和s间的寄生电容,寄生电容越大,联通nmos的时间就越长,所以Cgs的值越小则nmos的性能越好。

PMOS的开关逻辑和NMOS是正好相反的。但是对于pmos来说,一般会把电源在s端后,d端后接用电设备后接地,这样g端基于高电压后,gs之间电压差变小,正好可以让d端通电。两种mos管一般连接使用示意图如下

pmos
    VDD
     |
    [S]
    [G]--输入信号
    [D]
     |
    输出,GND
nmos
   输出,VDD
     |
    [D]
    [G]--输入信号
    [S]
     |
    GND

也就是说一般来说,nmos会把用电设备连接在电源和d端之间。这是因为如果把用电设备连接到s端和GND间,在nmos导通后,由于S端和输入之间没有太大的电阻,此时S端的电压就会升高,和G端的电压差就会减少,nmos的状态会变得不稳定,所以一般会把用电设备放在电源和D端间。但是这样也会导致一个问题,即1、用电设备和电源是直接相连的 2、用电设备没有直接接地。这有时候会导致用电设备接地不稳定,nmos对于用电设备的电源控制不稳定(因为直接连上了),造成整个电路的不稳定。所以对于这样的问题存在时,会使用PMOS进行替换,让用电设备直接接地,不直接连接电源,来解决这两个问题。这对于有源器件是十分有用的。

退耦电容

退耦电容即指的是在芯片的电源输入处放置的一个0.1μF的电容(这里的0.1μF是针对大多数情况下的通常使用取值,并非固定的)。

电容的主要作用就是滤波(纹波,噪声等),根据电容的容抗公式,X_c = \frac{1}{2\pi f C},在电容值越大的情况下,频率越高其容抗就越低,所以更容易通过电容。

但是电容会存在寄生电感,根据感抗公式X_L = 2\pi f L,频率越高,电感的阻抗就越大,反而会降低滤波效果。

所以其实对于一颗电容来说,其滤波能力是有一个临界点的,并不是频率越高滤波效果就越好,超过这个临界点滤波效果反而又会下降,并且根据电容的容量不同,其对不同频率的波形滤波能力也是不一样的。根据上述的两个公式,电容的容值越大,其感抗就越大,滤波效果会相应下降,所以小电容的高频滤波效果会由于大电容。

至于0.1μF的取值,其实是根据广泛的经验和成本综合考量取得的一般的最优解,所以大多数情况下也都使用0.1μF.

但是实际上,对于电源来说,其输出时都会做足够的滤波工作,所以这里的‘波’实际上并不是由电源直接产生的,之类的杂波实际上是由于外部的原件对输出电压的影响,例如导线的寄生电感和寄生电阻等等。所以这个电容也叫退耦(合)电容,用于消除元器件间的相互影响。

晶振

晶振是石英晶体振荡器的简称,是电子设备中的核心组件之一。

他依靠压电效应来工作,即给石英晶体施加电压时,其会产生机械变形,然后由于逆电压效应产生电荷,进而产生电压,产生的电压又因为压电效应维持这种机械变形,形成了正反馈,晶体就形成了持续震动,如下

graph LR
    A[施加电压] --> B[机械变形]
    B --> C[产生电荷]
    C --> D[形成电压]
    D --> A

对于晶振来说,需要在外部给予一个与晶振的固有频率相同的外部频率的电压,才能使其更好的工作。外部的电压频率与其固有振动频率相同的时候,会加强其生成的电压,也就会加强这样的机械震动,使其最终生成的电荷最强,有助于其工作。但是如果频率不相同,外部电压可能会抵消这种机械震动,可能会导致其停止工作。

graph LR
    E[外部频率] --> F{匹配固有频率?}
    F -->|是| G[共振放大]
    F -->|否| H[振荡微弱]

    G --> I[稳定输出]
    H --> J[无法工作]

    %% 样式
    classDef cycle fill:#e1f5fe,stroke:#01579b,stroke-width:2px
    classDef condition fill:#fff3e0,stroke:#e65100,stroke-width:2px
    classDef success fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    classDef failure fill:#ffebee,stroke:#c62828,stroke-width:2px

    class A,B,C,D cycle
    class E,F condition
    class G,I success
    class H,J failure

晶振的谐振频率公式为串联谐振频率(fs) = \frac{1}{(2\pi\sqrt{(L_{1}·C_{1}))}},其中L₁:晶体的等效串联电感,C₁:晶体的等效串联电容,这些都是晶体的物理属性。

晶振给电路提供了计时的能力,给整个电路提供了统一的时间基准。石英钟就是以这种原理和方式运作的。

flowchart LR
    subgraph Input ["输入"]
        A[电源] --> B[晶振电路]
    end

    subgraph Crystal ["晶振核心"]
        C[石英晶体<br/>16MHz]
        C --> D[稳定振荡]
    end

    subgraph Output ["输出与应用"]
        E[方波时钟] --> F[MCU]
        F --> G[定时器]
        F --> H[串口通信]
        F --> I[PWM输出]
        F --> J[程序执行]
    end

    B --> C
    D --> E

    %% 频率标注
    C -.->|16,000,000次/秒| E
    E -.->|系统时钟| F

    %% 样式
    classDef input fill:#f3e5f5,stroke:#7b1fa2
    classDef crystal fill:#e1f5fe,stroke:#01579b
    classDef output fill:#e8f5e8,stroke:#2e7d32

    class A,B input
    class C,D crystal
    class E,F,G,H,I,J output

NC/NF/0R

NC,即No Connect,引脚或原件默认不连接

NF,即No Fix,原件默认不安装

0R,0偶电阻

波特率

即串口通信的速率。串口通信发送引脚(TX)通常空闲时为高电平,需要发送数据时先变为一个低电平起始位,然后发送8-9位数据(可以设置),高电平为1,低电平为0。同时可以配置最后一位是否作为校验位,最后紧接着一个停止位结束一次发送。

   ┌─────┬─────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬─────┐
   │起始 │数据  │数据  │数据  │数据   │数据  │数据   │数据  │校验  │停止  │
   │位   │位0  │位1   │位2   │位3    │位4   │位5    │位6   │位7   │位   │
   │(0)  │(LSB)│      │      │      │      │      │      │(MSB) │(1)  │
   └─────┴─────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴─────┘
   时间轴: ──────────────────────────────────────────────────────────>

   高电平(1) ──┐     ┌──┐  ┌──┐     ┌──┐  ┌──┐     ┌─────────────
               │     │  │  │  │     │  │  │  │     │
   低电平(0)   └─────┘  └──┘  └─────┘  └──┘  └─────┘
               起始位 D0 D1 D2 D3 D4 D5 D6 D7 校验位 停止位

所以串口通信每次数据包最多只能发送9bit的数据。而波特率就是串口通信每秒钟可以传输多少位数据。常用的值由9600、115200、921600等。

串口通信协议是最底层最基本的通信协议,也就是物理层的通信协议。在网上还有再此基础之上封装的更多的协议。

关于共地

所谓共地,故名思及就是需要有一个共同的地平面。因为电压是一个相对数值而不是一个绝对数值,即“电势差”,就类似于海拔,即相对于海平面的高度。两个系统之间的地平面并不一定是完全相同的,只是人为定义为0V而已。所以只有共地,才有一个固定的参考点,用于判断是高电平还是低电平。

但另外一个方面,一般来说只需要共地即可, 即只需要固定的0电压参考点,并不需要一个固定的高电压参考点,因为共地已经可以判断出低电压和还是高电压了,并不在需要“共电源”。电源就仅仅是让设备启动,提供能源而已。所以两个系统之间通信,必须要有共同的地参考面,但是供电可以是各自独立的。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇