予以初情 发表于 2024-1-26 10:44

HC32F005C6UA的ADC通道4的数据会影响到通道5的数据

本帖最后由 予以初情 于 2024-1-26 10:45 编辑

大家好,我在做项目时发现,HC32F005C6UA的ADC通道4的数据会影响到通道5的数据。希望大家帮忙看一下,不行就改板不用通道5了。HC32F005C6UA 开启 ADC 扫描模式, P34 ADC 通道 4 , P35 ADC 通道 5


通道4上的100K的NTC没插入前,通道5的数据正常,插入后通道5的数据随着通道4的NTC阻值变化而变换以下是初始化程序:
void Adc_Det_Init(void)
{
    stc_adc_cfg_t             stcAdcCfg;
    stc_adc_scan_cfg_t      stcAdcScanCfg;
    stc_adc_irq_t             stcAdcIrq;

    DDL_ZERO_STRUCT(stcAdcCfg);
    DDL_ZERO_STRUCT(stcAdcScanCfg);
    DDL_ZERO_STRUCT(stcAdcIrq);

    Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, TRUE);//ADCBGR 外设时钟使能

    Adc_Enable();
    Bgr_BgrEnable();    ///< BGR必须使能

    stcAdcCfg.enAdcOpMode = AdcScanMode;               //扫描采样模式
    stcAdcCfg.enAdcClkSel = AdcClkSysTDiv1;            //PCLK
    stcAdcCfg.enAdcSampTimeSel = AdcSampTime8Clk;      //8个采样时钟
    stcAdcCfg.enAdcRefVolSel = RefVolSelInBgr2p5;      //参考电压:AVDD
    stcAdcCfg.bAdcInBufEn = FALSE;                     //电压跟随器如果使能,SPS采样速率 <=200K
    stcAdcCfg.enAdcTrig0Sel = AdcTrigDisable;          //ADC转换自动触发设置
    stcAdcCfg.enAdcTrig1Sel = AdcTrigDisable;
    Adc_Init(&stcAdcCfg);   

    stcAdcIrq.bAdcIrq = TRUE;                            //转换完成中断函数入口配置使能
    stcAdcIrq.bAdcRegCmp = FALSE;
    stcAdcIrq.bAdcHhtCmp = FALSE;
    stcAdcIrq.bAdcLltCmp = FALSE;
    Adc_CmpCfg(&stcAdcIrq);                              //结果比较中断使能/禁止配置

    stcAdcScanCfg.u8AdcScanModeCh =ADC_SCAN_CH0_EN
                                     | ADC_SCAN_CH4_EN
                                     | ADC_SCAN_CH5_EN
                                     | ADC_SCAN_CH7_EN;
    stcAdcScanCfg.u8AdcSampCnt = 0x3;                   //连续扫描转换次数,保持通道的倍数,4通道 = 0x3+1(1倍),或者7+1(2倍)……
    Adc_ConfigScanMode(&stcAdcCfg, &stcAdcScanCfg);

    Adc_EnableIrq();                                     //中断使能
    EnableNvic(ADC_IRQn, IrqLevel3, TRUE);
}

///< ADC 中断服务程序
void ADC_IRQHandler(void)
{
    static unsigned char u8Channel = 0;
    if (TRUE == M0P_ADC->IFR_f.REG_INTF){
      Adc_ClrRegIrqState();
    }

    if (TRUE == M0P_ADC->IFR_f.HHT_INTF){
      Adc_ClrHhtIrqState();
    }

    if (TRUE == M0P_ADC->IFR_f.LLT_INTF){
      Adc_ClrIrqLltState();
    }

    if (TRUE == M0P_ADC->IFR_f.CONT_INTF){
      Adc_ClrContIrqState();
      heat_para.adc_det_sta = TRUE;
      for (u8Channel = 0; u8Channel < 8; u8Channel++){
            Adc_GetScanResult(u8Channel, &heat_para.adc_value);
      }
    }
}
谢谢大家了



wubangmi 发表于 2024-1-26 12:25

   stcAdcCfg.enAdcOpMode = AdcScanMode;               //扫描采样模式
    stcAdcCfg.enAdcClkSel = AdcClkSysTDiv8;            //PCLK/8
    stcAdcCfg.enAdcSampTimeSel = AdcSampTime12Clk;      //12个采样时钟
    stcAdcCfg.enAdcRefVolSel = RefVolSelInBgr2p5;      //参考电压:AVDD
    stcAdcCfg.bAdcInBufEn = TRUE;                     //电压跟随器如果使能,SPS采样速率 <=200K
    stcAdcCfg.enAdcTrig0Sel = AdcTrigDisable;          //ADC转换自动触发设置
    stcAdcCfg.enAdcTrig1Sel = AdcTrigDisable;
    Adc_Init(&stcAdcCfg);

初始化函数这么改试试,不出意外应该是有很大的改善

予以初情 发表于 2024-1-26 14:17

wubangmi 发表于 2024-1-26 12:25
stcAdcCfg.enAdcOpMode = AdcScanMode;               //扫描采样模式
    stcAdcCfg.enAdcClkSel = Adc ...

十分感谢,问题确实解决了{:handshake:}

ljfljfljf123 发表于 2024-1-29 15:47

怎么解决的,我也遇到了

xdvca 发表于 2024-7-31 22:44

插入NTC时,可能会引起电气干扰,影响到相邻通道的读数。尝试以下方法:

接地和电源滤波:确保NTC电路和ADC电路有良好的接地,减少噪声干扰。
使用滤波电容:在ADC输入引脚上加上滤波电容,减少噪声。
检查NTC接线:确保NTC接线正确,避免与其他电路产生干扰
页: [1]
查看完整版本: HC32F005C6UA的ADC通道4的数据会影响到通道5的数据