Co do wysterowania sygnału pulse w sterowniku to nie ma w tym żadnej filozofii. Krok wykonywany jest, jak sygnał zmieni się z 0V na 5V. Sterownik potrzebuje coś kilka mikrosekund, żeby zarejestrować zmianę. W Twoim przypadku, żeby wykonać krok wystarczy Ci taka funkcja (poglądowo):
Kod: Zaznacz cały
static inline void doStep(uint8_t direction)
{
digitalWrite(pinPul, LOW); // Ustaw pin Pul na 0V.
digitalWrite(pinDir, direction); // Ustaw pin Dir zgodnie z wybranym kierunkiem - 0 albo 1
digitalWrite(pinPul, HIGH); // Ustaw pin Pul na 5V.
}
i gotowe, krok wykonany. Czas wykonywania funkcji digitalWrite jest na tyle duży (o ile pamiętam coś koło 6uS), że powinien wystarczyć sterownikowi do wykrycia zmiany bez dodawania dodatkowych opóźnień. Oczywiście możesz sobie to rozszerzyć na kilka osi itd., to co napisałem to takie minimum, żeby zakręcić silnikiem w wybranym kierunku. To, jak szybko będzie kręcił się silnik zależy oczywiście od tego, jak często będziesz tę funkcję doStep wywoływał. Możesz to zrealizować za pomocą przerwań wykonywanych równiutko co określony czas ("równolegle" do głównej pętli programu, która może w tym czasie robić coś innego), albo po prostu zrobić gdzieś pętlę z opóźnieniem (prostsze rozwiązanie ale nieeleganckie i zajmuje całkowicie procesor). Dla przykładu (znowu zupełnie poglądowo!):
Kod: Zaznacz cały
void doSteps(uint32_t numberOfSteps, uint8_t msBetweenSteps,uint8_t direction)
{
for (uint32_t i = 0; i < numberOfSteps; i++)
{
doStep(direction);
delay(msBetweenSteps);
}
}
wykona Ci zadaną ilość kroków z określoną prędkością w określonym kierunku. Wywołanie w kodzie funkcji w ten sposób:
spowoduje, że silnik wykona 1000 kroków (5 obrotów bez mikrokroku) w ciągu 5 sekund (każdy krok co 5ms).
Chociaż nie wiem, po co ja się produkuję, to samo będziesz pewnie miał już w gotowej bibliotece od arduino

do tego w zestawie od razu przyspieszanie itd. Ale z tego, co pamiętam te biblioteki też takie cudowne nie są, jak będziesz chciał trochę rozwinąć projekt to zobaczysz, że samemu napiszesz do tego lepszy kod.
Co do krańcówek to nie wiem, czy do końca rozumiem, ale jeśli chcesz je wykorzystać tylko jako zabezpieczenie to wystarczy je spiąć z sygnałem ena na sterowniku. Natomiast w takim przypadku gdy zostaną aktywowane to arduino się o tym nie dowie i będzie wykonywać program dalej (oczywiście silniki nie będą już odpowiadać), więc odpada Ci możliwość reakcji programowej na to i na przykład umożliwienie wznowienia pracy po usunięciu ręcznym problemu, jeżeli to możliwe.