CH32V003F4U6多路ADC讀取數(shù)據(jù)干擾,求多路ADC讀取數(shù)據(jù)示例

我嘗試修改CH32V003F4U6 的CH32V003EVT\EVT\EXAM\ADC\ADC_DMA示例程序嘗試修改成多路數(shù)據(jù) 直接讀取ADC數(shù)據(jù)


首先測試單路數(shù)據(jù)A1? A0都是ok的,但是2個ADC同時采集,就會發(fā)現(xiàn)A1 通道的電位器會影響A0 ,A0通道讀取的數(shù)據(jù)和A1一樣。不知問題所在


#include "debug.h"


void ADC_Function_Init_demo(void)

{

? ? ADC_InitTypeDef? ADC_InitStructure = {0};

? ? GPIO_InitTypeDef GPIO_InitStructure = {0};


? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);

? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

? ? RCC_ADCCLKConfig(RCC_PCLK2_Div8);


? ? // A0 -> PA2? ?A1 -> PA1

? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_1;? //

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

? ? GPIO_Init(GPIOA, &GPIO_InitStructure);

/*

? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

? ? GPIO_Init(GPIOC, &GPIO_InitStructure);

*/

? ? ADC_DeInit(ADC1);

? ? ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

? ? ADC_InitStructure.ADC_ScanConvMode = ENABLE;

? ? ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

? ? ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

? ? ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

? ? ADC_InitStructure.ADC_NbrOfChannel = 2;

? ? ADC_Init(ADC1, &ADC_InitStructure);


? ? ADC_Calibration_Vol(ADC1, ADC_CALVOL_50PERCENT);

? ? //ADC_DMACmd(ADC1, ENABLE);

? ? ADC_Cmd(ADC1, ENABLE);


? ? ADC_ResetCalibration(ADC1);? //復(fù)位校驗寄存器

? ? while(ADC_GetResetCalibrationStatus(ADC1));

? ? ADC_StartCalibration(ADC1);

? ? while(ADC_GetCalibrationStatus(ADC1));? //等待校驗結(jié)束

}



u16 Get_ADC_Val_demo(u8 ch)

{

? ? u16 val;


? ? //ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_241Cycles);

? ? ADC_SoftwareStartConvCmd(ADC1, ENABLE);


? ? while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));

? ? val = ADC_GetConversionValue(ADC1);


? ? return val;

}


/*********************************************************************

?* @fn? ? ? main

?*

?* @brief? ?Main program.

?*

?* @return? none

?*/

int main(void)

{

? ? //u8 i=0;


? ? Delay_Init();

? ? USART_Printf_Init(115200);

? ? printf("SystemClk:%d\r\n",SystemCoreClock);


? ? ADC_Function_Init_demo();

? ? ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_241Cycles);

? ? ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_241Cycles);


? ? ADC_SoftwareStartConvCmd(ADC1, ENABLE);

? ? Delay_Ms(50);

? ? ADC_SoftwareStartConvCmd(ADC1, DISABLE);


? ? while(1)

? ? {

? ? ? ?// printf("A1=%d \r\n", Get_ADC_Val_demo(ADC_Channel_1));

? ? ? ? printf("A0=%d A1=%d\r\n", Get_ADC_Val_demo(ADC_Channel_0), Get_ADC_Val_demo(ADC_Channel_1));

? ? ? ?// printf("A0=%d A1=%d A2=%d\r\n",Get_ADC_Val_demo(ADC_Channel_0),? Get_ADC_Val_demo(ADC_Channel_1),? Get_ADC_Val_demo(ADC_Channel_2));

? ? ? ? Delay_Ms(100);

? ? }

}


您好,請問你是兩個采樣通道使用時都同時接了采樣源了么?若你兩個ADC通道都接了采樣源,正常是不會產(chǎn)生干擾的。若你兩個通道引腳一個接了采樣源,一個浮空,接了采樣源的通道會對另個產(chǎn)生影響,這個應(yīng)該屬于正?,F(xiàn)象,屬于ADC采樣通道間串?dāng)_,可以在兩個通道引腳都接上采樣源,這樣采樣結(jié)果就不會有問題,如下圖。后續(xù)若有問題,可通過郵箱和我溝通(lzs@wch.cn)

image.png


我嘗試修改CH32V003F4P6 的CH32V003EVT\EVT\EXAM\ADC\ADC_DMA示例程序

將PC4(A2)改為PD3(A4),A5,A6等都沒有問題。

唯獨改為PA1(A1),PA2(A0),顯示結(jié)果和電位器輸出沒有關(guān)系。請幫解惑。


我已經(jīng)78歲了,腦子也不太行了。

不好意思,打擾了。


我沒有用評估板,是自己焊的。

icon_jpg.gif1.png



佩服大叔一個 :)


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频