[PRZYKŁAD] Sterownik silników KAmodMPC17C724 i KAmduino UNO
Po podłączeniu całości można przejść do oprogramowania na platformę Arduino. Poniższy program ma za zadanie spowodować, żeby silnik nabierał coraz wyższej prędkości, następnie zwalniał, zmieniał kierunek i tak w kółko. Poniżej znajduje się omówienie kodu programu:
Na początku definiowane są numery pinów, do których podłączone są piny modułu KAmodMPC17C724. Definicje są zgodne z połączeniem pokazanym w tabeli na poprzedniej stronie. Oczywiście w przypadku podjęcia decyzji o zmianie sposobu połączenia należy też zmienić poniższe definicje.
#define IN1A_PIN 3 #define IN1B_PIN 4 #define IN2A_PIN 5 #define IN2B_PIN 6 #define PSAVE_PIN 2
W funkcji setup inicjalizowane są wszystkie piny cyfrowe jako wyjścia. Następnie potencjał linii PSAVE ustawiany jest na potencjale masy, co ustawia sterownik w stan włączenia. W tym programie silniki przez cały czas są włączone, ale warto pamiętać, że przełączenie tej linii w stan wysoki wyłącza silniki.
void setup() {
pinMode (IN1A_PIN, OUTPUT);
pinMode (IN1B_PIN, OUTPUT);
pinMode (IN2A_PIN, OUTPUT);
pinMode (IN2B_PIN, OUTPUT);
pinMode (PSAVE_PIN, OUTPUT);
digitalWrite(PSAVE_PIN, LOW);
}
Funkcja ustawMPC17C724 uaktualnia parametry sygnałów wysyłanych do sterownika. Kierunek silnika ustawiany jest jako stan zmiennych kierunek1 oraz kierunek2. Prędkość ustawiana jest jako 8-bitowa wartość typu int. Musi więc mieścić się w zakresie 0…255. Prędkość silnika zależy od wypełnienia sygnału PWM. Parametry sygnału na pinie, na którym możliwe jest zaaplikowanie sprzętowego PWM (na płytce KAmduino Uno: 3, 5, 6, 9, 10, lub 11) można ustawić funkcją analogWrite. Argumentami analogWrite są: numer pinu oraz wypełnienie sygnału. Częstotliwość sprzętowego PWM wynosi w Arduino domyślnie 490 Hz. W funkcji ustawMPC17C724 jest już uwzględniony fakt, że wpływ wypełnienia przesyłanego po pinu IN1A/IN2A ma różny wpływ na prędkość w zależności od kierunku działania silnika. Użytkownik przesyłając prędkość do funkcji w zmiennych predkosc1 i predkosc2 może to zrobić w sposób naturalny (0 – brak ruchu, 255 – najwyższa prędkość). Warto zwrócić uwagę, że przy małych wartościach wypełnienia silnik w ogóle nie ruszy.
void ustawMPC17C724 (uint8_t predkosc1, uint8_t predkosc2, bool kierunek1, bool kierunek2) {
digitalWrite(IN1B_PIN, kierunek1);
if (kierunek1==false)
analogWrite (IN1A_PIN, predkosc1);
else
analogWrite (IN1A_PIN, 256-predkosc1);
digitalWrite(IN2B_PIN, kierunek2);
if (kierunek2==false)
analogWrite (IN2A_PIN, predkosc1);
else
analogWrite (IN2A_PIN, 256-predkosc1);
}
W funkcji loop odbywa się sterowanie sekwencja ruchu silnika. Silnik przyspiesza do maksimum, zwalnia do zera, a następnie zmienia kierunek i rozpoczyna sekwencję od nowa. Gdy oba silniki podłączone są w ten sam sposób, powinny poruszać się w przeciwnych kierunkach przez cały czas działania programu. Opóźnienia w pętli dodane są po to, aby można było zaobserwować powolne zwiększanie i zmniejszanie się prędkości obrotów.
void loop() {
int i;
for (i=0;i<256;++i){ // I faza - przyspieszanie
ustawMPC17C724(i,i,false,true);
delay(20);
}
delay (1000);
for (i=255;i>0;--i){ //I faza - zwalnianie
ustawMPC17C724(i,i,false,true);
delay(20);
}
for (i=0;i<256;++i){ //II faza - przyspieszanie
ustawMPC17C724(i,i,true,false);
delay(20);
}
delay (1000);
for (i=255;i>0;--i){ //II faza - zwalnianie
ustawMPC17C724(i,i,true,false);
delay(20);
}
}
Działanie przykładu można zaobserwować na poniższym materiale wideo:

Dominik Bednarski porównuje STM32MP1 i OpenSTLinux oraz Raspberry Pi 5
Technologie End of Life i bezpieczeństwo sieci – wyzwania Europy związane z tzw. długiem technologicznym
Najczęstsze błędy firm przy wyborze dostawcy energii i jak ich uniknąć 



