• 注册 / 登录
  • 切换到窄版
  • 查看: 1043|回复: 0

    HC32F005C6UA的ADC通道4会影响到通道5的问题

    [复制链接]

    26

    主题

    26

    帖子

    124

    积分

    注册会员

    Rank: 2

    积分
    124
    发表于 2024-2-2 16:38:43 | 显示全部楼层 |阅读模式

    路线栈欢迎您!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 有丶意思 于 2024-2-2 16:42 编辑

    项目描述

    项目中发现HC32F005C6UA的ADC通道4的数据会影响到通道5的数据。HC32F005C6UA 开启 ADC 扫描模式, P34 ADC 通道 4 , P35 ADC 通道 5。
    1.png

    通道4上的100K的NTC没插入前,通道5的数据正常,插入后通道5的数据随着通道4的NTC阻值变化而变换。

    以下是初始化程序:
    1. void Adc_Det_Init(void)
    2. {
    3.     stc_adc_cfg_t             stcAdcCfg;
    4.     stc_adc_scan_cfg_t        stcAdcScanCfg;
    5.     stc_adc_irq_t             stcAdcIrq;

    6.     DDL_ZERO_STRUCT(stcAdcCfg);
    7.     DDL_ZERO_STRUCT(stcAdcScanCfg);
    8.     DDL_ZERO_STRUCT(stcAdcIrq);

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

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

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

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

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

    31.     Adc_EnableIrq();                                     //中断使能
    32.     EnableNvic(ADC_IRQn, IrqLevel3, TRUE);
    33. }

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

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

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

    47.     if (TRUE == M0P_ADC->IFR_f.CONT_INTF){
    48.         Adc_ClrContIrqState();
    49.         heat_para.adc_det_sta = TRUE;
    50.         for (u8Channel = 0; u8Channel < 8; u8Channel++){
    51.             Adc_GetScanResult(u8Channel, &heat_para.adc_value[u8Channel]);
    52.         }
    53.     }
    54. }
    复制代码

    希望大家帮忙看一下,不行就改板不用通道5了。

    网友给出的解决方法:

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

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

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|路丝栈 ( 粤ICP备2021053448号 )

    GMT+8, 2024-9-8 09:12 , Processed in 0.047763 second(s), 21 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表