Po pierwsze enkoder możesz obsługiwać sprzętowo na XMEGA - w tym celu konfigurujesz event system na QDEC, a dowolny timer będzie ci zliczał impulsy i pracował jako enkoder. Co do transmisji USART - można paczki odbierać przez DMA, co jest wygodne, można to zrobić w oparciu o przerwania. W tym celu odblokowujesz przerwanie RXComplete sygnalizujące gotowy...
Witam Pisalem kiedys program do sterowania robotem (manipulatorem ) w bascomie. Zliczal on miedzy innymi impulsy z 3 enkoderow. i wszystko ladnie chodzilo: Fragment kody ktory zlicza impulsy z 3 enkoderow: //enkoder 1 Enk1_a Alias Pinb.0 Enk1_b Alias Pinb.1 //enkoder 2 Enk2_a Alias Pinb.2 Enk2_b Alias Pinb.3 //enkoder 3 Enk3_a Alias Pinb.4 Enk3_b Alias...
Według mnie to wychodzi tak : dla czujnika z 4 polami odbiciowymi przy prędkości 2000 rmp uzyskasz 8000 imp / min, co daje częśtotliwosć ok. 133 Hz. Przy tej wartości nie bedziesz mial problemów ze Shmittem. Wyjście z czujnika podajesz np. na wejście INT0 mikrokontrolera i w przerwaniu sterujesz wewnętrznym timerem. Po prostu przerwanie INT0 powinno...
No zbyt trudne to nie było:). Mam pytanie wie ktoś może ile taki przetwornik TYP MPL10 produkcji PZO ma impulsów na obrót? Miał mieć 512 a wychodzi mi że ma 256. Na razie stworzyłem sobie taki programik: .INCLUDE "plik_definicji.txt" ;----------SEGMENT DANYCH-------------------------------- .DSEG .ORG 0x60 ;----------WEKTORY PRZERWAN------------------------------.....
Ok, to może już zacznę coś pisać. Skonfigurowałem swoje podłączenie segmentów wyświetlacza, ale dalej to ciężko się zaczyna robić... [syntax=cpp]#define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr\pgmspace.h> #include <string.h> #include <stdlib.h> #define _BV(bit)...
Problemem jest tutaj fakt ze licznik zlicza impulsy. A ty każdemu krokowi enkodera chcesz przypisać pewna wartość (regulacja zgrubna/precyzyjna) a tego licznik nie robi (bo każdy impuls jest traktowany z taka sama waga). Jednym z możliwych rozwiązań jest zliczanie ilości impulsów i mnożenie ich przez wagę (w zależności od wybranej dokładności). [syntax=c]...
Enkoder faktycznie jest optyczny ale drgania wynikają z oscylacji regulatora lub drgań które niosą się po maszynie. Ale to raczej max kHz wiec dla 32MHx procesor się wyrobi. Ostatecznie wg dokumentacji przerwanie timera może być zgłaszane przy przepełnieniu w obie strony.
Źle obsługujesz enkoder. Poczytaj o enkoderze kwadraturowym - enkodery nie działają tak jak założyłeś, że na jednym pinie masz impulsy jak kręcisz w jedną stronę, a na drugim, jeśli kręcisz w przeciwną. Używają najczęściej kodu Gray’a - więc zacznij od poprawnej obsługi enkodera. Druga sprawa - wewnętrzne podciąganie zapewnione na portach ma zbyt dużą...
Witam mój program powinien działać tak, że najpierw oczekuje na impuls przy zboczu opadającym na Int0. Gdy go wykryje to wtedy uruchamia przerwanie zewnętrzne Int1 i zaczyna zliczać na nim impulsy. Problem polega na tym, że jeśli jeszcze nie zostało załączone przerwanie Int1, a pojawi się ileś razy niski poziom na tej nodze, to zmienna licznikowa ad_count...
Pracuje nad programem którego część w której mam właśnie problem ma sie zajmować zliczaniem impulsów od dwóch silników.Silniki pracują jednocześnie i każdy z nich daje 2 impulsy na jeden obrót.Prędkośc obrotowa każdego to 600 obr /min.moje zliczanie impulsów ma słózyć do regulacji obrotów tak aby mniej wiecej równa sie kreciły ale tak nie super dokładnie....
Prosze o pomoc w sprawie programu w Asemblerze. Zadanie jakie ma spelniac to zlicznie impulsów pojemnosc 2 do 24 licznik T0 + rejestr B i do tego zerowanie dane jak na rys (zalacznik). Start i stop zliczania zwiazany jest z syg zewnetrznym W miare mozliwosci prosze o szybka pomoc.
Chciałem napisać program, który zlicza wystąpienia stanu niskiego na portach wejściowych (impulsy do 1kHz). Ten, który napisałem jakby liczył czas, w którym miałem wciśnięty przycisk. Podejmowałem już próby napisania programu, gdzie wykorzystując funkcję delay (i zabezpieczenie przed drganiami styków) Jak poniżej: #include <avr/io.h> #include...
ma dwa zadania ale nie wiem o co chodzi proszę aby ktoś chętny znalazł sie do pomocy 1)napisz program w języku drabinkowym który bedzie zliczał impulsy na wyjściu J1 i po zliczeniu 10 impulsów na włączonym wyjściu Q2 na 5s 2)rozwiązać powyższe zadanie w przypadku w którym sterownik ma nie reagować na impulsy przychodzące na wejście I1 podczas załączania...
Witam mam pytanie dotyczące zbudowania układu, który po zadanej przeze mnie liczbie impulsów zatrzymywałby jakieś urządzenie (np.silnik). Jak wiadomo, silnik zatrzymywany byłby przez przekaźnik sterowany moim układem. Problem polega na tym, jak zbudować licznik, który wcześniej miałby zadaną liczbę impulsów. Np raz 100 innym razem 200. Czy jedynym sposobem...
Mam silnik z przekładnią który daje 5 impulsów na jeden obrót przekładni, obrotów jest 139 to liczyłem na piechotę ale chcę wykorzystać Atmege 8 do sterowania tym silnikiem i nie mogę dojść do ładu z liczeniem tych impulsów. Próbowałem liczyć impulsy funkcja DEBOUNCE i szło dobrze dopóki nie zwiększyłem prędkości obrotowej, zaczęło gubić impulsy Następnie...
Witam. Czy ktoś z Was spotkał się może z jakimś konkretnym tego typu rozwiązaniem? Potrzebuję Komputerem PC (np.przy pomocy portu LPT) zliczać impulsy z przyrostowego przetwornika obrotowo impulsowego i wyświetlić na monitorze. Jest to typowy przetwornik,który ma dwa wyjścia TTL przesunięte miedzy sobą w fazie - A i B.
Witam kolegów, mam zestawiony układ: PLC - S7 300 (CPU 313 C - 2DP) + enkoder inkrementalny (wykorzystuję sygnały AB, 24V DC). 1.Podłączyłem poprawnie enkoder do sterownika (wybrałem licznik kanału 0, czyli pierwsze dwa wbudowane wejścia cyfrowe modułu wejść/wyjść). 2.Skonfigurowałem sprzęt w Step 7 w HW config, a następnie w programie użyłem bloku...
Program ma za zadanie sterować silnikiem krokowym z określoną czestotliwością i jednocześnie zliczać impulsy z enkodera. Do obsługi silnika wykorzystuję Timer0, który odmierza mi równe odcinki czasu pomiędzy kolejnymi krokami silnika. Natomiast do obsługi enkodera wykorzystuję Timer2, który po przepełnieniu zgłasza przerwanie i sprawdza stan na wejściach...
W obu programach masz błąd. W pierwszym: Akurat kod tu nie ma wiele wspólnego zrobiłem to na dwa sposoby i za każdym razem inne wyniki Widać że jednak ma. Chyba to rozgryzłem Proszę mnie poprawić jak się mylę No teraz by było. Przerwanie Int nie dzieli przez 256 więc masz przerwanie co impuls. Tylko po co później to: [syntax=basic4gl]Lj = Li / 250[/syntax]...
Witam serdecznie. Niestety po wielu bataliach poległem z tematem jakże prostym. Posiadam enkoder optyczny o dokładności 2000 impulsów na obrót. postanowiłem podpiąć go do mikokontrolera aby zacząć liczyć jego impulsy (kierunek obrotu tutaj jest nieistotny) impulsy liczy jednakże liczy je bardzo niedokładnie - szukając nie bardzo mogłem natrafić na szybki...
Kolego Chivo ja korzystam obecnie z enkodera dfrobot df400 ma 400 impulsów na obrót, czasem bywały problemy z nim ale znacznie przewyższa tanie impulsatory. Wracając do tematu opracowałem kod który działa mniej więcej tak jak bym chciał. Czujnik odległości optyczny odbiciowy działa na pinie 12, na pinie 2 korzystam z impulsów enkodera. Podczas gdy obiekt...
Rozwiązałem problem w następujący sposób: 1. Impulsy z enkodera podawane są na dwa wejścia timera (TIOA i TIOB) 2. Timer jest ustawiony w trybie CAPTURE 3. TIOB traktowany jest jako TRIGGER wywołujący przerwanie na zboczu narastającym i opadającym. 4. W obsłudze przerwania rozpatrywane są 4 przypadki: if(TIOA == 1) { if(TIOB == 1) { licznik--; } else...
ok dzieki za podpowiedz, będę szukał. Mam jeszcze jedno pytanko. Borykam sięz problemem szybkich licznków. Otóż ten problem. mam do dyspozycji silnik z reduktorem na tym wisi enkoder. Zliczam przez szybki liczniki wartość aktualnie zliczonych impulsów i po przekroczeniu x impulsów zatrzymuję silnik. Startuję i po x impulsach zatrzymujęi tak w kółko....
Witam, posiadam płytkę ZL29ARM i staram sie zrealizowac odczyt predkosci obrotowej przy uzyciu enkodera wobit M590. Kierujac sie dokumentacja "reference manual" podlaczylem enkoder - kanaly A i B na piny numer 6 i 7 na porcie A, uruchomilem Timer3 w trybie enkodera i dziala - zlicza w gore, w dol. Problem polega na tym, ze program powinien udostepnic...
Do bhtom: Wartość 10ms wpisałem przykładowo, żeby ktoś nie powiedział że niczego tam nie ma. Chodziło mi konkretnie o to co napisał allmar i zastosuję tą ostatnią metodę z podtrzymaniem, ponieważ chcę zmniejszyć jak najbardziej czas cyklu programu, zawsze stosowałęm timery w programie głównym, zobaczymy jaki teraz osiągnę czas cyklu. Czyli dobrze rozumując...
Witam, Do STM32F4 mam podłączony enkoder inkrementalny o rozdzielczości 1024 imp/obr. Chciałbym wykorzystać pełne możliwości sprzętowego modułu obsługi takich enkoderów przez F4, czyli zmieniać wartość licznika na opadających oraz narastających zboczach sygnału. W tym celu skonfigurowałem Timer 3 w następujący sposób: TIM3->CR1 |= TIM_CR1_UDIS; Bez...
Po obliczeniach wychodzi mi jakies 500 - 600 impulsów na sekunde, nawet nie tak mało. Mógłbym przenieść enkoder bezpośredno na koło, ale wtedy bardzo strace na rozdzielczości (ok 25impulsów/sek :/ ). Chyba zdecyduje sie na rozwiązanie z obrazka, które załączyłem poprzednio... będzie trzeba wykonać serię testów. Sam procek nie ma dużo do zrobienia, głównie...
Panowie, sprawa wygląda tak. http://obrazki.elektroda.pl/6871032900_1...
Przesuwam wolno pasek 100 sztuk rezystorów 0603. Ilość zliczona przez serial to 88 sztuk: 09:44:28.832 -> Zliczona ilosc elementow wynosi:85 09:44:29.113 -> Zliczona ilosc elementow wynosi:86 09:44:29.535 -> Zliczona ilosc elementow wynosi:87 09:44:30.379 -> Zliczona ilosc elementow wynosi:88 Może problemem jest mechanika, że nie powinno...
Poprawiłem warunek else na następujący [syntax=c] else PORTA&=~(1<<PA2); // Jeśli nie zgaś LED [/syntax] zaś flagi zdeklarowałem następująco [syntax=c] volatile uint8_t flaga1=0; volatile uint8_t flaga=0; [/syntax] co w efekcie dało cały kod następujący [syntax=c] #include <avr/io.h> //dołączenie podstawowej biblioteki #include <util/delay.h>...
http://obrazki.elektroda.pl/1661316800_1... Witam ponownie Tym razem chciałbym zaprezentować projekt lżejszego kalibru - zegarek wskazówkowy i termometr zbudowany na AT91SAM7S64. Wykonałem ten projekt, bo chciałem trochę pouczyć się programowej obsługi wyświetlacza graficznego z Nokii 3310, programowej obsługi enkodera inkrementalnego...
Ja wcale nie twierdziłem, że to jest sztywna granica. Właśnie dlatego że twierdziłeś że więcej się nie da: Według moich szacunków, przy częstotliwości taktowania 16MHz, detekcji na jednym zboczu, procedurach napisanych w asemblerze i niezbyt wysokich oczekiwaniach dodatkowych co do pozostałych zadań wykonywanych przez mikrokontroler można osiągnąć...
Jedyna zmienna, którą trzeba przechowywać, to old_A; można by zrezygnować z B, która jest używana raz, wstawiając read_B() zamiast B. I jest też sposób, by zrezygnować z A: porównujesz read_A() z old_A, jeśli się różnią, to zmieniasz old_A i zliczasz, kierunek według poprawionego old_A i read_B(). Przerwanie musi być na obu kierunkach zmian sygnału...
Ok rozumiem. Chcę po prostu zliczać impulsy dla enkodera inkrementalnego(dwa sygnały A i B) ale muszę zliczać impulsy dla każdej zmiany stanu na obu liniach aby otrzymać ilość sygnałów 4xPPR Przydał by się także port USB.
Nie wiem jak napisać przerwanie aby w kółko się nie wykonywało jak jest stan niski. Po prostu konfiguruje się przerwanie inne niż LOW LEVEL. Domyślnie jest low lewel dlatego mam podejrzenie że bascom coś namieszał i nie zmienił. Spróbuj też dodać jakiś mały kondensator, może jakieś szpilko się pojawiają i zlicza Ci dodatkowe impulsy.
Wystarczy ustawić sprzętowe przerwanie int0 np narastającym zboczem kanału A - w momencie przerwania sprawdzić stan kanału B enkodera i stosownie do jego stanu zmniejszyć lub zwiększyć stan licznika o 1.
1 kHz ??? Będzie ciężko - to jest 1ms, czyli sporo mniej niż skan. Chyba trzeba przejść przez zakiś zewnętrzny szybki licznik, ale nawet jak zliczał będzie zewnętrzny licznik, to rozumiem że interesuje cie wykrywanie jakiegoś konkretnego wyniku. Na SIMATICU czegoś takiego nie robiłem. W Mitsubishi robi się to tak, że szybki zewnętrzny licznik zlicza...
Witam !! Ustawiłem przerwania dla licznika. Działają gdy licznik zlicza w górę Czyli 0, 1, 4,5 i załącza przerwanie. Czy można tak zrobić aby przerwanie przy 5 załączyło się .gdy licznik liczy w dół 7,6,5 ,4 ? [syntax=c] TCC0.PER=0; //górna granica licznika x4 !!!!! TCC0.CTRLB = TC_WGMODE_NORMAL_gc; // zwykły tryb zliczania impulsów TCC0.INTCTRLA =...
Każde wywołanie millis() trwa w sumie 29 cykli zegara, w tym przerwania blokowane są tylko na mniej niż połowę, czyli około 1us (przy 16MHz), w pętli loop można wywołać millis() raz by potem napełnić swoje zmienne setek ms/sekund/minut/itd. Oczywiście przerwanie zostanie zauważone, po prostu reakcja może być opóźniona o tą 1 milionową część sekundy....
Dziękuję wam bardzo za pomoc, pomyliłem się w obliczeniach :D Przy kwarcu 8 MHz, jaki zastosowałem i przy podziale w preskalerze przez 256 okres zliczanych impulsów wyniesie 32 µs. Zliczenie w sprzętowym liczniku 250 tych impulsów to 8 ms i co 8 ms dostanę przerwanie - to już całkowicie dopuszczalne, tym bardziej, że ważniejsze są dla mnie impulsy...
mam jeszcze wrażenie że coś za wolno chodzi to przerwanie albo cały procesor, bo podłączyłem oscyloskop do procesora i w przerwaniu zmieniam PORTC.5 na przeciwny nic więcej nie robiąc w programie i na załączonym oscylogramie widać ,że zmiana stanu na porcie c.5 jest dopiero po 5us od załączenia przerwania , czy to jest normalne ? Na oscylogramie niebieski...
Witam , posiadam enkoder , dajacy sygnały A i B chce dołaczyc go do uC Atmega, tu jest problem poniewaz procesor ma za zadanie wykonywac pewna czynnosc na wewnetrznym przerwaniu od licznika.... bedzie ona wywoływana z pewna czestotliwoscia i ona ma najwyzszy priorytet. teraz pytanko , jak podlaczyc enkoder do uC aby nie zgubic zadnego impulsu z niego..........
Wszedzie szukam i nie moge znalezc, potrzebuje pojdzielic liczbe 16 bitowa przez 8 bitową w asemblerze Ostatecznie moze byc nawet 8 bit przez 8 bit, bez reszty, choc z reszta tez moze byc. Robie miernik prękości obrotej z enkodera (4096 na obrót). Licznik 16 bitowy zlicza impulsy, potem co 1sekunde wyzwala sie przerwanie ktore podzieli liczbe zliczonych...
Witam ! Dzięki wielkie za porady, po pierwsze przeniosłem cały program do pętli głównej i timera0 już nie używam, Właczyłem tryb CTC i nim pięknie generuję częstotliwość. Ale niestety w toku dalszych prac pojawił się następny problem. otórz w układzie potrzebuję wykorzystać jeszcze przerwanie od INT0 http://obrazki.elektroda.net/59_12685081...
Witajcie, mam taki sobie enkoder który chcę podłączyć do mikrokontrolera coś tego rodzaju, choć oczywiscie nie dokładnie ten model: https://www.epitran.it/ebayDrive/datashe... Podłączyłem go do esp32, wziąłem jakąś gotową bibliotekę 'rotary' do obsługi odczytu pozycji - działa to teoretycznie wszędzie tak samo, na bazie prostego automatu stanowego...
Witam, próbuję zaprogramować xmege aby mierzyła prędkość obrotową enkodera. Niestety mój pomiar to ciągle 0. [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "hd44780.h" uint16_t lastrecord=0; //ostatni pomiar uint8_t ovf0handler=0; //pomocnicza do odliczania 1 sekundy uint8_t tovf=0; //flaga...
Nie wiem jak dokładnie wyglądał twój układ i czy mogłes tak zrobić, ale skoro jeden licznik był wykorzystywany do input capture, to nie lepiej było go ustawić w trybie clear-on-compare bądź compare match a lub b (jeśli już był wykorzystywany do generowania jakiejś podstawy czasu ) na 0,5 sek i jednocześnie ustawić przerwanie input capture i w nim zwiększac...
Dziękuję za cenne uwagi. Co do toru 0 to już na to wpadłem tarcza została wyposażona w dodatkowy otwór umożliwiający kasowane EPOZ przy sygnale high, stąd 3 tory kształtowania impulsów. Zastanawiam się nad jeszcze jedną sprawą. Użyte transoptory mają średnicę "widzenia" toru optycznego 0,6 mm a otwory w tarczy są co 1 mm. Odpowiadając na Twoje pytania:...
Optymalizacja wydajności silników elektrycznych: Wyjaśnienie technik sterowania PID Kiedy przyglądamy się dronom, deskom balansującym, inteligentnym samochodom i odwróconym wahadłom, ciągle pojawia się ten termin - PID. Ale czym u licha jest PID i do czego służy? Cóż, w tym artykule stworzyłem prosty sterownik silnika, aby zagłębić się w zasadę działania...
lbugiera: Wiem jak wyglądają przebiegi z enkodera. Chyba się nie zastanowiłem pisząc to zdanie. 100% racji przyznaje. Ale idąc dalej i w ten punkt. Czy nie jest możliwe, że przesłona zatrzyma się w tak felornym miejscu, że fototranzystor będzie przewodził i nie oscylując? (To właśnie te powolne ruchy). Wydaje mi się że nie, ale chętnie usłyszę waszą...
Witam, Przedstawiam a tym artykule jak można na jednym przerwaniu obsłużyć pokazany poniżej impulsator. Może komuś się przyda. http://obrazki.elektroda.pl/6570210900_1... http://obrazki.elektroda.pl/3250862500_1... Wyjście B enkodera może by na innym dowolnym pinie, wymaga jedynie zmian w algorytmie. /* wyjście impulsatora...
Zaletą Discovery jest gotowy układ razem z programatorem/debugerem. Do Xmegi musisz to wszystko dokupić za pieniądze większe niż cała płytka discovery. Dlatego wolałbym jak narazie unikać XMeg, bo STM32 są chyba bardziel popularne no i jak narazie mam programator do tego :) Wystarczy ci Atmega48/88/168 faktycznie, nawet Timer0 ma dwa wyjścia PWM, czego...
Witam. Po przeszukaniu forum nie znalazłem rozwiązania tego problemu. Napisałem swego czasu procedurkę obsługi enkodera, wszystko było dobrze ale przy ipulsatorze 50imp/obr. i prędkości obrotowej ok.500 obr./min niestety wysypuje się. Mam przeczucie że jej wykonanie trwa zbyt długo.Nie jest może to procedurka najprostsza z możliwych ale jest b.skuteczna...
tak że jak kolega widzi nazwanie serva (serwa modelarskiego) i serva (serwomotoru do zastosowań przemysłowych takich jak maszyny CNC) to nieporozumienie. i to całekim inne rzeczy. I tu kolego znów się mylisz. Serwo modelarskie poza tym, że obraca się tylko o niewielki kąt to w istocie rzeczy jest zbudowane podobnie do serw przemysłowych. Może kolega...
Witam. Mając trochę wolnego czasu postanowiłem wrócić do zmagań z PIDem. W sieci znalazłem program PIDa w Bascomie na Atmegę8 (maluszek Attiny2313 okazał się niestety za mały). W programie wyłączyłem różniczkowanie - aby było łatwiej. Program działa dość dobrze tzn. obroty utrzymują się na żądanym poziomie ale troszkę oscylują wokół wartości zadanej....
Witam. Po dłuższej przerwie wracam do tematu stabilizatora. Zmagając się z regulatorem na wzmacniaczach operacyjnych postanowiłem jednak pójść w stronę regulatora na mikroprocesorze. W sieci znalazłem program PID-a w Bascomie na Atmege8, w którym wyłączyłem człon różniczkujący. Regulator działa średnio dobrze tzn. obroty wciąż oscylują wokół wartości...
Witam. Mam problem z obsługą enkodera Maxon M 128-512. Problemem jest zbyt duża ilość impulsów generowana na obrót wału wyjściowego przekładni. Enkoder jest sprzężony z silnikiem MAXON A-MAX 22mm ten z przekładnia planetarną. Enkoder na jeden pełen obrót podaje 512 impulsów ( jest to maksymalna rozdzielczość tego modelu ), aby obrócić wałem o 360 stopni...
enkoder zliczać impuls zliczać impuls enkoder enkoder zliczać impuls arduino
formatowanie seagate expansion eeprom programować matryca nikon obiektywu
Jak skonfigurować VPN na routerze Linksys? Lodówka Siemens - długie chłodzenie, migająca temperatura 2°C