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

Problem z odczytem PWM (lum zmianą PWM na DC)

Więckowy 13 Cze 2012 13:44 1032 6
  • #1 13 Cze 2012 13:44
    Więckowy
    Poziom 9  

    Witam serdecznie.

    Od kilku tygodni siedzę nad małym projekcikiem dla mojego Teścia i powoli opadają mi już ręce. Generalnie potrzebowałem mieć możliwość sterowania za pomocą pilota radiowego pracą serwomechanizmu. Jako pilota postanowiłem użyć zdalnego regulatora diod LED, do którego jest ładny radiowy pilot z potrzebnym mi zestawem przycisków (+, -, on/off).

    Problem z odczytem PWM (lum zmianą PWM na DC)

    Więcej fotek "od środka" w dużej rozdzielczości wrzuciłem tutaj: https://www.dropbox.com/gallery/164789/1/led?h=040741

    Niestety z wyjścia tego regulatora wychodzi PWM o napięciu 12,73V, z interpretacją którego mam wielki problem.

    Początkowo chciałem zamienić PWM na napięcie stałe, ale mimo szczerych chęci nie umiem sobie wyliczyć odpowiednich wartości do filtra RC. Jak bym nie kombinował, tętnienia wychodzą mi kolosalne, a chciałbym z nimi zejść do maksymalnie 5mV.

    Jako, że całość składam na razie na Arduino, postanowiłem spróbować odczytywać PWM bezpośrednio za pomocą PulseIn(). I tutaj pojawiło się światło w tunelu, bo zaczęło to działać tak, jak chciałem. Niestety po przerzuceniu tego samego programu z Arduino do ATtiny44 (zamiast Servo.h dałem tylko SoftwareServo.h) dzieją się takie cyrki:


    Link

    Próbowałem też wybadać w samym regulatorze, czy nie ma gdzieś źródła napięciowego/prądowego, które jest później zamienianie na PWM, ale niestety na wyjściu żadnego z układów nic nie znalazłem.

    Nie mam pomysłu, co może być nie tak, a czas mi się powoli kończy...

    Poratuje ktoś jakąś mądrą radą? Z góry dziękuję!

    0 6
  • #2 13 Cze 2012 13:58
    d21d3q
    Poziom 11  

    Dzielnik napięcia 12V -> 5V (4V bezpieczniej, ewentualnie ograniczenie diodą zenera). Taki PWM możesz spokojnie dekodować licznikiem w uC.

    0
  • #3 13 Cze 2012 14:00
    Więckowy
    Poziom 9  

    Tak, tak - jak odczytywałem bezpośrednio PWM funkcją PulseIn(), to oczywiście puszczałem to przez dzielnik :) Tylko właśnie po wgraniu tego samego, działającego programu na ATtiny44 powoduje takie cuda, jak na załączonym wyżej filmiku.

    0
  • #4 13 Cze 2012 14:36
    d21d3q
    Poziom 11  

    a sterownik do ledów nie wprowadza żadnych opóźnień? może tak być, że pilot nie wysyła sygnału bez przerwy tylko co z pewnymi przerwami (dla oszczędzania baterii). Na filmiku jest Arduino i też się dzieją cuda?

    0
  • #5 13 Cze 2012 14:41
    Więckowy
    Poziom 9  

    Sam sterownik daje tylko małe opóźnienie między wciśnięciem przycisku a rozpoczęciem ściemniania/rozjaśniania, ale po puszczeniu przycisku zatrzymuje się od razu. No i po podpięciu Arduino działa dobrze:

    Link

    0
  • #6 13 Cze 2012 16:28
    d21d3q
    Poziom 11  

    Jesteś pewien że można tak kod przerzucać z Arduino na inne procki? Nie bawiłem się nigdy Arduino, ale zaglądałem do jego bibliotek, a w nich znalazłem różne ustawienia timerów itp w zależności od procka jaki był na pokładzie. Spróbuj napisać program od podstaw bez bibliotek Arduino.

    0
  • #7 14 Cze 2012 09:01
    Więckowy
    Poziom 9  

    Problem rozwiązany! Wgrałem ten sam program na drugi µC i śmiga bez problemów. Widać coś musiało być nie tak z tym jednym ATtiny. Grunt, że sytuacja opanowana :D

    Wielkie dzięki za poświęcony czas!

    Projekcik jest już na ukończeniu i chyba uda się go dopiąć przed sobotą:


    Link

    0