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

[atmega8][avr studio] regulator prędkości z myszy kulkowej

tomasz1987 15 Lis 2009 12:33 10563 36
  • #1 7262990
    tomasz1987
    Poziom 16  
    na wstępie:
    Przejrzałem całe forum i google w poszukiwaniu odpowiedzi na mój problem a moje wypociny są wynikiem tego co znalazłem.

    Temat :
    Muszę znaleźć sposób na sterowanie(nadać konkretną prędkość w obrotach/na minutę) silnikiem prądu stałego

    wypociny:
    Najpierw chciałem zrealizować sam pomiar prędkości więc zmodyfikowałem program dostarczony przez producenta płyty testowej :
    
    *******************************************************************************/
    /*					             PROPOX                                        */
    /*                           www.propox.com                                    */
    /*                                                                             */
    /* Program demonsturjący działanie wyświetlacza LCD 16x2.                      */
    /* This program show how to use LCD 16x2 with atmega familly microcontroller.  */
    /*******************************************************************************/
    // wewnetrzny zegar 1MHz (internal oscillator 1MHz)
    // PD0 - R/S
    // PD1 - E
    // PD2 - D4
    // PD3 - D5
    // PD4 - D6
    // PD5 - D7
    
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/pgmspace.h>
    
    #include "char_code.h"
    #include "LCD_lib.h"
    #include <avr/interrupt.h>  
    
    ////////////////////////////////////////////////////////////////////////////////////
    volatile unsigned int flaga = 0; 
    
    
    
    void Inicjalizacja(void) 
    { 
    LCDinit();
    LCDcursorOFF();                       //Inicjalizacja wyświetlacza 
       sei();                            //Włączenie obsługi przewań    
        
       MCUCR = (1<<ISC11);         //Wyzwolenie przerwania zboczem opadającym 
       GICR |= 1<<INT1;                  //Załączenie przerwania na INT1 
    } 
    
    SIGNAL (SIG_INTERRUPT1) 
    { 
       flaga++; 
    } 
    
    
    int main( void ) 
    { 
       Inicjalizacja(); 
      
    
          while(1) 
       {    
          LCDGotoXY(flaga,0);
    	  LCDstring("a",1);
    
       } 
       return 0;
    }

    Krótko dlaczego program jest tak napisany :
    mój wyświetlacz jest uszkodzony nie wyświetla cyfr ani nic z tablicy ascii
    A i wyświetlacz w configu przepoiłem na port c bo na PD3 jest przerwanie z którego korzystam


    a to moja płyta testowa jej producent to propox
    [atmega8][avr studio] regulator prędkości z myszy kulkowej

    i mysz na której dokonywałem testów
    [atmega8][avr studio] regulator prędkości z myszy kulkowej

    Samą mysz przetestowałem w szkole na oscyloskopie. Kiedy podpiąłem się sondą zobaczyłem sinusoidę (max 5V kiedy i min 2,5V) niestety dla mikroprocesora te napięcia to logiczna 1 więc musiałem skorzystać z zboczy. I TO POJAWIŁ SIĘ PROBLEM mikroprocesor reaguje kiedy dotykam palcem portu. kiedy fototranzystor z myszy jest podpięty reaguje kiedy poruszę a on nałapie światła.
    Według mnie A na wyświetlaczu powinny się pojawiać jedno za drugim niestety samo przerwanie potrafi się wywołać częściej niż sam procesor się odświeża? Na razie nic nie pomaga możliwe że jest to brak podstawowych informacji nie ukrywam nie jestem super programistą ale c dla mikroprocesorów jest troszeczkę inne od tego c którego się uczyłem na wykładach. Więc zwracam się do was mądrzejszych i bardziej doświadczonych o POMOC
  • #2 7263091
    janbernat
    Poziom 38  
    Fotografia niewyraźna, ale wyświetlacz chyba wpięty w port C a program wklejony dla portu D.
    A, dopiero doczytałem że program zmieniony.
    Ale komentarze też mógłbyś zmienić bo mylą.
  • #3 7263129
    tmf
    VIP Zasłużony dla elektroda
    Ale w czym konkretnie masz problem i co to znaczy, ze przetestowales mysz na oscyloskopie? Domyslam sie, ze chodzi ci o enkoder z kolka myszy - jak to z enkoderami bywa wysyla on sygnaly w kodzie Greya, wiec muszisz zbudowac dekoder dla tego. Dodatkowo masz sygnal prosto z fototranzystora, ktory trzeba wczesniej uformowac, najpewniej jakas bramka Schmidta. I pamietaj, ze masz najpewniej uklad typu open collector, wiec musisz stosowac rezystory podciagajace sygnal przy zablokowaniu fototranzystora.
  • #4 7263250
    tomasz1987
    Poziom 16  
    dobra bo cos już przestaje rozumieć fototranzystor ma taka prosta zależność Oświetlenie wpływa na rezystancję obszaru emiter-baza więc jak go przysłaniam to mam mniejsze napięcie i odwrotnie no chyba ze to źle podłączyłem ale na oscyloskopie pojawiła się sinusoida czyli to napięcie malało i rosło gdy obracałem tym kołeczkiem w myszce czyli cyklicznie pojawiały się zbocza opadające które chciałem w tym programie liczyć bo raczej tak działa ta myszka?
    A i prosił bym o schematy bo ja mam niewiele wspólnego z elektroniką ale schematy mnie nauczono czytać A stwierdzenia typu rezystor podciągający to mi nic nie mówią niestety trzeba mi ŁOPATOLOGICZNIE
    Ja wyszedłem z założenia że jak to jest zmontowane to już działa i ja nie musze w ten enkoder ingerować

    Komentarzy nie zmieniałem bo to na razie testy
  • #5 7263437
    tmf
    VIP Zasłużony dla elektroda
    Tak prosto to nie jest. Oswietlenie tego obszaru wplywa na to czy tranzystor jest zablokowany czy nie - czyli czy nie przewodzi czy przewodzi. Jesli jedna noge, np. emiter wepniesz do masy, a na drugiej badasz napiecie to nic z tego nie wyjdzie. Pomiedzy kolektor a Vcc musisz wpiac rezystor (podciagacz, pull up). Wtedy jesli tranzystor jest zablokowany (nie oswietlony) to nie przewodzi i prad plynie od Vcc przez rezystor i na kolektorze masz mniej wiecej Vcc. Jesli tranzystor przewodzi to tworzy sie dzielnik i przy dosyc duzej wartosci rezystora na kolektorze masz mniej wiecej GND. Rezystor musi byc dobrany w zaleznosci od pradu jasnego fototranzystora i szybkosci wymaganej reakcji. Jak zauwazyles na wyjsciu masz cos co przypomina sinusoide - to sie nie nadaje do wysterowania wejscia cyfrowego, dlatego potrzebujesz interface - bramke Schmidta, ktora ci z sinusoidy zrobi przebieg prostokatny, ktorym mozesz nakarmic procesor. To tak w skrocie.
  • #6 7263523
    tomasz1987
    Poziom 16  
    o bramce shmitta już słyszałem tydzień temu ściągnąłem program do symulacji (Circuit Design Suite 10.0)i ją przepisałem na symulatorze działa ok ale co mi z tego jak nie mam pojęcia czy jak kupie jakieś 2 tranzystory bądź je wylutuje z jakiegoś badziewia to będzie mi to działać jak na symulatorze?
    [atmega8][avr studio] regulator prędkości z myszy kulkowej

    up programu kolega dopisał funkcje dzięki której mam cyferki na wyświetlaczu :D
    działa tak jak kręcę tym wolno to bez problemu łapie każdą dziureczkę ale jak zaszaleje to procek głupieje i gubi wszystko jak temu zaradzić. Nie wiem jak ma się to do tego co kolega wyżej pisał może w myszce to już wszystko jest dla mnie najważniejsze jest ze to działa
  • Pomocny post
    #7 7263584
    janbernat
    Poziom 38  
    To jest schemat.

    [atmega8][avr studio] regulator prędkości z myszy kulkowej
    Jak widać rezystory "podciągające" są- ale w emiterach.
    Do kodu Gray'a stosuje się chyba inne tarcze.
    Sygnał na diodach IR może być modulowany- jaką częstotliwość miał na oscyloskopie?
  • #8 7263640
    tomasz1987
    Poziom 16  
    ok dzięki kod greja jest super dokładny , ten twój to widzę tak z 4ro bitowy ,i faktycznie mógłby się przydać ale to nie praca dyplomowa :P mój wykładowca będzie zadowolony z pomiaru 2 diodami które będą służyły do odczytu kierunku

    ale narazie walczę z tymi pomijanymi otworami kiedy za szybko kręcę kołeczkiem

    edit


    to raczej nie miało znaczenia jak szybko kręciłem to zmniejszałem podstawę czasu i znowu widziałem ładną sinusoidę
  • #9 7263690
    janbernat
    Poziom 38  
    To ustaw na razie zegar wewnętrzny na 8MHz.
    Tzn. FusebitC disable i w programie też.
  • #10 7263702
    tomasz1987
    Poziom 16  
    jak ostatnio ustawiałem fusy to zablokowałem cały procek mała pomyłka interpretacyjna między "ptaszkami" a "1kami" ale spróbuję

    czyli mam ustawić CKSEL3...0 wartości 1111 i będzie działał zewnętrzny oscylator bo jak na razie to mam 0001

    Tak dla ścisłości to ja używam programu Adama Dybkowskiego ISP Programer i własnoręcznie zrobionego kabla z taśmy ide
  • #11 7263893
    janbernat
    Poziom 38  
    To może poproś kolegę.
    I nie rób tego gdy nie masz pod ręką drugiego procesora a zadanie jest na "wczoraj".
    No to nie rób tego sam!
    A może tak długo kręcisz że przekraczasz 65536 impulsów?
    Na wewnętrzny 8MHz- naie na zewnętrzny!
  • #12 7263912
    tmf
    VIP Zasłużony dla elektroda
    Zegar nie ma nic do rzeczy, ten kod nadazy zliczac impusly do kilkudziesieciu kHz, nie sadze, zeby tak szybko krecil :)
    Problemem jest ich podawanie - jak wyglada czesc odbiorcza, tak jak na shcemacie myszki przedstawionym powyzej, czy jest to tylko fototranzystor podlaczony do procesora?
    Fototranzystor mozesz zawsze wymienic na transoptor szczelinowy, sa takie, ktore maja juz wyjscie cyfrowe. Samo ksztaltowanie impulsow mozesz tez zrobic na scalonych brankach Schmita, a nie na elementach dyskretnych. Ew. na komparatorze, ktory jest w procesorze.
  • #13 7263928
    tomasz1987
    Poziom 16  
    To zadanie nie jest na wczoraj tylko na za 2 miesiące ale coś mi to ciężko idzie dlatego piszę na forum. Tu w legnicy nie ma mądrego a profesor "uczy" nas na symulatorze. A kolega uczy się w zielonej więc nie może mi pomóc

    Dodano po 12 [minuty]:

    to tak :
    w myszce pod lutowałem się do 2 punktów do scalaka tą nogą co idzie z fototranzystora i do masy i to na ark podłączyłem do mojego scalaka i mojej masy

    co do transoptora szczelinowego czy jest to taka "czarna skrzyneczka" z 2 diodami w środku i z małą przesłona i montuje się to w drukarce jako czujnik zamknięcia bo takie cudo też mam ale nie montowałem jeszcze

    edit
    czyli tego układy mi brakuje :
    HCF 4093 (CD4093) cztery 2wej bramki NAND Schmitta
  • #14 7264241
    janbernat
    Poziom 38  
    Mam wrażenie że ten kod nie liczy częstotliwości tylko liczbę impulsów.
    Co będzie jak naliczy więcej niż pojemność zmiennej?
    A podłączenie do myszki wygląda dobrze.
    Jeśli liczy- to nawet bez Schmitta.
  • #15 7264302
    tomasz1987
    Poziom 16  
    to ja tak pisałem chyba że coś niejasne to cały układ narazie liczy tylko impulsy z przerwania potem do tego dojdzie dzielenie przez liczbę otworów na kółku w czasie 1 sekundy i wyświetlić prędkość na wyświetlacz i dalej dorobić trzeba regulacje obrotów tak żeby można było ustawić 1k........ itd. obrotów i wentylator się obraca

    edit

    narazie to to działa ale są takie momenty gdzie czujnik się nie rusza a licznik sam liczy albo jak się kabel odepnie to "radio" liczy tylko nie wiem co
  • #16 7264318
    tmf
    VIP Zasłużony dla elektroda
    Ta zmienna ma 16 bitow wiec tak szybko sie nie przepelni. Czestotliwosc mozna z tego wyciagnac wiedzac ile bylo impulsow w jakims czasie, ale mysle, ze to na pozniej.
    Co do podlaczenia - dla niewielkiej czestotliwosci impulsow to moze wygladac dobrze - ale dla wiekszej nie zdaza sie ustalic stany logiczne - stad gubienie. Zauwaz, ze masz dodatkowe obciazenie, pull up jest wysoki (zalozmy nawet te 10k), czyli kazda dodatkowa pojemnosc co raz trudniej przeladowac. A w tym sterowniku myszki moze siedziec komparator i mu to rybka, ale procesorowi nie, bo musi miec scisle zdefiniowane stany.
    Co do transoptora szczelinowego - tak, to co co czuje m.in. czy jest papier. Tylko musisz wiedziec co to za typ, bo czesc to nic innego jak wlasnie fototranzystor.
  • #17 7264422
    tomasz1987
    Poziom 16  
    czyli muszę dorobić ten przerzutnik shmitta z bramki NAND 74132 albo HCF 4093 i będzie wszytko działać?

    tylko jakiś schemacik podrzućcie bo Datasheet mi niewiele mówi
  • Pomocny post
    #18 7264662
    rasz
    Poziom 21  
    masz w nocie 7414 narysowane jak z sinusa robi impulsy

    edit: w sumie w nocie 74132 jest ten sam obrazek
    a tutaj pelen schemat :
    [atmega8][avr studio] regulator prędkości z myszy kulkowej
  • #19 7265420
    janbernat
    Poziom 38  
    No to trochę problemów.
    Rozebrałem starą mysz z ciekawości- dawno tego nie robiłem.
    Kolektory podwójnych fototranzystorów są wspólne- technologicznie prościej- taniej.
    Czyli nie da się dać oddzielnych rezystorów podciągających w kolektorach- co byłoby najbardziej oczywiste.
    W tej myszce którą rozebrałem nie ma też rezystorów w emiterach- widocznie jest pulldown w układzie scalonym.
    Czyli da się jakoś- ale z lutownicą i trochę mysląc.
    Tak po prostu na Schmitt'a to się chyba nie da.
    No i jak te obroty silnika przenieść na mysz?
  • Pomocny post
    #20 7265645
    rasz
    Poziom 21  
    janbernat napisał:
    Tak po prostu na Schmitt'a to się chyba nie da.


    [atmega8][avr studio] regulator prędkości z myszy kulkowej

    co za różnica gdzie są rezystory
  • #21 7265828
    janbernat
    Poziom 38  
    No, dobrze.
    Teraz tylko trzeba zasłonić fototranzystor żeby nie padało nań światło zewnętrzne bo się nasyci i przenieść obroty z silnika na mysz.
  • #22 7265991
    tomasz1987
    Poziom 16  
    ogólnie to będzie tarcza najpewniej z pcb z zębami nowa do tego wentylatora tak myślę może wystarczy jak zdejmę obudowę z transoptora szczelinowego to morze nie będzie łapać na około wszystkiego

    a ten rezystor podciągający przy fototranzystorze to jakąś wartość ma? bo to raczej nie jest jaki bądź pisano tu taj że od niego zależy dokładność i potem to na przerzutnik Schmitta i mogę do mikrokontrolera czy bez przerzutnika sory że zadaje takie głupie pewnie dla niektórych pytania ale jak już zacznie liczyć tak jak trzeba to będziecie mieli spokój aż skończę program. Potem oczywiście pojawią się problemy z regulatorem napięcia ale mam już kilka pomysłów no chyba ze to nie jest odpowiedni rodzaj na sterowanie i podpowiecie coś innego
  • #23 7266113
    janbernat
    Poziom 38  
    Za to "morze" to moderator "karze" Ci odpłynąć.
    A nam wcale nie chodzi o to by mieć spokój.
    A rezystor w emiterze ma mieć jakąś wartość.
    Wyliczoną albo sprawdzoną doświadczalnie.
    A najlepiej- jedno i drugie.
  • #25 7266632
    tomasz1987
    Poziom 16  
    ok tak zrobię w środę dorwę szkolny oscyloskop i przebadam "udoskonaloną" myszkę
  • #26 7270660
    janbernat
    Poziom 38  
    To w zasadzie z myszy zostanie wylutowany podwójny fototranzystor i dioda IR.
    Reszta myszy do dalszej utylizacji.
    Trzeba to wlutować do jakiejś płytki i zamocować to tak aby można było liczyć impulsy z nowej tarczy.
  • #27 7280467
    tomasz1987
    Poziom 16  
    OK
    Okazuje się że nic wcześniej nie wiedziałem o tym co robiłem a działało chyba z przypadku
    W myszce mamy podwójny fototranzystor co jest ważnym szczegółem podłaczyłem według schematu rasz'a i działa liczy ale w dalszym ciągu jest moment w którym wszystko szaleje np. jak zakręcę tym bardzo szybko. Pomyślałem podłączę jeszcze(tu też pomógł rasz) mostek schmita kupiłem scalak 7414 nawet się nie spalił :D ale nic mi on nie zmienił tak jak bym dodał dodatkową zworę. Wszystko jest wlutowane w płytę na polu testowym więc niema możliwości że jakiś pająk nie styka

    chyba ratuje mnie rozszerzenie programu i użyć 2 przerwań z 2 fototranzystorów i funkcja && a przy okazji mógłbym śledzić kierunek obrotu :D

    jak wszystko obadam zamieszczę kod
  • #28 7280828
    rasz
    Poziom 21  
    Sprawdź na oscyloskopie jak wygląda sygnał za 7414, powinien być czysty prostokąt.
    Jeśli wariuje przy większych prędkościach to może mikrokontroler nie wyrabia z przerwaniami. 1MHz, do tego lekko licząc >100 cykli na przerwanie daje 10Khz, podziel to przez ilość impulsów na obrót. Teraz jeśli silnik kreci się szybciej to wariuje. Zamiast generować przerwanie co impuls daj tam licznik i przerwanie na przepełnieniu.
  • #29 7280912
    tomasz1987
    Poziom 16  
    mam tak podłączone tylko narazie jeden kanał (czyli A) podłączony do mikro kontrolera
    [atmega8][avr studio] regulator prędkości z myszy kulkowej
    od razu zaznaczam że polaryzacja tranzystora jest odwrotnie ale na razie prof się nie zoriętuje mam nadzieję
  • #30 7281481
    tmf
    VIP Zasłużony dla elektroda
    Spore sa te pull upy, ten fototranzystor ma naprawde tak maly Ic? Wez pod uwage, ze scalak, szczegolnie jesti to jest podstawowa wersja TTL ma naprawde spory prad polaryzacji. To w polaczeniu z tak duzym pull upem moze powodowac, ze przy szybkich impulsach uklad nie zdazy wracac do "1". Sprawdz na oscyloskopie impulsy z fototranzystora przy odlaczonym scalaku i podlaczonym. To wszystko wyjasni. Jesli sie okaze, ze Ic fototranzystora jest taki maly, ze nie da sie zejsc z pull upem to wymien fototranzystor, albo wrzuc drugi tranzystor w ukladzie darlingtona.
REKLAMA