电路基础概念
数字电路和模拟电路
数字电路:0101010101,主要用于各种数字通信协议。
模拟电路:0.1V,1.7V,主要用于模拟信号放大电路、声音信号、连续变化的信号的处理、滤波电路等。
数字电路只有0和1的概念,并没有具体的多少伏电压,多少安的电流的概念,就只有一个参考电压,比如高电平是3.3V,低电平是0V,电路就会以很快的速度在3.3V和0之间跳变,没有中间状态,是离散的。 比如1.8V,在0V为0、3.3V为1的数字电路中就没有任何意义,1.8V代表0还是1?属于浮空,不确定电平。
而模拟电路则是具体的电压和电流,比如将0.6V±0.1V的正弦电压信号通过运放放大5倍,变成3V±0.5V的正弦电压信号;再比如我将声音信号通过三极管放大电路放大;再比如测量流过电机的电流在-2A到2A之间连续变化,这些电信号是有具体的电压/电流数值的,是连续的。
VCC和GND
VCC(Volt Current Condenser),就是电源电压、供电电压的意思。 GND(ground)就是地。 一块电池接入电路板,电池正极电压就是VCC,电池负极电压就是GND。
共地
在电路中,要判断一个电平信号的高低,就需要一个标准来判断,这个判断标准就是0电平(也叫地),要把同一个电源供电的所有芯片、模块电路的GND全部连在一起,这就是共地。
为什么要共地呢?
电池类型不同和电池化学反应等的差异都会导致电池负极的绝对电平不同,电池只管产生稳定的相对的电势差,并不能保证不同电池负极的绝对电平一样。 所以我们拿一根线把不同电池的GND连起来,就可以保证负极电平一样了。
任何功能+未共地=玄学现象。 例1:两个未共地的模块IIC通信,程序一切正常,串口却收到一串乱码。 例2:电机上层板发PWM控制下层驱动板驱动电机,电机毫无逻辑不受控制。 因为负极参考电平都不一样,就比如有a,b两套彼此独立的电路,a电路的0V是b电路的2.765V,当然出问题。
什么时候可以不共地? 当两个电路之间的信号传递不使用电信号时,可以不共地。比如后面讲到的光耦,把电信号转换成光信号通信,两部分电路就不需要共地。
LDO低压差线性稳压器

降压电路的核心是AMS1117-3.3,把外部输入的5V电压降压成3.3V。
AMS1117芯片的本质就是一块LDO(低压差线性稳压器),简称线性稳压器。 用一个极端简化的理解:ldo内部可以理解作一个自动调节的滑动变阻器,负载端电压大了就增大内阻;负载端电压小了就减小内阻。
用最简单的原理:不断调节电阻分压来实现降压稳压的目的。
易得LDO的工作效率:
输入输出压差越大,效率越低,发热越大;所以由此可见ldo的工作效率其实很低,输入输出的压差很大时,芯片会很热,实例:AMS1117-5.0芯片,把12V降压成5V,显然这样效率已经低于50%了,电路确实正常工作,但是AMS1117非常烫。
AMS1117-3.3,-3.3就代表OUT端输出的是3.3V。 AMS1117-5.0,代表降压后OUT端输出5V。
AMS1117有三个端口:IN、OUT、GND。(OUT口有两个引脚)
LDO最大的好处就是输出电压很平稳,由于输出端的电压是电阻分压出来的,所以输出电压几乎不会产生什么波动。
综上,所以ldo的作用:
- 经常用作产生一些信号处理电路的3.3V、5V基准参考电压;
- 给小功率电路提供电源电压(如stm32主控电路)。
- LDO芯片内部电路

TVS二极管(稳压二极管)
稳压二极管最大的作用通俗一点总结就是:保护电路,牺牲自己。
稳压二极管的伏安特性曲线:
稳压二极管利用的是二极管的反向击穿区,Uz是反向击穿电压,是定值,比如5V、50V等。u<Uz的部分就是稳压二极管的反向工作区。
反向工作区的电流会在很大范围内变化,理论上的范围是[Iz, +∞]; 而电压几乎不变化,基本就是Uz
那这意味着什么呢? 比如一个稳压二极管的额定电压是5V,那么把这个二极管并联到5V的电源电路里去;一旦电源供电波动,比如来了一个瞬时9V的尖峰噪声,9V超过了这个稳压二极管的额定电压,那么绝大部分的电流都会从稳压二极管流过,吸收掉这个尖峰,稳回5V,稳压二极管两端的电压一直都保持5V,与稳压二极管并联的回路也都是5V,起到了保护电路的效果。
再看LDO电路。
SMBJ5.0A和SMBJ3.3A就是两个TVS二极管,TVS二极管就是稳压二极管,一个稳压5V,一个稳压3.3V,属于安全电路,防止浪涌电压(突然升高的尖峰电压)
注意是二极管阴极接VCC,阳极接GND,要记清楚稳压二极管应该工作在反向击穿区,画原理图的时候千万不要搞反了。
DC-DC开关电源降压稳压电路&滤波电容的原理与使用
这里面最重要的一个元件是LM2596芯片。 LM2596是一款DC-DC开关电源芯片,它的作用就是降压。
DC-DC开关电源 那么它与LDO降压有什么不同呢? 不可能一直用L298N芯片内部的5V来给单片机供电,L298N不是专门用来降压的,L298N芯片也很贵。那怎么办呢?现在需要找一个其他的方案代替L298N降压。用什么方式呢?LDO?假如用12V电源5V驱动个大扭矩舵机,那估计带都带不动,而且LDO还会烫得冒烟。(LDO降压效率低,是类似于电阻分压式的降压,所以负载器件的功率如果很大就易发热) 那有没有不用类似电阻分压来降压的方法呢?而且降压效率很高的那种?
DC-DC,直流电-直流电,就是直流电转成直流电。 AC-DC就是交流电转直流电(整流器) DC-AC就是直流电转交流电(逆变器) DCDC开关电源(以下简称DCDC)与LDO的降压方式并不相同。 DCDC的原理与PWM的原理很类似,降压的DCDC开关电源可以草率理解为:一个带有反馈的,可自动调节的开关。
DCDC输入的是电源的恒定电压(比如锂电池的12V);
输出的是一种PWM,一种高电平为电源电压,低电平为0的PWM。
PWM就是由这个“开关”以较高的频率不断开和关产生的。
比如如果电池的12V不做任何处理,那么PWM的占空比是100%:U0代表电源电压,如下图:
假如想要6V电压,12V降压6V降一半,那么dcdc开关电源的PWM调节就开始起作用了,占空比是50%:代表DCDC的输出电压如下图:
上图可以很清楚地看见:占空比是50%的时候,相同时间内u与t围成的面积是占空比100%时候的1/2。
现在我们把高于U0/2的部分“砍下来”,填补到电压是0的“坑”里:
从能量守恒的角度达到了降压的效果,把电源电压U0降压到了U0/2。
但是在实际的电路中,“砍下来”和“填坑”的操作并不会仅靠一个DCDC开关电源就能完成,因为DCDC只能产生“大号PWM”,要么是12V,要么是0V,而我们理想波形需要的是平稳的6V,可以看下图,理想的波形和实际的波形还是有很大差距的:
为了得到平稳的理想波形,要做的就是滤波。
LM2596芯片的原理图,后缀-5.0V表示固定降压成5V。
LM2596-3.3,就是固定降压成3.3V
LM2596-ADJ,就是可调节的降压芯片。
ON/OFF是使能口,众所周知,因为ON上面带横线,所以代表低电平使能,所以直接接地,让芯片一直保持使能状态。
IN接12V,OUT接5V。
FB即feedback(反馈端),接输出电压,把输出的实际电压实时反馈给芯片,然后芯片自动闭环调节(有点类似于PID闭环调节)。
然后我们需要滤波:
提到滤波我们就要想起电容:
电容有储能和滤波的作用,所以在输出端加上电容:

一条非常重要的定理:电容两端的电压不能突变
《电路》中电容的基础公式:u是电容两端的电压,C是电容值,t是时间,i是流进/出电容的电流。
把上面的式子做一下变换:
电容在并联在输出回路里的作用就是实现上面说的“砍掉高的一截”,然后“填坑”;也就是储能,它可以将下图多出的这部分电能储存起来,然后在没有电压的时候放出来,就像初中地理学的湖泊的作用:枯水期补充河流,洪水期储存洪水。
一个合格的降压,不仅要输出稳定的电压,还要输出稳定的电流。
电容虽然限制了电压的波动,但是如果电流没有一个器件限制波动,那电流就会十分任性,在PWM高电平段时,因为此时“开关”是打开的,所以相当于12V的锂电池与后端5V的输出负载实际上是在极短暂的时间内直接导通的,但是电流没有器件能限制,所以电流随便突变,那么电池的电流会以:
12V/RL的极限电流输出给负载,RL是负载的等效电阻。
那么问题简化了:找个器件,能限制电流,让电流不能突变。
电感 电感的特点:电感两端的电流不能突变
电感是个线圈,高中知识电生磁,众所周知,线圈内流过变化的电流时会产生磁场。 而磁场也是一种能量存储的形式,电感可以把电能转化成磁能。
电感的加入正好抑制了给电容充电的电流的突变,让电流变得平和了:
但是上面这个电路还是有问题:电感在LM2596这个“开关”断开的时候并没有一个完整的放电回路
LM2596开关电源可以看作是一个开关,那么在这个开关断开的时间里, 电感左侧的线路断开了,并不能构成回路,这就导致电感内储存的电能无法释放,电感会让电流持续,如果没有放电回路,电感里储存的那些能量会产生很严重的很高的电压噪声尖峰,基本上会远超于输出额定电压,把流过的元器件都冲爆。
所以需要给电感一个续流的回路,让开关电源断开的时间里使用电感持续输出电流:
上图就是我们巧妙的解决方案,在开关电源断开的时候,用电感回路继续供电。
确定电感、电容和二极管的选型和参数:
对于电容电感的参数确定来说,需要参考对应的DCDC电源芯片的手册,里面都有详细说明;但LM2596芯片过于经典,所以本次可以不看芯片手册,电容容值和电感的感值采用经验值,对其定性分析即可。
上图完成了选型和取值
电容大小采用芯片手册推荐电路里的值:220uF(220微法),微法级别的电容就算容值很大的了,有很强的储能的能力: 这里可以理解为:电容容值越大就等同于湖的深度越深,调蓄洪水的能力就越强。 也就是,面对开关电源产生的“波涛汹涌”的大号PWM,电容容值越大,滤波作用越强。 如果我们要用电容主要来做储能作用,来对较大幅度的电压变化进行滤波,那我们就要选电解电容: 注意!这种电容是有正负极的,接反了会爆炸。
同理,电感感值越大,输出的电流会越平稳,从而输出电压也会越平稳。 手册推荐取33uH(33微亨),给它翻倍取个68uH,让电源稳如老狗。
电容和电感都不能盲目增大,盲目增大电容的话,主要是电容太大了,占空间,再大也没什么用;电感也不能盲目增大,太大的电感会让整个DCDC系统迟滞,造成一些供电问题。
二极管:SS54选型是肖特基二极管,又叫快恢复二极管。
普通的二极管在突然施加反向电压的时刻,会有很大的反向电流:
反向电流存在的这段时间就是反向恢复时间:
对于DCDC电路来说,二极管会遭受不断的、高频的正反向电压,一般的二极管在高频的正反向变化电压下,由于二极管反向恢复时间与开关电源关闭时间相当,所以二极管就会失去单向导电性,发生危险。
而肖特基二极管就可以避免这个问题,因为肖特基二极管的反向恢复时间非常非常短,只有ns级别。
到这里为止,基础的电路已经搭完了,这个降压稳压电路,我们又叫它:BUCK电路
104电容
这只是电路基础部分,还要加一些器件,让电路更安全。
104电容的意思:
XC是电容的容抗,f是电压的频率,C是容值。
众所周知,电容有隔直流,通交流的作用,所以就好理解这个公式了,交流电的频率越高,f越大,XC就越小,所以电容对这种高频电流的阻碍就越小,高频的噪声就从104电容流过而被消除了。
需要注意的就是电容的容量越大,因为制作工艺的原因,其高频特性越差,所以在面对高频电路时,常常需要用小容量的电容,(nf级和pf级)
所以104电容的作用就是消除高频噪声。
噪声就是电压曲线波动不平滑产生的毛刺。
PCB设计中,一般把104电容放在靠近芯片的位置,因为芯片(尤其是STM32、信号处理类芯片)是最怕高频噪声的,把104电容放在尽量靠近芯片的地方,被消除了高频噪声的干净电流就可以流入芯片了;
如果104电容离芯片很远,那高频噪声可能在被104电容消除之后再次出现,失去了滤波的效果了。
如下图,C2和C4就是104电容,芯片背面还有两个104,都离芯片非常近。
在buck电路里,一大一小两个电容相互配合,一个滤低频,一个滤高频。
同理,LDO电路里的这些电容的作用是一样的
现在把LDO电路也加到BUCK电路后面:
就得到了一个两级降压的电路,12V->5V->3.3V
最后,在左边也加入滤波电容,给输入的电源电压滤波;
接上锂电池接线口,电池就可以直接接线了。
最右边接个灯,电路工作一切正常的话,最右侧的灯就会正常亮了
附录:
1f=1000mf
1mf=1000uf
1uf=1000nf
1nf=1000pf
TPS5430
这里换了另外一款DCDC芯片,TPS5430。
可以发现主回路都有熟悉的电感、肖特基二极管,都是一样的。
只是信号部分比LM2596稍微有点复杂。
其中4号脚VSENSE就是反馈脚,相当于LM2596的FB,这里有些差异,这个TPS5430芯片的输出电压不是固定的,具体输出电压要调节R14和R15两个电阻来实现,TPS5430的芯片手册里:
两个电阻值是根据这个公式挑选的。
8号脚PH就是OUT,电压输出。
至于那个BOOT脚先不管就行,芯片手册让怎么接我们就跟着芯片手册学就行了,其他很多芯片也都是这样的,包括比如555定时器有一个脚一般都是固定接一个104电容的,照做即可。
DCDC还有最后一个重点那就是PCB布线:
因为开关电源流过的电流很大,一般用到的有1A~5A,所以走线都要尽量粗,但是过粗的走线也没有意义,一般是像上图一样刚好填满开关电源这一组器件的这一小块领域。
DC-DC开关电源升压稳压电路
buck电路学完了,接着学boost电路,怎么把5V升压到12V。
boost升压芯片:MT3608
MT3608芯片手册里的推荐电路图:
EN是enable的缩写,高电平使能,低电平休眠。
其中这个FB引脚连接的R1 R2电阻分压电路,通过上一节结尾TPS5430的经验,这两个电阻一猜就是确定输出电压用的,FB肯定也有固定的参考电压。
SW就是输出电压。IN就是输入电压。
升压电路的主回路当然就是:5V输入到IN,12V从SW输出
主回路的架构怎么理解?电感和二极管为什么放在这?
SW是一个开关,当SW断开时,左侧的5V可直接流入负载RL输出端
假如此时SW突然闭合:
左侧因为电感两端电流不能突变,所以上图标注的电流IL会从0开始逐渐增大
通过电感公式可以定性地知道,电感两端会产生一定的电压
因为开关闭合,所以开关上端直接与GND相连了,所以该点电压为0。
右侧电路。二极管D的左侧正极是0V,右侧还是5V,所以二极管反向截止。右侧还是保持5V因为电容两端的电压不能突变
片刻后,当电感电压达到峰值的瞬间,再次断开SW开关:
此时电感两端会带有一定的电压UL,那么二极管左侧的总电压是5V+UL,已经大于二极管右侧了,所以电流流入负载端,负载端电压超过5V达到12V
其实与上一节的原理是非常像的。
三个核心元件:电感、二极管、储能电容,三者缺一不可。
原理了解清楚了回到MT3608上:
电路基本就和原理演示图一模一样。
但要注意的是:boost升压电路得到的输出电压驱动能力很弱。
举个例子:假如以5V/20W的功率给自举电路供电,也就是5V/4A,那么由于boost升压芯片的效率肯定小于100%,所以得到的12V输出其实可用功率可能只有15W,也就是最大只有1.2A左右的电流,一般boost升压电路是专门给一些电压较高的轻负载、控制信号电路供电的,比如后续MOS管驱动电路的栅级驱动器的12V供电
继电器控制电路 & 光耦
继电器的作用实际上就是一个“电子开关”
机械开关是手动控制,那同理,继电器这个电子开关就是用电信号控制
这个“电子开关”的作用实际就是控制A与B导通还是C与B导通
上图的原理就是:
初始状态:由于B连着的弹簧的机械作用,把衔铁杠杆向上拉,A与B的触点相互接触,所以电磁铁不通电的时候,A与B连通,C是断开的。
现在将DE端通电,电磁铁绕的线圈通电产生使电磁铁产生磁力,把衔铁向下吸合,B就会与C的触点相互接触,B与C连通,A断开。
再来看继电器模块的简图:
上图是继电器模块(注意是模块,不是继电器单体)的原理图:
左边是继电器模块,右图是继电器单体,也就是模块上那个最大的蓝方块。
COM脚(common)公共端,也就是对应着上面图3:继电器单体结构图中的B端。
NC(close)代表常闭端,也就是不通电也是导通的一端,对应着图3的A端。
NO(open)代表常开端,也就是线圈通电才导通的一端,对应着图3的C端。
VCC和GND是给继电器线圈通电的电源和地。
IN端是控制口,由单片机GPIO输入一个高低电平信号,高电平线圈通电,低电平线圈不通电。
右图继电器的引脚,一共有五个,而继电器模块有六个引脚,多了一个IN口,IN口来控制继电器线圈供电,也就是控制了继电器的通断
但如果不加辅助电路,单片机区区一个电平信号控制不了大继电器的通断,所以需要外搭控制电路

- 继电器就是K1,可以看到元件图上5是com端,5与3相连,所以3是常闭端(NC)
- PC817是光耦
耦合:“信号的传递”,光耦:以光传递信号
左边是个发光二极管,右边是个光敏元件,可以接收到光信号,有光右边导通,没有光断开
为什么不用单片机推挽输出控制? 理论上可以。但举个例子,假如工程用的CPU非常昂贵,一块CPU一万块钱(有点夸大),这时候用这个CPU去控制一个200KV的高压电继电器(交流接触器)的通断开关,就问你敢不敢直接连。
所以为了完全分开高压高干扰的强电电路与低压小信号的弱电电路,光耦是个最好的选择,弱电这边控制一个小灯发光,强电那边用一个接受光的器件接受信号,做到了电路上的完全隔开,非常安全!
所以这个图,左边就是单片机的led电路,p0.8是某种单片机的一个引脚,推挽输出高低电平,控制光耦内部灯(和LED1指示灯)的亮灭,从而控制右边:三极管Q1的导通与关闭。(模电知识:三极管的基极必须接电阻,上图的三极管会分别工作在饱和和截止状态),三极管的导通和关闭又控制了线圈的导通和关闭,这样电路就会非常安全了
最后是1N4148二极管,1N4148是最普通的普通二极管
因为继电器的线圈本质上就是一个电感,电感的电流不能突变,所以线圈在关断的瞬间也需要续流。
1N4148是个续流二极管,由于继电器并不像boost电路那样需要高频地开和关,打开就“啪”的一下,不工作了就关掉,所以用不到肖特基二极管,普通二极管即可。
继电器开关在目前项目中用的很少,一般都用MOS管代替
GPIO八种输入输出模式
==浮空输入 上拉输入 下拉输入 模拟输入 推挽输出 开漏输出 复用推挽 复用开漏==
浮空输入、上下拉输入
- GPIO的输入模式怎么读取IO口信息:正常的GPIO口内都有可以读取当前IO口电平的寄存器 PA0口为例,可以用PAin(0)函数来读取PA0是高电平还是低电平
如果PAin(0)=1则为高电平,PAin(0)=0就是低电平
其次,在所有的输入模式下,都可以近似看作没有电流流入IO口内。 意思就是输入模式下的IO口不会对外部电路的功能有任何影响,不需要对其做任何模拟电路上的分析 IO口的输入就像探针一样,接在电路的任何位置不会对电路产生影响
- 浮空输入
IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。
下图这个电路,单片机PA0连接着一个按钮,按钮左侧是高电平。
如果把PA0配置为浮空输入,按下按钮时,PAin(0)应该为1;但松开按钮后,PAin(0)不一定=0,因为浮空输入在不与任何外部电路连通的情况下,电平未知。
也就是PAin(0)可能等于1也可能等于0.
所以浮空模式并不适用于按键电路
当外部电路不会让IO口成为高阻态的时候,可以用浮空电路
比如上图:
在按钮右边连了一个10k的电阻接地。
首先按下按钮时,PAin(0)=1,因为流过10K电阻的电流特别小,可忽略,所以VCC3.3通过10K电阻流向GND这条路几乎是断的。
所以如果一直按着按钮,PA0检测到的一直是1(3V3高电平)
当松开按钮,PA0也并不是高阻态了,这时PA0只跟GND相连,会迅速跟GND等电位,这样松开按钮后,PAin(0)=0 这个电阻就叫做下拉电阻
所以,下拉输入模式就是在单片机内部集成了这么一个电阻。
如果将下图PA0配置为下拉输入模式,
则松开按钮PAin(0)=0, 按下PAin(0)=1,可以正常运行。
同理,下图的10k电阻就成了上拉电阻
区分上拉还是下拉,就看通过这个电阻将电平拉到了1还是0,拉到1就是上拉,0就是下拉
上拉、下拉、浮空输入常用在按键、编码器正交接吗、uart通信的RX口、IIC通信的SDA输入状态、SPI通信接收口等,广泛用于数字电路的各种通信协议。
设计上下拉电阻电路时的电阻阻值选择原则: 为了节约芯片功耗,电阻应当足够大;电阻越大,电流越小,但电阻值也不能过大,通常在1k到10k之间选取。
推挽输出、复用推挽输出
推挽输出配合电路图:
上图是简化版推挽输出的电路(省去了三极管基极电阻)
当IN输出1时,三极管S8050(NPN三极管)饱和导通,S8550(PNP三极管)关断,IO就有了3.3V的输出。
当IN输出0时,反之,则IO就是0。
推挽输出是最常用的GPIO输出模式: VCC与IO之间没有电阻,所以推挽输出有一定的驱动能力,可以驱动LED灯,小电机等需要一定驱动电流(几十mA)的电路。 推挽输出的最大特点是可以真正能输出高电平和低电平,在两种电平下都具有驱动能力。
- 复用推挽输出就是推挽输出。复用的意思就是把IO口的控制权交给外设来处理。比如uart,串口1用了PA9作为TX端,配置为复用推挽输出,由UART外设自己控制PA9的电平高低。
开漏输出、复用开漏输出
类似的电路有开漏输出和开集输出
一个是MOS管,“漏”指的漏极;
一个是三极管,“集”指的是集电极。
由于用MOS管较多,就用“开漏输出”这个词代替了开漏输出和开集输出。
三极管搭建的等效电路图如下所示:
开漏输出的IO口相当于一个连到GND的开关,input为1时,开关闭合,0时打开。
开漏输出的功能很少使用,因为这个电路看似可以给Output端接任意大小的电压源,但是实际上STM32还是受不了的,,所以基本不用STM32的开漏输出。
复用开漏跟复用推挽一样,把IO口配置成开漏输出给外设使用。
STM32 GPIO电路图
首先看推挽输出的路径:
其中输出驱动电路:
寄存器信号传到输出控制电路,这个电路的控制方式与三极管推挽输出电路相同,只是换成了MOS管
如果是开漏输出就只用下面的N-MOS
这两个二极管是钳位电路,属于安全保护电路
VDD是电源电压,STM32中为3.3V
VSS就是GND
钳位电路会防止IO口输出的电压大于3.3或者小于0(负电压)
再看浮空输入、上下拉输入的路径
可以看到它们都经过了同一个元件:施密特触发器
TTL施密特触发器的作用:将模拟信号转化为矩形信号,标准化数字电平
(woc,有点像pwm的原理)
上拉电阻和下拉电阻,浮空输入的时候两个开关都断开,上下拉分别闭合对应的开关即可。
模拟输入
模拟输入是最简单的,不经过施密特触发器,直接输入原生态的电压。
电阻相关应用电路
限流电阻
为什么这里要连电阻而不是一根导线直接连过去?
限流电阻:顾名思义,限制电流的电阻
普通二极管的伏安特性曲线:
二极管接正向电压,通过的电流大小是随着电压的升高呈指数级增长的。
一般的二极管的导通压降都只有0.7V左右,如果在两端正向接3.3V将会烧坏二极管
这时串联一个限流电阻可以分走一部分电压,将二极管的压降稳定在0.7V,那上图的限流电阻就分走了3.3-0.7=2.6V电压,支路电流=2.6/220=12mA,可以使发光二极管正常亮
三极管基极电阻也属于限流电阻,三极管的输入特性曲线如下图所示:
可以看出来跟二极管的正向特性曲线是一模一样的,所以三极管的基极上都会有一个电阻(限流电阻)
电阻分压电路及应用
非常常用
原理:欧姆定律
用处2:调整参考电压 如果有一个2.5V±2.5V的正弦信号需要用ADC进行采样,但STM32的ADC量程只有0-3.3V。 可以接一个电阻分压电路,把5V量程等比例缩放到3.3V,这个2.5V±2.5V正弦信号的例子将是ACS712将要解决的
应用举例:
这里同时应用了电阻限流和电阻分压两种电路
BAT就是battery,接入一个3.7V的锂电池,右边的ADC1的标签就是电压采样点的意思,ADC1这里的电压就是0.5倍的电池当前电压
电流采样电路(检流电阻)
上面是怎么测电压,这里是怎么测电流
电阻采样法测电流:在需要测电流的支路上串联一个精密微小阻值电阻,电流流过这个0.01R电阻就会产生一个小压差,测量这个电阻两端的电压,得到的电压除以0.01,欧姆定律就可以算出当前的电流
真正使用时会用运算放大器把信号进行放大
放电电阻
放电电阻:用于电源电路中大电容的电荷泄放
DCDC降压电路图:与之前相比加了一个大阻值电阻R5
当锂电池突然断开连接时,C5电容里是充满电荷的状态,如果电荷无处泄放则会储存在C5里,有安全隐患 R5的初衷是泄放掉C5的电荷,防止电到人 但实际上断电后C5的电荷会被后级的电路快速用光,没必要加放电电阻
所以放电电阻用于电容断电后会完全隔绝无法泄放时的电路,直白的解释就是电源输出端没接任何负载的电路,没东西耗电,电就会一直存着
RC滤波电路
跟原先比加了R5和C7,构成了一个RC滤波电路
简单理解:在电源输入端像这样,串联一个电阻并联一个电容,就能使电源缓启动,且信号滤除干扰
RC首先可以防止通电一瞬间尖峰电压过大,除去尖峰;
其次也可以滤除高频噪声
可以看到如果不加RC,高频噪声会增多,而且通电瞬间会产生尖峰。
RC滤波电路的具体原理:
下图输入信号Ui经过一个RC滤波电路变成了Uo。
所以频率大于5kHz的噪声就会被RC滤波器滤,同时由于电容两端的电压不能突变,以及电阻的限流,可以避免通电瞬间电压出现尖峰。
RC滤波的应用除了在电源安全上,在信号处理中还有很多用处
锂电池 & TP4056充电管理电路
常用的锂离子电池,简称锂电池
里面是一节一节的下图这种18650电池组成的电池组
一节18650电池也被称作一个“电芯”,一节锂离子电池的标准电压是3.7V,满电状态下一节电池是4.2V,这两个参数很重要也很通用
所以我们常用的12V电池其实是个电池组,三节锂电池串联,也就是有三个电芯。三节电池串联的标准电压是3.7*3=11.1V,满电状态是12.6V 同理,两节锂电池串联,两个电芯,标准电压7.4V,满电8.4V
航模电池:
7.4V/11.1V,和上面的两节、三节锂电池串联起来的电压一样
2S 3S 4S:S就是series(串联)的缩写。
1100mAh/1500 mAh /2200 mAh
mAh是电荷量的单位,用于衡量电池的容量。1100mAh就是这个电源以1100mA也就是1.1A持续放电,把电放完要1小时。
为什么用航模电池
因为航模电池会配备这种特制充电器,可以对电池的每个电芯单独充电,防止每个电芯充电不均匀,导致电池寿命下降太快
- 针对于单节锂离子电池(标准电压3.7V)的电池充电管理电路:基于芯片TP4056
分为五个部分
锂电池输入接口
地分割,因为锂电池充电电流较大,把两种GND分割开来
TYPEC接口,但没有用到信号部分,只用来5V供电
TP4056充电电路
这个芯片的作用就是外部的5V从VCC输入,然后芯片内部自动降压为3.7~4.2V并从BAT口输出,给电池充电,自动适配单节锂电池的充电。
其中CHRG和STDBY引脚就是类似充电指示灯的作用
C1是旁路电容,C2是储能电容
R3、R4用于信号口的限流,起安全作用,很多芯片的信号口都会这样,接一个10K左右的电阻
R2 1.2K:
想让充电速度快一点,所以选1.2K,速度可达最快1A
电路用法:
- 在一些最高电平只需要3.3V的设备中可以用到TP4056芯片
- 当锂电池有电时,无论TYPEC接不接电源,TP4056的BAT端都会输出3.7V~4.2V,所以可以给BAT端串联一个LDO,降压到3.3V给后续电路标准电压。这是一种典型应用
数字地DGND,模拟地AGND,电源地PGND
有时电路里会有
AGND,PGND
地的分割:在电路设计中,为了降低不同的电路之间的相互干扰,所以会引入不同的地线,从而形成不同的0V参考点,为各个功能电路的电流分开提供各自的回路
(1)DGND,数字地
接触最多的地,比如单片机电路,I2C等数字通信电路等,在之前的电路设计中把DGND都简写为了GND
由于数字电路是010101的电平跳变:
所以数字电路的电压在快速变化,所以数字电路产生的电流也会快速变化。众所周知,电流都是由VCC经过负载之后流入GND的,单片机也算是一个小的负载,里面乱七八糟好多高速的数字电路都有0101的快速的小股电流突变,而这些电流最后都要汇入GND,GND再流回电路负极,也就是通过同一个出口离开这个电路板
这就导致DGND的GND平面很凌乱,很多小电流流过引起小信号的波动干扰,造成GND平面的参考电压有一些噪声
(2)AGND,模拟地
模拟电路比如ADC采样电路,DAC电路,运算放大电路等
这些电路的电流和电压都是慢速连续变化的,远没有数字电路那么“激烈”,而且电路常走的都是微弱电压信号,所以这就有一个要求: 模拟电路的地必须非常纯净!,不能有较多干扰的噪声 所以数字电路GND的电压波动噪声会导致模拟电路的参考电压不稳,可能导致模拟信号失真
(3)PGND,功率地
数字电路和模拟电路都是小功率电路,像电机驱动电路,自动加热电路这种属于大功率电路,在电机电路中,比如电机启动、急停,噪声都非常大。对数字电路和模拟电路都有较大影响,如果不加TVS元件控制,可能一个大负载电机刹车的噪声都能让输入电压反转
所以在设计电路时:
会有一个0R电阻,两边连两种GND,这就是单点接地,通过小电阻把不同的GND分隔开。通过0R电阻使两个GND之间只通过一个狭窄通道相连。
电流汹涌大小:功率地>数字地>模拟地

通俗理解就是:每种电路对噪声的要求不一样,所以要区分开
这种单点接地对于任何频率的信号都有衰减作用,可以有效限制噪声的传递。
ACS712电流检测电路
有时想检测某一条电路的电流,有什么合适的芯片?选型有以下要求: 1.希望电路要简便易用,不需要太复杂的电路设计 2.对于电流精度要求不是太高,到0.1A就行 → ACS712
ACS712是一款电流检测芯片,利用霍尔效应进行采样 电流垂直于外磁场进入半导体,垂直于电流和磁场的方向会产生一个附加电场,也就是有了电势差,ACS712就通过检测这个电势差来检测电流的大小。
阅读芯片手册:
阴影这句话说的是它的检测误差,在25°C时是1.5%fs
1.5%fs:fs(full-scale)满量程的意思,1.5%fs就是指检测误差是芯片检测量程的1.5%,比如检测量程是±5A,那误差就是(±5)* 1.5%=±0.075A。
可以发现ACS712并不是那么准,它的芯片有三种量程,分别是: ±5A、±20A、±30A, 则算出每种量程的误差: ±5 * 1.5%=±0.075A ±20 * 1.5%=±0.3A ±30 * 1.5%=±0.45A 所以一般就用±5A量程的,误差最小。
芯片的使用:
芯片一共有八个引脚,用法就是将芯片串联在待检测的支路里,电流从IP+流入,从IP-流出;电流反向的话,IP-流入,IP+流出也是可以的;VCC接5V,FILTER是滤波器,外接一个小电容进行滤波;VIOUT作为电压信号输出
VIOUT信号的具体输出值:
OUT与Ip(待测电流)的关系如上图所示,是线性的,中间值是2.5V,电流是负的代表方向是从IP-流向IP+。
05A规格的计算公式: Vout = 2.5 + 0.185 * Ip
20A规格的计算公式: Vout = 2.5 + 0.1 * Ip
30A规格的计算公式: Vout = 2.5 + 0.066 * Ip
设计电路:
一个问题:ACS712只能5V供电,而STM32的参考电压是3.3V
解决方法是使用电阻分压电路,通过两个电阻分压,把05V的基准等比例转到03.3V的基准
如图所示:
右边的MOT1和MOT01代表把电路串在了有刷电机回路里,可以测量电机的电流,两个104电容用来消除高频噪声
左边VIOUT输出之后经过了一个电阻分压电路,分压后的电压U3输入到运放LM358的同相输入端(3口),分压公式是:
运放的作用: 分压后输出的电压U3,经过了一个电压跟随器电路,最终图中AOUT口的电压完全等于U3;电压跟随器只是用于保证信号的隔离,避免外界噪声的影响
基于CD4051的模拟开关电路
如果是为了机器人应用没必要学习数电里门电路的应用
一种还算有用的芯片:模拟开关/多路复用器
以CD4051为例。
CD4051是一个八选一模拟开关芯片
下面是八选一模拟开关的测试电路:

八选一模拟开关是什么意思?
首先它是一个开关,这个开关有公共端,也就是3号引脚 I/O
有八个选择端:上图中的Y0Y7,所以这是一个电子的“单刀八掷开关”
Y1八路中的一路与公共端 I/O 导通
分路选择的控制方式:通过A2、A1、A0三个口,也就是上图中的C B A三个口,这三个口都能输入高低电平,也就是各能代表一个二进制位,三个二进制位正好表示八种状态。
八选一就是只能选择Y0
芯片手册里的真值表:
与原理图备注有区别,A2是C,A1是B,A0是A
INHIBIT是阻止的意思,6号引脚
INH脚低电平是芯片使能,所以原理图六号引脚接地

VDD是正功率输入,VEE是负功率输入,VSS是GND
VEE和VSS不一样↓ 全新概念:负电压 GND只是一个参考的零位,并不是绝对0V,有比GND电位低的点
这也是CD4051强大的地方,这个芯片同时结合了数电和模电,并且做好了它们之间的隔离,用数电电平来控制哪一路导通,然后模拟信号通过指定导通的回路。当模拟信号有负电压时,VEE≠VSS
比如CD4051要通过一个±2.5V的正弦波,那么VDD就要接2.5V,VEE要接-2.5V电压源,而VSS接GND也就是0V。GND是DGND,给数字电路部分用的,而VDD和VEE是给模拟信号用的
最后看整个电路图,因为只做简单的电路测试,输入03.3V电压,所以VEE和VSS都接AGND。
并且只接入了Y0和Y1两路
其中Y0只能介入03.3V的信号,而Y1路有个1/10的电阻分压,可以接入0~33V的大电压信号,同时出于安全,并联了一个3.3的TVS二极管
SGM3204电荷泵负压生成电路
- 关于如何生成负电压 电荷泵
电荷泵原理演示图
首先让S1和S4关闭:
飞跨电容的两侧有5V的压差
紧接着断开S1和S4,关闭S2和S3:
飞跨电容左侧与GND相连,变为0V,但是电容两端电压不能突变,所以之前Cf左右相差5V,这个差值无法瞬间改变,所以Cf右端变为-5V,实现负电压的生成
然后S2和S3断开,关闭S1和S4
如上图,此时S2的断开非常巧妙,把负压输出与前端电路隔开,负压由输出电容Co保持。
然后就是按照上面的步骤循环往复
常用的负压芯片是SGM3204,原理就是电荷泵
连接其实非常简单,输入端和输出端都配有储能电容和旁路电容,C27是个飞跨电容
TB6612FNG芯片 - H桥驱动电路
- 一个新的电机驱动芯片,在机器人开发中可以替代L298N
- TB6612FNG,简称TB6612,是一款双H桥电机驱动芯片,一个芯片可以带动两个直流有刷电机
H桥电路:两个NPN三极管 + 两个PNP三极管
但由于三极管能承受的电流较小,目前市面上电机驱动的H桥电路的开关管都换成了MOS管(场效应管),MOS管可以承受比三极管更大的电流。包括L298N和TB6612芯片内的电路 ,用的也是MOS管而不是三极管,由四个N沟道MOS管组成H桥 (MOS管与三极管的控制方法基本一致,可以先当成电子开关用)
再细分一下,这个H桥又叫做全桥电路,由两个半桥电路组成,比如下图左边两个MOS管构成一个半桥电路,右边两个又构成一个半桥电路。
在半桥电路中,上下桥臂不可以同时导通,因为同时导通会导致DCBUS和GND短路,烧坏电路;
所以下图,上半桥臂用PWM控制,下半桥臂就必须用上半桥臂的PWM的互补波形控制。

- TB6612和L298N的比较
TB6612:一般比赛 / 小项目
因为控制一个电机只需要一路PWM信号,省下了定时器的资源;
其次TB6612模块的体积更小。更容易集成到电路板上。
TB6612也有麻烦的地方,那就是接线会比L298N多一些
三个GND:右上GND是数字地,下面两个GND是功率地,接地的时候两个GND都要接。

VM:驱动电机的电压,最大15V,为了安全最大接到12V
VCC:数字电平的参考电压,用stm32就接3.3V
PWMA、PWMB:两个电机的控制信号,TB6612一个电机只需要一路PWM控制
AIN1、AIN2:控制电机1的方向,AIN1=1,AIN2=0则电机正转,AIN1=0,AIN2=1则电机反转。
BIN1、BIN2:控制电机2的方向,同理
AO1、AO2分别接电机1的两端,BO1和BO2分别接电机2的两端
STBY:(standby)待命状态,需要接高电平(3.3V),代表电机驱动为待命状态,可旋转;当STBY=0时,有信号输入点击也不会转
将模块电路集成至电路板
首先通过芯片手册里的芯片引脚图可以知道,GND做了分割分成GND和PGND,所以设计电路也要做好分割;
然后由于TB6612控制一个电机的方向需要两路IO口,比较浪费,所以设计了两个非门电路:
两个三极管都工作在饱和状态,当开关用,只有AIN1和BIN1接到单片机的两个IO口,分别控制两个电机的方向。
当AIN1=1时,三极管导通,AIN2=0,电机正转;当AIN1=0时,三极管关断,AIN2处上拉,AIN2=1,电机反转。
图中R21和R22是上拉电阻
R24和R25是基极限流电阻
限流电阻和上拉电阻的值分别怎么取?
- 基极电阻:因为三极管的输入特性曲线和二极管的伏安特性曲线一样
如果不接限流电阻,Ube=3.3V,电流就会非常大,烧掉三极管
三极管工作在饱和状态所选用的基极电阻的阻值一般选1K-10K(为什么呢?)因为三极管工作在深度饱和状态下的话,三极管放大倍数就很低了,一般电流放大倍数hFE就是十几倍, 取hFE为10,设ic是10mA,计算得ib为0.001A 由于三极管的输入特性曲线,三极管的Ube压降在0.7V左右:
- 上拉电阻:一般都取10K
所以有了这个非门电路,单片机就可以不用接AIN2和BIN2了,省下两路IO口
PWMA、PWMB、AIN1、BIN1四个口直接连到单片机对应的IO口
两个编码器电机的接口,AO1、AO2接电机1的两端,BO1、BO2接电机2的两端;VCC5和GND是给编码器供电的;CDDE_XA和CODE_XB是编码器的AB相,分别接到单片机对应正交解码的IO口。
这两个电容需要尽量靠近TB6612FNG芯片,一个是大容值铝电解电容,一个是100nf的小电容
- 大电容用于储存电荷,比如电机起转时需要一个很大的电流,这个时候电容就可以快速及时地利用储存的电荷形成大电流供给点击用。
- 104小电容放在芯片的VCC引脚旁边,作为输入数字参考电压源的滤波电容滤除高频噪声
TB6612在布线时走线的3D图和2D图
可以看到下面这一排线都很粗,都使用了铺铜走线,因为电机的电流直接流过这几个引脚,所以布线要尽量粗;上面那一排除了DCBUS都是信号线,走线就可以很细
MOS管的选型、经典应用电路及栅级驱动器的使用
- MOS管的应用
简单概括模电里讲的MOS管的工作原理:栅级g不与其他两级导通,通过给g一定的电压,使g与B形成电场从而把电子吸到s与d连接处形成沟道
N-MOS和P-MOS原理图画法的区别:
- N-mos的小箭头是往栅极里面指,而P-mos的小箭头是往栅极外面指。
- N-mos的寄生二极管是从源极指向漏极的,P-mos相反。
先说N-MOS的应用,在实际电路中,无论是电机驱动、加热电路等大电流驱动电路,还是信号通断的小电路,N-MOS都用的比P-MOS多
- 电路中,可以把MOS管看作一个电子开关。 MOS管比继电器和光耦等其他开关元件的优点:
- 开关频率高,一般mos管的开关频率都在几百KHz,这是继电器无论如何也达不到的高频率,频率高的好处就是可以放大高频的PWM信号。通过单片机PWM控制mos管的栅极,从而控制更大的电压产生电压更大、电流更大的PWM,用这个大电压电流的PWM去控制电机,加热电阻等
- 通过电流大,这是光耦也无法企及的。50A、100A大电流对MOS管来说很正常
- N-MOS管的导通条件:
随便找一款MOS管为例,要了解这个mos管的各项参数。
首先右边有个小表,有三个参数:
VDS:100V,VDS就是漏极与源极之间的最大电压。看上图N-MOS的符号可知,N-MOS的寄生二极管正极是连着源极的,也就是MOS管在当开关用的时候,漏极电压必须大于源极电压,不然如果VS>VD,电流就全走寄生二极管了 RDS(on):是MOS管完全导通时DS之间的内阻,是2.5mΩ ID:漏极电流,也就是MOS管完全导通时从DS流过的最大电流,达到了180A
继续往下翻找其它参数:
VGS,最大的栅极电压
为什么是VGS,栅极电压VG与源极S有什么关系
因为N-MOS管很多时候都要接GND,N型MOS管的VG要比VS大,管才能导通。在实际应用中,源极经常接地,所以在源极S接地时,VGS就是VG,也就是栅极对于GND的电压
±20V是因为P-MOS的VGS要<0才能导通
再往下翻:
VGS(th)也很重要,是MOS管刚刚导通状态时的栅极电压。当栅极电压大于或等于VGS(th),MOS管会开始导通。如果想让MOS管完全导通,至少需要取3倍的VGS(th),但是不能超过VGS的最大允许值±20V,所以可以设置栅极电压VGS为15V或者12V,4~5倍于VGS。既保证了完全导通,又不会超过最大允许电压
那么怎么形成12V或15V的PWM呢? 这就要用到栅极驱动器 栅极驱动器(栅极驱动芯片)的作用就是将小电压信号转换成大一点的电压信号,但也只是大电压信号,并没有驱动能力,所以栅极驱动器专门用于给MOS管的栅极提供合适的电压,比如: STM32输出的PWM高电平是3.3V,经过栅极驱动器,就可以输出高电平为12V、15V的大电压PWM信号。
EG3014
一款栅极驱动器:EG3014

为什么有两个N-MOS管:
排除两个mos管之外的所有电容、电阻元件得到:半桥电路
因为大功率mos管很多都是用于控制电机的,而电机就需要用到桥式驱动电路,所以栅极驱动器为了方便驱动也这么设计,一次驱动两个mos管
- 芯片用法: HIN、LIN用于输入两路3.3V的PWM信号,分别控制两个N-MOS管。 HIN控制半桥电路上端(高端)的MOS管(H就是high的意思); LIN控制半桥电路下端(低端)的MOS管(L就是low的意思)。 HO连接高端mos管的栅极; LO连接低端mos管的栅极。 芯片的VCC就是想把PWM的高电平设为多少,上图典型电路接的VCC是15V。接个12V也是可以的,这样放大出来的PWM,高电平就是12V。
从硬件层面分析典型电路上的电器元件的作用:
R2是栅极电阻:
栅极必须串联一个电阻,用于缓冲信号的冲击,一般取10欧以内,典型值是2.2Ω,属于安全防护电路。
D2是反向二极管:
用于电荷的快速泄放,栅极信号变至低电平时,电荷可以通过反向二极管更快速泄放出来,属于安全防护电路。
C4是旁路电容,用于消除高频噪声,老朋友了。
VB和VS的作用
假设上图是H桥电路的左半部分,OUT端连着电机。电机和右半部分桥没画出来
假设此时+Vin是48V,这时让高端MOS开启,低端MOS关闭。
时简单分析即可知,此时OUT端的电压就是+Vin的电压,48V。
那这就有个大问题:N型MOS管的导通条件是VGS>0,现在栅极电压是12V,源极电压是48V,VGS<0。
这个高端mos管只要一导通,VGS就<0,马上又关断了
而且低端MOS就不存在这个问题,低端的源极电压始终保持在0。
解决这个问题就用到了自举升压电路 芯片内部有一个升压电路,可以将高端输出HO的高电平抬高
而这个升压电路就要用到剩下的那两个口了:
手册对于这两个口的解释:VB是高端悬浮电源;VS是高端悬浮地端。
高端就是半桥电路上面的那个MOS管。
VS接两个MOS管中间,也就是高端MOS的悬浮地,在高端MOS管看来,OUT口这里的电位就是它的地,所以VS接这里,然后通过串联一个电容,另一端接到VB。
上图,其中C2是电荷泵。
电荷泵是一种DC-DC电压变换电路,这个电容的参数选型很有讲究:
首先,这个电容的耐压必须要是两倍于Vin电源电压的,也就是这个电路如果电源电压是48V,那电容选型就要选100V耐压的,所以电容封装也会相应增大,一般选1206封装的无极性电容
其次,这个芯片手册图标注也有问题,这里要选无极性电容,而不是极性电容。
第三是电容容值的选型,这个跟选的MOS管的参数有关:先返回这个MOS管的手册,去找一个参数:
QG是栅极总电荷,也就是栅极充满电之后能储存多少电荷。
电荷泵自举电容的计算由自举电容选取经验公式求得。
- PWM的控制方式: 由于半桥电路工作时,高端MOS打开,那低端MOS就必须关断,反之也是,总之工作时两个MOS必须一开一关。这就对控制的PWM波形有要求,需要一路PWM波和一路互补PWM波。 这个互补pwm波去哪找呢?STM32的高级定时器就可以输出。STM32F103C8T6只有TIM1一个高级定时器,TIM2~4都是通用定时器。输出代码是后话。
接下来看一个自动加热电路:
看起来很复杂,还是用摘除法:
把ACS712那一大堆电路都去掉,最后发现就只有右边一个很简单的加热电阻供电电路,SSW-1P是一个安全开关,在电路故障时物理切断;
那剩下的元件就只有一个MOS管开关了,这个电路就比电机驱动简单多了,首先它不分高端和低端,不需要升压就可以驱动MOS管,所以这个栅极驱动器芯片的HO端就没接线,只用了LO端。‘
另外多了R9和D2
这两个元件是按照大功率电机的推荐电路补上的元件。
右下角的跳线帽是选择使用电池12V还是升压电路升压得到的12V。
这个电路就是上面讲到的那个开关电路的简化版,非常好用,可以带各种各样的大电流负载:水泵、水阀、直流电机、大灯、直流风扇,什么都行。