轻触按键控制继电器的奇怪问题,有时按键按下时继电器动作一下瞬间又关断了,单片机STC12c5a60s2,io口通过ULN2803来驱动继电器,总计六个按键控制六个继电器,程序如下,
#include "STC12C5A60S2.h" #define uint unsigned int sbit KEY5=P2^5;//按键操作 sbit KEY6=P2^6; sbit KEY7=P2^7; sbit LED0=P1^0; sbit LED1=P1^1; sbit LED2=P1^2; void delay(uint a); void main() { LED0=LED1=LED2=0; KEY5=KEY6=KEY7=1; while(1) { if(KEY5==0) { delay(150); if(KEY5==0){LED0=~LED0;} while(!KEY5); } if(KEY6==0) { delay(150); if(KEY6==0){LED1=~LED1;} while(!KEY6); } if(KEY7==0) { delay(150); if(KEY7==0){LED2=~LED2;} while(!KEY7); } } } void delay(uint a) { uint i,j; for(i=0;i<200;i++) for(j=0;j<a;j++); }
代码看上去没问题。
是继电器内部打火产生的干扰
给两个方案
1单片机vcc并联1N4148二极管和1uf电容。
2每个继电器控制的外部设备并联1N4007二极管。
关断是什么意思,是又断开了么?
估计你的继电器还没有接什么负载吧。
如果你的电路没有问题,也有续流二级管。
这个可能的原因是你的电源的功率不够吧。继电器接通后,由于继电器只有线圈,电阻很小,电流会很大。从而拉低电压,导致MCU复位吧。
解决:
1、增加电源功率。
2、继电器电源处增加大的电容
3、继电器的先型要正确,你是继电器是脉冲的还是常开常闭的,看功能。最好不要长时间导通。
有問題的是
1. Code不完整,只有LED輸出? 沒有看到輸出給ULN2803的腳位,還是LED輸出也是接到ULN2803? 附上完整Code比較好解決問題
2. 可以的話附上電路原理圖,確定防突波Diode和各接線正確,且各元件需共地
以上可再討論喔
你按键按下,有相应反应,说明程序软件应该是可行的。但是动作的一瞬间继电器又关断说明是硬件的问题
建议
1、继电器前面加个好点的光耦,这种现象十有八九是干扰产生的
2、“轻触”这个。。加个按键防抖动
3、检查一下硬件电路板有没出现短路之类的问题