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

Posted 瑞奇Ricky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在货物监控设备的研发工作中,如何驱动PT1206AC光敏二极管相关的知识,希望对你有一定的参考价值。

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

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

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

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

#include “lsens.h”

#include “delay.h”

//光照结构体

LsensInfo_t LsensInfo;

//初始化光敏传感器

void Lsens_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

ADC_InitTypeDef ADC_InitStructure;

//光敏二极管IO初始化	

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;

GPIO_InitStructure.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_InitStructure.ADC_Mode = ADC_Mode_Independent;	//ADC工作模式: 独立模式

ADC_InitStructure.ADC_ScanConvMode = DISABLE;	//模数转换工作在单通道模式

ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;	//模数转换工作在单次转换模式

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

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	//ADC数据右对齐

ADC_InitStructure.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

//返回值:转换结果

u16 Get_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 ));//等待转换结束

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

}

//读取Light Sens的值

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

void Lsens_GetInfo(LsensInfo_t *LsensInfo)

{

u32 temp_val=0;

float adcx=0;

u8 t;

for(t=0;t<LSENS_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(adcx<3) adcx=0;

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

LsensInfo->result = adcx*2*4;

// if(temp_val>100)temp_val=100;

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

}

以上是关于在货物监控设备的研发工作中,如何驱动PT1206AC光敏二极管的主要内容,如果未能解决你的问题,请参考以下文章

在货物监控设备的研发过程中,如何对设备进行电量采集?

在货物监控设备研发的过程中,如何对MT MC MLT进行判定?

在货物监控设备研发中,如何使Stm32 Boot实现程序的跳转?

货物监控设备研发过程中,如何实现GPS的数据转换?

在货物监控设备研发中,如何对单片机进行实时时钟配置?

货物监控设备研发中,光照传感器的应用