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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.