
光电开关(光电传感器)是光电接近开关的简称,它是利用被检测物对光束的遮挡或反射,由同步回路选通电路,从而检测物体有无的。物体不限于金属,所有能反射光线的物体均可被检测。光电开关将输入电流在发射器上转换为光信号射出,接收器再根据接收到的光线的强弱或有无对目标物体进行探测。多数光电开关选用的是波长接近可见光的红外线光波型。
光电开关是由发射器、接收器和检测电路三部分组成。发射器对准目标发射光束,发射的光束一般来源于半导体光源,发光二极管(LED)、激光二极管及红外发射二极管。光束不间断地发射,或者改变脉冲宽度。受脉冲调制的光束辐射强度在发射中经过多次选择,朝着目标不间接地运行。接收器有光电二极管或光电三极管、光电池组成。在接收器的前面,装有光学元件如透镜和光圈等。在其后面的是检测电路,它能滤出有效信号和应用该信号。此外,光电开关的结构元件中还有发射板和光导纤维。三角反射板是结构牢固的发射装置。它由很小的三角锥体反射材料组成,能够使光束准确地从反射板中返回,具有实用意义。它可以在与光轴0到25的范围改变发射角,使光束几乎是从一根发射线,经过反射后,还是从这根反射线返回。
光电开关一般都具有良好的回差特性,因而即使被检测物在小范围内晃动也不会影响驱动器的输出状态,从而可使其保持在稳定工作区。同时,自诊断系统还可以显示受光状态和稳定工作区,以随时监视光电开关的工作。
常用的是将光敏电阻放在三极管基极,和另一上拉电阻分压,根据光线的强弱不同可导通和接至。如果用AVR单片机的话感觉有点点浪费,不过还是给你设计下下,用的mega8:
#include <iom8vh>
#include <macrosh>
#define uchar unsigned char
#define uint unsigned int
/定义AD转换通道/
#define ADC0 0x00 //ADC0通道
/定义档位指示灯及电源指示和新风指示/
#define LED1_ON PORTC &=~BIT(1)
#define LED1_OF PORTC |= BIT(1)
/全局变量定义/
uchar adc_time = 0 ; //定义累加时间
uchar adc_num = 0 ; //用于AD通道选择的计数
uchar vlo_eer = 0 ; //用于检测光敏电阻的电灯点
unsigned int voltage;
unsigned int voltage1;
//端口初始化
void port_init(void)
{
PORTB = 0x00;
DDRB = 0xFF;
PORTC = 0xFE;
DDRC = 0xFE;
PORTD = 0x00;
DDRD = 0xFF;
}
// 定时器0分频: 8
// 定时初值 : 100uSec
// 真实定时值 : 100000uSec (00%)
void timer0_init(void)
{
TCCR0 = 0x00;//停止定时器
TCNT0 = 0x9C;//初始值
//OCR0 = 0x9B;//匹配值
TIMSK |= 0x01;//中断允许
TCCR0 = 0x02;//启动定时器
}
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
TCNT0 = 0x9C; //重装100us定时初值
adc_time++;
if(adc_time==10) //控制AD转换的速度
{
adc_time=0; //清零AD计数时间
ADCSRA=0xEE; //打开AD使能
ADMUX = ADC0 ; //选择ADC0通道
else
{
ADCSRA= 0x00; //关闭AD转换,这样做的目的是防止
} //AD转换过频而导致系统堵塞
}
// ADC初始化
// 转换时间 : 52uS
void adc_init(void)
{
//adc转换初始化
ADCSRA = 0x00; //禁止AD转换
SFIOR |= 0x00;
ACSR = 0x80; //禁止模拟比较器
}
unsigned int adc_calc(void)
{
//计算实际电压
unsigned long value=0;
unsigned int voltage1=0; //电压单位为(mV)
value=ADCL; //首先读低位
value|=(int)ADCH << 8; //然后读高位
voltage1=(value5000)/1023;
return voltage1;
}
#pragma interrupt_handler adc_isr:12
void adc_isr(void)
{
//转换完成后中断处理,对电压值进行区间划分
voltage=adc_calc();voltage=adc_calc();
if(voltage<XXX){vol_eer=0;} //欠压
if(vol_eer>XXX){vol_eer=1;} //过压
//其中XXX是你自己测试的电压值,什么时候亮LED就看他了。
if(vlo_eer==1) LED1_ON;
else LED1_OF;
}
//初始化服务函数
void init_devices(void)
{
CLI(); //禁止中断
port_init();
timer0_init();
adc_init();
MCUCR = 0x00;
MCUCSR = 0x80;//禁止JTAG
GICR = 0x00;
SEI(); //开中断
}
void main(void)
{
init_devices();
while(1)
{
;
}
}
对于你提的的问题,光电开关通过西门子plc 控制变频器没有反应?plc有输入 没有输出
首先你要知道 PLC程序的逻辑的什么样的,光电开关信号输入后经过怎么的逻辑然后输出,这个比较关键。因为每个人写的程序不同,控制逻辑不同,有没有输出你要知道这个控制逻辑是什么样的。
如果说你知道控制逻辑关系,并且程序条件都满足,PLC点还是没有输出,PLC点坏的可能性比较大,如果说共用电源的点没有输出,检查下电源。以上个人经验之谈,供你参考
计算机RS232串口的脚可以用作:
1、第4脚(DTR)、第7脚(RTS)可以作为数字输出(DO)使用,也可以一直接通与第5脚(GND)作为电源使用;
2、第1脚(CD)、第6脚(DSR)、第8脚(CTS)、第9脚(RI)可以作为数字输入(DI)使用。
把光电开关配上少量的二极管、电容(电源稳压)、电阻(限流保护)组成简单的电路,光电开关的电源线、地线接RS232提供的电源,光电开关信号线接第6脚(DSR)或第8脚(CTS),在C#不断检测MSCOMM32ocx 的DSR或CTS状态,状态发生改变即知道有东西通过,并在程序中相应处理。
所需电路可参看一本书《Visual Basic与RS-232串行通讯控制》,网上有PDF下载。
A B C D 四个区域
一一,一一一一 一一,一一一一 一一,一一一一 一一,一一一一 横线代表传送带
X2 Y0 X3 Y1 X4 Y2 X5 Y3 逗号代表传感器X
程序如下图:│╂│ 这个符号代表了常闭触点。││ 这个符号代表常开触点。
├──││┱─(m0)按下X0 后m0线圈得电
│ x0 │
├──││┹ mo线圈得电后mo的常开触点闭合自锁
│ m0
├──│╂│┱─││──(y0)如果没有任何东西因为所有的Y前面的X都是常闭触点,mo线
│ x2 │ m0 圈得电使得常开MO触点闭合,所以Y0到Y3都得电运转。
├──│╋│┹ 如果X2检测到物体而X3没有检测到那么Y0还是得电的,只有
│ x3 x2和x3同时检测到物体Y0才失电,也就是在B位置有物体时
├──│╂│┱─││──(y1) A位置的物体是不会被送到B位置上去的,同理可知下面的
│ x3 │ m0 几个位置也一样,当四个位置都有物体时四个电机都失电,
├──│╋│┹ 整条线都停止下来,此时把D位置东西拿走后,X5常闭触点
│ x4 会从原来的打开变为闭合(这里需要你自己搞清楚,为什
├──│╂│┱─││──(y2) 么用常闭触点,因为传感器无信号输入到PLC时,这个常闭
│ x4 │ m0 触点会保持闭合状态,传感器有信号输入时它会断开)X5常
├──│╋│┹ 闭触点闭合了就给Y3上电了,同时也给Y2上电了(为什么?
│ x5 自己看程序),此时就会把C位置的东西传送到D位置,C位置
├──│╂│┱─││──(y3) 空了就会接通B位置电机把B的物体送到C,依次类推!好
│ x5 m0 了,我不解释了,能看懂基本不需要解释,解释得就是给看不
懂的人看的!
以上就是关于光电开关是什么工作原理电路图全部的内容,包括:光电开关是什么工作原理电路图、用发光二极管和光敏电阻怎样组成一组光电开关啊,能在什么环境下使用啊急求使用avr电路与程序,谢谢、光电开关通过西门子plc 控制变频器没有反应plc有输入 没有输出等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)