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

Termostat na Atmega8: Jak mierzyć temperaturę bez czujnika?

asembler 28 Sty 2008 10:47 3569 12
REKLAMA
  • #1 4744097
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    Zrobiłem prosty termostat. Atmega8 jest docisnieta do bojlera.
    Prograsm mierzy czestotliwość zegara wewnętrznego i na tej podstawie wyświetla temperature wody. Wyświetlacz najpierw był LCD do prób docelowo ma to byc kolumna 5 diod LED o róznych kolorach od 40 do 80 stopniach niebieskiego do czerwonego. Rozdzielczosć wskazan 5 stopni C. Wprowadzanie temperatury za pomocą potencjometru.
    Układ posiada procedurę samokalibracji. i gotowy jest do dzialania po pierwszym podgrzaniu wody do maksymalnej temperatury
    A przede wszytkim działa i to nieżle.
  • REKLAMA
  • #2 4744240
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    asembler napisał:

    Prograsm mierzy czestotliwość zegara wewnętrznego i na tej podstawie wyświetla temperature wody.


    Mnie zawsze uczono że pomiar to porównanie wartości mierzonej ze wzrocową. A jak u ciebie to wyglada, co u Ciebie jest wzorcem?

    asembler napisał:
    Układ posiada procedurę samokalibracji


    Mógłbyś opisać w skrócie jak rozwiązałeś algorytm samokalibracji?
  • REKLAMA
  • #3 4744254
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    markosik20 napisał:
    asembler napisał:

    Prograsm mierzy czestotliwość zegara wewnętrznego i na tej podstawie wyświetla temperature wody.

    Mnie zawsze uczono że pomiar to porównanie wartości mierzonej ze wzrocową. A jak u ciebie to wyglada, co u Ciebie jest wzorcem?

    Wzorcem mósi być kwarc. CPU chodzi z kwarcu a licznik znlicza zegar z DCO. Nie wiem czy tak można w Atmega8 ale w MSP430 tak robiłem. Czasem można wykorzystać zegar WatchDoga do tego, a samego WatchDoga jako licznik. Uzyskana w ten sposób informacja o zmianie temperatury jest bardzo przydatna, na jej podstawie można zrobić naprzykład kompensację temperaturową całego urządzienia.

    Dodano po 2 [minuty]:

    I tu pytanie do zaznajomionych z Atmelem. Czy w Atmega i Atiny da sie peryferia (liczniki, ADC, ...) zasilać z DCO podczas gdy CPU chodzi z kwarcu?
  • REKLAMA
  • #4 4744266
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    Po krótce program wygląda tak.
    1. Próba wykrycia DS18B20 jezeli jest to odczyt wartosci progrma znajduje sie w pętli samokalibracji, jeżeli nie ma w pętli termostatu
    2. Pomiar wewnętrznnej czest.
    3. Jezeli kalibarcja to zapisanie wartosci w EEPROM oscylacji w danej temperaturze
    4. Wyswietlenie wartosci na diodach
    5 Pomiar napiecia z potencjometru
    6. Usypiam na 8 sek

    Po zapełnieniu całej tablicy wypinam DS-sa i uklad gotowy do pracy. Wzorcem do pomiaru jest kwarc 32768 dołączony do licznika 2.
  • #5 4744355
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Dr_DEAD napisał:
    Uzyskana w ten sposób informacja o zmianie temperatury jest bardzo przydatna, na jej podstawie można zrobić naprzykład kompensację temperaturową całego urządzienia.
    Czy w Atmega i Atiny da sie peryferia (liczniki, ADC, ...) zasilać z DCO podczas gdy CPU chodzi z kwarcu?


    I tu pojawia się mały problem bo niestety CPU i peryferia są taktowane z jednego źródła (chyba że źle doczytałem :wink:). I jeżeli nasz układ komunikuje się ze światem zewnętrznym np: przez UARTA to wszelkie zmiany Fclk mogą spowodować spore błędy w komunikacji jak również jej całkowitego wyłączenia.

    asembler napisał:
    Próba wykrycia DS18B20


    A jednak musimy podłaczyć czujnik temperatury (do kalibracji):wink:.
    Jeżeli dokładnośći +-5st.C jest wystarczająca oraz układ nie musi "meldować się" jednostce nadrzędnej to taki termostat wydaje się wystarczający.
  • #6 4744382
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    Jeżeli chodzi o komunikację przez UART to w takich przypadkach wysyłam przez port tylko dwie wartosci ktore odpowiadajace 1,0 logicznemu inaczej mówiac jeden bajt informacji wysyłany jest jako 8 bajtów. Stosując tą metodę odchyłki czestotliwosci CPU mogą wynies nawet do 20%
    Czujnik DS18b20 dołączony tylko na czas samokalibracji.
    Dokładność pomiaru 1 stopień
    Dokładność wyświetlania 5 stopni mozna oczywicie dołączy wiekszą ilośc diodek LED z tym ze po co:)
    Zmiany czestotliwosci to około 400kHz i nawet zwykła transmisja jezeli sie ustawi oscylator na wartosc srodkową to odchylki wyniosą -/+ 2 %
  • #7 4744401
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    markosik20 napisał:

    I tu pojawia się mały problem bo niestety CPU i peryferia są taktowane z jednego źródła (chyba że źle doczytałem :wink:).

    Uuuuu, no to cieniutko. W MSP430 to mamy 3 źródła zegarowe do wyboru.
  • #8 4744435
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    Jakby dobrze policzyc to Atmega8 ma ich 4 jezeli wejscie T0 i T1 mozna zaliczyc do zródel zegarowych.
  • #9 4744438
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Dr_DEAD napisał:

    Uuuuu, no to cieniutko. W MSP430 to mamy 3 źródła zegarowe do wyboru.

    Tylko że za cenę MSP430 mamy trzy atmegi :wink: (jak nie więcej)
  • REKLAMA
  • #10 4744465
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    Doktorku podeślij note katalogową MSP430
  • #11 4744602
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    asembler napisał:
    Doktorku podeślij note katalogową MSP430

    Nota katalogowa -> http://www.ti.com/litv/pdf/slau049f
    A to wycinek dotyczący zegarów:
    Termostat na Atmega8: Jak mierzyć temperaturę bez czujnika?
    Czyli przykładowo mogę mieć dostępne:
    ACLK - 32kHz
    MCLK - 4MHz
    SMCLK - programowo przestrajalne DCO.
    A co do ceny to wynika ona z małej popularności, przykładowo MSP430F149 z TME jest za 60zł, ale na tej aukcji za 15zł.
    http://www.subasta.pl/item-100716_msp430f149__16_bit_mikroprocesor_risc_60k_flash.html
  • #12 4744650
    Fyszo
    Poziom 37  
    Posty: 3987
    Pomógł: 223
    Ocena: 115
    To już prościej zrobić mostek z 3 rezystorów i drutu stalowego i badać rezystancje drutu za pomocą wbudowanego A/C. Skoro i tak trzeba kalibrować to może byc czyjnik nieliniowy jak fale dunaju (dowolny kawałek drutu).
  • #13 4744694
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    Termostat zrobiony raczej po to, żeby sprawdzić czy to ma prawo działać.
    Z drugiiej strony moznaby po skalibrowaniu jednego układu poprostu przepisac tablice z EEPROM i sprawdzic czy na innym procku bedeiz dzialać?. Podejrzewaz ze na wiekszosci bedą podobne wyniki a przy założonej dokładności moze to dzialac.

Podsumowanie tematu

✨ Omówiono projekt prostego termostatu opartego na mikrokontrolerze Atmega8, który mierzy temperaturę wody bez użycia stałego czujnika, wykorzystując pomiar częstotliwości wewnętrznego oscylatora DCO względem wzorcowego kwarcu 32,768 kHz podłączonego do licznika 2. System posiada procedurę samokalibracji, podczas której tymczasowo podłączany jest czujnik DS18B20 do zapisu wartości oscylacji w EEPROM dla różnych temperatur. Po kalibracji termostat działa autonomicznie, wyświetlając temperaturę na kolumnie 5 diod LED o rozdzielczości 5°C, z możliwością ustawiania temperatury za pomocą potencjometru. Dyskutowano ograniczenia Atmegi8 związane z tym, że CPU i peryferia są taktowane z jednego źródła, co może wpływać na dokładność komunikacji UART przy zmianach częstotliwości. Zaproponowano alternatywne metody pomiaru temperatury, takie jak pomiar rezystancji drutu stalowego za pomocą wbudowanego przetwornika ADC. Porównano możliwości Atmegi8 z MSP430, który oferuje więcej źródeł zegarowych, co ułatwia stabilizację i kalibrację. Projekt ma na celu sprawdzenie zasadności pomiaru temperatury bez dedykowanego czujnika, z możliwością przenoszenia kalibracji między układami poprzez kopiowanie tablic EEPROM.
Wygenerowane przez model językowy.
REKLAMA