judy 在 提交
![judy的头像 judy的头像](https://cdn.eetrend.com/files/styles/picture200/public/letter-avatars/u-108.png?itok=R3QiYnQQ)
51内核的单片机有个比较恼人的特性就是复位期间,IO口呈高电平状态,万一IO口控制的设备是使用高电平触发的话,在复位的瞬间会造成设备触发。
总结一下接触过的解决方法:
1、把MCU换成别的体系的,譬如AVR、PIC等,这些单片机复位时IO口呈浮空高阻状态,不会造成触发。
2、使用反相驱动,MCU输出低电平反相成高电平再去控制设备。复位时的高电平反相后变成低电平,不会触发。这是比较常用的方法,稳定,但布线复杂了不少。
3、使用光耦隔离。光耦隔离后MCU也是输出低电平打开光耦再驱动被控设备,复位时的高电平不会打开光耦,不会造成误触发。
4、使用多余的IO口锁定,这种方法比较奇怪,在没用的IO口里挑一个出来接到NPN管的基极,再把NPN管的发射极接到被控的IO口,复位时所有的IO口呈高电平,NPN管导通,把被控的IO口强行拉低,相当于把被控IO口的电平锁定为低,避免触发被控的设备。这种方法必须配合软件,复位完毕后必须软件把接NPN管基极的那根IO置低电平,释放被控的IO口。这种方法比较少用,毕竟需要有多余的IO口,还必须加上三极管、电阻,布线复杂了不少,成本也增加不少。
5、使用滤波电容。在被控IO口对地之间接一uF级电容及K级电阻,类似缓冲作用。开机瞬间IO口通过电阻向电容充电,电平有一个逐渐上升的过程。只要电容及电阻的参数选择得当,那么复位时由于缓冲作用IO口还没来得及触发设备时那么MCU已经复位完毕把电平拉低了,这样也就避免了误触发。这种方法有一定限制,会造成设备的响应速度变慢,因此被控的IO口电平不能变化太快,否则由于电容的缓冲作用,设备无法有效控制。
来源:拓维博客