Skocz do zawartości

Kurs STM32 F4 - #5 - Pomiar napięcia (ADC), DMA, STMStudio


Pomocna odpowiedź

@Treker chodzi o ten kawałek kodu:

/* USER CODE BEGIN 2 */
HAL_ADC_Start(&hadc1);
const float V25 = 0.76; // [Volts]
const float Avg_slope = 0.0025; //[Volts/degree]
const float SupplyVoltage = 3.0; // [Volts]
const float ADCResolution = 4095.0;
/* USER CODE END 2 */
 
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
 if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK) { // Oczekiwanie na zakonczenie konwersji
 
 PomiarADC = HAL_ADC_GetValue(&hadc1);// Pobranie zmierzonej wartosci
 Vsense = (SupplyVoltage*PomiarADC)/ADCResolution;// Przeliczenie wartosci zmierzonej na napiecie
 Temperature = ((Vsense-V25)/Avg_slope)+25;// Obliczenie temperatury
 
 HAL_ADC_Start(&hadc1);// Rozpoczecie nowej konwersji
 }
 /* USER CODE END WHILE */
 /* USER CODE BEGIN 3 */
}

 

Link do komentarza
Share on other sites

Bardzo dziękuje za kurs. Jest naprawdę genialny. Trzymam kciuki za dalszy rozwój Forbota, a autora namawiam do kontynuacji.

Żałuję, że wziąłem się za kurs dopiero po 4 latach (;

Chciałem potwierdzić że na sofcie z 2020r jak do tej pory prawie wszystko działa. To o czym piszecie że coś nie działa miałem również ale spostrzeżenia uważnych kursantów z pierwszych stron komentarzy pomogły.

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

A ja mam pytanie odnośnie rozbicia kodu na odrębne pliki .c i.h

Dołączając kolejne funkcje do main.c, robi się z tego tasiemiec. Czy była by szansa na to, aby zrobić choć jeden kurs z opisem dzielenia kodu na kilka plików.?

Pozdrawiam serdecznie 😉

Link do komentarza
Share on other sites

@pzarczyn witam na forum 🙂 Czy masz jakieś konkretny problem z dzieleniem projektu na pliki w odniesieniu do STM32 F4? Pytam, bo ogólnie zagadnienie dzielenia na pliki jest raczej "oderwane" od opisywanych tu tematów to coś związanego bardziej z samym C/C++. Tutaj masz przykładowy, ogólny opis takiego procesu: http://cpp0x.pl/kursy/Kurs-C++/Dzielenie-kodu-na-kilka-plikow-zrodlowych/310

Link do komentarza
Share on other sites

Cześć!

Mam problem z odczytaniem wartości w stm studio, w zasadzie wartości, które pokazuje program są conajmniej dziwne - wychodzi ujemna temperatura. W czym może być problem? Przy włączeniu narzędzia import variables pojawia się Error (w załączniku). Nie mam pojęcia czemu tak się dzieje. Kod sprawdzałem, nawet kopia 1:1 nic nie wniosła.

//EDIT

Poprzerzucałem schematy i wychodzi na to, że mój kontroler zasilany jest napięciem 3.3V, zmienienie wartości zmiennej na 3.3 załatwiło sprawę, lecz nadal nie rozwiązałem problemu z Errorem. Gdyby ktoś miał jakiś pomysł dlaczego się pojawia to byłbym wdzięczny.

 

image.thumb.png.d2033bf7c00e8d2e4252765b91b2c54f.pngimage.thumb.png.924677ccb8595a974764432249b7d1ed.png

Edytowano przez qbeczek
Link do komentarza
Share on other sites

Cześć, 

Mam podobny problem jak kolega wyżej, a mianowicie przy importowaniu zmiennych do STM Studio pojawia się ten sam błąd, a zmienne w programie osiągają jakieś dziwne wartości: 1777607276_Beztytusu.thumb.png.ec93c228a145b1ba3cc35b4afa80d17f.png . Warto dodać, że problem pojawia się zarówno przy pisaniu kodu samemu, jak i przekopiowaniu go z kursu. Korzystam z STM32CubeIDE.

Korzystając z okazji, dlaczego do funkcji HAL_ADC_... wrzucamy wskaźnik na zmienną, a nie po prostu jej wartość?

//EDIT

Przeszedłem do części o DMA, gdy chciałem wrzucić zmienne do STM Studio błąd pojawił się kilka razy, po zaznaczeniu opcji image.thumb.png.67acd403a6c93f86843356678ac6cb9e.png. A zmienna joystick przyjmuje wartość 0 niezależnie od ruchu joysticka. 

Bez tytułu.pngimage.thumb.png.1541ea3bc297d210342a95480ccf34e0.png

Edytowano przez Karoga
Link do komentarza
Share on other sites

@Karoga witam na forum 🙂 Ten kurs nie bazuje na STM32CubeIDE, więc z tego względu mogą pojawiać się różne rozbieżności. Podaj proszę informację co do dokładnej wersji oprogramowania, którą używasz.

Mam świadomość, że aktualizacje samego Cube oraz Cube IDE sporo namieszały w kontekście tego kursu - mamy już zaplanowane działania, które mają to naprawić. 

Link do komentarza
Share on other sites

W zastosowanej w kursie płytce są bezpośrednio podane wartości do przeliczenia odczytu na temperaturę w stopniach Celsjusza. CO jednak zrobić w sytuacji gdy w innej wersji mikrokontrolera mam dane wstawione w załączniku. Których wartości wtedy użyć by uzyskać w miarę realne wyniki.

Mam też pytanie dotyczące kalibracji. W dokumentacji przeczytałem, że maksymalnie można osiągnąć dokładność pomiaru +-2 stopnie, lecz tylko wtedy gdy została przeprowadzona kalibracja czujnika w temparaturze 25stopni. Czy dobrze to zrozumiałem? 

Uzyskałem wyniki obarczone dość dużym błędem, ok. 30-31stopni w pomieszczeniu, w którym było ok 22stopni. Kalibracji nie wykonałem w zalecanej temperaturze, lecz czy to właśnie z tego powodu mam tak duży błąd czy coś źle zrozumiałem?

image.thumb.png.c0de36f1db923b01021ebb275fdf2532.png

Link do komentarza
Share on other sites

Ten czujnik tak ma. Nieźle śledzi temperaturę (to pierwszy wiersz tabelki), ale ma fatalną dokładność początkową (trzeci wiersz tabelki). Popatrz, w drugim wierszu masz współczynnik temperaturowy: napięcie jakie dostanie ADC po wybraniu kanału temperatury będzie zmieniało się ok. 4.3mV/°C. Jednocześnie jego rozrzut w temp. +25°C może wynieść od 1.34 do 1.52V. To przecież 180mV co przekłada się aż na 41°C. Kalibracja nawet w jednym punkcie (optymalnie gdzieś w połowie zakresu czyli właśnie w temperaturze pokojowej) może ten błąd zmniejszyć nawet do 1-2°C. Wciąż jednak nie jest to rasowy termometr, to raczej czujnik warunków pracy urządzenia bo a) dokładność jest taka sobie, b) sam procesor podczas pracy (zależy co robi, jak szybko i co steruje swoimi portami) może nagrzać się o 10°C i więcej a cała płytka - jeśli posadziłeś tam jakieś elementy mocy - może mieć spokojnie +50 względem temp otoczenia.

  • Lubię! 1
  • Pomogłeś! 1
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.