在之前那篇电路STC 纯硬件自动下载电路 - 三极管负脉冲电路 的基础上略微简化,把三极管换成了MOS 管,减少了一两个元件。原理的详细信息,比如RTS# 和DTR# 信号,参见那篇。
原理
主要的差别是把左边延时电路的三极管换成了MOS 管,原理还是一样的。然后就是改用一个NMOS 控制单片机的GND 来控制断电和上电,因为这么一来就可以直接把Q2 的输出连接到Q1 栅极,要是Q1 用PMOS 的话中间还得再加一个管子反相,就太蹩脚了。这么一来两个管子可以用一样的NMOS,也简化了BOM。图里用的2N7002 只是为了仿真方便,实际用的话随便找个Rds(ON) 更低的普通NMOS 就行。简单说一下工作过程。
首先,右侧的Q1 负责控制单片机的电源,C-Gnd 直接连接到单片机的GND 引脚。LED D2 和R2 只是仿真用的负载,实际电路中可以去掉。Q1 通过R1 上拉,默认导通,经过R3 拉低Q1 的栅极可以给单片机断电,和之前的电路一样,这里可以加一个手动按键开关下拉,用来手动复位。R3 不一定有必要,实际电路中可以看情况去掉。
Q2 周围就是电容延时电路。UART-RTS# 信号默认高电平,经过D1 和R5 给电容C1 充电。Q2 源极直接连接UART-RTS#,此时也是高电平,所以Q2 不导通,Q1 栅极高电平。当开始串口下载后,UART-RTS# 信号自动变为低电平,相应的Q2 源极也就是低电平,栅极是C1 被充起来的电压,所以Q2 导通,拉低Q1 的栅极,Q1 关断,单片机断电。
随后,C1 经过电容R4 放电,当然Q2 的栅极电容也经过R4 放电,一段时间后Q2 栅极电压降到足够低,Q2 关断,Q1 重新导通,单片机上电复位。这就是自动断电并上电复位的过程。
仿真
图中红线是UART-RTS# 的电压,绿色是C-Gnd 点的电压。可以看到,初状态RTS# 为高电平时C-Gnd 电压为0,也就是Q1 导通。当红线RTS# 下降时,C-Gnd 电压同时上升到接近5V,也就是Q1 已经截止。然后经过大概两百多毫秒,C-Gnd 电压又自动下降,表示Q1 又恢复导通,RTS# 仍然是低电平。
图里绿线没有等于5V 的原因和上面原理图里的LED D2 和R2 有关,因为这个电压就是靠它们拉上去的,实际中没影响,去掉D2 只留着R2 的话就能上升到等于5V 了。
本来还想录个仿真视频,有点麻烦,就算了。实际电路中需要考虑的就是C1 和R4 的参数,放电不能太慢也不能太快,之前那篇最后面也提了,断电时间最好在500ms 左右。这些参数还是实际电路搭好再调比较方便。仿真的时候R4 最好的取值是1MΩ,C1 是1uF,此时断电时间就是差不多500ms。