本帖最后由 KA_IX 于 2021-9-13 12:10 编辑

在单片机的学习中,不光是单片机程序的编写,还有电路的设计。有些公司可能会把单片机开发分成两块:电路设计、程序设计。然后负责电路设计的人只负责电路设计,不用考虑单片机编程;程序设计的人只管单片机编程,不设计电路。
不过我个人认为,只搞电路设计的人可以不用关心单片机是怎么编程的,但是搞单片机程序设计的人,却必须要对电路很熟悉,你可以不用亲自设计电路,但是必须对单片机项目中各种电路的原理足够了解,这样才能确保设计出来的程序稳定、健壮。
举个例子来说吧,假如一个单片机系统中用到了EEPROM存储芯片,EEPROM芯片的SCL和SDA是开漏输出的,需要外接上拉电阻,假设电路板上的EEPROM芯片的SCL和SDA的上拉电阻忘记焊上或者坏掉了,这时候调试EEPROM是调不通的,如果这时候电路设计人员不在,而单片机程序设计人员又对EEPROM的原理不熟悉,就会陷入到麻烦中:因为对电路不熟悉,就会一遍一遍的查找程序的原因。可是程序明明没有问题啊,这个程序在别的项目中一直都是正常的,为什么在这个板子上就不行了呢?
还有一点,一般带有微控制器的电路板,电路功能是否正常,是需要编写一定的验证程序来测试电路板的性能的,单靠电路设计人员使用万用表、示波器等工具是无法验证电路的好坏的。
综上所述,单片机程序设计人员一定要对电路的原理熟悉,这样才能设计出正确的程序。
从本篇文章开始,我们就来简单学习一下单片机开发中常用的电路。
当然,由于本人水平有限,关于这些电路的讲解只限于简单原理的讲解。如果有错误,欢迎批评指正。


1. 单片机常用电路

1-晶振电路

早期的单片机(比如经典的51单片机)系统,外接晶振是必须的(当然也可以外接时钟脉冲,但是很少用),因为单片机的运行必须依赖于稳定的时钟脉冲。但是随着技术的发展,现在很多单片机都已经集成了内部时钟,所以在一般的应用场合,可以不用外接晶振电路了。不过由于内部时钟容易受外界干扰,所以在要求严格的场合,晶振电路还是很有必要的。

晶振电路1

图1是典型的单片机外接晶振电路。

0ba47bc08b1f4760b9dfab4ef63ce22c?from=pc.jpg
图1 单片机晶振电路

该电路不只是有一个晶振,还有两个电容,这两个电容有什么作用呢?
这两个电容一般称为“匹配电容”或者“负载电容”、“谐振电容”。晶振电路中加这两个电容是为了满足谐振条件。一般外接电容,是为了使晶振两端的等效电容等于或接近负载电容。只有连接合适的电容才能满足晶振的起振要求,晶振才能正常工作。
负载电容的值由如下公式计算:
负载电容无法满足的话一般会使晶体频率产生偏差,严重的话晶体无法起振。电路设计中要尽量满足晶体的负载电容需求,从而使晶体工作在最佳状态。负载电容计算公式如下:

CL = C1*C2 / (C1+C2) + CS

CL为晶振的负载电容值,一般通过查询晶振的数据手册获得。CS为电路板的寄生电容,一般取 3~5pF,取C1 = C2,那么公式可以简化成如下:

CL = C1 / 2 + CS

一般情况下,增大负载电容的值会使振荡频率下降,减小负载电容的值,会使振荡频率上升。

晶振电路2


我们有时候还会看到如图2所示的晶振电路。
a028f70834984341a66c6bbca566982f?from=pc.jpg
图2 不带并联电阻和带并联电阻的晶振电路

该电路中晶振上又并了一个电阻,这是为什么呢?
这个电阻实际上是反馈电阻,是为了方便晶振起振的。对于COMS而言,这个电阻的阻值可以是1M以上,对于TTL则是需要视情况而定。最好的办法是看看芯片的数据手册,确认芯片晶振电路内部是否有电阻,如果没有,电路设计时最好加上。

晶振电路3


图3是有源晶振电路。
85aa507dec55414f96ecac9430d1a847?from=pc.jpg
图3 有源晶振电路

有源晶振通常的用法:一脚悬空,二脚接地,三脚接输出,四脚接电压。有源晶振不需要CPU的内部振荡器,连接方式相对简单(主要是做好电源滤波,通常使用一个电容和电感构成的PI型滤波网络,输出端用一个小阻值的电阻过滤信号即可),不需要复杂的配置电路。相对于无源晶体,有源晶振的缺陷是其信号电平是固定的,需要选择好合适输出电平,灵活性较差,而且价格高。


单片机常用电路

2-复位电路

单片机复位电路的作用是:使单片机的状态处于初始化状态,让单片机的程序从头开始执行,运行时钟处于稳定状态、各种寄存器、端口处于初始化状态等等。目的是让单片机能够稳定、正确的从头开始执行程序。
单片机有两种复位方式:一是高电平复位,二是低电平复位。基本上所有单片机都有一个复位端口(随着单片机技术的发展,现在有些单片机内部集成了复位电路,这样它的复位端口有可能和I/O端口等复用)。简单讲就是给单片机的复位端口施加一定时间的高电平(或者低电平),单片机就能完成初始化过程,从头开始执行程序。这个时间就称为复位时间,一般单片机的复位时间都很短,不过每种单片机的复位时间都不等,这个就需要查阅相应单片机的数据手册来获得该种单片机的复位时间。需要注意的是,单片机复位后,一定要给单片机的复位端口施加单片机正常工作时的电平,例如对于低电平的复位电路,复位后,复位端口应当处于高电平状态。
小诀窍:对于单片机是高电平还是低电平复位,我们可以通过观察单片机的引脚图进行一个直观的判断,当单片机引脚图中复位端口的名称上面有一个“-”时,该单片机就是低电平复位,没有“-”时,该单片机就是高电平复位,例如单片机端口名称是RST,那它是高电平复位,是/RST(/是上划线)时,它是低电平复位
刚才我们已经说过,现在已经有很多单片机内部集成了复位电路。那么我们在进行这种单片机电路设计的时候,就不用再单独设计复位电路了。
下面来介绍几种常用复位电路。

1、上电复位电路

单片机的复位有高电平复位和低电平复位的区别,那就自然有高电平复位电路和低电平复位电路两种。
27725be914f844fc919ef2db9e51db82?from=pc.jpg
图1 上电复位电路

图1左边的电路是高电平复位电路。
这个电路是利用电容的充电来实现复位的,当电源接通的瞬间,单片机复位端的电位与VCC相同,随着充电电流的减少,复位端的电位逐渐下降。直至电容充满电,复位端的电压变为低电平。
电路中R和C的值可以根据下面的式子计算,其中T是复位时间。
T=(1/9)*R1*C1

图1右边的电路是低电平复位电路
该电路的复位原理跟高电平复位电路的原理相反,这里就不多说了。
同样的,低电平复位电路中R和C的值可以根据下面的式子计算得出,其中T是复位时间。
T=9*RC
2、按键复位电路前面介绍的上电复位电路只能在单片机电路上电后,自动完成高电平复位或低电平复位,但是如果在单片机运行过程中,强制让单片机复位该怎么做呢?最简单的方法是通过按键实现:按下按键,单片机立马停止当前正在执行的操作,进入复位状态,然后从头开始运行。
图2左边是高电平按键复位电路,右边是低电平按键复位电路。
8da4929fb4e84f8fb2c3d06148fc3e6d?from=pc.jpg
图2 按键复位电路

对于高电平复位电路,当按下复位按键时,复位端被直接拉到高电平,使单片机复位。而对于低电平复位电路,按下复位键后,复位端被直接拉到地端,使单片机复位。

3、改进后的按键复位电路

上面的按键复位电路有一个缺点:当电源因某种干扰瞬间断电时,由于C不能迅速将电荷放掉,待电源恢复时,单片机不能上电自动复位,导致程序运行失控。电源瞬间断电干扰会导致程序停止正常运行,形成程序“乱飞”或进入“死循环”。
所以有了下面这个增加了二极管的复位电路。如图3所示。
56f1314d209745fd8a38c0db6f88cea2?from=pc.jpg
图3 改进后的按键复位电路

如果有了这个二极管就可以快速将电容上的电压释放,保证复位信号正确无误。也能快速为下次复位做好准备。

4、专用复位芯片


随着单片机系统越来越复杂,应用环境越来越多样化,单纯的RC复位电路已经不能确保单片机的正确复位,复位芯片也就应运而生。下图是一种复位芯片的应用电路。可以看出,复位芯片使用起来非常简单。
52d025f56aaf455f83d5cd5d71f86987?from=pc.jpg
图4 复位芯片应用电路

4a6421d62c3e4e46be3fdde96d333bf7?from=pc.jpg
图5 复位芯片应用电路

单片机常用电路

3-按键检测、LED驱动电路

在单片机入门学习中,最简单、最常见的两种入门元器件大概就是按键和LED了,围绕按键和LED可以基本上把单片机的功能学很多,例如按键可以用来学习单片机的端口输入功能、端口外部中断功能、定时/计数器的计数功能等等;而LED可以用来学习单片机的端口输出功能,定时/计数器的定时功能、PWM功能,位操作功能,电压比较器功能,以及单片机多种操作控制、流程指示等功能。
现在我们就来简单了解一下按键检测和LED驱动电路。

1、按键检测电路

图1是按键检测电路。该电路图包含两种电路:
53cc655cafbf45aa9f00d7d7de7f73a3?from=pc.jpg
图1 按键检测电路

一种是连接按键的单片机端口在按键未按下时,处于低电平状态,当按键按下后,单片机端口变为高电平,也就是说,当单片机端口检测到端口电平由低电平变为高电平后,可以判断为按键按下。
另一种是连接按键的单片机端口在按键未按下时,处于高电平状态,当按键按下后,单片机端口变为低电平,也就是说,当单片机端口检测到端口电平由高电平变为低电平后,可以判断为按键按下。
这种按键检测电路的缺点是没有防抖动功能,所以要实现消抖功能,必须通过单片机软件编程实现。
另外,电路中的电阻的作用是为了保护端口,避免电源直接连到单片机端口导致的烧毁端口情况发生。


2、带消抖功能的按键检测电路

图2是带消抖功能的按键检测电路,同样的,带消抖功能的按键检测电路也分为按键平时处于高电平还是低电平两种。我们以按键未按下时处于高电平,按下后处于低电平为例来了解一下电路原理。
2fe00d2ba2bb42e69ed48f0e19170973?from=pc.jpg
图2 硬件消抖电路

当按键断开时,电源电压通过电阻对电容充电,电容上的电压与电源电压相等,当按键按下时,由于按键内阻很小,电容通过按键迅速放电,按键两端电压迅速降到接近0V,单片机输入端为低电平,在按键按下时,由于抖动导致按键会短时断开,电源电压经电阻对电容充电,由于电阻的阻值较大,短时间内电容充电量很少,所以电容两端电压基本不变,单片机输入端的电平也基本保持不变,从而保证了按键抖动时仍可以使单片机输入端保持稳定的低电平信号。
3、简单的LED驱动电路

图3是一种简单的LED驱动电路。这两个电路一个是LED发光时,电流经过LED流到单片机端口,俗称“灌电流”驱动LED,另一种是LED发光时,电流经过单片机端口流到地,俗称“拉电流”驱动LED。
182d822c9a064eaabb59f334f5bf4499?from=pc.jpg
图3 LED驱动电路

这种电路的缺点是:单片机的驱动能力有限,一般单片机端口驱动电流能力在10mA以下,并且单片机总的驱动电流一般不超过100mA。所以当单片机电路中电路模块较多时,可能会导致驱动能力不足,因此这种方式只适合在学习和实验时,不适合用在单片机产品中。

4、通用LED驱动电路

图4,图5是常用的LED驱动电路。在这两个电路中,单片机端口实际上相当于开关的功能,当单片机输出高(或者低)电平时,LED点亮(或者熄灭);当单片机输出低(或者高)电平时,LED熄灭(或者点亮),驱动LED发光所需的电流由三极管提供,单片机端口只负责控制三极管的导通或者截止就可以了。
54a1695f34c9405fbb8dcc700c9262d5?from=pc.jpg
图4 LED驱动电路1

ad7fc9a3c43545809d201921be1580eb?from=pc.jpg
图5 LED驱动电路2

5、LED驱动芯片
现在有很多专用的LED驱动芯片,可以直接驱动多路LED,至于LED驱动芯片的电路,每种芯片有各自特点,这里就不多说了。

来源:老马识途单片机