Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 19 kwi 2024, o 21:27


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 2 lip 2018, o 21:17 
Offline
Użytkownik

Dołączył(a): 06 mar 2018
Posty: 26
Pomógł: 0

Witam.

Chciałbym mierzyć moc np: żarówki za pomocą czujnika z efektem Halla ASC712. Szukałem trochę po internecie i znalazłem przykładowe kody programów pod arduino i chciałbym to przełożyć na język C. Z prądem stałym nie było by problemu, ale z racji, że mam tu prąd przemienny to użyta została funkcja millis() i czy ktoś mógłbym powiedzieć jak zrealizować taką funkcję w języku C i przedstawić kod takiej funkcji?

Kod pod arduino jaki znalazłem na stronie: http://www.theorycircuit.com/hall-effec ... r-circuit/

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2018, o 22:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lis 2015
Posty: 219
Pomógł: 20

możesz zrobić inaczej np tak dla m32 ma 8 mhz

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


a w przerwaniu mozesz zmniejszac zmienna

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



a w pętli głównej napełniać zmienną milisekundy = 1000 a następnie czekać sekundę

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2018, o 07:00 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

Z tym że jak masz regulacje fazową to Ci pomiar amplitudy nic nie da. Żeby wyliczyć rzeczywistą moc skuteczną musisz całkować iloczyn napięcia i prądu przez jakiś okres czasu a następnie tę wartść przez ów okres czasu podzielić.

całkowanie numeryczne w Twoim przypadku to będzie suma iloczynów kolejnych próbek sygnału napięcia, prądu i czasu odstępu pomiędzy próbkami podzielona finalnie przez okres zbierania próbek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2018, o 17:36 
Offline
Użytkownik

Dołączył(a): 06 mar 2018
Posty: 26
Pomógł: 0

No już trochę lepiej to rozumiem.

Mam pytanie odnoście warunku
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Czyli jeżeli warunek jest prawdziwy czyli zmienna milisekundy==1 to zmniejszaj milisekundy--?

Nie do końca bym chciał dawać jakieś dodatkowe while() w pętli głównej o ile dobrze rozumiem czyli wyglądało by to tak

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Chciałbym uzyskać taki efekt mieć funkcje jak w arduino millis() z tego co wiem to ona zlicza do 50dni i później się zeruje.
https://www.arduino.cc/reference/en/lan ... me/millis/


Jeżeli chodzi o pomiar mocy to bym musiał wykorzystać jakaś metodę całkowania numerycznego np: prostokątów?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2018, o 21:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lis 2015
Posty: 219
Pomógł: 20

Tutaj jest opisana funkcja millis(), możesz z tego skorzystać
https://ucexperiment.wordpress.com/2012/03/16/examination-of-the-arduino-millis-function/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lip 2018, o 07:58 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

Pixelxx napisał(a):
Jeżeli chodzi o pomiar mocy to bym musiał wykorzystać jakaś metodę całkowania numerycznego np: prostokątów?


1. Musisz mieć pomiar napięcia i prądu. Ewentualnie chociaż detektor przejścia przez zero żeby wiedzieć w którym punkcie sinusa jesteś. Zakładamy że amplituda napięcia sieciowego to 230V * sqrt(2)
2. Robisz próbki prądu dajmy na to co 500us a więc Twoje dt = 0.0005 będziesz miał 40 takich próbek na 1 okres sinusoidy.
3. Skoro wiesz w jakim momencie sinusa jesteś, bo masz synchronizacje, odczytujesz z tablicy wartość chwilową napięcia. Tak, nmusisz wcześniej stablicować sobie sinusa żeby nie liczyć go w locie bo to za wolne na AVR. nie będzie to dokładna wartość ale niestety nie masz pomiaru napięcia. Chyba że takowy dołożysz, wtedy jest bajeczka.
4. co te 500us mnożysz: u * i * dt i dodajesz do zmienej moc która pomieści takie wartości. Powiedzmy coś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

5. jak zrobisz to 40 razy, dzielisz:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


6. Nie używaj zmiennych zmiennoprzcinkowych.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO