Skocz do zawartości

ACS712 i STM32F4 – pomiar prądu z ADC


rizone1234

Pomocna odpowiedź

Witam,

nie mogę zmierzyć prądu za pomocą układu ACS712, przy użyciu STM32. Pomiar, w ogóle się nie wykonuje. Zamieszczam kod poniżej i bardzo proszę o pomoc.

#include "stm32f4xx.h"
#include <stdio.h>
#include "chwytak.h"
volatile uint16_t valuee;
int WartoscPrzetwo = 0; // wartosc odczytana z ADC
ADC_CommonInitTypeDef ADC_CommonInitStructure;
void KonfiguracjaADC(void);
int KonwersjaADC(void);
volatile uint32_t msTicks;      //counts 1ms timeTicks

void SysTick_Handler(void) {
	msTicks++;
}

//  Delays number of Systicks (happens every 1 ms)
static void Delay(__IO uint32_t dlyTicks){
  uint32_t curTicks = msTicks;
  while ((msTicks - curTicks) < dlyTicks);
}

void setSysTick(void){
	// ---------- SysTick timer (1ms) -------- //
	if (SysTick_Config(SystemCoreClock / 1000)) {
		// Capture error
		while (1){};
	}
}

int main(void)
{
 //Rozpoczecie konfiguracji
 KonfiguracjaADC();
 SystemInit();
 setSysTick();
 while(1)
 {

  WartoscPrzetwo = KonwersjaADC();
  chwytak(2500);
  WartoscPrzetwo = KonwersjaADC();
  Delay(1500);
  chwytak(1650);
  WartoscPrzetwo = KonwersjaADC();
    Delay(1500);

}
}
void KonfiguracjaADC()
{
 ADC_InitTypeDef ADC_Init_Structure;
 GPIO_InitTypeDef GPIO_Init_Structure;

 //Konfiguracja zegarów
 //ADC1 podlaczone do APB2
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
 //Zegar dla portu ADC
 RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_GPIOCEN, ENABLE);

 //Konfiguracja pinu analogowego
 //Kanal 10 podlaczony do PC0
 GPIO_Init_Structure.GPIO_Pin = GPIO_Pin_0;
 GPIO_Init_Structure.GPIO_Mode = GPIO_Mode_AN;
 GPIO_Init_Structure.GPIO_PuPd = GPIO_PuPd_NOPULL;
 GPIO_Init(GPIOC, &GPIO_Init_Structure);

 ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
 ADC_CommonInit(&ADC_CommonInitStructure);

 //Konfiguracja ADC
 ADC_DeInit();
 //Przetworzone dane wyrównane do prawej
 ADC_Init_Structure.ADC_DataAlign = ADC_DataAlign_Right;
 //Dane wejsciowe przetwarzane w 12 bitowy numer z duza dokladnoscia, max 4096
 ADC_Init_Structure.ADC_Resolution = ADC_Resolution_12b;
 //Konwersacja jest ciagla przetwarzanie wiecej niz jeden raz
 ADC_Init_Structure.ADC_ContinuousConvMode = ENABLE;
 ADC_Init_Structure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
 //Bez wyzwalania zewnetrznego
 ADC_Init_Structure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
 //Liczba konwersji
 ADC_Init_Structure.ADC_NbrOfConversion = 1;
 //Pomiar jednego kanalu, skanowanie kanalow zostalo wylaczone
 ADC_Init_Structure.ADC_ScanConvMode = DISABLE;
 //Inicjalizacja ADC
 ADC_Init(ADC1, &ADC_Init_Structure);


 //Wybranie kanalu z którego bedzie odczytywane
 //ADC kanal 10, GPIOC1, Czestotliwosc probkowania = 1Mhz
 ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_144Cycles);

 //Wlaczenie konwersji ADC
 ADC_Cmd(ADC1,ENABLE);
}

int KonwersjaADC()
{
 //Rozpoczecie konwersji
 ADC_SoftwareStartConv(ADC1);
 //Przetwarzanie
 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
 //Zwrócenie przetworzonych danych
 return ADC_GetConversionValue(ADC1);
}

Do odczytania wartości prądu używam przetwornika ADC.

Edytowano przez rizone1234
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.