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

Wybór uC do porównywania prędkości obrotowej i generowania PWM 50 Hz

mezcook 19 Sty 2010 21:30 3529 24
  • #1 7560753
    mezcook
    Poziom 12  
    Posty: 104
    Ocena: 1
    Witam. Jestem zielony. Nie napisałem jeszcze żadnego programu, ani nie posiadam programatora.
    Znalazłem jak krok po kroku zbudować programator ISP AVR.
    Link

    Układ który mam zamiar w przyszłości zbudować ma wypełniać następujące zadanie.
    Na wejściach programatora będzie podany sygnał częstotliwościowy z dwóch źródeł (prędkość obrotowa - zrobiłem już tarczę, a fotokomórka wysyła piękny sygnał TTL :D maksymalna częstotliwość na wejściu góra 3kHz). Układ ma porównywać prędkości obrotowe. Na wyjściu dwa sygnały PWM o częstotliwości 50 Hz i długości impulsów między 0.5 , a 1.5ms. Długość impulsów ma być zależna od wyniku porównania prędkości obrotowej.
    Przykładowo:
    gdy n1=n2 to Pwm1=Pwm2=1ms
    gdy n1<n2 to Pwm1=1 ms, a Pwm2=0.7ms
    gdy n1>n2 to Pwm1=0.7 ms, a Pwm2=1ms
    Wartość 0.7 ms w tej chwili z głowy, ale ma być proporcionalna do różnicy prędkości.

    Czy uC ATTiny2312 czy tez 2313, ma wystarczająco dużo wy/we do realizacji tego zadania ?
  • #2 7561924
    Konto nie istnieje
    Poziom 1  
  • #3 7564064
    mezcook
    Poziom 12  
    Posty: 104
    Ocena: 1
    Wybór uC do porównywania prędkości obrotowej i generowania PWM 50 Hz
    Czy jako wejścia mają posłużyć nóżki 6 i 7 ?

    Które nóżki jako wyjścia sygnału PWM?
    Czy jeśli jako generator PWM zostanie zastosowany timer0 - 8 bit.
    To czy dobrze rozumiem że jeśli jest 8 bit, to znaczy że jeśli sygnał będzie wysyłany co 20ms to będe mógł zmieniać wartość wypełnienia z rozdzielczością

    20ms/256=0,0781ms ?
  • #4 7564107
    Konto nie istnieje
    Poziom 1  
  • #5 7564135
    mezcook
    Poziom 12  
    Posty: 104
    Ocena: 1
    Czy "programowo" oznacza że traktujemy dowolny pin jako przełącznik i ręcznie ustalamy z jaką częstotliwością i na jak długo ma się załączać ?

    Przykładowo.

    do

    waitms 19
    pind.0=1
    waitms 1
    pind.0=0

    loop

    Nic jeszcze nie programowałem więc to powyżej to traktować z przymróżeniem oka.

    czyli pind.0 załączy się co 19ms na czas 1ms ?
  • #6 7564641
    Konto nie istnieje
    Poziom 1  
  • #7 7564707
    mezcook
    Poziom 12  
    Posty: 104
    Ocena: 1
    Mam zamiar użyć BASCOMA i programatora z linka w pierwszym poście.
    Przerwania znaczy się interupts ?
    Jak działają przerywania ?
  • #8 7564850
    Konto nie istnieje
    Poziom 1  
  • #9 7600417
    mezcook
    Poziom 12  
    Posty: 104
    Ocena: 1
    Zmontowałem Programator i Adapter wedle linka z pierwszego postu, lecz coś nie działa z procesorem ATTiny2313
    Link

    Adapter:
    VCC mam pod nózką Nr 20
    MOSI pod 17 PB5 (MOSI/DI/SDA/PCINT5)
    RST pod 1
    SCK pod 19 PB7 (UCSK/SCL/PCINT7
    MISO pod 18 PB6 (MISO/DO/PCINT6)
    GND pod 10

    W BASCOM-AVR mam:
    PROGRAMMER - STK200/300, LPT adress 378, delay 0

    Gdy klikam PROGRAM (F4) - to wyskakuje mi :
    Could not identify chip with ID: FFFFFF
    A LED w adapterze błyska 1 raz.
  • #10 7600507
    Konto nie istnieje
    Poziom 1  
  • #11 7601189
    mezcook
    Poziom 12  
    Posty: 104
    Ocena: 1
    Tak. Programator jest zasilany z baterii 9V puszczonej przez dwa stabilizatory jeden 9V i drugi 5V, lecz bez żadnych kondensatorów.
  • #12 7601312
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    9v na baterii 9v nie dziala...
    ile ma na wyjsciu nie wiem, a potem dajesz jeszcze 5v ktory w tym momencie też już ma sznase nie działać...
    Po kiego dwa staby?
  • #13 7601326
    Konto nie istnieje
    Poziom 1  
  • #14 7601486
    mezcook
    Poziom 12  
    Posty: 104
    Ocena: 1
    no na wyjściu jest 4.98 V. Dwa staby bo w przyszłości będzie zasilanie z 12V, a słyszałem że nie dobrze jest odrazu z 12V na 5V. Usunąłem stab 9 V ... napięcie to samo a programator dalej nie chodzi
  • #15 7601783
    Konto nie istnieje
    Poziom 1  
  • #16 7601939
    mezcook
    Poziom 12  
    Posty: 104
    Ocena: 1
    ok działa... Miałem źle złożony kabel łączący programator z adapterem... Zastosowałem te złącza żeńskie zaciskane bezpośrednio na taśmę i dwa piny nie przewodziły :D



    Ok. Poczytałem trochę. Napisałem i przetestowałem kilka prostych programów.
    Sprawdziłem instrukcję "config servos" i działa. Tzn po podłączeniu wyjścia z uC pod oscyloskop na PC wyszło że impulsy są co 28ms, ale to jest najprawdopodobniej wina tego że korzystam z wewnętrznego kwarca 8MHz. Gdzieś przeczytałem że obsługa serw powinna być na kwarcu 10MHz więc będe musiał sobie taki sprawić.
    Sprawdziło się także to żeby ta instrukcja działa ponad wszystkim, tzn że będzie generować PWM mimo wykonywania innych instrukcji.
    Napisałem i przetestowałem prosty program, gdzie na początku zdefiniowane jest konkretne położenie serwa, a dopiero później jest pentla która sprawia że dioda podpięta pod uC mryga. Okazało się że PWM (poza pętlą) generowany jest także podczas działania pętli od mrygania diody.
    Teraz martwi mnie inna kwestia - pomiar prędkości. Z tego co jest napisane w helpie o instrukcji "config servos" wynika że gdy jej użyjemy to nie można już korzystać z Timera 0.
    Jak pisałem wcześniej - program musi zbadać prędkość pierwszego, a następnie drugiego silnika, a do dyspozycji został tylko timer 1. Czy możliwe jest określenie prędkości obrotowej każdego silnika z osobna za pomocą tylko Timera 1 ?



    inventco.eu - posty scaliłem - proszę zapoznać się z regulaminem forum.
  • #17 7610419
    Konto nie istnieje
    Poziom 1  
  • #18 7610874
    mezcook
    Poziom 12  
    Posty: 104
    Ocena: 1
    No właśnie zrobiłem coś takiego.

    DO
    Timer 0 i 1 zliczają impulsy przez 20ms
    następnie
    na nóżce B.0 jest generowany puls o szerokości zależnej od zliczenia timera 0
    na nóżce B.1 jest generowany puls o szerokości zależnej od zliczenia timera 1
    LOOP
    END

    Niestety mam tylko jeden generator zrobiony na ne555 i kabel do oscyloskopu tylko na jeden kanał i nie mogę wszystkiego sprawdzić jednocześnie, ale chyba działa.

    Wartość czasu zliczania impulsów będe musiał dobrać doświadczalnie, bo operacja porównania T0 i T1 też zajmie trochę czasu. Więc tak naprawdę dokładność z jaką będe mierzył prędkości obrotowe silników jest z góry ustalona bo cała pętla musi trwać te 20ms. Docelowo układ będzie działał w samochodzie więc będe się musiał jeszcze zatroszczyć dobre ekranowanie wszystkiego, żeby układ zapłonowy nie wpływał na działanie uC.
    Tak swoją drogą to nie zdradziłem jeszcze konkretnego zastosowania:
    Moją i trzech kumpli pracą magisterską jest zbudowanie samochodu napędzanego dwoma silnikami. Mamy dwa golfy 2 z silnikiem 1.8 RP 90KM. Jeden silnik będzie napędzał oś przednią czyli tu nic nie trzeba zmienić, natomiast drugi silnik będzie z tyłu, tam też będzie sie znajdowało takie same zawieszenie jak z przodu, tyle że wywalimy i zblokujemy mechanizm skrętu tylnych kół.
    Układ będzie miał za zadanie utrzymywanie stałych prędkości obrotowych obu silników.
    Przepustnice będą sterowane mechanicznie - linką, czyli tak jak to się normalnie odbywa lecz z taką różnicą że pomiędzy dźwignię przepustnicy, a samą przepustnicę dołoże serwo modelarskie które będzie działać jako trymer. Przykładowo jeśli np. przyśpieszamy i koła przednie zaczną buksować a tylne będą miały przyczepność to obroty przedniego silnika będą wyższe niż tylnego. Tą różnicę obrotów wykryje uC i zmniejszy wychylenie przepustnicy przedniego silnika na tyle mocno by prędkości te zrównały się.
  • #19 7611107
    Konto nie istnieje
    Poziom 1  
  • #20 7611173
    mezcook
    Poziom 12  
    Posty: 104
    Ocena: 1
    Wiem że bardzo odpowiedzialne, ale muszę to zrobić niskim kosztem, bo cały projekt i tak nas mega wyniesie. Naszczęście to tylko steruje przyspieszeniem... to i tak będzie dzika maszyna i w dodatku eksperymentalna więc jak coś nie będzie działać to się z biegiem czasu usprawni. W końcu coś nie będzie działać to też będzie wnioskiem do pracy magisterskiej :p Zaraz się wybieram do sklepu po wyświetlacz lcd. czy takie coś będzie się nadawać do uC Link ?
  • #21 7611221
    Konto nie istnieje
    Poziom 1  
  • #22 7611250
    mezcook
    Poziom 12  
    Posty: 104
    Ocena: 1
    W sumie to narazie eksperymentuje żeby się zapoznać z tematem. Jak będzie trzeba to wezmę inny uC, jeśli tylko programuje się tak samo. ponawiam pytanie czy ten lcd będzie działał :D


    Udało mi sie napisać i przetestować układ z procesorem attiny2313. Jak już mówiono wcześniej, ograniczeniem są 2 timery. Kupiłem atmega8, ale w datasheecie nie mogę znaleźć opisanego wejścia timera 2. Timer 0 musi być wykorzystany do obsługi serw, timer 1 zliczał by impulsy z jednego czujnika, a timer 2 miał by zczytywac impulsy z drugiego, lecz nie mogę się doczytać na którą nóżkę trzeba podać sygnał żeby timer 2 zliczał.


    inventco.eu- posty scaliłem. Proszę zapoznać się z regulaminem forum. Proszę uzywać przycisku "zmień". Następnym razem będzie ostrzeżenie.
  • #23 7636255
    Konto nie istnieje
    Poziom 1  
  • #24 7636780
    mezcook
    Poziom 12  
    Posty: 104
    Ocena: 1
    Czyli wychodzi na to że nie mogę zliczać impulsów, za pomocą T1 i T2. Jeśli dobrze rozumiem to To pozostaje mi w jakiś magiczny sposób zliczać impulsy z jednego silnik za pomocą T1, a za pomocą T2 mieczyć czas np 25 impulsów. Ale w związku z tym muszę w ten sam sposób zliczyć impulsy z drugiego silnika mając tylko jedno wejście T1. Czy istnieje możliwość zastosowania czegoś co działało by jako przekaźnik i podłączało T1 raz do jednego czujnika, raz do drugiego, a sygnałem przełączającym był by stan na którejś z nóżek uC?
    Z tego co widzę to dopiero atmega128 ma wejścia wszytkich timerów, które obsługuje.
  • #25 7637027
    Konto nie istnieje
    Poziom 1  

Podsumowanie tematu

✨ Użytkownik poszukuje mikrokontrolera (uC) do porównywania prędkości obrotowej silników oraz generowania sygnałów PWM o częstotliwości 50 Hz. Rozważane są modele ATTiny2312 i ATTiny2313, które mają wystarczającą liczbę pinów do realizacji zadania. W dyskusji omówiono również możliwość programowego generowania PWM oraz zastosowanie przerwań do zwiększenia dokładności. Użytkownik zbudował programator ISP AVR, jednak napotkał problemy z identyfikacją chipu ATTiny2313. Po rozwiązaniu problemów z zasilaniem i połączeniami, użytkownik zaczął eksperymentować z programowaniem w BASCOMie, testując generowanie impulsów PWM oraz pomiar prędkości obrotowej. Wskazano na potrzebę zastosowania regulatora PID oraz omówiono ograniczenia związane z liczbą timerów w ATTiny2313, co skłoniło do rozważenia przejścia na ATMega8 dla większej funkcjonalności.
REKLAMA