欢迎进入合肥立瑞物资回收有限公司!

020-123456789

新闻中心

联系我们

合肥立瑞物资回收有限公司

地址:联系地址联系地址联系地址
电话:020-123456789
传真:020-123456789手机:020-123456789
新闻详情/News Detail

当前位置:网站首页>新闻中心

在货物监控设备的研发工作中如何驱动PT1206AC光敏二极管

时间:2024-05-12 13:49:56 阅读量:8 发表时间:2024-05-12 13:49:56

笔者最近在进行货物监控设备的货物何驱研发工作。我们的监控货物监控设备具有光线感应功能。可以在货物运输的设备过程中避免被拆箱和被偷盗。很多物流运输企业都会遇到货物运到了,研动箱子还在,发工货物却丢失了的作中情况,或是光管货物中的东西被掉包了。

这会给物流企业造成不小的敏极损失,尤其是货物何驱对于一些价格昂贵的运输物品来说,更是监控如此。而光线感应功能可以监测货物在运输的设备过程中,货箱内的研动光线强弱。货物在没有被开箱的发工情况下,光线强度几乎为而货箱一旦被打开,作中光线进入货箱内,光管光线强度可能会立即变成50或1这就可以确定货箱被打开了,货物监控设备就会发出警报提醒。可能小偷刚打开箱子,还没有偷拿货品,就已经被绳之以法了。

因此这一功能还是非常实用的。我们在进行产品这一功能的开发时,需要对PT1206AC光敏二极管进行驱动工作。为什么要使用PT1206AC光敏二极管呢?那是因为今年芯片短缺,所以光照传感器由光敏二极管替代以节约成本,保证供货稳定。相信很多产品研发人员都会进行相关的操作。以下为光敏二极管采集光照代码。

光敏二极管采用的是ADC的原理,所以使用光敏二极管进行光照强度测试,需要进行ADC初始化。

include""

//光照结构体

LsensInfo_tLsensInfo;

//初始化光敏传感器

voidLsens_Init(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

ADC_InitTypeDefADC_InitStructure;

//光敏二极管IO初始化

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

GPIO__Pin=GPIO_Pin_1;

GPIO__Mode=GPIO_Mode_AIN;

GPIO_Init(GPIOB,GPIO_InitStructure);

//ADC初始化

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2,ENABLE);//使能ADC2通道时钟

RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC2,ENABLE);//ADC复位

RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC2,DISABLE);//复位结束

ADC_DeInit(ADC2);//复位ADC2,将外设ADC2的全部寄存器重设为缺省值

ADC__Mode=ADC_Mode_Indepent;//ADC工作模式:独立模式

ADC__ScanConvMode=DISABLE;//模数转换工作在单通道模式

ADC__ContinuousConvMode=DISABLE;//模数转换工作在单次转换模式

ADC__ExternalTrigConv=ADC_ExternalTrigConv_None;//转换由软件而不是外部触发启动

ADC__DataAlign=ADC_DataAlign_Right;//ADC数据右对齐

ADC__NbrOfChannel=1;//顺序进行规则转换的ADC通道的数目

ADC_Init(ADC2,ADC_InitStructure);//根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器

ADC_Cmd(ADC2,ENABLE);//使能指定的ADC2

ADC_ResetCalibration(ADC2);//使能复位校准

while(ADC_GetResetCalibrationStatus(ADC2));//等待复位校准结束

ADC_StartCalibration(ADC2);//开启AD校准

while(ADC_GetCalibrationStatus(ADC2));//等待校准结束

}

//获得ADC2某个通道的值

//ch:通道值0~16

//返回值:转换结果

u16Get_ADC_Value()

{

//设置指定ADC的规则组通道,一个序列,采样时间

ADC_RegularChannelConfig(ADC2,LSENS_ADC_CHX,1,ADC_SampleTime_239Cycles5);//ADC2,ADC通道,采样时间为239.5周期

ADC_SoftwareStartConvCmd(ADC2,ENABLE);//使能指定的ADC2的软件转换启动功能

while(!ADC_GetFlagStatus(ADC2,ADC_FLAG_EOC));//等待转换结束

returnADC_GetConversionValue(ADC2);//返回最近一次ADC2规则组的转换结果

}

//读取LightSens的值

//0~100:0,最暗;100,最亮

voidLsens_GetInfo(LsensInfo_t*LsensInfo)

{

u32temp_val=0;

floatadcx=0;

u8t;

for(t=0;tLSENS_READ_TIMES;t++)

{

temp_val+=Get_ADC_Value();//读取ADC值

delay_ms(5);

}

temp_val/=LSENS_READ_TIMES;//得到平均值

printf("ADC_Val:%d\r\n",temp_val);

adcx=temp_val*(3.3/4096)*1000;

if(adcx3)adcx=0;

printf("adcx=%.2fmv\r\n",adcx);

LsensInfo-result=adcx*2*4;

//if(temp_val100)temp_val=100;

//LsensInfo-result=(u8)(temp_val);

}



案例展示