A jednak potrwa dłużej...
Przy dodaniu parametrów osi A i B coś się posypało z EEPROM i parametrami $. Niby wszystko działa, ale jakieś kretyńskie komunikaty wyświetla... Trzeba to naprawić.
Znalazłem sposób na testowanie G33/G76 bez fizycznej tokarki.
Dopisałem do fake-encoder dodatkowe wyjścia, dwa bo tyle miałem do dyspozycji, ale i jedno by wystarczyło.
Stan tych dodatkowych wyjść zmienia się co 256 impulsów enkodera (można zrobić dowolną liczbę, ale nie widziałem sensu w tej chwili).
Trzeba jeszcze w pliku <ścieżka>/Libraries/Encoder/Encoder.h zmienić na PULSES_PER_REV 256 i nasze dodatkowe wyjście będzie sygnalizowało pełne obroty wrzeciona.
Kod: Zaznacz cały
#include <avr/io.h>
#include <util/delay.h>
byte index = 0;
int main(void)
{
/* setup */
DDRB = 0b00011011; // set 1 to outputs
PORTB = 0b00000100; // set outputs to LOW and inputs to HIGH
/* loop */
while (1)
{
if (PINB&_BV(PB2)) // Enable on pin PB2
{
PORTB ^= _BV(PB0); // toggle A
if ((index == 0) || (index == 128)) {PORTB ^= _BV(PB3);} // toggle index 1
if ((index == 64) || (index == 192)) {PORTB ^= _BV(PB4);} // toggle index 2
index++;
_delay_ms(1);
PORTB ^= _BV(PB1); // toggle B
_delay_ms(1);
}
}
}
Oczywiście nadal na ATtiny13.
Napisałem testowy g-kod:
Kod: Zaznacz cały
M3 S1000
G33 Z-1 K1
G0 Z0
G33 Z-2.5 K1
G0 Z0
G33 Z-1 K1
G0 Z0
M30
Nic nadzwyczajnego, trzy razy ruch synchronizowany z wrzecionem i szybki powrót.
Na analizatorze Saleae wygląda to tak:
Białe i brązowe przebiegi pomocnicze z fake-encoder, czerwony DIR, żółty STEP.
Te krótkie pakiety to kasowanie backlash.
Niebieskie markery wstawiałem ręcznie, więc nie są precyzyjne, ale wygląda na to, że synchronizacja jest.
Natomiast mam wrażenie, że synchronizacja obowiązuje tylko w czasie trwania jednego programu, a przy puszczeniu go ponownie może występować w innym położeniu wrzeciona...
Pewny nie jestem, ale i tak będę to musiał sprawdzić, bo jest poważna kicha -
parametr K nie działa.
On określa posuw w mm/obr, a właściwiej powinien określać, bo czego by nie wpisać, to i tak jedzie tak samo...
Sprawa niby prosta, gdzieś trzeba posuw przemnożyć przez K, tylko cholera wie gdzie...
Upewniłem się co do enkodera.
Gwintowanie działa tylko w jedną stronę, na lewych obrotach albo z odwrotnie podpiętym enkoderem wychodzą cuda...
Na dzisiaj to tyle.