Mikrokontrolery Microchip dsPIC 33CK – układy DSC o skróconym czasie reakcji na zdarzenie
Microchip ma od dłuższego czasu w swojej ofercie ciekawą rodzinę mikrokontrolerów Microchip dsPIC 33, nazwanych Digital Signal Controllers (DSC). Są to jednostki, w których połączono wydajny 16-bitowy rdzeń RISC z jednostką DSP (Digital Signal Processor). Wyposażono je w specjalizowane układy peryferyjne. Mogą być one z powodzeniem wykorzystane do sterowania wszelkiego rodzaju silnikami: prądu stałego z komutatorem i szczotkami, bezszczotkowego BLDC, klatkowym.
dsPIC 33 – charakterystyka
Chociaż sterowanie silnikami to jedno z głównych zastosowań mikrokontrolerów Microchip dsPIC 33, to poza nim można je wykorzystywać w wielu innych aplikacjach, na przykład w układach zasilaczy impulsowych czy układach automatyki. Bardzo ważnym rynkiem, który chłonie dużą ilość elementów elektronicznych, w tym mikrokontrolerów, jest rynek elektroniki motoryzacyjnej. To zastosowanie jest bardzo wymagające dla stosowanych elementów, jeżeli chodzi o funkcjonalność i niezawodność. Jest to spowodowane pracą w bardzo trudnych warunkach środowiskowych: narażeniem na skrajne temperatury otoczenia, zmiany wilgotności, czy przepięcia elektryczne. Podobnie jest w przypadku urządzeń medycznych. Praca w trudnych warunkach i coraz większe oczekiwania rynku co do niezawodności i funkcjonalności wymagają stałej modernizacji rodzin mikrokontrolerów. Jednym z efektów tej modernizacji są nowe rodziny układów DSC: Microchip dsPIC 33CK – rysunek 1.
Rysunek 1. Schemat blokowy mikrokontrolerów rodziny Microchip dsPIC 33CK
Układy elektroniki przemysłowej, medycznej czy samochodowej często wymagają szybkiej odpowiedzi na przychodzące zdarzenia. Może to być na przykład sygnał z czujników umieszczonych na wale silnika o tym, że jego obroty maja zbyt niską wartość, co może oznaczać przeciążenie. Układ sterowania powinien zareagować na ten sygnał tak szybko, jak to możliwe, żeby zapobiec uszkodzeniom silnika, układu sterowania oraz zasilania i w końcu uszkodzeniu mechanicznego układu napędzanego przez silnik. Ponieważ mikrokontroler w układzie sterowania wykonuje wiele różnych czynności, to dla obsługi krytycznych czasowo zdarzeń najlepiej jest wykorzystywać mechanizm przerwań.
dsPIC 33 – przerwania
Układ przerwań może być mniej lub bardziej rozbudowany, ale podstawowa zasada działania jest podobna. Źródło przerwania musi być odblokowane i mieć zaprogramowany priorytet (jeżeli jest taka możliwość). Przyjęcie przerwania powoduje „zawieszenie” wykonywania programu głównego i rozpoczęcie wykonywania procedur obsługi przerwania. W wielu układach sterowania kluczowy jest czas upływający od momentu zaistnienia zdarzenia wywołującego przerwanie do momentu rozpoczęcia wykonywania kodu obsługi przerwania. Niestety nigdy nie następuje to natychmiast, bo mikrokontroler ma do wykonania po drodze kilka czynności. Załóżmy, ze zdarzenie jest asynchroniczne, czyli może się pojawić w momencie niezsynchronizowanym z zegarem taktującym mikrokontroler. Zanim stanie się cokolwiek innego mikrokontroler musi dokończyć wykonywanie bieżącego rozkazu. Potem jest inicjowana sekwencja kolejnych czynności:
- Na stos, lub do dedykowanych buforów w pamięci RAM, jest zapisywany licznik rozkazów (PC) po to, by po zakończeniu obsługi przerwania program mógł wrócić w to samo miejsce
- Układy logiczne sterownika przerwań ładują do licznika rozkazów wektor przerwania, czyli adres, pod którym jest najczęściej zapisany adres skoku do procedury obsługi przerwania
- Wykonywany jest skok do obsługi przerwania
- Procedura obsługi przerwania musi w pierwszej kolejności zachować zwartość rejestrów, które są współdzielone z programem głównym – na przykład rejestrów roboczych, akumulatora jednostki DSP i statusu.
Dopiero od tego momentu można wykonać sekwencję rozkazów reagujących na zaistniałe zdarzenie. Schematycznie dla przerwania przychodzącego dla instrukcji wykonywanej w jednym cyklu zostało to pokazane na rysunku 2.
Rysunek 2. Sekwencja czynności wykonywanych w trakcie przyjmowania przerwania
dsPIC 33 – optymalizacja wydajności
Co można zrobić, żeby skrócić czas od wystąpienia zdarzenia do rzeczywistej reakcji? Pierwszym intuicyjnym sposobem jest zastosowanie szybszego mikrokontrolera. Może to być jednostka taktowana szybszym zegarem i/lub jednostka z optymalizowanym rdzeniem (rozkazy wykonywane w mniejszej ilości cykli, architektura RISC). W przypadku rodziny mikrokontrolerów Microchip dsPIC 33CK, według danych producenta zwiększono wydajność dwukrotnie w porównaniu do mikrokontrolerów Microchip dsPIC 33 starszej generacji. Na przykład starsza rodzina dsPICFJ64GS ma katalogową wydajność na poziomie 50 MIPS, a Microchip dsPIC 33CK na poziome 100 MIPS. Niestety nie znalazłem metodologii pomiaru wydajności rdzenia i nie wiem jak ten wzrost się ma do czasu wykonania jednej instrukcji. Jednak należy się spodziewać, że w nowych mikrokontrolerach rozkazy będą wykonywane szybciej, a co za tym idzie czas reakcji na zdarzenie będzie krótszy.
dsPIC 33 – przerwania
Kolejnym „wąskim gardłem” jest konieczność zachowania zawartości rejestrów współużytkowanych przez program główny i procedurę przerwania. Procedura przerwania musi na samym początku zapamiętać zawartość, czyli w praktyce przesłać na stos zawartość rejestrów roboczych W, akumulatora DSP (jeżeli jest używany) i rejestru statusowego. Ostatnimi czynnościami kończącymi obsługę przerwania jest odtworzenie zawartości tych rejestrów (zdjęcie ze stosu). Rdzeń Microchip dsPIC 33CK ma 16 rejestrów ogólnego przeznaczenia W0…W15. Zależnie od tego co ma robić procedura przerwania, trzeba część tych rejestrów zachowywać na stosie, a po zakończeniu odtworzyć ich zawartość pobierając ze stosu. Żeby tego nie robić programowo, gdyż zabiera to czas procesora, w CPU wbudowano cztery zestawy rejestrów alternatywnych W0…W14. Jednostka DSP ma również wbudowane 4 zestawy alternatywnych rejestrów akumulatora DSP. Producent nazywa zestaw rejestrów alternatywnych Interrupt Context Saving Registers.
Zestaw rejestrów alternatywnych jest powiązany z poziomem priorytetu przerwania. To powiązanie jest zapisywane w rejestrze konfiguracyjnym FALTREG w momencie programowania pamięci mikrokontrolera. Jeżeli programista chce to przyporządkowanie zmienić w trakcie pracy programu, to może użyć dedykowanego rozkazu CTXTSWP.
Po zgłoszeniu przerwania o zadanym priorytecie, układy logiczne automatycznie przełączają na używanie przez procedurę obsługi zaprogramowanego zestawu rejestrów alternatywnych, przypisanych do tego priorytetu. Program obsługi przerwania nie niszczy zawartości zestawu rejestrów podstawowych i nie trzeba ich zachowywać na stosie. Klika zestawów rejestrów alternatywnych umożliwia obsługę przerwań zagnieżdżonych.
Rysunek 3. Rejestry W, akumulator DSP i rejestr statusu
Szybka reakcja na przerwanie to bardzo duża zaleta w układach sterowania z krytycznym czasowo wymaganiem reakcji na zdarzenia. Rodzina mikrokontrolerów Microchip dsPIC 33CK oferuje również tradycyjnie dla Microchipa wysokiej jakości układy peryferyjne.
dsPIC 33 – pewność działania
W mikrokontroler wbudowano funkcjonalności mające na celu zbudowanie bezpiecznie działających aplikacji:
- test pamięci RAM (BIST),
- zabezpieczenie przed dostępem do zawartości pamięci Flash CodeGuard,
- Deadman Timer DMT,
- moduł korekcji błędów ECC wbudowany w kontroler pamięci Flash oraz
- moduł generujący wielomian kontrolny CRC.
dsPIC 33 – ochrona RAM
Auto-test pamięci RAM może być uruchamiany po zerowaniu mikrokontrolera lub na żądanie, w trakcie normalnej pracy. Test sprawdza poprawność działania komórek we wszystkich lokacjach pamięci RAM i w przypadku wykrycia uszkodzenia komórki RAM sygnalizuje to odpowiednimi bitami statusowymi.
System ochrony zawartości pamięci nieulotnej Flash, nazwany CodeGuard, podzielono na 3 segmenty: Boot Segment, General Segment i Configuration Segment. Najwyższy stopień ochrony ma segment Boot, a segment General, w którym umieszczono kod użytkownika, najniższy.
Główną funkcją Deadman Timer DMT jest monitorowanie prawidłowości wykonywania programu użytkownika. DMT jest licznikiem synchronicznym zliczającym ilość pobieranych rozkazów (fetch). Jeżeli program użytkownika nie wyzeruje licznika DMT po ustalonej liczbie pobrań, to zgłaszane jest wewnętrzne przerwanie i program może zareagować na takie zdarzenie. Użytkownik programuje limit czasu zliczania lub okno określające zakres zliczanych pobrań.
dsPIC 33 – ochrona Flash
Moduł korekcji błędów pamięci Flash ECC wykrywa błędy na jednej pozycji w słowie (błędy 1-bitowe) i automatycznie je koryguje. W czasie zapisywania danych do pamięci (programowania mikrokontrolera) ECC generuje 7-bitowy wielomian kontrolny dla każdych z dwu słów instrukcji. Te wielomiany są zapisywane w specjalnym obszarze pamięci niedostępnym dla programu użytkownika (do odczytu i zapisu). W czasie odczytywania zawartości pamięci Flash (pobierania rozkazów przez CPU) wielomian jest ponownie obliczany i porównywany z wygenerowanym podczas zapisu. Brak zgodności obu wielomianów wywołuje jedną z dwóch reakcji modułu ECC:
- Dla błędu 1-bitowego następuje korekcja błędu i ponowne zapisanie komórki pamięci.
- Dla błędu na więcej niż jednej pozycji dane w pamięci nie są korygowane ani zapisywane. Mikrokontroler wykonuje wtedy restart i odczytując odpowiedni rejestr można zidentyfikować jego przyczynę.
Zadaniem modułu CRC jest sprzętowe wyliczanie sumy kontrolnej, głównie w celu zabezpieczenia przed skutkami przekłamania bloku danych transmitowanych lub odbieranych. Wyliczanie CRC jest zawsze oczekiwane przy przesyłaniu danych przez łącza radiowe. Bardziej skomplikowane algorytmy kontroli transmisji potrafią z pomocą wyliczanych sum CRC korygować błędy w przesyłanym bloku danych.
dsPIC 33 – watchdog
Oprócz bardziej zaawansowanych układów chroniących wykonywany kod przed błędami znajdziemy tu klasyczne rozwiązania:
- licznik Watchdog WDT,
- układ nadzoru układu taktowania Clock Monitor with Backup Ocillator i
- FCSN (Fail Safe Clock Monitoring).
dsPIC 33 – sterowanie silników
Rodzina mikrokontrolerów dsPIC33 jest często kojarzona z układami sterowania silnikami elektrycznymi oraz ze sterownikami układów mocy. Do tego celu jest przeznaczony układ peryferyjny HSPWM. HSPWM ma osiem niezależnych szybkich układów PWM mogących generować przebiegi PWM z rozdzielczością 250ps. Wszystkie kanały są wyposażone w programowane układy generowania czasu martwego (dead time) i wejścia z czujników wykrywających awarie lub przeciążenie. Sygnały aktywne na tych wejściach powodują automatyczne ograniczenie mocy wyjściowej lub wyłączenie zasilania. Według producenta HSPWM można wykorzystać w aplikacjach sterownia:
- inwerterów DC/DC i AC/DC
- układami oświetleniowymi
- silnikami BLDC, PMSM, ACIM i SRM
Poważnie potraktowano też część analogową. Wbudowane dwa przetworniki ADC o rozdzielczości 12-bitów pracują z częstotliwością 3,5 Msps. Każdy z 24 kanałów analogowych ma swój bufor do zapisywania wyniku konwersji. Przetworniki można niezależnie wyzwalać, a wyzwalanie można elastycznie konfigurować.
dsPIC 33 – komunikacja
Układy elektroniczne stosowane w motoryzacji wymagają przesyłania danych przez łącza szeregowe. Stosuje się tu tanią magistralę LIN i droższą, ale o dużych możliwościach, magistralę CAN.
Magistralę LIN można używać do komunikacji z prostymi czujnikami i tworzenia małych sieci (podsystemów). Te podsystemy mogą się potem komunikować z innymi systemami za pomocą magistrali CAN. Moduł magistrali szeregowej UART wspiera protokoły LIN2.2, ale też DMX (sterowanie oświetleniem) oraz IrDA. Podstawowym interfejsem przeznaczonym dla aplikacji automotive jest interfejs CAN Flexible Data (FD) pracujący w trybach FD i CAN2.0B.
Do tworzenia projektów z wykorzystaniem dsPI33CK można wykorzystać świetne, bezpłatne, firmowe narzędzia: środowisko projektowe MPLAB X (od wersji 5.xx). Dostępne są także płatne lub dystrybuowane bezpłatnie kompilatory języka C. Wersje bezpłatne mają ograniczenia optymalizacji wielkości kodu wynikowego, ale poza tym można z nich korzystać bez ograniczeń. Do konfigurowania układów peryferyjnych można (a nawet trzeba) wykorzystać programowy konfigurator peryferii MCC. MPLAB X w wersji instalowanej na komputerze wymaga pobrania i zainstalowania MCC w postaci wtyczki (plug-in). W wersji chmurowej MPLAB Xpress MCC jest dostępne bez dodatkowych zabiegów.
Na rysunku 4 pokazano okno konfiguracji układu przerwań z wykorzystaniem wtyczki MCC w projekcie tworzonym pod MPLAB X 5.10.
Rysunek 4. Konfigurowanie priorytetów przerwań i przełączania kontekstu w konfiguratorze MCC
Dla każdego ze źródeł przerwań można indywidualnie przypisać priorytet (kolumna Priority) i zestaw rejestrów alternatywnych (Contex). W naszym przykładzie konfigurowane jest przerwanie zewnętrzne EX_INT INT0 z priorytetem 6 i zestawem rejestrów CTXT4. Na listingu 1 pokazano definicję rejestru konfiguracyjnego FALTREG wygenerowaną przez MCC na podstawie konfiguracji z rysunku 4.
// FALTREG #pragma config CTXT1 = IPL1 //Specifies Interrupt Priority Level (IPL) Associated to Alternate Working Register 1 bits->Alternate Register set assigned to IPL level 1 #pragma config CTXT2 = IPL2 //Specifies Interrupt Priority Level (IPL) Associated to Alternate Working Register 2 bits->Alternate Register set assigned to IPL level 2 #pragma config CTXT3 = OFF //Specifies Interrupt Priority Level (IPL) Associated to Alternate Working Register 3 bits->Not Assigned #pragma config CTXT4 = IPL6 //Specifies Interrupt Priority Level (IPL) Associated to Alternate Working Register 4 bits->Alternate Register set assigned to IPL level 6
Listing 1. Rejestr konfiguracyjny FALTREG
dsPIC 33 – ewaluacja
Producent mikrokontrolera tradycyjnie już przygotował moduły ewaluacyjne przeznaczone dla konstruktorów chcących wykorzystać mikrokontrolery rodziny dsPIC33CK w swoich projektach. Dla jednego z kluczowych zastosowań, czyli sterowania silnikami, Microchip oferuje płyty bazowe z układami umożliwiającymi sterowanie silnikami, w tym między innymi układy mocy. W tych płytach można stosować wymienne moduły mikrokontrolerów Microchip DSPIC3 3CK Motor Control z mikrokontrolerem dsPIC33CK256MP508 na pokładzie – rysunek 5. Dla uniwersalnych zastosowań można wykorzystać płytę bazową Explorer 16/32 Development Board. Dodatkowo moduł mikrokontrolera Microchip dsPIC 33CK General Purpose Plug-In Module.
Rysunek 5. Moduł DSPIC33CK Motor Control
Rodzinę mikrokontrolerów Microchip dsPIC 33CK mocno zorientowano na aplikacje wymagające krótkiego czasu odpowiedzi na zdarzenia. Zastosowane tu niestandardowe rozwiązania pozwalają na tak krótki czas reakcji. Przy standardowym podejściu do problemu jest możliwy do uzyskania dla o wiele szybszych mikrokontrolerów. Wyposażenie w jednostkę DSP, bardzo dobre układy peryferyjne, układy kontroli pamięci i układy bezpieczeństwa predestynują rodzinę Microchip dsPIC 33CK do wielu zaawansowanych zastosowań w różnych wymagających gałęziach techniki.