|
路线栈欢迎您!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 有丶意思 于 2024-2-2 16:42 编辑
项目描述
项目中发现HC32F005C6UA的ADC通道4的数据会影响到通道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]);
- }
- }
- }
复制代码
希望大家帮忙看一下,不行就改板不用通道5了。
网友给出的解决方法:
- 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);
复制代码
初始化函数这么改试试,不出意外应该是有很大的改善。
|
|