Sterownik silników pozycyjnych we frezarce 2D
Transkrypt
Sterownik silników pozycyjnych we frezarce 2D
Politechnika Wrocławska
Wydział Elektroniki
Sterowniki robotów
Projekt
Sterownik silników pozycyjnych we
frezarce 2D
wykonał:
Marek Kolasa
Prowadzący:
mgr inż. Jan Kędzierski
Wrocław 2012
Spis treści:
1. Cel projektu
2. Podzespoły
2.1. MC9S12A64
2.2. L297 i L298
2.3. LM555
3.Budowa układu
3.1. Schemat
3.2. Spis elementów
3.3. Widok
3.4. Płytka
4. Program
4.1. CodeWarrior
4.2. Procesor Expert
4.3. Kod programu
5. Literatura
1. Cel projektu
Celem projektu było stworzenie sterownika silnika krokowego
odpowiedzialnego za pozycjonowanie frezarki. Sterownik bazuje na
układach L297 i L298 oraz LM555. Za sterowanie odpowiada moduł
z mikrokontrolerem MC9S12A64.
Sterownik komunikuje się z użytkownikiem za pomocą trzech
przycisków: dwóch odpowiadających obrotom w lewo i w prawo
oraz jednego do zmiany trybu pracy. Sterownik umożliwia prace z
silnikiem w dwóch trybach: ciągłych obrotów podczas wciśnięcia
przycisku oraz określonej ilości kroków na każde przyciśnięcie.
2. Podzespoły
2.1. MC9S12A64
MC9S12A64 to 16-bitowy mikrokontroler z rodziny HCS12
firmy Freescale. Rodzina HC12 mikrokontrolerów firmy Motorola
jest następcą popularnej serii HC11, od wielu lat stosowanej w
bardzo wielu konstrukcjach sterowników i układów sensorycznych,
w szczególności w robotyce.1
2.2. L297 i L298
L297 to uniwersalny sterownik silnika krokowego, pozwala
sterować zarówno silnikiem uni-, jak i bipolarnym. Układ bardzo
wygodny do sterowania, jako wejścia potrzebuje tylko sygnału
zegara, zadania kierunku i trybu oraz sygnału włączającego prace.
L298 to mostek wzmacniający sterownika zapewniający
odpowiednie zasilanie uzwojenia silnika.
2.3 LM555
LM555 jest to bardzo stabilne urządzenie do generowania
dokładnych przebiegów czasowych. Jego praca kontrolowana jest
przez zewnętrzne dołączenie dwóch rezystorów i jednego
kondensatora.
1„Moduł z mikrokontrolerem MC9S12A64”, M.Wnuk,MKabała,
3. Budowa układu
3.1. Schemat
Rys.1. Schemat
3.2. Spis elementów
IC3
IC1
IC2
J4
J2
J1
J3
J5
R1
R2,R4
R3
R5,R6
R7
C1,C5
C2
C3
C4
D1-D8
- NE555N
- L297
- L298N
- zasilanie części logicznej(+5V)
- zasilanie silnika
- wyjście do silnik
- wyjście do silnik
- wejście portów mikrokontrolera
- rezystor, 1k1 Ω
- rezystor, 6k8 Ω
- rezystor, 22k Ω
- rezystor, 1 Ω
- potencjometr, 2k
- kondensator, 100nF
- kondensator, 10nF
- kondensator, 3n3F
- kondensator elektrolityczny 2200uF/50V
- diody 1N5822
3.3. Widok
Rys. 2. Widok sterownika z góry.
3.4. Płytka
Rys. 2. Płytka z elementami.
Rys. 2. Płytka.
Rys. 2. Rozmieszczenie elementów na płytce.
4. Program
Oprogramowanie mikrokontrolera powstało przy użyciu
środowiska programistycznego CodeWarrior i nakładki Procesor
Expert.
Program zawiera obsługę 3 przerwań związanych z sygnałami
wchodzącymi (naciśniecie przycisku).
4.1 CodeWarrior
CodeWarrior
jest
zintegrowanym
środowiskiem
programistycznym stworzonym przez firmę Metrowerks. Dziś
rozwija je i sprzedaje Freescale Semiconductors.
Pakiet zawiera wiele pomocnych narzędzi - podczas tworzenia
nowego projektu jesteśmy zasypywani różnymi propozycjami.2
4.2 Procesor Expert
PE pozwala nam na nie pamiętanie do czego służy dany rejestr
lub co trzeba robić po kolei, aby uruchomi¢ przetwornik ADC.
Ułatwienie w PE sprowadza się do wybierania myszką interesującego
nas peryferium, ustawienia opcji i przeciągnięcia pożądanej funkcji
danego peryferium do pliku projektu.3
4.3 Kod programu
Główna częścią kodu odpowiedzialną za prace sterownika jest
obsługa trzech przerwań. Każde przerwanie wyzwalane jest przez
przyciśnięcie przycisku (pojawienie się stanu wysokiego na
odpowiadającym pinie).
Przerwanie od przycisku trybu zmienia wartość globalnej
zmiennej typu bool.
void Mode_OnInterrupt(void)
{
mode = !mode;
}
Przerwania obsługujące dwa kolejne przyciski są względem
siebie analogiczne. W zależności od tego który przycisk zostanie
aktywowany program ustawi odpowiednio wyjście odpowiedzialne
za kierunek obrotu i, w zależności od trybu, ustawi wyjście
odpowiedzialne za rozpoczęcie pracy silnika.
2„HC12 i CodeWarrior. Nie za krótkie wprowadzenie do tematu”,
M.Cholewiński
3„HC12 i CodeWarrior. Nie za krótkie wprowadzenie do tematu”, M.Cholewiński
void Left_OnInterrupt(void)
void Right_OnInterrupt(void)
{
{
if(mode == 0) {
if(mode == 0) {
RightLeft_PutVal(0);
RightLeft_PutVal(1);
Enable_PutVal(1);
Enable_PutVal(1);
while(Left_GetVal()){}
while(Left_GetVal()){}
Enable_PutVal(0);
Enable_PutVal(0);
}
}
else {
else {
RightLeft_PutVal(0);
RightLeft_PutVal(1);
Enable_PutVal(1);
Enable_PutVal(1);
Delay(3);
Delay(3);
Enable_PutVal(0);
Enable_PutVal(0);
while(Left_GetVal()){}
while(Left_GetVal()){}
}
}
}
}
5. Literatura
1. „Moduł z mikrokontrolerem MC9S12A64”, M.Wnuk,
M.Kabała, Wrocław 2005,
2. „HC12 i CodeWarrior. Nie za krótkie wprowadzenie do
tematu”, M.Cholewiński, Wrocław 2009,