Ilość faz oznacza ilość niezależnie sterowanych biegunów magnetycznych. Co prawie zawsze było równe ilości cewek. Ale że Chińczycy szukali oszczędności to wywalili jedną cewkę skoro bez niej silnik dalej i tak jako tako działał.
Silnikiem sterowałem i działał dość dobrze. Ale jednak było widać że to nie to co mogło by być.
Najważniejsze części w moim kodzie są takie:
Kod: Zaznacz cały
#define State0 (T1L_Off | T1H_On | T23L_On | T23H_Off | T4L_Off | T4H_On)
#define State1 (T1L_On | T1H_Off | T23L_On | T23H_Off | T4L_Off | T4H_On)
#define State2 (T1L_On | T1H_Off | T23L_Off | T23H_On | T4L_Off | T4H_On)
#define State3 (T1L_On | T1H_Off | T23L_Off | T23H_On | T4L_On | T4H_Off)
#define State4 (T1L_Off | T1H_On | T23L_Off | T23H_On | T4L_On | T4H_Off)
#define State5 (T1L_Off | T1H_On | T23L_On | T23H_Off | T4L_On | T4H_Off)
PROGMEM const uint8_t Krok[] = {State5, State4, State3, State2, State1, State0};
A L i H to dolne i górne tranzystory.
Czyli T1H_On oznacza że to włącza tranzystor górny do sterowania wyprowadzenia 1. Czyli że podaje VCC na wyprowadzenie 1.
Wcześniej sobie zadeklarowałem na których pinach jest jaki tranzystor:
Kod: Zaznacz cały
#define T1L_On (1 << 6)
#define T1L_Off 0
#define T23L_On (1 << 2)
#define T23L_Off 0
#define T4L_On (1 << 0)
#define T4L_Off 0
#define T1H_On 0
#define T1H_Off (1 << 7)
#define T23H_On 0
#define T23H_Off (1 << 5)
#define T4H_On 0
#define T4H_Off (1 << 1)
Bo to był tranzystor PNP. Czyli żeby podać H na wyjście, to musiałem podawać L (masę) do sterowania tranzystora.
A gdzieś w Timerze po prostu wpisywałem na port odpowiednie stany:
Kod: Zaznacz cały
PORTD = pgm_read_byte(&(Krok[(Silnik % 6)]));
Kod: Zaznacz cały
Silnik++;
Kod: Zaznacz cały
Silnik--;