void main()
{
while(1)
{
right;
start;
delay_1ms(3000);
stop;
delay_1ms(3000);
left;
start;
delay_1ms(3000);
stop;
delay_1ms(3000);
}
}
单片机at89s52 通过2803 驱动2个继电器,分别控制同步电机(交流220)火线和零线,实现电机正反转。见
程序和原理图。这是一个测试程序段,程序中的right left是电机转动方向,启动与停止均为3秒钟。
现象:
程序运行几遍后,就不能正常运行了,出现电机一直运转或一直停止,就是说程序停止了。单片机手动复位有时一次复位成功有时需多次才能复位成功,复位后又重复以上结果。
为了找到原因,采取了:2803和继电器单独供电、用带光耦的继电器模块、用三极管驱动继电器,但是一直如上结果。所说2083继电器单独供电,是说它们与单片机分别用两个电源供电,两个电源是不共用一个电源线的,是分开的稳压电源,但是共地。
最后发现:只要继电器不接负载,程序就能正常运行,此时可听到继电器按程序动作的声音,程序的延时基本准确,io口(原理图中p1.4 p1.5):当用2803时高电平输出是2v而不是近5v,低电平=0;当用三极管驱动时,情况同上;当用带光耦的继电器模块时,io 口高电平=4v。
怀疑是io口高电平所致,加上拉电阻,无效。怀疑继电器线圈反向电动势因素,线圈并联二极管,无效。将电机换成白炽灯泡(220v),程序能正常运行时间比电机的长很多,但最终还是发生同样结果:程序停止。
电机是8w的同步电机,220v,交流。
能想到的都做了,实在没有办法了,请高手大家们帮助解释:这是为什么?怎么解决?谢谢!
此帖出自
小平头技术问答
其实,硬件非常简单,只占用两条I/O口线,而且口线动作频率很低。这种情况完全可以用手动操作两个继电器,单片机内烧程序后两条口线接两支LED(串联电阻),看看电机部分不动作时LED发光是否符合你的期望,电机部分动作时LED发光是否符合期望。
在继电器触点上并联一个RC消火花回路,另外注意控制系统内各芯片的去耦,电源和PCB设计也有讲究,但不是初学者短期内能掌握设计的。
先谢谢!原理图有误,其实220v与VCC不共地,两个继电器一个接220火线一个接220零线。我接RC消火花电路试试,请问RC值选多大?如何接?再次谢谢!
一周热门 更多>