本厂储料棚区有一8m*6m大门,电机为三相1.5kw,涡轮减速传动,主轴配上下限位开关。开始安装的按钮和遥控开关大门,感觉不便,配上微波雷达感应和光感应开关,51单片机控制,现在一直在用。自动门大致要求都差不多:1有人车在雷达范围内,则自动开门。2无人车延时6s左右关门。3防夹人车。本电路用到6个io口,其中限位开关2个,光感和雷达用2个,输出正反转2个。接口用光电隔离器,一是电气隔离,再一电位易于匹配,用的24v直流继电器。以下是仿真图,代码等。其中第二代码是实战的,第一个参考状态机思想来的,也已仿真。
电路原理图如下:
单片机源程序如下:
- #include <reg51.h>
- #include <stdio.h>
- sbit upsw =P2^4;
- sbit downsw =P2^3;
- sbit radar =P2^2;
- sbit lightinduct =P2^1;
- sbit uprelay=P2^7;
- sbit downrelay=P2^6;
- void DelayMS(unsigned int x)
- {
- unsigned char i;
- while(x--) for(i=0;i<120;i++);
- }
- void main(void)
- {
- uprelay=1;
- downrelay=1;
- while(1)
- {
- if(downsw==0) //在下限
- {
- if(radar==1) //无雷光
- {
- uprelay=1; //保持
- downrelay=1;
- }
- else if(radar==0) //有雷光
- {
- uprelay=0; //上行开
- }
- }
- if(uprelay==0)
- {
- if(upsw==0) //上限到
- {
- uprelay=1; //上行停
- }
- }
- if(upsw==0&&downrelay==1) //上位
- {
- if(lightinduct==0|| radar==0) //有雷光
- {
- uprelay=1; downrelay=1; //保持
- }
- else
- {
- DelayMS(5000);
- downrelay=0; //下行
- }
- }
- if( downrelay==0) //下行
- {
- if(downsw==0) //若到下限
- {
- downrelay=1; //下行停
- }
- else if(lightinduct==0|| radar==0) //有雷光
- {
- downrelay=1; //下行停
- DelayMS(100);
- uprelay=0; //上行开
- if(upsw==0) //上限到
- {
- uprelay=1; //上行停
- }
- }
- }
- if(upsw==1&&downsw==1&& downrelay==1&& uprelay==1)
- downrelay=0;
- }
- }
复制代码 |