Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Arduino - Odczyt sygnału pulsycajnego i zapis w formie pwm.

06 Lut 2016 20:53 2235 20
  • Poziom 9  
    Witam
    Potrzebuje małej pomocy w kodzie. Dodam że dopiero zaczynam się uczyć i mogłem coś źle napisać w kodzie.
    Chcę odczytywać wartości z odbiornika aparatury w formie pulsacyjnej i zamianie jej na analogowy z zapisem do wyjścia PWM.
    Dzięki za pomoc.

    Kod: PWM
    Zaloguj się, aby zobaczyć kod
  • Poziom 22  
    val = pulseIn(pwmRead,HIGH);
    zwraca ilość mikrosekund (lub 0) -- czyli wartosci od 0 do 1000000 bo timeout domyslny to 1s

    wiec na poczatek zmienolbym map
    map(val, 0,1000000,0,255);

    chyba powinno byc takie:
    analogWrite(pwmWrite,val);

    To chyba kawalek kodu pisany na sucho bez proby wgrania...?
  • Moderator Mikrokontrolery Projektowanie
    luki28 napisał:
    Witam
    Potrzebuje małej pomocy w kodzie. Dodam że dopiero zaczynam się uczyć i mogłem coś źle napisać w kodzie.
    Chcę odczytywać wartości z odbiornika aparatury w formie pulsacyjnej i zamianie jej na analogowy z zapisem do wyjścia PWM.
    Dzięki za pomoc.


    Skoro zaczynasz to porzuć to dziwaczne Arduino i zacznij pisać w C. Dlaczego? Dlatego, że to jest bardziej intuicyjne i przede wszystkim efektywne.
    Jak rozumiem chcesz odczytać szerokość impulsu z odbiornika dającego sygnał PPM. W tym celu należy skonfigurować timer, tak, aby mierzył sprzętowo szerokość impulsu. A następnie uzyskaną wartość po przetworzeniu (linearyzacja, eliminacja zakłóceń) wpisać do drugiego timera, który wygeneruje sygnał PWM, który podasz na filtr dolnoprzepustowy, który z niego zrobi napięcie w zakresie 0..Vcc. Całość to parę linii kodu i w dodatku nie obciąża znacząco MCU, bo prawie wszystko jest realizowane sprzętowo. Mam podejrzenia, że użyta przez ciebie funkcja z Arduino po prostu w pętli próbkuje stan wejścia, co całkowicie blokuje procesor i w efekcie powoduje, że tak zrealizowany program jest bezużyteczny.
  • Poziom 22  
    Dla rozpoczynających to arduino nie jest złe bo nie trzeba walczyć z konfiguracją peryferiów i wczytywać sie datasheet (po to zresztą arduino stworzono chyba).

    Tak wogóle to arduino to jest C /C++ oraz arduino API.
    Przecież gdzieś pod maską arduino jest main() i wywołanie funckji setup() oraz w pętli while funkcji loop(). Zatem pisząc w arduino ćwiczymy C i nie zrażamy się komplikacją konfiguracji peryferiów. Oczywiście jest to okupione pewnymi ograniczeniami API.
  • Moderator Mikrokontrolery Projektowanie
    bgolab napisał:
    Dla rozpoczynających to arduino nie jest złe bo nie trzeba walczyć z konfiguracją peryferiów i wczytywać sie datasheet (po to zresztą arduino stworzono chyba).

    Tak wogóle to arduino to jest C /C++ oraz arduino API.
    Przecież gdzieś pod maską arduino jest main() i wywołanie funckji setup() oraz w pętli while funkcji loop(). Zatem pisząc w arduino ćwiczymy C i nie zrażamy się komplikacją konfiguracji peryferiów. Oczywiście jest to okupione pewnymi ograniczeniami API.


    Jeśli już to ćwiczymy C++ ze wszystkimi tego wadami i zaletami. Ale wątek nie jest o wyższości jednego nad drugim. Akurat podana aplikacja wymaga wczytania się w datasheet i sprawdzenia co jest pod maską. Inaczej powstanie totalnie nieefektywny kod, niemożliwy do połączenia w większą aplikację. Niestety Arduino daje złudne poczucie, że da się stworzyć jakąś warstwę abstrakcji nad sprzętem w przypadku MCU. Nie jest to prawdą. Efektywne programowanie MCU wymaga zagłębienia się w budowę peryferii.
  • Poziom 22  
    Facet zadał pytanie o arduino. Otrzymał jakąs sugestie i nie wiemy czy pomogło czy nie. Nie prowokowałem rozmowy na tematy uboczne bo to nie ma sensu.

    Jak to w informatyce: są rzeczy do róznych zastosowań. Sam uzywam zarówno arduino jak i STM32 i daleki jestem od oceny co jest lepsze. Wszystko ma swoje miejsce zależnie od projektu.

    Jestem za trzymaniem sie tematu.
  • Moderator Mikrokontrolery Projektowanie
    I właśnie w tym projekcie taka realizacja dekodowania ppm to strzał w kolano, a nawet oba. pulseIn wstrzymuje procek na cały czas trwania dekodowania, wykorzystanie timera umożliwia realizację dekodowania sprzętowo. Dopóki program sobie mierzy tylko szerokość impulsu i przepisuje do PWM wynik, to problem niewielki. Ale: niemożliwe jest połączenie tego z przerwaniami (a programy na MCU bez przerwań właściwie nieistnieją), niemożliwa jest też rozbudowa programu. W efekcie taka aplikacja jest kompletnie bezużyteczna.
  • Poziom 22  
    Nie wiemy jaki jest cel aplikacji tj. wymagania.

    Oczywiście leiej jest pisać programy nieblokujące i w sytuacji korzystania z timera i przerwań jest to efektywniejsze. Wiele prostych programów piszemy w sposob synchroniczny (blokujący) bo jest prościej (równiez do zrozumienia). Asynchroniczne przetwarzanie wymaga często utzrymywania maszyn stanu co pewnie dla początkującego nie jest łatwe.

    Zatem trudno mi sie wypowiedziec czy wybrane podejscie do rozwiązania problemu jest dobre bo nie znam założeń. Jestem zwolennikiem korzystania z narzędzi i doboru architektury by zrealizowac określone cele skutecznie.

    Dodano po 2 [minuty]:

    Myślę, że to jest temat na osobny watek ale szczerze mówiąć nie chce mi sie uczestniczyć w dyskusji na temat wyższości jedengo sposbu na d innym - ważne by swiadomie podejmować decyzje.
  • Poziom 9  
    tmf - Doceniam że chcesz mi doradzić, ale jak na razie to dopiero zaczynam się uczyć i poznawać co i jak, jestem jak dziecko w przedszkolu. :D Więc póki co się rozglądam.

    Poza tym sugerowałem się tym co znalazłem na internecie i chciałem napisać samemu a nie kopiować, bo chyba o to chodzi. Fajnie że skrytykowałeś to co napisałem, przynajmniej wiem gdzie jest błąd i będę się to starał naprawić.

    bgolab - Dzięki też za pomoc ale z mapowaniem też nie wychodziło więc pójdę w timera i zobaczę co się z tego wyciśnie. :)

    Ogólnie to zakładałem że wygnał z odbiornika jest w PWM a nie PPM. Dlatego że nic nie znalazłem na u producenta jaki sygnał jest podawany na 3 pin. Albo ja jestem ślepy.
    Aparatura : Futaba T6J z odbiornikiem "R2006GS"
  • Poziom 22  
    Pewnieprzydałyby sie jakieś szczegóły dotyczące niedziałania. W jaki sposób stwiedzono, że "nie wyszło" by unikac ogólników.
  • Poziom 9  
    Dobra coś tam naskrobałem. Wszystko spoko i działa ale nie jest to co chciałem.
    Bo napięcie na wyjściu jest za niskie do sterowania sterownikiem led który potrzebuje min. 5v

    Kod: PWM
    Zaloguj się, aby zobaczyć kod
  • Użytkownik usunął konto  
  • Poziom 35  
    luki28 napisał:
    Dobra coś tam naskrobałem. Wszystko spoko i działa ale nie jest to co chciałem.
    Bo napięcie na wyjściu jest za niskie do sterowania sterownikiem led który potrzebuje min. 5v


    Skad wiadomo że 'za niskie'? czym to mierzyłeś;
    -miernikiem ?, [RMS]
    -czy scope ?
    Sygnał na wyjściu odbiornika ma rzeczywiście charakter PWM o częstotliwości około 50Hz (dla analogowego servo) i wypełnieniu : 5 do 10% - odpowiednio dla skrajnych położeń. Jest to logiczny sygnał o napięciu wystarczającym do wysterowania układu wbudowanego w servo.
    Aby osiągnąc 'to co chciałem' - możesz wzorowac się na tym układzie;

    Arduino - Odczyt sygnału pulsycajnego i zapis w formie pwm.

    e marcus
  • Poziom 9  
    Piotrus_999 napisał:
    To sobie zrób wzmacniacz. Albo zrób sumator napięć na wzmacniaczu. albo steruj PWM mosfeta i steruj ledami zebposrednio.
    \\

    Jak już wspomniałem zaczynam się bawić uC. Liczyłem że dostanę to co w przypadku sterowania ledem przez PWM za pomocą potencjometra wpiętego na analogu. Już próbowałem opcji ze wzmacniaczem i tranzystorem, nic to nie zmieniło w opcji sterowania.

    emarcus napisał:

    Skad wiadomo że 'za niskie'? czym to mierzyłeś;
    -miernikiem ?, [RMS]
    -czy scope ?
    Sygnał na wyjściu odbiornika ma rzeczywiście charakter PWM o częstotliwości około 50Hz (dla analogowego servo) i wypełnieniu : 5 do 10% - odpowiednio dla skrajnych położeń. Jest to logiczny sygnał o napięciu wystarczającym do wysterowania układu wbudowanego w servo.
    Aby osiągnąc 'to co chciałem' - możesz wzorowac się na tym układzie;



    Tak mierzyłem miernikiem. Lepsza opcja wiadomo oscyloskop ale nie ma więc radzę sobie tak.

    Powiem tak że potrzebuje to do sterowania tego sterownika led CL6807

    Dodano po 5 [godziny] 17 [minuty]:

    Hmm zastanawiam się dlaczego usuwane są posty ??
  • Moderator Mikrokontrolery Projektowanie
    luki28 napisał:
    Lepsza opcja wiadomo oscyloskop ale nie ma więc radzę sobie tak.

    Masz tylko o tym nie wiesz: http://mikrokontrolery.blogspot.com/2011/04/darmowy-oscyloskop-i-analizator.html
    Być może na razie Ci wystarczy.


    luki28 napisał:
    Hmm zastanawiam się dlaczego usuwane są posty ??

    Emarcus sam skasował:

    Cytat:
    Skasowano z tematu: Arduino - Odczyt sygnału pulsycajnego i zapis w formie pwm.
    przez emarcus dnia 19 Lut 2016 22:07
  • Poziom 9  
    Nawet spoko program, dzięki.
  • Poziom 9  
    Jakieś propozycje. ?? Bo kończą mi się pomysły.
  • Użytkownik usunął konto  
  • Poziom 9  
    Cytat:
    Na razie jeszcze Ci sie nie zaczeły nawet. Bo chcesz zebysmy to za Ciebie zrobili.


    Prosiłem o pomoc a nie o napisanie programu... Ale skoro to tak widzisz to spoko.

    Cytat:

    Na poczatek zabawy z uC - troche sie poucz. Techika wymaga wiedzy, trzeba włożyc troche wysiłku żeby ją opanowac.


    Na chwile obecną mam dużo nauki ale do matury, więc chwilowo nie mam czasu na badanie kodu i zabawy z nim. Chciałem tylko mieć to z głowy i na spokojnie zająć się uC. Jak już skończę z maturą.

    Cytat:
    Lektura w internecie: PWM i poniewaz chcesz RC - to PWM
    Przerwania i timery - kolega dondu prowadzi blog i kolega mirek - znajdziesz w internecie.
    Filtr dolnoprzepustowy i dlaczego on dziala jak DAC. O C i procesorach nawet nie wspomnę (+ prawo Ohma , kirchoffa + cos o kondenstaroach i cewkach)

    Przeczytaj datasheety swoich urzadzen a nie proś zebysmy to robili za Ciebie.
    inaczej cała zabawa nie ma sensu.

    Twóje ustrojswo i program sa trywialne. Dlatego postaraj się SAM krok po kroku dojsc jak wysterowac diode, jak ją sciemnic, jak odczytac wartość z odbiornika itp. Jsk nie dasz rady, to moze to prostu jest za trudne i nie dla Ciebie.


    Fantastyczna motywacja dzięki...

    Cytat:

    Na razie jak widze to nie chce Ci sie ruszyć glową i nawet przeczytac datasheet sterownika diody


    Czytałem ale może coś przeoczyłem, ale jakoś nikt mnie o tym poinformował tylko wytknął lenistwo.... Cała elektroda .... Myślę że ostatni raz tu piszę posta o pomoc.
  • Moderator Mikrokontrolery Projektowanie
    luki28 napisał:
    Czytałem ale może coś przeoczyłem, ale jakoś nikt mnie o tym poinformował tylko wytknął lenistwo.... Cała elektroda .... Myślę że ostatni raz tu piszę posta o pomoc.

    Można się obrażać, ale pod warunkiem, że daje się nam materiały do analizy, odpowiada na pytania oraz wykonuje co sugerują podpowiadający.

    Tymczasem od postu #16:

    luki28 napisał:
    Nawet spoko program, dzięki.

    czekamy na informację, czy za pomocą wskazanego oscyloskopu sprawdziłeś sygnał, a jeśli tak, to na opisanie tego co zaobserwowałeś, a zamiast tego otrzymujemy:

    luki28 napisał:
    Jakieś propozycje. ?? Bo kończą mi się pomysły.

    Nie dziw się więc, że tak reaguje Piotrus_999. Ty na jego miejscu zareagowałbyś ta samo ... a wróżbitami nie jesteśmy.
  • Poziom 9  
    Cytat:
    luki28 napisał:
    Jakieś propozycje. ?? Bo kończą mi się pomysły.

    Nie dziw się więc, że tak reaguje Piotrus_999. Ty na jego miejscu zareagowałbyś ta samo ... a wróżbitami nie jesteśmy.


    Napisałem to nie potrzebnie. Za co przepraszam, a jak mój problem jest trywialny i mało skomplikowany dla osób początkujących najwidoczniej nie potrzebnie zadaje bezsensowne pytana.

    Jak już pisałem więcej nie będę się prosił o pomoc bo pewnie znowu dostanę jakieś dziwne odpowiedzi jak np. na początku tematu.

    Dzięki za pomoc. Nad kodem posiedzę sam.