Mały, prosty sterownik krokowca pod AVR

Rozmowy na temat układów elektronicznych sterowania obrabiarek CNC
Awatar użytkownika

TOP67
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 27
Posty: 2224
Rejestracja: 17 wrz 2018, 10:47
Lokalizacja: Wrocław
Kontakt:

Re: Mały, prosty sterownik krokowca pod AVR

#31

Post napisał: TOP67 » 09 sty 2020, 11:09

Jeśli ważna jest tylko prędkość, to może użyć tone?

Dodane 1 godzina 47 minuty 52 sekundy:
oprawcafotografii pisze:
08 sty 2020, 17:58
Płynność nie jest zbytnio ważna - ważna jest ilość kroków, żeby ilość ml się zgadzała...
Niestety jeśli program jest blokowany to kroki się marnują ;)

Silnik obraca się cały czas - pompka ma pracować ciągle przez kilka godzin.
Odczyt temperatury też niestety "ciągły" czyli w moim wypadku co 800ms.

Silnik w danym etapie procesu (te kilka godzin) pracuje ze stałą prędkością...
Tutaj widzę sprzeczność. To ważna jest stała szybkość, czy ilość płynu? Jeśli ilość, to przyspiesz o 15%, dodaj licznik kroków w przerwaniu i sprawdzaj przed podaniem impulsu czy nie jest już za dużo. Skoro lagi są co pół sekundy, to taka będzie dokładność dawkowania.
oprawcafotografii pisze:
08 sty 2020, 17:58
Jest znacznie lepiej - generalnie silnik kręci się z poprawną prędkością,
ale niestety nadal coś go blokuje na ułamek sekundy tak ze 2x na sekundę.
Daje to około 10% mniejszą wydajność pompy niż powinno.
Z tego wynika, że lag trwa ok 100 ms. Na to nie pomoże zmiana mikrokroku.
Ciekawe co wstrzymuje przerwania na tak długo?




Avalyah
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 22
Posty: 2366
Rejestracja: 29 lis 2015, 00:38
Lokalizacja: Bielsko-Biała

Re: Mały, prosty sterownik krokowca pod AVR

#32

Post napisał: Avalyah » 09 sty 2020, 11:25

Trzeba szukać w kodzie wyrażenia "cli()" lub arduinowe "noInterrupts()". Przy takich opóźnieniach podejrzewałbym LCD.

Awatar użytkownika

TOP67
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 27
Posty: 2224
Rejestracja: 17 wrz 2018, 10:47
Lokalizacja: Wrocław
Kontakt:

Re: Mały, prosty sterownik krokowca pod AVR

#33

Post napisał: TOP67 » 09 sty 2020, 11:37

Zapewne jest to gdzieś zaszyte w bibliotece.
Może zmiana typu wyświetlacza pomoże?

Awatar użytkownika

TOP67
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 27
Posty: 2224
Rejestracja: 17 wrz 2018, 10:47
Lokalizacja: Wrocław
Kontakt:

Re: Mały, prosty sterownik krokowca pod AVR

#34

Post napisał: TOP67 » 10 sty 2020, 19:31

Avalyah pisze:
08 sty 2020, 20:43
oprawcafotografii pisze:void rtSTEPPER()
{ digitalWrite (stepperSTEPpin, !digitalRead(stepperSTEPpin)); }

To bardzo powolny kod. Szczególnie w przerwaniach powinien być jak najkrótszy. Należy sprawdzić, do jakich portów należą te piny i użyć kodu, który działa bezpośrednio na rejestrach mikrokontrolera. Będzie szybciej i to kilkudziesięcio jeśli nie kilkusetkrotnie.
Sprawdziłem działanie takiego kodu bezpośrednio w pętli loop()

void loop() {
digitalWrite (1,!digitalRead(pin));
}
generuje sygnał 94 kHz

boolean stan1 = 0
void loop() {
digitalWrite (1,stan1);
stan1=!stan1;
}
generuje sygnał 154 kHz

void loop() {
digitalWrite (1,HIGH);
digitalWrite (1,LOW);
}
generuje sygnał 148 kHz. Czasy 3.2+3.55 µs.

void loop() {
PORTD = B00000010;
PORTD = B00000000;
}
generuje sygnał 2.66 MHz (szpilki 64ns)

void loop() {
PORTD = stan1*2;
stan1=!stan1;
}
daje 726 kHz

Jak widać odczytywanie stanu jest najwolniejsze.
Ostatnio zmieniony 10 sty 2020, 19:51 przez TOP67, łącznie zmieniany 2 razy.


Avalyah
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 22
Posty: 2366
Rejestracja: 29 lis 2015, 00:38
Lokalizacja: Bielsko-Biała

Re: Mały, prosty sterownik krokowca pod AVR

#35

Post napisał: Avalyah » 10 sty 2020, 19:41

TOP67 pisze:Jak widać odczytywanie stanu jest najwolniejsze.

Tak czy siak funkcje arduinowe marnują mnóstwo (relatywnie) czasu na dopasowanie pinu do rejestru. Sprawdź jeszcze coś takiego - PORTD ^=0x80; (oczywiście trzeba wybrać dobry port i dobry pin)jeśli Ci się chce, jestem ciekaw wyniku :)

Awatar użytkownika

TOP67
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 27
Posty: 2224
Rejestracja: 17 wrz 2018, 10:47
Lokalizacja: Wrocław
Kontakt:

Re: Mały, prosty sterownik krokowca pod AVR

#36

Post napisał: TOP67 » 10 sty 2020, 20:06

zapisanie 0 i 1 bez dodatkowych obliczeń daje szpilki 64ns o częstotliwości 2.66MHz.

Okres 375ns dzieli się zatem na: 64ns HIGH, 64 ns LOW, 247ns powrót w pętli

Dodane 19 minuty 15 sekundy:
Da się jeszcze przyspieszyć, tworząc własną pętlę

boolean warunek = 1;
while (warunek){
PORTD = B00000010;
PORTD = B00000000;
}
daje 4MHz czyli 250ns. 64ns H + 64ns L + 122ns na pętlę


Avalyah
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 22
Posty: 2366
Rejestracja: 29 lis 2015, 00:38
Lokalizacja: Bielsko-Biała

Re: Mały, prosty sterownik krokowca pod AVR

#37

Post napisał: Avalyah » 10 sty 2020, 20:24

No i mamy dość znaczne przyspieszenia. W tym przypadku to raczej nieistotne, bo nawet najwolniejsza metoda się wyrobi, ale warto wiedzieć :p

Awatar użytkownika

TOP67
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 27
Posty: 2224
Rejestracja: 17 wrz 2018, 10:47
Lokalizacja: Wrocław
Kontakt:

Re: Mały, prosty sterownik krokowca pod AVR

#38

Post napisał: TOP67 » 10 sty 2020, 20:35

Jeśli coś wyłącza przerwania, to nic nie pomoże. Pozostanie albo drugi mikrokontroler do sterowania silnikiem, albo praca przerywana z liczeniem kroków.


tomcat65
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 20
Posty: 1236
Rejestracja: 15 lis 2009, 02:46
Lokalizacja: Olsztyn
Kontakt:

Re: Mały, prosty sterownik krokowca pod AVR

#39

Post napisał: tomcat65 » 10 sty 2020, 21:30

Nie prościej na timerze uruchomić sterowanie silnikiem? Będzie niezależne od programu. Jaki to uC? Atmega328?

Awatar użytkownika

TOP67
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 27
Posty: 2224
Rejestracja: 17 wrz 2018, 10:47
Lokalizacja: Wrocław
Kontakt:

Re: Mały, prosty sterownik krokowca pod AVR

#40

Post napisał: TOP67 » 10 sty 2020, 22:36

kolega ma aktualnie uruchomione na timerze, ale mu coś wyłącza przerwania i ma lagi.

Testy prędkości są wynikiem wcześniejszej wersji programu.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Elektronika CNC”