最近在用单片机做一个简单的门禁和开锁系统。使用的器件和电子模块包括STM32单片机、矩阵键盘、光耦隔离继电器(12V单电路)、电磁锁和RFID-
RD522射频模块和指纹模块。测试继电器时,发现12v继电器触发口高低电平与数字电子高低电平区分不统一。继电器的高电平需要4.5v触发,但我用的SM32 MCU的IO口只能输出3.3v的高电平,为了测试这个模块的质量,用了一个51单片机,引出了今天的话题。
测试中发现,继电器模块连接后,本应输出高电平的51单片机引脚直接拉低至3v。看到这个现象,我猜测出现这个现象的原因应该是IO口驱动能力不足。拆下继电器模块,用万用表测量继电器的阻抗,约为400欧姆。相对来说,显然是一个很大的负荷。
当晶体管导通时,P1端口输出0(低电平)。当晶体管关闭时,P1端口输出1(高电平)。当P1端口连接到负载RL时,当晶体管截止时,意味着内部上拉电阻与负载RL串联。RL两端此时真的能输出高电平吗?
答案不确定!根据电阻分压。Vout=VCC/(1 R/RL)只有当分母接近1时,输出才是高电平VCC。能输出高电平的条件是:RL R。而r固定在IO端口内部,是一个确定的值。我们可以得到串联电路中电流(驱动电流)的表达式。从表达式中我们可以看出,当负载较小时(电阻R较大),所需驱动电流较小,当负载较大时(电阻R较小),所需驱动电流较大。
#提高单片机的IO驱动能力
1.用低级非门组合驱动。单片机输出低电平时的驱动能力高于输出高电平时的驱动能力,单片机输出0,通过“非”门变为1。
2.外部三极管驱动电路。但是,需要注意的是,当驱动一些电感元件时,必须在电感元件的两端增加一个二极管来释放电流(放电二极管)。当三极管导通时,电感器件上一定有电流。三极管关断时,由于电感电流不能突然变化,如果不加二极管续流,电感上的电流会直接加到三极管上,很可能损坏三极管。