打印
[技术问答]

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

[复制链接]
1902|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
AD, ADC, HC, dc
本帖最后由 予以初情 于 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[u8Channel]);
        }
    }
}
谢谢大家了




使用特权

评论回复
沙发
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 ...

十分感谢,问题确实解决了

使用特权

评论回复
地板
ljfljfljf123| | 2024-1-29 15:47 | 只看该作者
怎么解决的,我也遇到了

使用特权

评论回复
5
xdvca| | 2024-7-31 22:44 | 只看该作者
插入NTC时,可能会引起电气干扰,影响到相邻通道的读数。尝试以下方法:

接地和电源滤波:确保NTC电路和ADC电路有良好的接地,减少噪声干扰。
使用滤波电容:在ADC输入引脚上加上滤波电容,减少噪声。
检查NTC接线:确保NTC接线正确,避免与其他电路产生干扰

使用特权

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

本版积分规则

2

主题

4

帖子

0

粉丝