我新来的所以没分给大家望大家见谅,情况大致是这样的我想用接近开关来控制继电器 的我先给大家上图好理解我的意图!!
上面的是没有接线的图,下面为大家上传接好线路的图!
继电器模块是买的 是关电耦合的,我问卖家需不需要加uln2003卖家说不需 已经加三极管放大了的!所以继电器基本是没用问题的!
模块参数:
1.尺寸:75mm(长)*55mm(宽)*19.3mm(高)
2.体重:61g
3.PCB颜色:蓝色
4.板子四周带4个固定螺丝孔,孔直径3.1mm,方便安装及固定
5.继电器选用优质松乐继电器,单刀双掷。一个公共端、一个常开端、一个常闭端
6.光耦隔离,抗干扰性好
7.低电平吸合,高电平释放。吸合时状态指示灯亮,释放时状态指示灯灭
8.VCC为系统电源,JD_VCC为继电器电源。默认发5V继电器,插上跳线帽即可
9.继电器最大输出:直流30V/10A,交流250V/10A
接线说明:
VCC:系统电源正极
GND:系统电源负极
IN1--IN4:继电器控制端口
发货清单:
4路带光耦继电器模块一个(防静电包装)
接近开关型号是npn常开型 三根线的 兰的负极 棕色的正极 黑色的是信号线(是接io口的),买的时候都在店家一个一个的试过拉的!都是好的!所以也可以排除接近开关的故障!
【产品名称】:电感式接近开关
【型号】:LJ12A3-4-Z/BX 【工作电压】:直流6-36V 范围内通用 【输出形式】:三线 NPN 常开
【检测物体】:金属物体 【检测距离】:4毫米 【输出电流】:300毫安 【工作温度】:-20—50℃ 【外形尺寸】:直径12毫米 【线长】:约110厘米 【品牌】:沪工
现在上程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lj1=P3^0; //接近开关1
sbit lj2=P3^1; //接近开关2
sbit lj3=P3^2; //接近开关3
sbit lj4=P3^3; //接近开关4
sbit relay1=P2^1; //继电器1
sbit relay2=P2^2; //继电器2
sbit relay3=P2^3; //继电器3
sbit relay4=P2^4; //继电器4
void delay ( uchar x) //延时函数
{
uint y;
for (; x > 0 ; x-- )
for( y=500 ;y>0;y--);
}
void main() //主函数
{
P3=0xff; //让P1口全部为1 全部为真
relay1=1; //继电器1和继电器4都得同时为1断开
relay4=1;
delay(100); //延时函数
relay2=0; //继电器2和3都为0闭合 默认 继电器2和3 闭合控制的灯也是亮的
relay3=0; //
if(lj1==0) //如果接近开关1触发了为0那么继电器2就断开
{
relay2 = 1; // 当接近开关被触发 那么 reLay2 就断开,灯灭
if(lj4==0) //如果接近开关4触发了为0那么继电器3就断开
{
relay3 = 1;
if(lj1==0 && lj4==0) //如果接近开关1和接近开关4同时为0
{
relay4 = 0; //当继电器2和3都断开时 继电器4吸合
}
}
}
if(lj2==0)
{
relay1=1;
relay4=0;
delay(100);
relay2=0;
}
while(1) //循环程序 循环直至按下复位或者断电
{
if(lj1==0)
{
relay2=1;
}
if(lj3==0)
{
relay4=1;
relay1=0;
delay(100);
relay3=0;
}
if(lj4==0)
{
relay3=1;
}
if(lj2==0)
{
relay4=0;
relay1=1;
delay(100);
relay2=0;
}
}
}
程序就是这样的现在的问题是这样语句执行了但是继电器4不吸合灯不亮。
if(lj1==0 && lj4==0) //如果接近开关1和接近开关4同时为0
{
relay4 = 0; // 继电器4吸合
}
问题就在这里 当接近开关1和接近开关4同时为0时继电器relay4 = 0; 它怎么都不吸合!接近开关的指示灯都是亮信号还是给了单片机的看就是不吸合。当程序接着往下走时一直都很稳定继电器都吸合的很好!
整个程序就是
if(lj1==0 && lj4==0) //如果接近开关1和接近开关4同时为0
{
relay4 = 0; // 继电器4吸合
}
这个继电器4,relay4 = 0;不吸合!
程序一开始继电器2和继电器3都正常吸合,触发接近开关lj1继电器2 relay2= 1;断开
触发接近开关lj4继电器2 relay3= 1;断开
然后程序执行到
if(lj1==0 && lj4==0) //如果接近开关1和接近开关4同时为0
{
relay4 = 0; // 继电器4吸合
}
这里同时触发接近开关1和接近开关4,继电器4就是不吸合。
接着程序往下一直到while循环都是好的都是正常触发正常吸合!
现在面临这样的问题我已经是无解了办法也试了很多很多能想的办法都想了都试了可都还是不行!现在就是希望大家帮我分析分析感激不尽到底是怎么了。
|