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



Teraz jest 6 lut 2025, o 04:53


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 
Autor Wiadomość
PostNapisane: 21 mar 2014, o 12:31 
Offline
Nowy

Dołączył(a): 19 mar 2014
Posty: 7
Pomógł: 0

Witam.
Próbuje przy pomocy przetwornika Adc sterować prędkością obrotową silnika - wyjście pwm. Układ atmega 328p taktowana 1Mhz.
Poniżej zamieszczam kod - nie wiem gdzie popełniam błąd. Proszę o pomoc

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: 21 mar 2014, o 13:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Błędem z pewnością jest niewstawienie kodu pomiędzy znaczniki "syntax" na forum :), ale jest to już w gestii moderatorów ;)

Odnośnie samego problemu to na pewno nie poprawny jest zapis dwóch pierwszych linii kodu w funkcji main, gdzie przesuwana wartość jest ponownie przesuwana (definicja PWM_A). Poza tym ciężko powiedzieć coś więcej jeżeli nie wiadomo co jest nie tak, albo ewentualnie jaki błąd generuje sam kompilator...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 13:24 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

atmel napisał(a):
Błędem z pewnością jest niewstawienie kodu pomiędzy znaczniki "syntax" na forum :), ale jest to już w gestii moderatorów ;)

Odnośnie samego problemu to na pewno nie poprawny jest zapis dwóch pierwszych linii kodu w funkcji main, gdzie przesuwana wartość jest ponownie przesuwana (definicja PWM_A)...


Co do pierwszej uwagi to racja :) Natomiast w kwestii drugiej uwagi, to zapis zamieszczony przez kolegę jest poprawny. W pierwszej linii ustawia kierunek na wyjście, a w drugiej podciąga pin do VCC :)

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 13:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 lut 2013
Posty: 600
Pomógł: 47

Cytuj:
Co do pierwszej uwagi to racja :) Natomiast w kwestii drugiej uwagi, to zapis zamieszczony przez kolegę jest poprawny. W pierwszej linii ustawia kierunek na wyjście, a w drugiej podciąga pin do VCC :)


No chyba nie za bardzo bo po podstawieniu dla PWM_A 1<<PD6
wyglądało by to tak: DDRD |= (1<<1<<PD6);

------------------------ [ Dodano po: 2 minutach ]

Dlatego
#define PWM_A PD6
tak powinno wyglądać

_________________
https://www.instagram.com/myfirstquadcopter/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 13:33 
Offline
Nowy

Dołączył(a): 19 mar 2014
Posty: 7
Pomógł: 0

Sorki to mój pierwszy wpis :D

Po zmianie w/w linijek kodu układ działa, jednak możliwość regulacji silnika jest w zakresie ok. 0-70% obrotów?
Potencjometr 10kom, nap. ref. 5V.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 13:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 27 maja 2013
Posty: 562
Lokalizacja: Bydgoszcz
Pomógł: 23

Ja bym w ogóle zaczął od przestawienia zagra procesora 1 Mhz to stanowczo wg. mnie za mało dla sterownia silnikami za pomocą PWM - 8 Mhz najlepiej nawet 16Mhz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 13:47 
Offline
Nowy

Dołączył(a): 19 mar 2014
Posty: 7
Pomógł: 0

Częstotliwość dla adc 1000000/4=250khz wydaje się być właściwa, natomiast pwm 1000000/64/256=61 hz !!!--czyżby tu tkwił błąd?
Ile powinna wynosić?

------------------------ [ Dodano po: 11 minutach ]

adc 1000000/64=15khz pwm=61hz POPRAWKA



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 14:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Do sterowania silnikami wcale nie musi być bardzo wysoka częstotliwość. Wystarczy na poziomie nawet te 61Hz. Wszystko zależy od parametrów silnika i sposobu sterowania. Osobiście przy silnikach DC nigdy nie przekraczam 500Hz. Innym przykładem może być PWM 10 lub nawet 50kHz kiedy sterowanie odbywa się w mostku i do ustabilizowania silnika w pozycji "zero" naprzemiennie wysyłane jest 50%/50% wypełnienia do każdej części tego mostka. Przesunięcie wypełnienia np. 20%/80% powoduje obracanie się z zadaną prędkością z zachowaniem minimalnej bezwładności wału. Rozwiązanie takie stosuje się np. w obrabiarkach cyfrowych przy motoreduktorach (np. sterowanie pozycją lasera do cięcia metalu)... Trochę odbiegłem od tematu, ale łyżka teorii jeszcze nikomu nie zaszkodziła :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 14:08 
Offline
Użytkownik

Dołączył(a): 05 lut 2013
Posty: 302
Pomógł: 19

bartek111111 napisał(a):
ADMUX |= (1<<REFS0); //Nap.ref 5V
AVCC with external capacitor at AREF pin

tak masz? czy moze chciales jednak po prostu AREF?

bartek111111 napisał(a):
ADMUX |=(1<<ADLAR); //sprowadzenie wartości do wyniku 8 bit


ustaw to na poczatku a nie po odczycie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 14:18 
Offline
Nowy

Dołączył(a): 19 mar 2014
Posty: 7
Pomógł: 0

Ok.
Wracając do tematu. Skoro z przetwornika adc uzyskuje wartość 0-255 i przypisuje ją do wyjścia PWM 0-255 (wypełnienie 0-100 ) więc dlaczego nie mogę uzyskać pełnej regulacji silnika. Silnik microPOLULU z przekładnią bezpośrednio podpięty do PD6 (OCA0).

------------------------ [ Dodano po: 11 minutach ]

Ma być wewnętrzne 5V więc (1<<REFS0)

------------------------ [ Dodano po: 19 minutach ]

Chciałbym później układ do regulacji obrotów wentylatora w zależności od temperatury. Dlatego zależy mi na pełnej regulacji obrotów. Nie mam oscyloskopu tak wiec nie mogę sprawdzić co się dzieje na wyjściu pwm. Możliwe, że pin jest za mało wydajny prądowo na taki silniczek ???



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 14:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

bartek111111 napisał(a):
Ma być wewnętrzne 5V więc (1<<REFS0)

To jest ZEWNĘTRZNE AVCC (wewnętrzne jest 1,1V i nie może być to 5V). W takim przypadku końcówka do AVCC kondensator do masy i musi być ona połączona z zasilaniem VCC 5V przez dławik, a na AREF kondensator do masy. A w ogóle to pokaż schemat najlepiej.

------------------------ [ Dodano po: 4 minutach ]

Aha, i jeszcze jedno - ADC masz 1024 wartości, więc sczytaj kompletny wynik (czyli z dwóch bajtów) i podziel go przez 4. Dopiero wtedy można będzie mówić o błędach. Sam starszy bajt chyba na niewiele Ci się zda... :)

------------------------ [ Dodano po: 7 minutach ]

I jeszcze to :)
bartek111111 napisał(a):
Nie mam oscyloskopu tak wiec nie mogę sprawdzić co się dzieje na wyjściu pwm.


Diodę sobie tam podłącz - będzie się rozjaśniać i ściemniać (może lekko migotać jeśli jest PWM o niskiej częstotliwości)
I na boga nie podłączaj silników bezpośrednio pod piny procesora, bo to tylko kłopoty!!!

_________________
http://www.sylwekkuna.com



Ostatnio edytowano 21 mar 2014, o 14:54 przez SylwekK, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 14:51 
Offline
Nowy

Dołączył(a): 19 mar 2014
Posty: 7
Pomógł: 0

Nawet jak zmienie na wewnętrzne 1,1V to i tak nie mam pełnej regulacji.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 14:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Przeczytaj dokładnie mój poprzedni post i zostaw to 5V tak jak było.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 15:01 
Offline
Użytkownik

Dołączył(a): 05 lut 2013
Posty: 302
Pomógł: 19

A mozesz podlaczyc wyswietlacz LCD? Bardzo pomaga. Zrobilem kiedys cos podobnego. Nie mam ostatecznego kodu pod reka (brakuje inicjalizacji PWM'ow):
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: 21 mar 2014, o 15:01 
Offline
Nowy

Dołączył(a): 19 mar 2014
Posty: 7
Pomógł: 0

Dioda przy pełnym wypełnieniu świeci tak samo jak przy zaś +5V. Więc wyjście PWM działa najprawdopodobniej dobrze.
Problemem pewnie jest zasilanie silnika bezpośrednio z pinu .Spróbuje pobawić się na mostku i tranzystorze.
Dam znać Dzieki Sylwekk :-)

------------------------ [ Dodano po: 5 minutach ]

Przeczytałem ADC zamienia wartość do 1024. O to chodziło :-) Temat uważam za zamknięty



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 16:30 
Offline
Nowy

Dołączył(a): 19 mar 2014
Posty: 7
Pomógł: 0

Do zasilania silnika zastosowałem układ l293d i działa prawidłowo. (regulacja od 0 do max )

------------------------ [ Dodano po: 1 minucie ]

Nie trzeba dzielić adc przez 4 ponieważ timer jest 8 bitowy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 17:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

bartek111111 napisał(a):
Nie trzeba dzielić adc przez 4 ponieważ timer jest 8 bitowy.

Zgadza się, zorientowałem się jak już post puściłem, a zmyliło mnie to return ADCH; ale, jak zaraz odpisałeś, że działa to już nie było sensu poprawiać :) Czułem tylko na sobie, że ktoś mi to niedopatrzenie wytknie :D Cóż, też się dopiero uczę C i wcześniejszy Bascom swoje piętno zostawił... ;)

_________________
http://www.sylwekkuna.com



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: 17 ] 

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO