Xmega generowanie określonej liczby impullsów

Rodzina procesorów bogatszych w wiele nowych rozwiązań i dlatego warto po nie sięgnąć.
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Xmega generowanie określonej liczby impullsów

Post autor: Jacek » 16 sie 2020, 12:30

Witam - chciałbym generować impulsy dla sygnału step.
Ma byś to test sterowania ręcznego posuwem tokarki, ustawienia w programie mam takie:
Dla pokrętła enkodera osi Z:
porty
  1. '---------------------------Enkoder pokrętła osi Z-------------------------------
  2. Config Pina.3 = Input                                       'enkoder osi Z kanał A
  3. Config Pina.4 = Input                                       'enkoder osi Z kanał B
  4. Config Pina.5 = Input                                       'enkoder osi Z kanał Index
  5. Config Xpin = Porta.3 , Outpull = Pullup , Sense = Low_level
  6. Config Xpin = Porta.4 , Outpull = Pullup , Sense = Low_level
  7. Config Xpin = Porta.5 , Outpull = Pullup , Sense = Low_level
  8. '----------------------------------------------------------------------------------
event system
  1. '**********************************Enkoder pokrętła osi Z*************************
  2. Config Event_system = Dummy , Mux2 = Porta.3 , Qd2 = Enabled , Qdi2 = Enabled , Digflt2 = 8
  3. Config Tcd0 = Normal , Prescale = E2 , Event_source = E2 , Event_action = Qdec
  4. '*******************************************************************************
sub do przechwytywania impulsów
  1. 'odczyt pokrętła osi Z
  2. $nocompile
  3. Sub Z_os_odczyt
  4.    If Tcd0_cnt <> Z_enkoder_tmp Then                        'jesli zawartosc timera TCD0 jest różna od naszej zmiennej to
  5.       Z_enkoder_tmp = Tcd0_cnt                              'przepisz nową wartość z timera TCD0 do zmiennej enkoder_tmp
  6.       Z_enkoder_tmp_1 = Tcd0_cnt                            ' / 4                        '  four inpulses per one step of teh encoder  so wee need only one
  7.       If Z_enkoder_tmp_1 <> Z_enkoder_tmp_2 Then            'Jeśli zmienna Enkoder_tmp_1 jest różna od zmiennej  Enkoder_tmp_2
  8.          Z_enkoder_tmp_2 = Z_enkoder_tmp_1                  'wstaw wartość zmiennej Enkoder_tmp_1 do zmiennej Enkoder_tmp_2
  9.       End If
  10.    End If
  11. End Sub
sub wywoływany w pętli głównej
  1. Call Z_os_odczyt      
chciałbym aby ilość przechwyconych impulsów z enkodera była generowana na porcie C0.
Nie wiem jak to zrobić - czy mogę liczyć na pomoc.
pozdrawiam Jacek.
Awatar użytkownika
niveasoft
Posty: 1207
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Xmega generowanie określonej liczby impullsów

Post autor: niveasoft » 17 sie 2020, 11:37

Czytałem to wczoraj, czytam dziś i dalej nie rozumiem.
Chcesz generować impulsy tak jak pisze na górze postu czy "chciałbym aby ilość przechwyconych impulsów z enkodera była generowana na porcie C0" jak pisze na dole?

Wyjaśnij to najpierw :D
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: Xmega generowanie określonej liczby impullsów

Post autor: Jacek » 17 sie 2020, 21:43

Witam - źle napisałem ma być "chciałbym aby ilość przechwyconych impulsów z enkodera była generowana na porcie C0."
wczoraj zmieniłem ustawienie portu C.0
  1. Config Portc.0 = Output
  2. Config Xpin = Portc.0 , Outpull = Pullup                    'totem
było totem

zaremowałem
  1. '*********TIMER DO GENEROWANIA SYGNAŁU STEP OSI Z**********
  2. 'Config Tcc0 = Freq , Prescale = 2 , Comparea = Enabled , Resolution = Normal
  3. 'Tcc0_cca = 78
  4. '*******************************************************************************
dodałem w pętli głownej
  1.  Pulseout Portc , 0 , Z_enkoder_tmp_2
działa - jak kręcę enkoderem od osi Z to pojawiają się impulsy na porcie C.0
tylko że jak nie kręcę enkoderem to również pojawiają się jakiś przypadkowe impulsy na porcie C.0 co widać na oscyloskopie
20200817_211333-1.jpg
oraz mruga dioda podłączona do portu C.0
3.jpg
dioda D12 podłączona przez bufor do portu C.0

Najdziwniejsze jest że jak kręcę enkoderem od obrotów to również pojawiają impulsy na porcie C.0
nie wiem co mam źle w programie może jak bym wstawił cały program to by się coś wyjaśniło ale to by zajęło pewnie kilka postów.
pozdrawiam Jacek.

P.S. enkoder od osi Z na razie kręci w "jedną stronę" - nie wiem jak zrobić żeby kręcił na "minus" bo będę potrzebował wykrywanie zmiany kierunku kręcenia enkodera do zmiany kierunku kręcenia silnikiem czyli zmianą stanu na porcie DIR ( B.3 ).
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: Xmega generowanie określonej liczby impullsów

Post autor: Jacek » 18 sie 2020, 20:45

Witam - chodzi mi o coś takiego dla pracy ręcznej https://www.youtube.com/watch?v=mzQGtIKt4Lk&t=498s
pozdrawiam Jacek.
Pikczu
Posty: 388
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Xmega generowanie określonej liczby impullsów

Post autor: Pikczu » 18 sie 2020, 21:55

działa - jak kręcę enkoderem od osi Z to pojawiają się impulsy na porcie C.0
tylko że jak nie kręcę enkoderem to również pojawiają się jakiś przypadkowe impulsy na porcie C.0 co widać na oscyloskopie

20200817_211333-1.jpg

oraz mruga dioda podłączona do portu C.0

3.jpg

dioda D12 podłączona przez bufor do portu C.0
Jacek musiał byś podpiąć oscyloskop pod twój enkoder i tam sprawdzić co i jak.
bo zwyczajnie twój enkoder może wysyłać impulsy i dlatego na wyjściu się coś pojawia.
P.S. enkoder od osi Z na razie kręci w "jedną stronę" - nie wiem jak zrobić żeby kręcił na "minus" bo będę potrzebował wykrywanie zmiany kierunku kręcenia enkodera do zmiany kierunku kręcenia silnikiem czyli zmianą stanu na porcie DIR ( B.3 ).
Ja bym spróbował przypisać twój portb.3 do bitu DIR w rejestrze TCD0_CTRLFCLR
Snipaste_2020-08-18_20-52-49.png
Snipaste_2020-08-18_20-32-14.png
14.12.8 CTRLFCLR / CTRLFSET - Rejestr kontrolny F Clear / Set
Ten rejestr jest mapowany na dwie lokalizacje pamięci we / wy, jedną do kasowania (CTRLxCLR) i jedną do ustawiania bitów rejestru (CTRLxSET) podczas pisania.
Obie lokalizacje pamięci dadzą ten sam wynik podczas odczytu.
Pojedynczy bit statusu można ustawić, zapisując jedynkę w jego lokalizacji bitowej w CTRLxSET, i wyczyścić, zapisując jeden do jego bitu w CTRLxCLR.
Pozwala to na ustawienie lub wyczyszczenie każdego bitu bez użycia operacji odczytu, modyfikacji i zapisu na pojedynczym rejestrze.
Bit 7: 3 - Zarezerwowany
Te bity są nieużywane i zarezerwowane do wykorzystania w przyszłości. Aby zapewnić zgodność z przyszłymi urządzeniami, zawsze zapisuj te bity do
zero, kiedy ten rejestr jest zapisywany.
Bit 4 - QDECINDX: flaga indeksu QDEC
Ten bit wskazuje, że obserwowany jest indeks QDEC. Flaga jest usuwana podczas odliczania w górę lub w dół od zera.
Normalnie ten bit jest kontrolowany sprzętowo przez system zdarzeń, ale ten bit można również zmienić z poziomu oprogramowania.
Bit 3: 2 - CMD [1: 0]: Polecenie
Bity te mogą być używane do programowego sterowania aktualizacją, restartem i resetowaniem timera / licznika.
Bity polecenia są zawsze odczytywane jako zero.
Snipaste_2020-08-18_20-37-42.png
Bit 1 - LUPD: aktualizacja blokady
Gdy ten bit jest ustawiony, żadna aktualizacja buforowanych rejestrów nie jest wykonywana, nawet jeśli występuje warunek UPDATE.
Zablokowanie aktualizacji zapewnia, że ​​wszystkie bufory, w tym bufory DTI, są niezmienione przed wykonaniem aktualizacji.
Ten bit nie działa, gdy włączona jest operacja przechwytywania wejścia.

Bit 0 - DIR: Kierunek przeciwny
Gdy zero, ten bit wskazuje, że licznik zlicza w górę (inkrementuje). Jedynka wskazuje, że licznik jest włączony
stan zliczania w dół (dekrementacji).

Zwykle ten bit jest sterowany sprzętowo przez tryb generowania przebiegu lub przez system zdarzeń, ale ten bit może
również zostać zmienione z oprogramowania.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
niveasoft
Posty: 1207
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Xmega generowanie określonej liczby impullsów

Post autor: niveasoft » 18 sie 2020, 23:10

Pomyślę nad tym jutro rano przy kawie :P
Pikczu
Posty: 388
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Xmega generowanie określonej liczby impullsów

Post autor: Pikczu » 19 sie 2020, 13:45

Trzeba by bylo miec pdfa do tego sterownika.
Bo nieiwadomo czy implusy maja byc podawane w ciagu jaiegos okresonego czasu.
jak to ma dokladnie wygladac.
JAcek potrzebujemy PDFa to tego sterownika
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: Xmega generowanie określonej liczby impullsów

Post autor: Jacek » 19 sie 2020, 16:52

Witam - wszystko co mam jest z tych linków, niezbyt obszerna instrukcja
na dole strony dokumentacje
https://oferta.forum-cnc.pl/?148,silnik ... -kenkodera
opis sterownika
https://oferta.forum-cnc.pl/files/2HSS57-07.pdf
opis silnika
https://oferta.forum-cnc.pl/files/60H10 ... 000-01.pdf
program
https://oferta.forum-cnc.pl/?p=download ... rogram.zip
to wszystko co mam od sprzedawcy.

pozdrawiam Jacek.
Pikczu
Posty: 388
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Xmega generowanie określonej liczby impullsów

Post autor: Pikczu » 19 sie 2020, 17:57

Częstotliwość impulsów jest od 0 200Khz.
Trzeba to tylko potwierdzić w działaniu.
Weź generator wiem że masz:) ustaw tam burts np 10000 impulsów na sekundę ale z przerwą co 5 sekund np i sprawdź co się dzieje z silnikiem.
Chodzi tylko o to żeby sprawdzić czy to ma być ilość impulsów/sekundę czy tylko impulsy na krok nie ważne w jakim oknie czasowym.
Ostatnio zmieniony 20 sie 2020, 0:02 przez Pikczu, łącznie zmieniany 1 raz.
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: Xmega generowanie określonej liczby impullsów

Post autor: Jacek » 19 sie 2020, 23:14

Witam - ano Paweł hi muszę złożyć zasilacz do silnika dopiero w piątek będę miał całość.
Hi dzisiaj stała się dziwna rzecz xmega zaczęła się wieszać - lcd dobrze wysyła zmienne do xmegi, ale ona po kilku lub kilkudziesięciu sekundach wiesza się.
także dopiero w piątek wieczorem sprawdzę to co pisałeś.
pozdrawiam Jacek.
ODPOWIEDZ