logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Ogólnie - wypełnienie PWM na podstawie temperatury

bill33 29 Lip 2013 12:32 1179 4
REKLAMA
  • #1 12572743
    bill33
    Poziom 10  
    Witam.
    Mam problem natury czysto "algorytmicznej" ;) mam zbudowany układ który mierzy temperaturę za pomocą DS18b20 i wyświetla ja na wyświetlaczach 7-segmentowych. Na podstawie tej samej temperatury powinno zostać określone wypełnienie sygnału PWM.
    W EEPROM'ie zapisane są temperatury graniczne Tl i Th (kolejno minimalna i maksymalna). Dla minimalnej wypełnienie powinno być 50%, a dla maksymalnej 100%.
    Próbowałem już sam coś szkodzić, ale jakoś mnie to przerasta :/ Patrzyłem też na forum np: Link , ale te wzory nie do końca chcą mi działać :(

    Poprawiłem pisownię.
    Dar.El
  • REKLAMA
  • #2 12572988
    Steryd3
    Poziom 33  
    Nie piszę w Bascomie tylko w C ale by ktokolwiek mógł Ci pomóc musisz wstawić jakiś bardziej szczegółowy opis jak to ma działać a co ważniejsze jakiś fragment kodu do którego można się odnieść i coś popoprawiać lub poradzić. Napisz na jakim mikrokontrolerze to budujesz, wstaw jakiś schemat i wtedy wątek zacznie żyć. Bez tego konkretna pomoc właściwie jest nie możliwa. Mogę Ci tylko napisać, iż da się coś takiego zrobić.
  • REKLAMA
  • Pomocny post
    #3 12574155
    GanzConrad
    Poziom 25  
    przy założeniu 8 bitowego PWM, OCRx zmieniać się będzie od 126 - 255, czyli przyjmie wartości 126 + (od 0 do 129). Temperatura zmienia się w zakresie Tl-Th, więc:
    (uint8_t)(129 / (Th-Tl)) będzie skokiem PWM dla 1 stopnia powyżej Tl
    jeśli Tl<temperatura<Th
    OCRx = 126 + ( (Temperatura - Tl ) * (uint8_t)(129 / (Th-Tl)) )
    mimo, że nie Bascom, myślę, że wszystko jasne. (uint8_t) zwraca część całkowitą z dzielenia.
  • REKLAMA
  • #4 12574474
    Tuxlab
    Poziom 13  
    Witam !

    Najprościej zastosować czujnik w którym temperatura jest zakodowana za pomocą wypełnienia np TMP04 firmy AD lub dokładniejszy SMT160.

    pozdrowienia
    T
  • #5 12577712
    bill33
    Poziom 10  
    Dzieki za odpowiedzi ;)
    Udało mi sie stworzyc nawet coś co działa. Chwila natchnienia ;)

    Tuxlab napisał:
    Najprościej zastosować czujnik w którym temperatura jest zakodowana za pomocą wypełnienia np TMP04 firmy AD lub dokładniejszy SMT160.
    Ale nie tak prosto jechac do elektronika po to kiedy najblizszy jest 20km od domu i to jeszcze nie wszystko w nim maja xP

    A ja zmontowałem coś takiego. Może się to komuś przyda ;)
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Wyjśnienie:
    PWM_min - minimalne wypełnienie jakie chcemy uzyskać (255 w sumie chyba można zamienić na najwyższe jakie chcemy)
    PWMH - maksymalna osiagana temperatura
    PWMH - minimalna osiagana temperatura
    krok - przeskalownie. O ile trzeba zwiekszyć OCRxx przy zmianie o jeden stopień C

    krok jest wyliczany w programie tylko na początku (zakładam, że graniczne temperatury sie nie zmieniaja), dlatego jest poza funkcja Set_PWM,m a nawet za pętla główną.
    W sumie wszystko obliczane wg metody GanzConrad, ale myśle, ze troche czytelniej ;)

    Jeszcze raz dzieki za pomoc ;)

    /BTW: nie do końca rozumiem czemu temat został przeniesiony z programowania do mikrokontrolerów... Ale co ja tam wiem ;)
REKLAMA