STM32 akım ölçümü yardım

Başlatan magnetron, Dün, 21:04:42

magnetron

merhaba forum,

STM32 ile 50 amper bipolar ACS sensör kullanarak
24 V DC fırçalı motorun akımını ölçmeye çalışıyorum
sürücü beslemesi trafo köprü 1000 uF bypass kapasitör

ACS sensör biliyorsunuz sıfır akımda yaklaşık 3.3/2 = 1.65 V çıkış veriyor

ama motor sabit hızda dönerken ACS çıkışındaki ham değer bir osilasyon yapıyor
yani mesela 2100 değerde 2 saniye duruyor sonra 2130 a kadar yükseliyor
tekrar 2100 değere gelip aynı olay tekrar ediyor

şimdi sample time 28.5 saykıl olarak ayarladım bu durumda bir ölçüm 28.5 + 1.5 = 30 saykıl sürüyor (referans manuale göre )
böylece saniyede 12 000 000 / 30 =400 000 ölçüm alıyor benim PWM frekansım 10 KHz
yani 1/10 000 * 400 000 = her bir PWM saykılda 40 ölçüm alıyor

akım probuyla baktığımda akımın sürekli akım üçgen dalga olduğunu görüyorum
toplam 200 ölçüm alıp ortalamasını alıyorum

işte osilasyon yapıyor dediğim bu ortalama değer

kodları da paylaşayım
sormak istediğim bu dalgalanmayı nasıl giderebilirim

teşekkür

not : DMA kullanmadım çünkü DMA ADC1 e bağlı orda birkaç başka ölçüm yapıyorum

void GetADCRes(void){
uint16_t *RAMptr = &RAM[DATAWORDS+329*2];
uint16_t ikl;
int32_t avertotal=0;
    avertotal=0;
    for (ikl=0;ikl<200;ikl++) avertotal+=ADCresult[ikl];
    *RAMptr=avertotal/200;           
}
 

volatile uint16_t ADCresult[200],resultno;

void ADC1_2_IRQHandler(void)
{
/* Clear ADC1 EOC pending interrupt bit */
    ADC_ClearITPendingBit(ADC2, ADC_IT_EOC);
    ADC_ClearFlag(ADC2, ADC_FLAG_EOC);

    ADCresult[resultno]= ADC_GetConversionValue(ADC2);
    resultno++;if(resultno>200) resultno=0;
}

  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 = 1;
  ADC_Init(ADC2, &ADC_InitStructure);
  

/* ADC2 regular channels configuration */ 
  ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 1, ADC_SampleTime_28Cycles5);