硬件基础知识与常见通讯协议

98 阅读13分钟

一.电容

1.什么是电容

顾名思义就是“储电荷的容器”,由两个彼此绝缘的极板组成,中间夹有电介质(绝缘

材料),当在电容器的两个极板之间施加电压时,极板上会积累电荷,电容最核⼼的功能是:充

电、放电。

2.电容的伏安特性曲线

当电容器刚充电时:⽐如说:第⼀个电⼦刚要被压⼊极板的时候,电容器两端的电压

⼏乎为0,电⼦很容易就压进去,所以此时的电容器,对电流的阻碍⾮常⼩,可以认为

是⼀根导线,所以通过他的电流就很⼤。

当电容器快充满时:极板中已经压⼊了很多的电⼦,此时电容器两端的电压,就⽆限

接近电源的电压,那电⼦就很难被压进去,所以此时,电容器对电流的阻碍⾮常⼤,

所以通过他的电流就会很⼩。

当电容器完全充满时,它两端的电压,和电源电压相等,不会再有电⼦被压⼊极板,

所以此时的电容器可以认为是开路状态,电流当然就为0了。

2.1充电时间曲线

t=rc 充满一般为5个t

2.2 容抗特性及计算方式

在通交流的过程中,他会产生一定的阻抗,我们把它叫做阻抗,计算公式如下:

Xc=1/2Πfc 其中 f为交流电频率,C为电容大小,所以f/c越大,同等条件下,容抗越小。

电容产生的阻抗并不会产生热量。

3.电容的作用

3.2 通交流 阻直流

3.2滤波

当电流方向改变时,由于二极管的存在,反向不可以导通,但是电容这个时候会释放电流,从而会使得灯泡不会熄灭。电容并联在电源两端,电容会接替交流电的负半个周期进⾏放电,⼩灯⼀直处于常亮状态。

3.3 全波整流

即将交流转成直流。

可以把交流电想象成⼀条双向⻋道(电流⽅向来回变),现在需要把这条路改成单⾏道

(直流电),全波整流就像⼀座聪明的⽴交桥,能让两个⽅向的⻋流都变成同⼀个⽅向!

全波整流⽐半波整流效率更⾼。

4.电容的分类

4.1 陶瓷

介电常数大 充电快,无极性。

1.瓷片电容 0.5pf-1uf 额定电压高 额定电压高几百几千v

2.贴片式 0.5 -100uf 额定电压低100v以下

应用:滤波、去砸、高频

4.2 电解

有极性,不能直接在交流电中使⽤;

0.5-10000uf;

电解质会挥发,影响寿命;

应用:直流滤波,闪光灯、电机启动、汽车安全气囊

4.3 空气电容

以空⽓作为电介质的电容器,通常都是以可调电容器的形式出现,⼀般有⼀个调节

装置可以调节两个极⽚之间的相对⾯积,从⽽达到调节电容⼤⼩的⽬的。

  1. 容值较⼩(100pF ~ 1nF之间)。

  2. 空⽓的介电强度不是很⾼,⼀般不会出现在⾼压电路中。

  3. 良好的抗磁性。

应用:⾼频电路(⽆线电调谐、⼴播设备),医疗设备(核磁)

4.4 超级电容

二.电感

1.电感产生原因

安培定则

磁生电 右手定则 大拇指为电流方向

法拉第电磁

电生磁场,大拇子为N

楞次定律

电感量变化,导致来拒去留

2.特点

与电容相反,它是隔交通直

计算方式:

电感的决定式(了解):L=μ*N 2 *A/ L

L:电感,单位为亨利(H)。

μ:导磁材料的磁导率,它反映了材料对磁场的导通能力,单位为亨利每米(H/m)。

N:线圈的匝数,表示线圈绕的圈数。

A:线圈的截面积,单位为平方米(m2)。

l:磁路的长度,即线圈的长度,单位为米(m)。

感应电动势:E=-L*dl/dt (dl/dt 单位为A/s)

作用:一般用作瞬态保护

三.继电器

基于电感的设备

低压低电流控制高压高电流

ab接电使得磁铁具有磁性,从而控制cde的通断

四.半导体

1.定义

介于导体和绝缘体之间的,导电性取决于外部条件。

2.分类

2.1本征半导体

可以由绝缘体(高温及其他条件)转成导体的的材料,如si,这类材料就可以称为本征半导体。

2.2 N型半导体

向硅晶体中掺杂少量的磷原⼦,磷原⼦最外层有 5 个电⼦,只能和周围的 4 个硅原⼦组成 4 个共

价键,这样每个磷原⼦可以贡献 1 个⾃由电⼦。

2.3 P型半导体

向硅晶体中掺⼊硼原⼦,硼原⼦最外层只有3个电⼦,硼原⼦会努⼒去周围的硅原⼦形成 4 个共价

键,不过因为缺1个电⼦,所以会有⼀个共价键的位置期待1个⾃由电⼦,这个位置会形成“空⽳’,

由于“空⽳”是期待得到⼀个电⼦的,所以也可以认为空⽳带正电。

3.PN结

3.1 PN结定义

PN结是半导体器件的基础结构,由P型半导体和N型半导体通过特殊⼯艺结合⽽成,它在⼆极管、晶体管等器件中起着⾮常重要的作⽤。

3.2 PN结的内建电场

将『P型半导体』与『N型半导体』组合到⼀起, N区的电⼦会扩散到P区与空⽳组合,N区因缺少 电⼦⽽带正电,P区因得到电⼦⽽带负电,这样在内部就形成了⼀个『内建电场』,由于内建电场

的存在,阻⽌了更多的电⼦从N区扩散到P区,于是中间就形成了⼀层“耗尽区”。

3.3 PN结的导通电压

当在P区接正极,N区接负极时,在这种外部电场的加持下,内建电场会变⼩,耗尽区也随之变

⼩,当外部电场强度继续变⼤时,就可以抵消掉内建电场,PN结被导通,随后N区的电⼦,完全

处于⾃由状态。

五.二极管

1.定义

⼆极管是⼀种由PN结构成的电⼦器件,具有单向导电性,即:只允许电流从P区流向N区,反向 ⽆法导通。

2.分类

2.1整流二极管

电流方向

2.2 稳压二极管

稳压⼆极管利⽤了⼆极管的反向击穿特性,它在反向击穿后,可以将其两端电压,维持在⼀

个相对恒定的值附近,它可以为电⼦设备提供稳定的电压,并防⽌过压损害

2.3 发光二极管

2.4 数码管

多个二极管组成,有共阴极、共阳极

2.5 点阵屏

六.三极管

1.组成

两个二极管

2.特点

b为基极,给be导通后,Ce也可以导通

七.Mos管(场效应管)

1.N沟道Mos管

2.导通原理

金属电极、上下面的N型半导体接入电源,其中负极接下面,正极接上面金属电极和N型半导体,导通电源,使得电子向绝缘层靠近,到达一定浓度形参电桥,于是底部导通。需要注意的是上面的寄生二极管,是反偏的。


八.常见通讯协议-前置知识

1.串行与并行

1.串行

一根线,发送或接收数据。

2.并行

多根线同时发送或接收数据,然后在组合起来。

3.两者优缺点

串行并行
传输效率
传输距离
硬件成本
传输可靠性

2.同步与异步

同步是传输信号的两端使用相同的时钟线,异步则是约定好相同的传输速率,时钟频率不一定相同。

3.单工、半双工、全双工的概念

1.单工

数据只能从设备A发送给设备B,比如广播

2.半双工

可以收发,但是同时只能收或者发。比如对讲机

3.全双工

可以一边收一边发,比如电话。

九.UART协议

1.概念

UART是Universal Asynchronous Receiver/Transmitter 简称,即通用的异步收发协议,它是全双工的协议,常用于微控制器单元之间的通讯、或者微控制器与外设之间的通讯。它通常只有两根线用来收发即可。

2.通讯格式

urat数据帧格式是由起始位、数据位、校验位、停止位组成,以及空闲状态构成。空闲状态时为高电平,起始位为低电平,后面跟着数据位为5-9位,校验位分为奇校验和偶校验,停止位为1位或两位高电平,后面会跟下空闲状态。下图为其格式:

除了数据格式之外,还有个重要的概念就是波特率,这个是双方通讯约定的通讯速率,有了它通讯双方才能准确的得到一帧数据。常用的波特率有:115200bps、9600bps等

3.51单片机的uart使用

配置部分:

1.操作寄存器配置其工作模式;

2.通过配置定时器1的溢出率来配置其波特率;

3.开启定时器和串口中断;

收发部分:

收发数据都是在串口中断中

发送数据时,都是通过将数据放到寄存器中,并且在相同时间只能开启收或者发的状态;

寄存器部分:

工作模式

定时器1配置

开启配置

收发寄存器配置


#include "dri_uart.h"

static bit s_is_sending = 0; // 0:未在发送 1:正在发送
static char s_buffer    = 0;

static void init_budrate()
{

    // 1.串口工作模式 0 1 为8位数据位 波特率设置需要根据定时器1的溢出率及串口的工作模式SMOD来设置
    SM0 = 0;
    SM1 = 1;

    // 2. 波特率
    // 2.1 SMOD
    PCON &= 0x7F; // 将SMOD设置为0
    // 2.2定时器1的设置
    // 2.2.1 工作模式
    TMOD &= 0x0F;
    TMOD |= 0x20;
    // 2.2.2 初始值 这是设置波特率的关键溢出率=(SYSCLK/12/(256-T))而波特率=(1/32)x (定时器1的溢出率)
    TL1 = 253;
    TH1 = 253;
    // 2.2.3 启动定时器
    TR1 = 1;

    // 开关配置
    EA  = 1; // 中断总开关
    ES  = 1; // 串口中断开关
    ET1 = 1; // 定时器1开关
}

static void init_rc()
{
    //  1.接收数据相关配置
    REN = 1; // 使能接收
    SM2 = 0; // 接收停止位模式
    RI  = 0; // 接收数据标志位 有数据的话并且有停止位的时候会单片机会将其置为1,这个时候我们就可以从寄存器中取数据了SBUF
    TI  = 0; // 发送数据标志位 当我们发送标志位允许时,这个标志位会置1,然后我们就可以发送数据了,
}
void uart_init(void)
{
    init_budrate();
    init_rc();
}

static void Dri_UART_SendChar(char c)
{
    while (s_is_sending == 1);//等待之前的发送完成
    s_is_sending = 1; // 标记正在发送
    SBUF         = c;
}


static void Dri_UART_RecData()
{
    P34 = 1; // 打开LED使能
    if (s_buffer == 'A') {
        P00 = 0; // LED1亮
    } else if (s_buffer == 'B') {
        P01 = 1; // LED1灭
    }
    
    Dri_UART_SendChar('1'); // 发送数据
}
// 串口中断函数
void Dri_UART_Handler() interrupt 4
{
    /* 检查接收中断标志位RI,如果为1,表示有一帧数据接收完成 */
    if (RI == 1) {

        s_buffer = SBUF; // 读取接收到的数据

        Dri_UART_RecData(); // 处理接收到的数据
        RI   = 0;    // 需要手动清除结束读取
  
    }
    /* 检查发送中断标志位TI,如果为1,表示有一帧数据发送完成 */
    if (TI == 1) {
        s_is_sending = 0; // flag置0,表示发送完成
        TI           = 0; // 需要手动清除结束发送
    }
}

十.I2C协议

1.概念

I2C(Inter-Integrated Circuit),通常简称为IIC。它是一种串行同步数据总线,主要有两根线,SDA(数据线)和SCL(时钟线),SCl必须是主设备产生,SDA主从设备都可以。

2.通讯格式

I2C是主从架构,由于只有两根线,空闲时,两根线默认都是给高电平, 当有数据通讯时,SDA会切换成低电平,这个是起始信号,并且每个设备是有设备地址的,当主设备发送给从设备1个字节的数据时,从设备会回复一个确认限号,为0表示收到数据,我们称之为ack,1表示没有收到或者不想在收到数据了,我们称之为nck,当数据完成发送时,会发送一个停止信号,即sda为由低电平到高电平。下面是完整的通讯流程:

1.起始信号:SDA由高电平到低电平;

2.发送设备地址:主机发送设备地址(包含读写信息)。从机回复确认信号;

3.主机发送数据(SDA数据改变时SCL需要由高到低,因为SCl是高时会发送数据),从机回复确认信号;

4.发送完成,主机发送停止信号。

3.51单片机中的I2C

我们使用两个gpio口模拟i2c的通讯过程,包括起始信号,地址发送,接收确认,数据发送,停止信号。

#include <STC89C5xRC.H>
#include "dri_iic.h"

/**
 * 开始信号 
 */
void Dri_IIC_Start()
{
    SCL = 1; //时钟线默认高电平
    SDA = 1;//数据线默认高电平
    SDA = 0;//拉低数据线 线与开始信号

    SCL = 0; // 拉低时钟 才可以配置发送数据 
}

/**
 * 停止信号
 */
void Dri_IIC_Stop()
{
    SDA = 0;
    SCL = 1;
    SDA = 1;
}

/**
 * 主机 发送一个字节
 * 先配置SDA数据,然后拉高时钟,数据就会被发送到总线
 * 再次拉低即可配置数据,循环往复执行。
 */
void Dri_IIC_SendByte(u8 byte)
{
    u8 i;
    for (i = 0; i < 8; i++) {
        SDA = (byte & (0x80 >> i)) == 0 ? 0 : 1;//设置数据
        SCL = 1;//拉高时钟后发送
        SCL = 0;//拉低时钟再次可以配置数据
    }
}
/**
 * 接收从机发来的一个字节 
 * SCL为高时,SDA才能收到数据,接受完成后,
 * 再次置低,从机才可以往总线上发送数据
 */
u8 Dri_IIC_ReceiveByte()
{
    u8 byte = 0;
    u8 i;
    SDA = 1;
    for (i = 0; i < 8; i++) {
        SCL  = 1;
        byte = (byte << 1) | SDA;
        SCL  = 0;
    }
    return byte;
}

/**
 * 主机发送数据后发送的确认信号 由主机发送
 */
void Dri_IIC_SendAck(bit ack)
{
    SDA = ack;
    SCL = 1;
    SCL = 0;
}

/**
 * 主机接收从机确认收到数据信号 由从机发送
 */
bit Dri_IIC_ReceiveAck()
{
    bit ack;
    SDA = 1;
    SCL = 1;
    ack = SDA;
    SCL = 0;
    return ack;
}

十一.SPI协议

1.概念

SPI是serial peripheral interface简称,使用的主从架构,与I2C总线一样,也需要时钟信号,所以它是同步传输,但是它至少有四根线组成,SCL时钟,MISO(输出)、MISI(输入)、CC(片选),因为他没有设备地址,当CC为低电平时,表示需要开始通讯,然后通过miso、misi来发送或接受数据。

通过上图可以看到,主从公用的三根线包括sck、miso、misi,只有片选是每个设备独立的。

2.通讯格式

SPI有两个重要的参数,即时钟的极性和相位,极性表示上升沿还是下降沿接收数据,也就是它用来标识总线是空闲还是通讯的,而相位表示从第几个上升沿或者下降沿接受数据。极性一般用CPOL(CLOCK POLATIRY)标识,CPOL=0时,标识低电平是空闲时刻,即上升沿才是接受数据,反之则反。相位用CPHA(CLOCK PHASE)来表示,直接决定了SPI总线从哪个跳变沿开始采样数据。通常我们使用低电平是空闲状态,第一个上升沿为采样数据,即配置为0 0。