pawel320 Napisano Wrzesień 26, 2010 Udostępnij Napisano Wrzesień 26, 2010 Witam. Tak wiem :-> pytanie może proste, ale dla was, nie dla mnie. O co chodzi z tym PWM, bo nie mogę nic znaleźć w necie, chodzi o to, że można stopniowo sterować obrotami silnika, tzn. napięciem? Ale w jaki sposób jeśli chciałbym to zrobić np. na atmedze. Wytłumaczy ktoś? __________ Komentarz dodany przez: Sabre Post był raportowany, poprawiłem pisownię i błędy. Cytuj Link do komentarza Share on other sites More sharing options...
Sabre Wrzesień 26, 2010 Udostępnij Wrzesień 26, 2010 Jeśli już to PWM, google nie gryzie 😋. Cytuj Link do komentarza Share on other sites More sharing options...
pawel320 Wrzesień 26, 2010 Autor tematu Udostępnij Wrzesień 26, 2010 Sorry, źle szukałem.. jest dużo ale bardzo szczegółowo a ja na początku chciałbym się dowiedzieć jak ty wgyląda w praktyce. Żeby zrobić programowy PWM trzeba jakiś procek i co jeszcze? [ Dodano: 26 Wrz 10 09:26 ] A może jakiś godny polecenia artykuł, czy coś..? nie było o tym np w "elektronika dla wszystkich'? Cytuj Link do komentarza Share on other sites More sharing options...
feriar Wrzesień 26, 2010 Udostępnij Wrzesień 26, 2010 pawel320, tutaj masz wzmiankę o pwm https://www.forbot.pl/forum/topics20/jak-przerobic-serwomechanizmy-vt3902.htm Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
riddyk Wrzesień 26, 2010 Udostępnij Wrzesień 26, 2010 PWM, czyli po polsku MSI, czyli modulacja szerokością impulsu. Najlepiej poczytaj dokumentacje procesora na który chcesz taki program napisać. Wszystko tam jest. I MOIM ZDANIEM nie ma łatwego sposobu żeby zacząć z uC. CZYTAĆ, CZYTAĆ, I ZROBIĆ. Cytuj Link do komentarza Share on other sites More sharing options...
pawel320 Wrzesień 26, 2010 Autor tematu Udostępnij Wrzesień 26, 2010 Powiedzcie proszę, w czym to można praktycznie wykorzystać, czyli jak rozumiem PWM to inaczej szerokość impulsu [nie dosłownie]. Czyli powiedzcie mi jeszcze jdną rzecz, jakbym chciał zrobić coś takiego żeby np silnik kręcił się wolno, potem troche szybciej potem stopniowo wolno i znów np 2 razy szybko. Czy da się zrobić coś takiego? Jeśli by ktoś mogł opisać jak.. byłbym wdzięczny. Nie chodzi mi o: podłącz niebieski kabelek do rezystora, czerwony z niebieskim do baterii, tylko co było by potrzebne do zrobienia czegoś takiego. Sorki że tak zawracam głowę, każdy kiedyś zaczynał [chyba] Cytuj Link do komentarza Share on other sites More sharing options...
Nawyk Wrzesień 26, 2010 Udostępnij Wrzesień 26, 2010 Masz w treści również opis prostego generatora na NE555. Jeśli programujesz w BASCOM-AVR, to: https://www.forbot.pl/forum/topics20/kurs-bascom-lekcja3-zaczynamy-programowac-vt1091,25.htm#9005 Cytuj Link do komentarza Share on other sites More sharing options...
agrala Październik 2, 2010 Udostępnij Październik 2, 2010 Nie chcę zakładać nowego tematu a mam pytanie odnośnie PWM. W linkach które podaliście nie widzaiałem nigdzie wytłumaczenia dlaczego takie liczby a nie inne. Chodzi mi o "Prescale" i "PWM=x" Zauważyłem że niektórzy piszą różne liczby. Z tego co wywnioskowałem to wygląda to tak jakby Prescale zmieniało częstotliwość a PWM zakres napięcia na wyjściu OC1A - tzn przy PWM=8 (skala chyba do 256) podająć PWM1a=100 dioda świeci mocniej niż przy PWM=10 (skala chyba do 1024). Bardzo bym prosił o wytłumaczenie tego jak dla jakiegoś "chłopa z pola" Jeszcze jedna sprawa. Napisałem taki kod: $regfile = "m8def.dat" $crystal = 1000000 Config Pinb.1 = Output Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect , Prescale = 1 Config Portc = Input Portc.0 = 1 Portc.1 = 1 Portc.2 = 1 Portc.3 = 1 Portc.4 = 1 S1 Alias Pinc.0 S2 Alias Pinc.1 S3 Alias Pinc.2 S4 Alias Pinc.3 S5 Alias Pinc.4 Do Start Timer1 If S1 = 0 Then Pwm1a = 50 End If If S2 = 0 Then Pwm1a = 100 End If If S3 = 0 Then Pwm1a = 150 End If If S4 = 0 Then Pwm1a = 200 End If If S5 = 0 Then Pwm1a = 250 End If Loop End Przyciskami S1-S5 mogę zmieniać skokowo jasność świecenia diody. W jaki sposób można przerobić program by móc zmieniać jasność świecenia diody tylko dwoma przyciskami, tzn. jeden przycisk jest od zwiększania jasności a drugi od zmniejsznia. Chciałbym aby odbywało się na dwa sposoby (dwa rózne programy): -zmiana skokowa; -zmiana w zależności od tego jak długo był przycisnięty przycisk. Cytuj Link do komentarza Share on other sites More sharing options...
KD93 Październik 2, 2010 Udostępnij Październik 2, 2010 W jaki sposób można przerobić program by móc zmieniać jasność świecenia diody tylko dwoma przyciskami, tzn. jeden przycisk jest od zwiększania jasności a drugi od zmniejsznia. If S1 = 0 Then pwm1a = pwm1a + 20 Elseif S2 = 0 Then Pwm1a = pwm1a - 20 End if No i należy jeszcze dodać jakiąś granice, np if pwm1a >255 then pwm1a = 255 Czy skokowo, czy płynnie, wystarczy troszkę z tym pokombinować i pomyśleć przede wszystkim i na pewno się uda, próbując sam nauczysz się więcej. Proponuję do obsługi przycisków użyć instrukcji Debounce albo odczekać np. 25ms i sprawdzić ponownie stan przycisków, inaczej mogą być problemy z drganiem styków. A ogólnie to radziłbym się zaprzyjaźnić z książką M.Wiązani - "Programowanie mikrokontrolerów AVR...", którą można zdobyć przez google po kosztach pradu zużywanego przez komputer. Cytuj Link do komentarza Share on other sites More sharing options...
agrala Październik 3, 2010 Udostępnij Październik 3, 2010 Skokowa zmiana okazałą się bardzo prosta. Jednak Twój warunek nie działał - po uzyskaniu maksymalnej jasności następne przyciśnięcie przycisku od rozjaśniania powodowało zgaszenie diody i kolejne rozjaśnianie. Warunek zadziałał dopiero gdy sutawiłem go w ten sposób: If Pwm1a>239 Then Pwm1a=235 Używałem przy tym funkcji Debounce i próbowałem też odczekać 25ms i ponownie sprawdzic stan przycisku. Jeżeli chodzi o płynnę regulację to nie mam pomysłu jak to zrealizować - może jakaś podpowiedź? Cytuj Link do komentarza Share on other sites More sharing options...
MirekCz Październik 3, 2010 Udostępnij Październik 3, 2010 Warunek nie działa jak zmienna pwm1a jest zdeklarowana jako bajt, bo po operacji typu 240+20 wynikiem jest 4 a nie 260 (nie da się zapisać 260 w 1 bajcie). Musisz zdefiniować PWM1A jako zmienną 2bajtową. Płynna regulacja to po prostu zmienienie kroku z +/-20 do +/-1 . Niestety masz tutaj jeszcze problemy związane z konstrukcją i działaniem oka ludzkiego. Żeby taki efekt był naprawdę płynny to musiałbyś zrobić 2 rzeczy: a) zmieniać jasność w skali logarytmicznej a nie liniowej. Jak zrobisz skalę liniową to od 0 do 50 oko będzie widziało dużą różnicę jasności, od 50 do 100 małą a od 100 do 255 już prawie żadnej. b) pod koniec/na początku zmiany jasności dodać pewne spowolnienie. Inaczej nastąpi na moment "rozbłysk" światła. Jest to spowodowane tym, że oko przyzwyczaja się do zmiany jasności i źrenica się powiększa/pomniejsza cały czas. Jak nagle zmiana jasności ustaje to na moment źrenica nadal zachowuje swój ruch i dopiero po chwili powraca do prawidłowego otwarcia. W tym czasie człowiek widzi jakby nastąpiło przygaszenie światła (źrenica nadal się pomniejsza, ale ilość światła już się nie zmienia). Cytuj Link do komentarza Share on other sites More sharing options...
Sabre Październik 3, 2010 Udostępnij Październik 3, 2010 Jeżeli chodzi o płynnę regulację to nie mam pomysłu jak to zrealizować - może jakaś podpowiedź? Płynną regulację musisz zrobić w pętli, ale musisz dać po każdym zwiększeniu wartości PWMu jakiegoś waita i to przynajmniej na jakieś 300ms, musisz też dodać zmienną pomocniczą, która będzie sprawdzana czy nie przepełnia PWMu przed przepisaniem do samego rejestru PWMa: $regfile = "m8def.dat" $crystal = 1000000 Config Pinb.1 = Output Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect , Prescale = 1 Config Portc = Input Dim Pom As Integer Portc.0 = 1 Portc.1 = 1 Portc.2 = 1 Portc.3 = 1 Portc.4 = 1 S1 Alias Pinc.0 S2 Alias Pinc.1 S3 Alias Pinc.2 S4 Alias Pinc.3 S5 Alias Pinc.4 Do Set S1 Set S2 If S1 = 0 Then Pom = Pom + 1 If Pom > 255 Then Pom = 255 Pwm1a = Pom Waitms 300 End If If S2 = 0 Then Pom = Pom - 1 If Pom < 0 Then Pom = 0 Pwm1a = Pom Waitms 300 End If Loop End Już mówię dlaczego zmienna Pom jest jako Integer, gdyby była jako Byte nie można by było ustawić PWMa na 0, ponieważ przy następnym przejściu pętli zmienna Pom uzyskiwałaby wartość 255 i nie można by było ustawić warunku na przepełnienie, gdy zmienna Pom będzie miała wartość ujemną to wtedy zawsze będzie zerowana, przed wpisaniem do rejestru PWMa. Przy tym kodzie będziesz miał 3 zmiany wartości na sekundę, możesz albo zmniejszyć Wait do 100ms albo zwiększyć przyrost Pom z 1 do 5 albo i 10. Cytuj Link do komentarza Share on other sites More sharing options...
KD93 Październik 3, 2010 Udostępnij Październik 3, 2010 Mamy chyba jakiś błąd na forum z cytowaniem: [ Dodano: 03 Paź 10 12:26 ] Jednak Twój warunek nie działał - po uzyskaniu maksymalnej jasności następne przyciśnięcie przycisku od rozjaśniania powodowało zgaszenie diody i kolejne rozjaśnianie.Warunek zadziałał dopiero gdy sutawiłem go w ten sposób: Kod: If Pwm1a>239 Then Pwm1a=235 Bo ja ci nie podałem gotowca tylko sposób, chodziło mi o to żebyś sobie sam dostosował, jak widać ci się udało 😉 Cytuj Link do komentarza Share on other sites More sharing options...
Sabre Październik 3, 2010 Udostępnij Październik 3, 2010 KD93, faktycznie coś było nie tak, ale już cytowanie selektywne działa u mnie ok. Dwa razy zamiast nicku agrala podstawiał się twój nick. Cytuj Link do komentarza Share on other sites More sharing options...
agrala Październik 3, 2010 Udostępnij Październik 3, 2010 Wydaje mi się że kolega MirekCz nie zrozumiał o co chodzi z płynną regulacją lub ja nie rozumiem Twojej wypowiedzi.. Nie chodzi o zmiane rozdzielczości z 20 do 1 tylko o to żeby dłuższe przytrzymanie przycisku powodowało mocniejsze rozjaśnienie lub ściemnienie diody. Widze że byłem bliski płynnej regulacji - wstawiałem wait ale po end if a nie przed. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!