Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: e-zeki - 03 Nisan 2020, 00:54:14

Başlık: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: e-zeki - 03 Nisan 2020, 00:54:14
Merhabalar. Bir proje üstünde çalışıyorum 6 kanaldan veri okumam, belli hesaplar yapıp 7 segment üzerinde göstermem lazım.
Dmadan veriyi çekiyorum sorun yok. Fakat herhangi bir gpio işlemi gerçekleşmeye başladığı an DMA verisi zıplamaya başlıyor. Inputlarda boşken vdd/2 giriş var +/- yapabilmek için. Dediğim gibi sadece DMA açıkken +- 3(4096) sekme var bu normal. Ama timer çalışmaya başlayınca ve segment taraması başladığı an +-100 e kadsr çıkıyor. Işlemci 72MHz Adc 4.5-8-9-12Mhz de denedim hepsinde aynı sıçrama var. İşlemci hızı düşerse sekme +-50ye kadar azalıyor fakat sıfırlanmıyor.
Böyle bir sorunla karşılaşan var mı daha önce?

Not: besleme gürültülerini kontrol ettim çok düşük. St link üzerinde beslediğimde de, dışarıdan beslediğimde de sonuç değişmedi.

Platform Keil mdk arm 5.26
Hal library f1 1.8
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: Mucit23 - 03 Nisan 2020, 02:05:55
Eğer ADC Referansınız VCC ise bu kadar sapma olması normal diye düşünüyorum. Harici referans entegresi kullanmanızda fayda var.
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: z - 03 Nisan 2020, 06:42:16
Şu videoya bir göz at.

Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: e-zeki - 03 Nisan 2020, 10:49:27
@z abi bu videonu izlemiştim daha önce, izlediğim hiç aklıma gelmedi bi deneyeyim.
@Mucit23 problem offset kayması değil, kayda da önemli değil benim için.
Asıl sorun z hocamın videosundaki gibi spike durumu.
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: e-zeki - 03 Nisan 2020, 14:18:33
Kodun tamamını kapadım. while dahil her yer boş. DMA'yı çalıştırıyorum ripple/sekme / gürültü vs. birşey yok. 2048+-2 düz çizgi gibi geliyor.
while içine var++; bile yazsam DMA verisi sekmeye başlıyor 2048+-70 aralığında gidip gelmeye başlıyor. gpio frekansını da denedim onunla da ilgili değil.
Harici bir besleme ile inputları besledim sonuç hiç değişmedi. :'(  :du:
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: bymrz - 03 Nisan 2020, 17:12:43
Hocam benzer durumu bende yaşıyorum. ADC verilerini sağlıklı şekilde alamıyorum. Sample rate lerinde ufak değişiklikler yapsam dahi sonucu etkiliyor.
Referans olarak ta VREF_INT i kullanıyorum, gerekli hesaplamaları yapıp ölçümü öyle değerlendiriyorum fakat özellikle besleme gerilimini dahi sağlıklı okuyamıyorum...

Umarım bir yerde hata yapıyoruzdur ve çözümünü bilen birisi vardır.
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: sessiz_roman - 03 Nisan 2020, 17:44:47
kod kısmını yazabilir misiniz acaba.

sorun şuradan da kaynaklanıyor olabilir.

çok kanallı adc okumalarında kanalların adc çevrimlerinin bitmesinin beklenmesi gerekiyor.
 galiba çevrimler bitmeden okuma yaptırıyorsunuz.

yani siz kodu baştan sona buraya bi atın bakalım.
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: e-zeki - 03 Nisan 2020, 20:31:39
@startirrek704250
 
Alıntı yapılan: e-zeki - 03 Nisan 2020, 14:18:33Kodun tamamını kapadım. while dahil her yer boş. DMA'yı çalıştırıyorum ripple/sekme / gürültü vs. birşey yok. 2048+-2 düz çizgi gibi geliyor.
while içine var++; bile yazsam DMA verisi sekmeye başlıyor 2048+-70 aralığında gidip gelmeye başlıyor. gpio frekansını da denedim onunla da ilgili değil.
Harici bir besleme ile inputları besledim sonuç hiç değişmedi. :'(  :du:

Yukarıda söyledim kodun tamamı kapalıyken hariç her duruma ripple var.
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: apsis - 03 Nisan 2020, 20:40:05
Acaba elindeki MCU clone muadilinden mi?
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: sessiz_roman - 03 Nisan 2020, 20:45:33
Alıntı yapılan: e-zeki - 03 Nisan 2020, 20:31:39@startirrek704250
 
Yukarıda söyledim kodun tamamı kapalıyken hariç her duruma ripple var.

eldeki verilerle başka bir sebep kalmıyor hocam.ilginç bir durum.
çekirdek ve adc dma ayarlarını atın belki orada bir hata vardır buluruz.
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: GreeN - 03 Nisan 2020, 21:13:56
Burada  (https://www.picproje.org/index.php/topic,54787.msg419267.html#msg419267) Bende bu tarz bir problemle karsılastım. Ama bir çözüm bulamamıştım.
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: e-zeki - 04 Nisan 2020, 19:43:41
kusura bakmayın çok geç yazıyorum maalesef.
@apsis  hocam özdisandan aldım ama patetes mi yolladılar bilmiyorum.
@GreeN  bire bir aynı durum hocam pinler floating durumdayken gelen datalar dans ediyor.
@startirrek704250

adc init
void MX_ADC1_Init(void)
{
  ADC_ChannelConfTypeDef sConfig = {0};

  /** Common config
  */
  hadc1.Instance = ADC1;
  hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
  hadc1.Init.ContinuousConvMode = ENABLE;
  hadc1.Init.DiscontinuousConvMode = DISABLE;
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc1.Init.NbrOfConversion = 6;
  if (HAL_ADC_Init(&hadc1) != HAL_OK)
  {
    Error_Handler();
  }
  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_0;
  sConfig.Rank = ADC_REGULAR_RANK_1;
  sConfig.SamplingTime = ADC_SAMPLETIME_13CYCLES_5;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_1;
  sConfig.Rank = ADC_REGULAR_RANK_2;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }

dma link
void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(adcHandle->Instance==ADC1)
  {
  /* USER CODE BEGIN ADC1_MspInit 0 */

  /* USER CODE END ADC1_MspInit 0 */
    /* ADC1 clock enable */
    __HAL_RCC_ADC1_CLK_ENABLE();
 
    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**ADC1 GPIO Configuration   
    PA0-WKUP     ------> ADC1_IN0
    PA1     ------> ADC1_IN1
    PA2     ------> ADC1_IN2
    PA3     ------> ADC1_IN3
    PA4     ------> ADC1_IN4
    PA5     ------> ADC1_IN5
    */
    GPIO_InitStruct.Pin = A1_Pin|A2_Pin|A3_Pin|A4_Pin
                          |A5_Pin|A6_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /* ADC1 DMA Init */
    /* ADC1 Init */
    hdma_adc1.Instance = DMA1_Channel1;
    hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
    hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
    hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
    hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
    hdma_adc1.Init.Mode = DMA_CIRCULAR;
    hdma_adc1.Init.Priority = DMA_PRIORITY_MEDIUM;
    if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
    {
      Error_Handler();
    }

    __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);

  /* USER CODE BEGIN ADC1_MspInit 1 */

  /* USER CODE END ADC1_MspInit 1 */
  }
}
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: argelojik - 05 Nisan 2020, 12:34:29
Merhaba .Ben de bir fikir vermek istedim. Acaba ADC giriş kanallarına 100 KOHM direnç bağladınız mı?
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: e-zeki - 05 Nisan 2020, 17:57:05
10K pulldown attım, +10nF da attım yok, bana mısın demiyor.
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: z - 05 Nisan 2020, 18:03:44
Butun ADC girislerini birlestir tek bir voltaj olcumu yapmayi dene.
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: GreeN - 06 Nisan 2020, 19:16:22


Ekran görüntüsü adc girişi direk gnd ye bağlı.

Yanlis yaptigimiz ne ? 100ms de bir adc1 verini okuyorum . baska hicbir cevre birim kullanilmiyor. debug icin serial wire 2 pin aktif. Haricinde calisan birsey yok. Durum bu.
Edit: pll devre disi biraktim islemciyi 8mhz de calistirdim adc sampling time 56cycles yaptim. degisen bisey yok.
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: Erol YILMAZ - 06 Nisan 2020, 19:35:14
işlemcinizin fiyatına ST'den DIGIKEY'den bakın...
bir de aldığınız fiyata bakın...
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: e-zeki - 20 Nisan 2020, 14:42:54
Bir süredir bakamıyordum. konuyu hortlatmış gibi olacağım ama
@Erol YILMAZ  hocam digikeyden alınmış nucleo board ile de denedim discovery board ile de denedim pinler boşta iken yine sekmeler ve dalgalanmalar aynı seviyede devam ediyor.
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: sedronjames - 10 Mayıs 2022, 11:22:05
sorunun kaynağını bulabiliniz mi. ben de dma ile okuma yaptığımda ofsetli okuyor sanki. olması gerektiğinden 300-400 fazla okuyor.
Başlık: Ynt: STM32F103C8T6 ADC DMA Gürültü Sorunu.
Gönderen: SB7 - 10 Mayıs 2022, 21:24:25
@sadogaffari forumda daha önce konuşulmuştu. Ben de buradaki gibi yapınca sorun çözülmüştü. Gözden kaçan ayar olabilir.

https://www.picproje.org/index.php/topic,43472.0.html