Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

atmega8 i sterowanie cewką cosinusową i sinusową wskaźnika

boe666 22 Oct 2007 23:08 3704 14
  • #1
    boe666
    Level 12  
    Witam. Mam takowy problem. Otóż staram się zamontowac obotomierz do autka. Oryginalna elektronika niestety padła - pozostała cewka (podwójna). W jaki sposób za pomoca np atmega8 + pcf8444 wysterować tą cewkę. Ktoś wie może jak ona działa ? ew. czy ktoś próbował sygnał impulsów przerzucić np na sygnał analogowy dla zwykłej cewki? Czy pcf8444 może bezpośrenio zasilać taką cewkę.
  • #2
    autoservice
    Level 20  
    szukaj w google itp miernika ilorazowego.
    Pzdr.
  • #3
    boe666
    Level 12  
    Zasadę ogólnie znam, tylko nie wiem jak to zrobić i czy wogóle się da na atmega. Bo wszystkie posty sa o pomiarze impulsów w ciągu 1 sekundy. To trochę za mało by płynnie sterować wskazówką. I inna sprawa, jak wpiąć do atmega sygnał z cewki? jakiś opornik czy kondensator? gdzie szukać działającego schematu ?
  • #4
    autoservice
    Level 20  
    ...to w czym problem? albo sterowanie PWM i generacja odpowiedniego przebiegu, albo drabinka R-2R jako przetwornik C/A i też generacja odpowiedniego przebiegu, chyba sinusa dla tego miernika ilorazowego
    Pzdr.
  • #5
    elektronika1984
    Level 12  
    Jeśli chodzi o pobieranie sygnału z cewki w celu zmierzenia obrotów to schemat obwodu wejściowego zamieszczam poniżej. Oczywiście odpada układ MAX481 - on jest z innej bajki;) Sam go projektowałem i sprawdzałem w praktyce więc na 100% działa. Musisz tylko uwzględnić jaki masz silnik tzn. ile cylindrów itp, żeby wiedzieć ile impulsów daje cewka na jeden obrót wału. Już nie pamiętam dokładnie jak było z tymi zależnościami, ale bardzo łatwo znaleźć to na necie.
    atmega8 i sterowanie cewką cosinusową i sinusową wskaźnika

    Jeśli chodzi o płynność wskazań to ja rozwiązałem to nieco w inny sposób. Jak widać wyjście z NE555 mam podłączone do int0. Odpalony mam w tym czasie timer, który mierzy czas między jednym a drugim przerwaniem. Mając ten czas możesz określić jak szybko kręci się wał. Dzięki temu masz informacje o obrotach.
  • #6
    boe666
    Level 12  
    do ilorazowego muszę mieć 2 sygnały analogowe, dla każdej cewki osobno (chyba ze się mylę). Na jednej uzyskasz wychył do 90 stopni. Chciałem to zrobić na tda8444 tj zebrać sygnał i powyżej pewnej wartości podawać na drugą cewkę napięcie (pow 90 stopni wychylenia). Próbuję już wszystkiego ale nie mogę sobie poradzić z i2c. Tj. zasilam VCC i VMAX z 12 V+, a0,1,2 do masy, sda i scl do atmega (z opornikami do 12+ 4,7K lub bez) w atmedze portc.5 i 6 i program:

    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Scl = Portc.5
    Config Sda = Portc.4
    Config I2cdelay = 5
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
    Do
    Cls
    Lcd "Programowanie"
    I2cinit
    Wait 1
    I2cstart
    Wait 1
    I2cwbyte &B01000000
    I2cwbyte &B01110000
    I2cwbyte &B111111
    I2cstop
    Wait 1
    Cls
    Lcd "zaprogramowano"
    Wait 1
    Loop
    End
    i nic nie działa. Poradzcie czy dobrze adresuję ten układ.

    Dodano po 2 [godziny] 5 [minuty]:

    Ok udało się wysterować tda8444
    Nie wiem nadal jednak jak pogodzić 2 sygnały aby mieć pełny zakres wskazań. Jedna cewka pokazuje do 4 tyś, druganatomiast wpływa na ta pierwszą. Zna ktoś jakie są zalezności pomiędzy tymi cewkami?
  • #7
    elektronika1984
    Level 12  
    Po pierwsze skonfigurowałbym piny na których jest wyprowadzona magistrala I2C jako wyjścia. Po drugie usunąłbym instrukcję "wait 1", która jest po instrukcji "I2cstart". Adresowanie jest dobrze. Źle zapisany jest drugi bajt, który wysyłasz (ten który poniżej zaznaczony jest strzałką). Ten bajt składa się z dwóch częsci. Pierwsza część (starsza) to instrukcja. Może ona przyjmować wartości 0000 lub 1111. Druga część to wybór kanału przetwornika zakres 0000 - 0111. Poprawna wartość drugiego bajtu to:
    0000 0xxx lub 1111 0xxx. Jeśli chodzi o trzeci bajt jaki wysyłasz to jest to wartość napięcia jaka ma być wysłana na wyjście przetwornika - tutaj zjadłeś gdzieś dwa bity. To że dwa pierwsze bity są nieznaczące nie oznacza to, że masz ich nie wysyłać. Chodzi o to, że możesz tam wysłać co chcesz, czyli 0 lub 1.
    Zmodyfikowany program masz poniżej:

    Quote:

    $regfile = "m8def.dat"
    $crystal = 8000000

    Config Portc = &B00110000 'przykładowa konfiguracja portu 0 - to wejście, 1 to wyjście
    Portc = 255

    Config Scl = Portc.5
    Config Sda = Portc.4
    Config I2cdelay = 5
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2

    Do
    Cls
    Lcd "Programowanie"
    I2cinit
    Wait 1
    I2cstart
    I2cwbyte &B01000000 'adres
    I2cwbyte &B11110000 '<------
    I2cwbyte &B00111111
    I2cstop
    Wait 1
    Cls
    Lcd "zaprogramowano"
    Wait 1
    Loop
    End
  • #8
    boe666
    Level 12  
    Dzięki za info. Wartość podaje dziesiętnie 0-63. Nap ref. 5v. Wszystko już działa ok, jednak nie wiem jakie są zależności pomiedzy tymi cewkami. Ktoś może zna jakiś wzór na wychylenie i wogóle czy się da dwoma napięciami stałymi wysterować tą wskazówkę w pełnym zakresie ?
  • #9
    William Bonawentura
    Level 34  
    boe666 wrote:
    Dzięki za info. Wartość podaje dziesiętnie 0-63. Nap ref. 5v. Wszystko już działa ok, jednak nie wiem jakie są zależności pomiedzy tymi cewkami. Ktoś może zna jakiś wzór na wychylenie i wogóle czy się da dwoma napięciami stałymi wysterować tą wskazówkę w pełnym zakresie ?


    Tego ustroju wcale nie trzeba sterować przebiegiem sinusoidalnym. Dużo łatwiej robi się to prostokątem o regulowanym wypełnieniu. Pytasz o ogólny wzór na wychylenie wskazówki. Ma on postać:

    φ=arc tg( A/B )

    Gdzie A i B to wartości SKUTECZNE napięć podawanych na cewki. Dla przebiegów prostokątnych wartość skuteczna to oczywiście amplituda * współczynnik wypełnienia. Jeśli amplitudę masz taką samą w obu kanałach (zasilanie, driver) to we wzorze znosi się ona do jedynki i decyduje tylko PWM. Wzór ten powtarza się dla kątów 0-180 i 180-360 stopni stąd podajesz taki sam sygnał gdy wskazówka jest w danej pozycji jak i w tej przeciwległej do niej (dwa stany stabilne). Dlatego nie można sterować napięciami "nagle". Np. jeśli wskazówka jest ustawiona na 240 stopni to próba nagłego podania takich przebiegów które dają 10 stopni da 190. Trzeba "płynnie" przejść od 240 do tych 10. Ja akurat robiłem sterownik na 8051 i zastosowałem jako drivery wyjściowe zwykłe NE5555 (cztery sztuki) sterowane z 4 pinów procesora. Działało wyśmienicie. Przy 5V prostokąta na cewkach ustrój był jak dla mnie trochę za wolny, dlatego dałem 8V.
  • #10
    boe666
    Level 12  
    Dzięki za info. Czyli nie da się tego wysterować dla napięć stałych?, tzn we wzorach decydowała by amplituda, czyli sterowałbym napięciem, tj. jego wysopkością, wypełnienie byłoby 100%. Z tego wychodzi ze najplepeij zrobić mapę napięć i atmega musiałaby pamiętać w którym położeniu się znajduje i zmieniać napięcia zgodnie z mapą py dojść do zadanego wskazania. Jeszcze jedno, skąd wziąść ne5555, co to jest za układ.

    Nie mógłby Pan przesłać jakiegoś schemaciku, ew. algorytmu do sterowania cewkami, tj zależność poziomu napiec/wypelnienia cewek w zaleznosci od wychylenia
  • #11
    William Bonawentura
    Level 34  
    Chodziło mi oczywiście o NE555 czyli popularny "timer". Doskonale sprawdza się on również w roli komplementarnego drivera (300mA) i konwertera poziomów (u mnie) 5V -> 8V. A kosztuje tylko złotówkę. Ja wybrałem sterowanie PWM z uwagi na koszty - jeśli mamy CPU to po trzebne są tylko cztery cyfrowe drivery. Sterowanie napięciem stałym to przetwornik C/A + multiplekser + analogowe drivery. W AVR mamy sprzętowy generator PWM, więc tym bardziej warto go wykorzystać.
  • #12
    boe666
    Level 12  
    czemu 4 drivery? Tzn rozumiem że w tych cewkach musi być przejście z + na - czyli zasilamy jedną cewkę 2 driverami, tak to rozumiem. Rozumiem że nie da się tego zrobić na tda8444 (8 wyjść analogowych) . Dobrze to rozumiem ?
  • #13
    szymtro
    Level 30  
    to jest dobre miejsce żeby sensownie zacząć:
    http://www.mikesflightdeck.com/diy_aircore_instruments.htm

    Co do drivera to robi sie to inaczej.
    Cztery rezystory podciągające cewki do plusa.
    Cztery tranzystory ściągające cewki do masy.
    Osiem rezystorów sterujących tranzystorami (połączenie szeregowe po dwa)
    Do tego dwa sprzętowe wyjścia PWM (jedno na jedną cewkę)
    I 4 zwykłe cyfrowe wyjścia do przełączania kierunku zasilania.
    Oprócz rezystorów podciągających wszystko w smd to zmieści sie swobodnie pod tarczą.
    W programie budujemy tablice tylko z wartościami SIN i tylko wartości z przedziału 0-90 stopni (pierwsza ćwiartka) - najlepiej 256 wartości.
    Zmienna wybierająca 10 bitowa i na jej podstawie sterowane wyjścia "blokowania" odpowiednich tranzystorów oraz do "odwracania" "zbocza"
    Opis nie jasny i potrzeba było by poprzeć rysunkami. Ale w ten sposób w miarę prosto i skutecznie dostajemy 10 bitów bez sterownika analogowego.
    Do tego celu tiny26 nadaje sie wyśmienicie (ma nawet adc jak by ktoś chciał do paliwa czy czegoś takiego).

    ------------------------------------------------------------
    W załączniku dwa na szybko narysowane schematy jak miało by to działać i jak wyglądać.
    Dla cosinusa trzeba oczywiście przesunąć sie w tablicy o 128 ale takie operacje są szybkie.
    Tablicę wartości można przygotować bezproblemowo w arkuszu kalkulacyjnym.
  • #14
    William Bonawentura
    Level 34  
    boe666 wrote:
    czemu 4 drivery? Tzn rozumiem że w tych cewkach musi być przejście z + na - czyli zasilamy jedną cewkę 2 driverami, tak to rozumiem. Rozumiem że nie da się tego zrobić na tda8444 (8 wyjść analogowych) . Dobrze to rozumiem ?


    Układ który podajesz to przetwornik C/A. Nie wysterujesz nim bezpośrednio cewki która ma 100om. Potrzebny ci będzie jeszcze jakaś końcowka mocy 4 kanałowa jako driver. Cewki trzeba umieć zasilać w obu polaryzacjach aby uzyskać pełne 360 stopni kąta obrotu. Pomysł kolegi z driverem PWM w postaci tranzystor + rezystor da przy omawianych warunkach ponad 3W straty na rezystorze, więc IMHO trzeba iść w stronę stopnia komplementarnego.
  • #15
    T_Marcin
    Level 11  
    William Bonawentura wrote:
    ...Ja akurat robiłem sterownik na 8051 i zastosowałem jako drivery wyjściowe zwykłe NE5555 (cztery sztuki) sterowane z 4 pinów procesora. Działało wyśmienicie.


    Mógłby kolega podesłać prosty schemat jak ten NE555 został zastosowany ?