Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
单片机源程序如下:
- #define _ADC_C
- #include "Incfile.h"
- /***********************************************************************************
- 函数名称: u16 GetIVRefCode(void)
- 功能描述:获取IVREF的精确电压值
- 输入参数:
- 返回参数:
- *************************************************************************************/
- void GetIVRefCode(void)
- {
- DWordTypeDef dwTemp;
- WordTypeDef wIVRAdjAdc;
-
- wIVRAdjAdc.W=GetIVRef();
- // 检测IVRef校准值是否在范围内(1.3~1.5)
- if((wIVRAdjAdc.W <1614)||(wIVRAdjAdc.W>=1862))
- { // 存储的IVRef值右问题,设为默认值 1.4V@3.3V
- wIVRAdjAdc.W=1738L;
- }
- else
- {
- }
- // 计算IVR的电压值
- dwTemp.DW=wIVRAdjAdc.W;
- wIVRefValue.W=dwTemp.DW*3300L/4096L;
- }
- /***********************************************************************************
- 函数名称: u16 GetNtcAvgCode(void)
- 功能描述:环境温度采样值获取(采样16次取平均)
- 输入参数:
- 返回参数:0:Error
- *************************************************************************************/
- u32 GetNtcAvgCode(void)
- {
- u8 i;
- DWordTypeDef dwTemp0,dwTemp1;
- dwTemp0.DW=0;
- dwTemp1.DW=0;
- for(i=0;i<16;i++)
- {
- ADC_SetChannel_AIN6(); // 设置ADC通道为AIN6 T0
- DelayXus(100);
- dwTemp0.DW=dwTemp0.DW+GetAdcValue();
- ADC_SetChannel_AIN7(); // 设置ADC通道为AIN7 T1
- DelayXus(100);
- dwTemp1.DW=dwTemp1.DW+GetAdcValue();
- }
- dwTemp0.DW=dwTemp0.DW>>4;
- dwTemp1.DW=dwTemp1.DW>>4;
- if(dwTemp1.DW<dwTemp0.DW) return 0;
- dwTemp1.DW=(dwTemp1.DW-dwTemp0.DW)*NTC_REF_VALUE;
- dwTemp1.DW=dwTemp1.DW/dwTemp0.DW;
- return dwTemp1.DW;
- }
- /***********************************************************************************
- 函数名称: u16 GetVirAvgCode(void)
- 功能描述:红外温度采样值获取(采样16次取平均)
- 输入参数:
- 返回参数:
- *************************************************************************************/
- u32 GetVirAvgCode(void)
- {
- u8 i;
- DWordTypeDef dwTemp;
- DWordTypeDef dwVinAdc,dwIVRAdc;
- dwVinAdc.DW=0;
- dwIVRAdc.DW=0;
- for(i=0;i<16;i++)
- {
- ADC_SetChannel_AIN5(); // 设置ADC通道为AIN5 Vir
- DelayXus(100);
- dwVinAdc.DW=dwVinAdc.DW+GetAdcValue();
- ADC_SetChannel_IVR14(); // 设置ADC通道为IVR14
- DelayXus(100);
- dwIVRAdc.DW=dwIVRAdc.DW+GetAdcValue();
- }
- dwVinAdc.DW=dwVinAdc.DW>>4;
- dwIVRAdc.DW=dwIVRAdc.DW>>4;
- // 计算Vir的输入电压值
- dwTemp.DW=wIVRefValue.W;
- dwTemp.DW=dwTemp.DW*dwVinAdc.DW*1000L/dwIVRAdc.DW;
- return dwTemp.DW;
- }
复制代码
所有资料51hei提供下载:
InfraredThermometer_6D17_V01_20200406.rar
(2.6 MB, 下载次数: 153)
|