W STM32F105RCT6 mam dziwne efekty dzialania ADC. ADC jest ustawione wg. noty aplikacyjnej dla skanowania ciaglego. KOD:
Efekt działania jest taki, że pomiar na danym kanale "przenosi" się częściowo na kanał kolejny, tzn. przy napięciu bliskim 0V jest 26 na obu kanałach, a przy bliskim 3,3V na pomiarowym jest 4080, a na sąsiednim 120. Efekt ten narasta liniowo. Dotyczy to wszystkich kanałów. Zmiana częstotliwości próbkowania zmniejsza ten efekt, ale go nie eliminuje. Nie jest to tez wina nadpisywania zmiennych, pomiary woltomierzem też są zakłócane. Po wyczyszczeniu FLASHA pomiary są ok, więc nie jest to hardware. Nie mam pomysłu jak z tym walczyć, zakłócenia nie są bardzo znaczące, bo rzędu 2,5%, ale jest to co najmniej dziwne i chciałbym się tego pozbyć, jakieś sugestie ?[code]
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC1ConvertedValue;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = BufferLenght;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
/* Enable DMA1 channel1 */
DMA_Cmd(DMA1_Channel1, ENABLE);
/* ADC1 configuration ------------------------------------------------------*/
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 = BufferLenght;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 1, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 2, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 3, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 4, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 5, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 6, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 7, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 8, ADC_SampleTime_239Cycles5);
/* Enable ADC1 DMA */
ADC_DMACmd(ADC1, ENABLE);
/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);
/* Enable ADC1 reset calibaration register */
ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
while(ADC_GetResetCalibrationStatus(ADC1));
/* Start ADC1 calibaration */
ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
while(ADC_GetCalibrationStatus(ADC1));
/* Start ADC1 Software Conversion */
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
/* Test on Channel 1 DMA1_FLAG_TC flag */
while(!DMA_GetFlagStatus(DMA1_FLAG_TC1));
/* Clear Channel 1 DMA1_FLAG_TC flag */
DMA_ClearFlag(DMA1_FLAG_TC1);
Efekt działania jest taki, że pomiar na danym kanale "przenosi" się częściowo na kanał kolejny, tzn. przy napięciu bliskim 0V jest 26 na obu kanałach, a przy bliskim 3,3V na pomiarowym jest 4080, a na sąsiednim 120. Efekt ten narasta liniowo. Dotyczy to wszystkich kanałów. Zmiana częstotliwości próbkowania zmniejsza ten efekt, ale go nie eliminuje. Nie jest to tez wina nadpisywania zmiennych, pomiary woltomierzem też są zakłócane. Po wyczyszczeniu FLASHA pomiary są ok, więc nie jest to hardware. Nie mam pomysłu jak z tym walczyć, zakłócenia nie są bardzo znaczące, bo rzędu 2,5%, ale jest to co najmniej dziwne i chciałbym się tego pozbyć, jakieś sugestie ?[code]