打印
[应用方案]

笙泉MG82F6D17额温枪MCU源码分享

[复制链接]
467|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
maqianqu|  楼主 | 2024-3-10 13:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


#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;
}


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

2255

帖子

2

粉丝