Elektroda.pl
Elektroda.pl
X
Relpol
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Generator przestrajany ATMega16a Bascom

Kris_nx 20 Kwi 2010 13:45 4530 22
  • #1 20 Kwi 2010 13:45
    Kris_nx
    Poziom 9  

    Witam serdecznie
    Jak zabrać się do oprogramowania układu który ma spełniać następujące funkcje:

    Generalnie jest to prosty generator na bazie ATMega16a o zmiennej częstotliwości wyjściowej. zmienianej potencjometrem ale...

    Potencjometr to manipulator wychyłowy (jojstick analogowy). Układ w położeniu środkowym potencjometru ma nie generować żadnego sygnału natomiast po wychyleniu w jedną stronę ma generować sygnał o częstotliwości proporcjonalnej do wychylenia na wyjściu pierwszym układu a przy wychyleniu w przeciwną na wyjściu drugim układu (nieaktywne wyjście powinno być w tym czasie w stanie niskim)
    Dodatkowo układ powinien mieć możliwość zmiany maksymalnej częstotliwości wyjściowej w zakresie od 1kHz do 300kHz (przy pełnym wychyleniu potencjometru). Wydaje mi się że konieczna może być regulacja martwego pola w położeniu środkowym potencjometru (definicja przy jakim minimalnym odchyleniu manipulatora od położenia środkowego ma się rozpocząć generowanie. Do wizualizacji parametrów wyświetlacz LCD.

    Pot. może być zasilany napięciem symetrycznym. Tak że w pozycji środkowej na suwaku jest 0V, przy wychyleniu max w prawo np.+5 a przy max wychyleniu w lewo -5V

    Istotne jest również to żeby uzyskać max rozdzielczość przetwornika

    Z góry dziękuje za wszystkie sugestie, propozycje i pomysły:)

    Kris_nx

    0 22
  • Relpol
  • #2 20 Kwi 2010 21:10
    rpal
    Poziom 27  

    kolega obrał sobie zbyt ambitny projekt, sam pomysł sterowania dżojstikiem jest sporym kłopotem a to z tego powodu że były dwa rodzaje tych "urządzeń" jeden dedykowany do PC-tów miał ewidentnie zamontowane potencjometry na osiach x,Y i te od np. atari oparte na mikrostykach. Pierwszy zachowywał proporcie wychyłu drugi nie. Musisz zatem ten dylemat rozwiązać i ew. zastosować przetworniki ACD. Niestety tam była kalibracja (w tych od PC-ta) o ile na PC-cie można było to przeprowadzić niejako na ekranie to jakoś nie widzę tego na atmedze? Inną sprawą jest samo generowanie przebiegu. Nic nie piszesz o rozdzielczości a to podstawowa sprawa. Używając wprost timerów możesz zapomnieć o dokładności a samo określenie częstotliwości będzie raczej przybliżeniem a nie wynikiem założonych obliczeń i przestrajanie będzie przypominać poruszani się krokami niż płynną regulację. Proponowałbym raczej poszukać gotowych scalaków choćby PLL-i niż używac do tego atmegi. No chyba ze ew. do przestrajania. Takie oto moje opinie.

    0
  • #3 20 Kwi 2010 22:38
    Kris_nx
    Poziom 9  

    Witam

    Jojstick juz mam i jest on wyposażony w dwa wysokiej klasy potencjometry.
    To poprostu profesjonalny przemysłowy manipulator. Tak że na wyjściu jojstika mam napiecie analogowe proporcjonalne do wychylenia.
    W zależności od sposobu zasilenia potencjometru mogę mieć 0V w pozycji środkowej i np +/- 5V w skrajnych położeniach lub przy zasilaniu pojedyńczym napięciem 2,5V w pozycji środkowej, 0 w lewej skrajnej pozycji i +5V w prawej.

    Myślałem o pomiarze tego napięcia za pomoca przetwornika A/C mikrokontrolera i przestrajanie generatora zależnie od pomiaru (coś w rodzaju VCA)

    Jeśli chodzi o rozdzielczość to myśle ze na początek 10bit ATMegi powinno wystarczyć. max częstotliwość wyjściowa 500kHz dzielona przez 1024 daje 488Hz
    Myśle że w praktyce f wy bedzie ustawione na ok 250kHz co da nam rozdielczość ok 244Hz. Jak się okaże że to za mało to w kolejnej wersji można zastosować zewnętrzy przetwornik np 16 bitowy
    Zastanawiam się czy dało by rade zrobić tak żeby jeden z przetworników procesora pracował dla napięcia dodatniego a drugi dla ujemnego wtedy mielibysmu defakto dwa razy większa rozdzielczość.

    0
  • Relpol
  • #4 20 Kwi 2010 23:23
    atom1477
    Poziom 43  

    Tutaj nie chodzi o rozdzielczość przetwornika ale o rozdzielczość Timera.
    Choć i ADC jest kiepski.
    No ADC nawet gorszy, ale on będzie przetwarzał wartości liniowo.
    A Timer nie. Timer będzie przekształcał okres przebiegu więc częstotliwość będzie przetwarzana nieliniowo.
    Oczywiście dane będą przeliczane funkcją 1/x ale chodzi o to że wynik działania tej funkcji będzie trzeba zaokrąglać i spowoduje to skakanie częstotliwości.
    Żeby jakoś to działało to Timer musiał by mieć ze 2 bity zapasu dla maxymalnej częstotliwości. Zakładając że wystarczy Ci 10bitów musiał byś mieć ze 12 bitów Timera.
    Przy zakładanym do uzyskania przebiegu 500kHz i taktowaniu procesora 16MHz masz zaledwie 32takty na okres czyli efektywną rozdzielczość Timera równą 5bitów. Kolejną niższą częstotliwością możliwą do uzyskania poniżej 500kHz będzie 485kHz. Czyli 3 z 500kHz. Daje to teoretycznie 32 wartości częstotliwości możliwe do uzyskania (32 bo mamy te 5bitów Timera).
    Oczywiście przy niższych częstotliwościach rozdzielczość będzie większa bo i okres przebiegu będzie się wydłużał.
    Ale dla tych najwyższych, powiedzmy powyżej 400kHz, będzie niska tak jak byś miał tylko te kilkadziesiąt możliwych do uzyskania wartości częstotliwości.
    Rozdzielczość czy dokładność ADC jest przy czymś takim powalająca.
    A jeszcze można ją zwiększyć stosując oversampling.
    A z Timerem już nic nie zrobisz. Musiał być podnieść taktowanie i to mocno. Do setek MHz.

    0
  • #5 21 Kwi 2010 00:31
    Kabuto15
    Poziom 18  

    Kris_nx widzę, że zależy Ci na dokładności. Czy zamierzasz użyć tych manipulatorów do sterowania czegoś większego ?

    0
  • #6 21 Kwi 2010 00:39
    rpal
    Poziom 27  

    moze pomogłoby połaczenie kilku programowanych równolegle liczników i na tej podstawie (przy odpowiedniej częstotliwości zegara) programować go wartością przy której liczniki zgłaszałyby przerwanie (przeniesienia albo pożyczki w zależności w którą stronę by liczył) wówczas może by można było mówić o nieco płynniejszej regulacji częstotliwości. Tylko nie wiem czy 32 bity by tu starczyło a może i jeszcze więcej, trzeba by było to policzyć. No i oczywiście rozwiązać problem odczytu potencjometrów i zamiany ich wartości na odpowiednią liczbę niezbędną do zaprogramowania kaskady liczników. Wtedy ten atmega miałby już co tutaj robić czyli odczytywać potencjometry i programować liczniki :) Nie wiem czy przypadkiem nie lepszy by się okazała jakiś Cortex bo jego timery są już 32 bitowe bo gdy się weźmie pod uwagę ilość dodatkowych timerów, koniecznośc ich zaprogramowania czyli z kolei brak odpowiedniej ilości pinów na portach gra jest warta świeczki przy atmedze. Tym bardziej że w ślad za zmianą wartości timera trzeba nadążyć ze zmianą na przeciwny stan, wyjścia odpowiedzialnego za końcowy przebieg generatora z czym taki cortex przy swoim np 72MHz zegarze zrobi to w mgnieniu oka a atmega juz zdecydowanie wolniej.

    0
  • #7 21 Kwi 2010 10:25
    Kris_nx
    Poziom 9  

    Witam wszystkich

    Dziękuje za cenne uwagi.
    opisany generator ma być elementem sterującym dla silnika krokowego.
    Mam zamiar zastosować sterownik pracujący mikrokrokowo z podziałem 1:10000 (akceptuje on zegar do 5000kHz)
    Sterownik jest gotowy wymaga jedynie podania zegara w takt którego będzie się obracał silnik. Zmiana kierunku odbywa się przez podanie zegara na inne wejście lub wystawienie flagi na odpowiednim wejściu (wtedy zegar podawany jest stale na jedno wejście)

    A gdyby zastosować zewnętrzny zestaw liczników do których wartość do odliczenia ładowana by była z procesora. Liczniki taktowane własnym zegarem pracowałyby jako programowalny dzielnik a procesor jedynie by służył do ładowania współczynnika podziału. Wtedy rola procesora ogranicza się do nadzorowania całego procesu i obsługi potencjometru i wyświetlacza.

    0
  • #8 21 Kwi 2010 10:36
    atom1477
    Poziom 43  

    Może być ale ten zewnętrzny generator jak i dzielnik musiały by pracować na setkach MHz.
    Zostaje Ci ARM9 na 266MHz albo zewnętrzne PLL i wtedy zmieścisz się na AVRze.

    0
  • #9 21 Kwi 2010 17:32
    Kris_nx
    Poziom 9  

    Przyznaje że nie bardzo rozumiej jak wykorzystać zewnętrzną pętle PLL do budowy generatora o zmiennej częstotliwości.
    Możesz napisać coś więcej?

    0
  • #10 21 Kwi 2010 18:16
    atom1477
    Poziom 43  

    Chodzi o to żeby procesor wytwarzał przebieg o mniejszej częstotliwości ale większej rozdzielczości ustawiania tej częstotliwości. Przy mniejszej częstotliwości łatwiej uzyskać dużą rozdzielczość ustawiania.
    A PLL by tylko mnożył. Czyli klasyczne PLL bez żadnej filozofii. Zwykłe 4046 da radę.

    0
  • #11 21 Kwi 2010 19:45
    janbernat
    Poziom 38  

    Kris_nx- coś Ci się chyba pomyliło.
    5000kHz to jest 5Mhz.
    Nie znam takiego sterownika do silnika krokowego- i w zasadzie nie chcę znać.
    Taki sygnał jak doprowadzić do sterownika?
    Koncentrykiem?
    Wydaje mi się że może to być 50kHz.
    Jest to sygnał STEP określający o ile silnik się obróci.
    W tym wypadku pewnie o 1/10000 kroku na jeden STEP-chociaż raczej sprawdź.
    Silnik ma zwykle 180 kroków/obrót.
    Czyli jeden sygnał spowoduje obrót o 55 milionowych części okręgu.
    Zmiana częstotliwości sygnału STEP powoduje zmianę szybkości obrotowej silnika.
    Silniki tego typu osiągają niekiedy 5obr/s -czyli dla tej szybkości musiałbyś podać STEP z częstotliwością 275MHz.
    A przy dolnej granicy czekałbyś na pełen obrót silnika setki milionów sekund.
    Oczywiście zdajesz sobie sprawę że nie sterujesz położeniem ale prędkością?
    Taki "sterownik" do sprawdzania silników w maszynie zrobiłem na NE555 i zwykłym potencjometrze- niestety schemat mi wcięło- ale sterownik jest.

    0
  • #12 21 Kwi 2010 19:48
    atom1477
    Poziom 43  

    Tam jest 500kHz. Choć i to bardzo dużo.

    0
  • #13 21 Kwi 2010 20:42
    janbernat
    Poziom 38  

    Fakt, w drugim poście jest 500kHz- ale w trzecim 5000kHz.
    Obie te prędkości niemożliwe- jak dają możność wysterowania sterownika 50kHz to bardzo się tym chwalą.
    Poza tym- komu jest potrzebna taka rozdzielczość przy prędkości?
    Bo przy położeniu- rozumiem- jakiś mikroskop z b. dużym powiększeniem i do tego pozycjoner.

    0
  • #14 22 Kwi 2010 11:22
    Kris_nx
    Poziom 9  

    witam
    Faktycznie w jednym poście wkradł się błąd sterownik akceptuje max 500kHz a nie 5000kHz przepraszam za pomyłkę mój błąd.
    Dane na temat sterownika i jego parametrów podał mi przedstawiciel producenta na ostatnich targach automatikon. Też mi się to wydawało dużo ale sprawdziłem w dokumentacji i faktycznie 500kHz
    http://www.fastech.co.kr/English/Ezi-STEP-ST_DriverSpec.html

    Tak czy owak w dalszym ciągu zastanawiam się jak zrealizować układ generatora.
    Ostatnio wpadłem na pomysł zastosowania scalonego generatora VCO LM331 ale układ ten pracuje max do 100kHZ a dodatkowo całość byłaby realizowana analogowo.

    0
  • #15 22 Kwi 2010 21:15
    janbernat
    Poziom 38  

    Sterownik jest uniwersalny- możesz wybrać dużą rozdzielczość kosztem prędkości maksymalnej.
    Przy rozdzielczości 10000 i częstotliwości sterującej 500kHz uzyskasz ok. 0,28obr/s dla przeciętnego silnika.
    Dla maksymalnej rozdzielczości 50000 uzyskasz ok. 0,056obr/s.
    Przeciętny silnik osiąga ok. 5obr/s zanim zacznie gubić kroki.
    Tak że coś za coś- albo duża rozdzielczość albo znośna prędkość.
    To dotyczy przeciętnego silnika mającego 180 kroków na obrót.
    Są układy w których prędkość ma małe znaczenie- a rozdzielczość duże.
    No ale wymagane dokładności mechaniczne do takich urządzeń są takie że wszystkie problemy sterowania to jest "mały pikuś"

    0
  • #16 22 Kwi 2010 21:32
    atom1477
    Poziom 43  

    Małe pytanie:
    Po co Ci dokładność 10 albo więcej bitów?
    Rozdzielczość to rozumiem: dla płynności regulacji.
    Ale dokładność?
    Czy palcem na tym manipulatorze ustawisz aż tak dokładną wartość?
    Na moje oko nie. Więc moim zdaniem wystarczył by Ci zwykły generator przestrajany potencjometrem (czyli tym manipulatorem). Ale tak inaczej przestrajany. Bo częstotliwość musi się zmieniać liniowo i mieć możliwość spadnięcia do zera. A to w klasycznym generatorze RC z potencjometrem w roli "R" wymagało by nieliniowego potencjometru i to takiego który w jednym ze skrajnych położeń uzyskuje rezystancję równą nieskończoności.
    Dużo prościej użyć VCO sterowanego napięciem. Czyli np. wspomnianego już układu 4046.
    Mikrokontrolera możesz tam wsadzić ale tylko do rozdzielenia impulsów na dwa wyjścia oraz do zrobienia pewnego zakresu martwego (gdzie VCO nie reaguje na potencjometr a dodatkowo mikrokontroler wycina szczątkowe impulsy z VCO (bo VCO może nie chcieć zejść z częstotliwością koniecznie aż do zera)).

    0
  • #17 22 Kwi 2010 22:02
    janbernat
    Poziom 38  

    Zwłaszcza że dokładność generowanych impulsów dotyczy tylko prędkości z jaką obraca się silnik ustawianych za pomocą potencjometru.

    0
  • #18 23 Kwi 2010 10:13
    Kris_nx
    Poziom 9  

    witam wszystkich

    Silnik krokowy mam być sterowany w ten sposób że wraz z wychyleniem manipulatora obraca się coraz szybciej. Dodatkowo musi być nastawialna prędkość maksymalna.
    W odpowiedniku analogowym wyglądało by to tak że jednym potencjometrem ustawiam fmax generatora a manipulatorem przestrajam generator od zero do fmax. Rozwiązanie analogowe jest dość proste na jednym z dostępnych układów VCA.
    Ja chciałbym zrealizować te funkcje na mikro kontrolerze bo chciałbym mieć wizualizacje parametrów fmax i regulacje okna "martwego" w położeniu środkowym.
    Z dotychczasowej dyskusji widać że jedyny problem to zaimplementowanie generatora który będzie przestrajany liniowo tak żeby uzyskać stałą wartość f na stopień wychylenia manipulatora. Ktoś wspomniał wcześniej że można coś takiego zbudować w oparciu o zewnętrzne PLL. ale kompletnie nie rozumiej jakby to miało działać.
    Może dobrym rozwiązaniem byłoby zastosowanie ATMegi do czytania manipulatora za pomocą wew ADC i dwóch zewnętrznych przetworników DA do przestrajania zewnętrznego generatora VCA i ustawiania fmax. Co o tym sądzicie?

    0
  • #19 23 Kwi 2010 10:53
    atom1477
    Poziom 43  

    Można i tak. Ale za precyzyjne to to nie będzie. Będzie to tak precyzyjne jak ten Twój patent analogowy.
    Z PLL to chodziło mi po prostu o mnożenie częstotliwości przebiegu generowanego przez procesor.
    Powiedzmy procesor generuje przebieg 0…50kHz (+/-100Hz) a PLL mnoży ten przebieg przez 10 (i wychodzi 500kHz +/- 1kHz).
    To taki przykład, bo najlepiej to mnożyć przez wielokrotność dwójki. Np. przez 16.
    Ale będzie tutaj problem z szerokim zakresem zmian częstotliwości.

    _____________________________________________________________________________________________
    Przyjmę zlecenia na układy/projekty z mikrokontrolerami (AVR, ARM). Tylko poważne oferty. Kontakt na PW.

    0
  • #20 23 Kwi 2010 13:55
    ktrot
    Poziom 19  

    @Kris_nx, użyj generatory serii AD983x, szczególnie polecam AD9833 - jest 8 pinowy, daje na wyjściu prostokąt a dokładność ustawianej częstotliwośći przy fmax=500kHz to 0,002Hz. Inne jak np. AD9835 to typowe DDS dają sinus a więc dodatkowo jakiś komparator na wyjściu byłby potrzebny. Fmax możesz ustawiać w mikroprocesorze.
    Co do manipulatora to, jeżeli masz trochę zdolności mechanicznych, możesz wykorzystać czujnik z myszy optycznych. Nawet te najprostsze myszy dają dokładność 1200 punktów na cal, a więc ponad 10 bitów na cal. Niektóre, szczególnie starsze myszy mają w sobie czujniki z wyjściem SPI co szczególnie łatwo obsłużyć w uC. W nowszych spotkałem głównie enkodery prostokątne z przesuniętymi o 90° przebiegami. Też da się to oprogramować.
    Jeżeli zostaniesz przy potencjometrach to 10 bitów przy pewnej staranności da się uzyskać szczególnie, że nie potrzebujesz dużej częstotliwości samplowania - wchodzi więc w rachubę oversampling.

    0
  • #21 23 Kwi 2010 15:24
    Kris_nx
    Poziom 9  

    Faktycznie ten analog wydaje się być idealnym rozwiązaniem.
    Wielkie dzięki.
    Jeśli chodzi o manipulator to mam już takowy bazujący na potencjometrach. Zobaczymy jak się będzie spisywał w prototypie jeśli wypadnie słabo to pomyśle o innym może właśnie na jakiś enkoderach. Chciałbym uniknąć własnoręcznego robienia manipulatora bo jest szansa na komercjalizacje projektu a wtedy manipulator musi być "sklepowy".

    Ok skoro hardware wybrany to można zamawiać układy i brać się za program.
    Dziękuje wszystkim za pomoc.

    Zapewne za jakiś czas poproszę o pomoc przy pisaniu programu. ale najpierw chce mieć wszystkie elementy na stole.

    Pozdrawiam
    Kris

    0
  • #22 23 Kwi 2010 21:56
    janbernat
    Poziom 38  

    A zanim to zrobisz podaj na ten sterownik zwykły sygnał prostokątny 500kHz z jakiegoś generatora zrobionego na HC14.
    No i podłącz silnik.
    Zasilacz 24V pewnie już masz.
    Ciekawy jestem efektów.

    0
  • #23 28 Cze 2010 22:58
    Kris_nx
    Poziom 9  

    Witam ponownie

    Zgodnie z ostatnią sugestią przeprowadziłem testy sterownika silników krokowych podając mu zegar z generatora zbudowanego na ne555. Musze przyznać że całość pracowała nadspodziewanie dobrze. Silnik krokowy obracał się bardzo bardzo płynnie nawet przy obrotach rzędu 0,3obr/min żadnych wyczuwalnych skoków.
    Sterownik zapewnia bardzo dynamiczną prace całego napędu i zgodnie z tym co napisał producent max f sygnału sterującego to 500kHz. Dodatkowo silnik był wyposażony w enkoder 10000 imp/obr który powodował że silnik nie gubił kroków pomimo pracy mikrokrokowej 1/1000 kroku. Naprawdę nie spodziewałem się że krokowiec potrafi tak dużo.
    Inna sprawa że całość pomimo imponujących osiągów nie nadaje się do mojej aplikacji i w związku z tym planuje przeprowadzić kolejne testy tym razem z silnikiem momentowym BLDC. Problem jedynie ze znalezieniem tego typu silników. Myślę nawet o budowie takiego silnika. Puki co zbieram info i uczę się jak to wykonać. Profesjonalny serwowzmacniacz do niego już mam.

    Pozdrawiam
    CDN
    .

    0