STC 纯硬件自动下载电路 - 三极管负脉冲电路

或者叫它延时上升电路。利用USB - TTL 芯片的RTS# 或者DTR# 信号让单片机自动断电复位。比较完整的串口电路参见:STC 串口下载电路 - CH340G USB转串口以及漏电隔离

原理

开门见山吧,搜了一圈好像没发现相同工作方式的电路。

STC 纯硬件自动下载电路 - 三极管负脉冲电路_第1张图片
注意Q3 是NPN,发射极向上画了,可能看着不太习惯。SW1 是手动触发的按键,并不必要。原理就是用PMOS 管控制单片机的供电C-VCC,电路触发时让单片机断电,然后自动重新上电,冷复位电路基本都这样。PMOS 管Q1 用R6 下拉默认保持导通状态。当PNP 三极管Q2 基极被下拉时,R6 上经过电流,电压上升,Q1 关断,单片机断电。用PNP 控制PMOS 的好处是未触发的时候这里不会有多余的电流。可以用SW1 按键手动下拉Q2 基极给单片机断电。

左半边NPN 三极管Q3 周围基本上是一个电容延时电路。UART-DTR# 是来自USB 芯片的信号,默认高电平,经过R8 和二极管D4 给电容C8 充电。R11 有分压的效果,但是阻值远大于R8,效果不明显。电容大致可以充到VCC - 0.6V,此时Q3 发射极是高电平,比基极还高,当然不导通。

UART-DTR# 到低电平时,D4 反向截止,C8 不会从这里快速放电。Q3 基极现在是电容正极电压,接近VCC,发射极是低电平,所以Q3 导通,Q2 基极被拉低,PMOS Q1 关断,单片机掉电。这时C8 主要经过Q3 放电,基极电阻R10 限流延时。放电大概会上百毫秒,C8 放完电后Q3 截止,连带Q2 也截止,PMOS Q1 恢复导通,单片机上电。这就是延时自动上电的过程,反映到波形大概是这样:

STC 纯硬件自动下载电路 - 三极管负脉冲电路_第2张图片

另外,两个三极管能起到类似达林顿的效果,防止PMOS 不彻底关断。100k 电阻R11 用来给电容一个彻底放电的通道,同时下拉Q3 的基极,应该能起到抗干扰,避免误触发的效果。1M 电阻R9 是为了消除仿真自动上电时看到的一个负电压尖峰,大概和MOS 管的寄生电容有关,能量应该很小,不至于造成什么麻烦,但是总之加个电阻保平安。元件的型号都没有特殊要求,图里只是举例。因为RTS#DTR# 信号的行为差不多,所以把控制信号换成RTS# 也行。

受到评论启发,用MOS 管改了个升级版的简化电路:STC 纯硬件自动下载电路 V2,我自己以后应该只会用这个简化版了。

DTR# 和RTS# 信号

大部分自动下载的电路设计都和这两个串口信号有关,不光是STC 的电路会用。之前听说过RTS# 信号是下载开始给个负脉冲,那就直接把RTS# 接过来就行了,但是并不能~ STC-ISP 软件编程时DTR#RTS# 信号是全程低电平,下载结束才恢复。大部分串口助手软件默认也是开启串口时DTR#RTS# 都拉低,关闭时才拉高。所以直连的话单片机会一直断电,无法完成下载。

用stcgal 的下载信号举例,这是个开源的STC 单片机下载工具。D0 通道是RTS#D1DTR#

在这里插入图片描述
可以看到两个信号是全程拉低的,STC-ISP 和这个一样。放大看的话两个信号还是稍有差异:

STC 纯硬件自动下载电路 - 三极管负脉冲电路_第3张图片
DTR# 相比RTS# 要滞后500us。这个行为stcgal 和stc-isp 也是统一的,所以也看到有人基于这个实现了另一种原理的自动复位,就是当RTS# 为低,而DTR# 为高时触发。这篇介绍的电路可能会无差别的被各种串口软件触发复位,相对来说这种原理可能更加稳定,避免一些串口助手开启串口时的信号产生干扰,但是也不是能完全避免,各种串口软件实现并不统一,反正多复位个几次也无所谓。另外推荐一下Coolterm,也是个串口助手,可以设置关闭DTR#RTS# 信号,这样就不会误触发复位了。

类似的,这两个信号有可能通过上位机设置来传递更专用的复位信号。比如stcgal 可以设置在下载时用DTR# 作为自动复位信号,如图:

在这里插入图片描述
下载开始后DTR# 信号被拉低了差不多500ms,然后自动恢复高电平。这样的话就可以直接DTR# 信号控制单片机断电上电,不需要多做处理。比方说stcgal 的文档里推荐用NMOS 管控制单片机的GND 来断电,栅极直接连接DTR#。用GND 开关是因为那样更彻底,不用考虑USB 芯片给单片机漏电导致断电不彻底的问题。但是~ 感觉这样一来单片机的地会飘起来,感性的认为这样可能对ADC 的精度不利[doge]。所以还是用PMOS 控制电源,USB 部分隔离处理一下就好了,可以参见STC 的文档。

注:电容放电时间过长

实际用的时候看到了和仿真不太一样的现象。如果延时电容C8 用的是电解电容,那么一切OK,但如果换成了陶瓷电容,就会发现很长时间后才能自动上电。测了一下电压,看到电容电压降到0.6V 以下后下降非常缓慢,此时左边的NPN 三极管Q3 大概是处于将断未断的状态,电容经过基极的放电电流很小,用电解电容没问题应该是因为电解电容漏电比较大,相当于并联了一个比较大的电阻到地。解决方案就是把R11 减小,换成10k,或者把电容换成1uF 应该也行。但是放电时间也不能太短,如果太短的话单片机掉电的时间就太短,可能无法正常触发掉电然后上电复位。按我自己板子上的经验,单片机掉电时间在500ms 左右比较好,如果小于200ms 效果就不可靠了。C8 使用了10uF 陶瓷电容,R11 用47k,测到掉电时间是四百多毫秒。

你可能感兴趣的:(Circuit,8051,单片机,嵌入式硬件,51单片机)