新闻中心
联系我们
合肥立瑞物资回收有限公司
地址:联系地址联系地址联系地址当前位置:网站首页>新闻中心
时间: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);
}