Wiadomości
Wiadomości
Najmocniejsze streszczenie popularnonaukowe MCU [polecany zbiór] (2)
2022-03-17 230

6

Programowanie mikrokontrolerów


 

Istnieje duża różnica między pisaniem programów na mikrokontrolery (MCU) a programami na komputery PC. Chociaż narzędzia programistyczne MCU oparte na języku C zyskują na popularności, dla projektantów, którzy mają wydajny kod programu i lubią używać języka asemblera, asembler jest nadal najbardziej zwięzłym i efektywnym językiem programowania.


W przypadku programowania mikrokontrolerów (MCU) podstawowe ramy są w zasadzie takie same i generalnie dzielą się na trzy części: część inicjalizacyjną (jest to największa różnica między programowaniem mikrokontrolerów i komputerów PC), główną pętlę programu i obsługę przerwań, które można opisać w następujący sposób:
  1. Inicjalizacja:W przypadku projektowania wszystkich programów MCU inicjalizacja jest najbardziej podstawowym i najważniejszym krokiem, który zazwyczaj obejmuje następujące czynności:
  Zamaskuj wszystkie przerwania i zainicjuj wskaźnik stosu:Część inicjująca na ogół nie chce, aby wystąpiły jakiekolwiek przerwania.  
  Wyczyść obszar pamięci RAM systemu i wyświetl pamięć:Choć czasami nie jest to całkowicie konieczne, z punktu widzenia niezawodności i spójności, a zwłaszcza w celu zapobiegania nieoczekiwanym błędom, zaleca się wyrobienie sobie dobrych nawyków programistycznych.  
  Inicjalizacja portu IO:Zgodnie z wymaganiami aplikacji projektu, ustaw tryb wejścia i wyjścia odpowiedniego portu IO. Dla portu wejściowego należy ustawić rezystor podciągający lub obniżający napięcie; dla portu wyjściowego należy ustawić początkowy poziom wyjściowy, aby zapobiec niepotrzebnym błędom.  
  Ustawienia przerwania:Wszystkie źródła przerwań, które mają być używane w projekcie, powinny zostać włączone i ustawione powinny być warunki wyzwalania przerwania. Jednocześnie zbędne przerwania, które nie są używane, muszą zostać wyłączone.  
  Inicjalizacja innych modułów funkcjonalnych:Dla wszystkich modułów peryferyjnych mikrokontrolera, które mają być używane, należy wprowadzić odpowiednie ustawienia zgodnie z wymaganiami aplikacji projektowej. Na przykład, w przypadku komunikacji UART należy ustawić prędkość transmisji, długość danych, metodę weryfikacji i długość bitu stopu. W przypadku programatora timera należy ustawić źródło zegara, liczbę działek częstotliwości i dane przeładowania.  
  Inicjalizacja parametrów:Po zakończeniu inicjalizacji sprzętu i zasobów mikrokontrolera (MCU), kolejnym krokiem jest inicjalizacja zmiennych i danych używanych w programie. Inicjalizacja tego etapu musi być dostosowana do specyfiki projektu i ogólnej struktury programu. W przypadku niektórych aplikacji wykorzystujących pamięć EEPROM do zapisywania prefabrykowanych danych projektu, zaleca się skopiowanie odpowiednich danych do pamięci RAM mikrokontrolera (MCU) podczas inicjalizacji, aby poprawić szybkość dostępu programu do danych i zmniejszyć zużycie energii przez system (zasadniczo dostęp do zewnętrznej pamięci EEPROM zwiększa pobór mocy przez zasilacz).  
  2. Główna pętla programu:Większość mikrokontrolerów działa nieprzerwanie przez długi czas, dlatego ich główne części programu są zasadniczo zaprojektowane w pętli. W aplikacjach z wieloma trybami pracy może występować wiele części pętli, które są konwertowane za pomocą flag stanu. W głównej części programu zazwyczaj występują następujące moduły:
  Procedura obliczeniowa:Programy obliczeniowe są na ogół czasochłonne, dlatego też stanowczo sprzeciwiamy się ich przetwarzaniu w jakimkolwiek przerwaniu, zwłaszcza w przypadku operacji mnożenia i dzielenia.  
Programy przetwarzania z niskimi lub żadnymi wymaganiami czasu rzeczywistego;
 
  Pokaż procedurę transferu:Przeznaczony głównie do zastosowań z zewnętrznymi sterownikami LED i LCD.  
  3. Obsługa przerwań:Programy przerwań służą głównie do obsługi zadań i zdarzeń wymagających dużej szybkości reakcji, takich jak wykrywanie zewnętrznych sygnałów nagłych, wykrywanie i przetwarzanie przycisków, zliczanie czasu, skanowanie wyświetlaczy LED itp.  
W normalnych okolicznościach program obsługi przerwań powinien zachować jak najkrótszy i najbardziej zwięzły kod. W przypadku funkcji, które nie wymagają przetwarzania w czasie rzeczywistym, flagę wyzwalacza można ustawić w przerwaniu, a następnie program główny wykona określone transakcje. Jest to bardzo ważne, szczególnie w przypadku mikrokontrolerów o niskim poborze mocy i niskiej prędkości, które muszą zapewniać szybką reakcję na wszystkie przerwania.  
  4. W celu uporządkowania różnych treści zadań, różne mikrokontrolery mają różne metody przetwarzania:  
 Na przykład w przypadku aplikacji mikrokontrolerów o niskiej prędkości i niskim poborze mocy (Fosc = 32768 Hz), biorąc pod uwagę, że takie projekty są urządzeniami przenośnymi i wykorzystują standardowe wyświetlacze LCD, reakcja na naciśnięcia klawiszy i wyświetlacz wymagają wysokiej wydajności w czasie rzeczywistym, dlatego do przetwarzania naciśnięć klawiszy zazwyczaj stosuje się przerwania czasowe. Akcje i wyświetlanie danych; w przypadku szybkich mikrokontrolerów, takich jak aplikacje Fosc > 1 MHz, ponieważ mikrokontroler ma wystarczająco dużo czasu na wykonanie głównej pętli programu, może jedynie ustawić różne flagi wyzwalające w odpowiednich przerwaniach i umieścić wszystkie zadania w głównej części programu do wykonania.  
  5. W programowaniu MCU należy zwrócić szczególną uwagę na:

Konieczne jest zapobieganie jednoczesnemu dostępowi do tej samej zmiennej lub danych lub ustawianiu ich w przerwaniu i treści programu głównego. Skuteczną metodą zapobiegania jest zorganizowanie przetwarzania takich danych w module i określenie, czy należy wykonać powiązane operacje na danych, poprzez ocenę flagi wyzwalacza. W innych treściach programu (głównie przerwaniach) flagi wyzwalacza należy ustawiać tylko w miejscach, w których dane wymagają przetworzenia. Zapewnia to przewidywalność i jednoznaczność wykonania danych.

7

Podsumowanie programowania mikrokontrolerów dla inżyniera



 

1,Wyrób w sobie dobry nawyk podsumowywania. Podsumowywanie to nie tylko podsumowanie własnej nauki, ale także przegląd i pogłębienie procesu uczenia się. Pozwala to również uniknąć popełniania błędów za drugim razem.


  2,Przed napisaniem programu należy najpierw dobrze zrozumieć projekt, być go świadomym i nakreślić ogólne ramy. Bardzo ważne jest, aby dokładnie przemyśleć sposób jego rozplanowania i wybrać najbardziej odpowiedni. Należy przeanalizować, który moduł wykonać jako pierwszy, jakie są jego konkretne kroki, jak nazwać każdą funkcję, jak połączyć go z innymi modułami itd. Warto wziąć kartkę papieru i zanotować ważne procesy.  
  3,W przypadku programowania modułowego w języku C należy najpierw podzielić każdy moduł, zaprogramować moduł po module, określić sekwencję, postępować zgodnie z nią, a następnie napisać kolejny moduł po pomyślnym jego zapisaniu. W przypadku plików nagłówkowych należy zapisać plik nagłówkowy modułu po jego zapisaniu.  
  4,Nie ignoruj ​​ostrzeżeń, gdy się pojawią. Oznacza to, że w programie musi być coś nielogicznego. Konieczne jest zrozumienie źródła problemu i znalezienie rozwiązania. Szukaj źródeł precyzyjnie. Możesz poszukać informacji w internecie lub poprosić innych o radę. Na przykład, główna funkcja z innego projektu została dodana do tego projektu. W rzeczywistości występują duplikaty nazw funkcji. Istnieją również powody, dla których warto analizować zjawiska eksperymentalne i postępować krok po kroku. Wybrano również niewłaściwy interfejs podczas definiowania portu. Czasami, jeśli naprawdę nie możesz rozwiązać problemu, warto zrobić sobie przerwę i zastanowić się nad nim. Niezależnie od tego, jak prosty jest problem, powinieneś zwrócić na niego uwagę, ponieważ mogą występować błędy.   
W rozwoju aplikacji mikrokontrolerów, problemy takie jak efektywność wykorzystania kodu, odporność na zakłócenia i niezawodność mikrokontrolerów wciąż stanowią problem. Podsumowujemy kilka podstawowych umiejętności, które należy opanować, aby móc rozwijać mikrokontrolery.        
         

8

Umiejętności w zakresie rozwoju mikrokontrolerów


   
       

1.Jak zmniejszyć liczbę błędów w programach

Aby ograniczyć liczbę błędów programu, należy najpierw rozważyć następujące parametry zarządzania poza zakresem, które należy brać pod uwagę podczas działania systemu.


  • Parametry fizyczne: Parametry te stanowią głównie parametry wejściowe systemu, do których zaliczają się parametry wzbudzenia, parametry operacyjne podczas przetwarzania akwizycji i parametry wyników na końcu przetwarzania.

  • Parametry zasobów: Parametry te to przede wszystkim zasoby obwodów, urządzeń i jednostek funkcjonalnych w systemie, takie jak pojemność pamięci, długość jednostki pamięci masowej i głębokość stosu.

  • Parametry aplikacji: Te parametry aplikacji często pojawiają się jako warunki aplikacji niektórych mikrokontrolerów i jednostek funkcjonalnych. Parametry procesu: odnoszą się do parametrów, które zmieniają się w sposób uporządkowany podczas działania systemu.


2.Jak poprawić wydajność kodu programowania w języku C

Używanie języka C do programowania mikrokontrolerów jest nieuniknionym trendem w rozwoju i stosowaniu mikrokontrolerów. Aby osiągnąć maksymalną wydajność programowania w C, najlepiej jest znać używany kompilator C. Najpierw sprawdź liczbę wierszy instrukcji języka asemblera odpowiadających każdej kompilacji języka C, aby dokładnie określić wydajność. Programując w przyszłości, używaj instrukcji o najwyższej wydajności kompilacji. Każdy kompilator C różni się od siebie, więc wydajność kompilacji również będzie inna. Długość kodu i czas wykonania dobrego kompilatora C dla systemów wbudowanych są tylko o 5–20% dłuższe niż tej samej funkcji napisanej w języku asemblera.


W przypadku złożonych projektów z krótkim czasem realizacji można użyć języka C, ale warunkiem wstępnym jest bardzo dobra znajomość języka C i kompilatora C systemu mikrokontrolera. Należy zwrócić szczególną uwagę na typy danych i algorytmy obsługiwane przez system kompilacji C. Chociaż język C jest najpopularniejszym językiem wysokiego poziomu, różni producenci mikrokontrolerów stosują różne systemy kompilacji języka C, szczególnie w przypadku obsługi niektórych modułów funkcji specjalnych. Dlatego też, jeśli nie rozumiesz tych funkcji, podczas debugowania wystąpi wiele problemów, które doprowadzą do niższej wydajności wykonania niż w języku asemblera.


       3.Jak rozwiązać problem zakłóceń przeciwzakłóceniowych mikrokontroleraNajskuteczniejszym sposobem zapobiegania zakłóceniom jest usunięcie źródła zakłóceń i zablokowanie ścieżki, która je przewodzi. Często jest to jednak trudne, dlatego możemy jedynie sprawdzić, czy zdolność mikrokontrolera do przeciwdziałania zakłóceniom jest wystarczająco silna. Wraz z rozwojem zdolności przeciwzakłóceniowych systemów sprzętowych, coraz większą uwagę poświęca się programowym zabezpieczeniom przeciwzakłóceniowym ze względu na ich elastyczność, oszczędność zasobów sprzętowych i wysoką niezawodność.  
Najczęstszym zjawiskiem interferencji mikrokontrolera jest reset. W przypadku ucieczki programu, pułapki programowe i mechanizmy nadzorujące mogą zostać wykorzystane do przywrócenia programu do stanu resetu. Dlatego najważniejszą rzeczą, aby oprogramowanie mikrokontrolera było odporne na interferencję, jest obsługa stanu resetu.  
Zazwyczaj mikrokontrolery posiadają rejestry flag, które można wykorzystać do określenia przyczyny resetu; dodatkowo można również samodzielnie zakopać kilka flag w pamięci RAM. Za każdym razem, gdy program jest resetowany, na podstawie tych flag można określić różne przyczyny resetu; można również przejść bezpośrednio do odpowiedniego programu na podstawie różnych flag. Pozwala to na ciągłe działanie programu, a użytkownik nie zauważy, że został on zresetowany podczas korzystania z niego.  
       4.Jak sprawdzić niezawodność systemu mikrokontroleraPo zakończeniu projektowania systemu mikrokontrolerów, dla różnych produktów systemu mikrokontrolerów zostaną zastosowane różne elementy i metody testowania, ale niektóre z nich muszą zostać przetestowane:
 
  • Przetestuj kompletność funkcji oprogramowania mikrokontrolera
  • Test włączania i wyłączania zasilania
  • Test na wiek
  • Testy takie jak ESD i EFT

Czasami możemy również symulować uszkodzenia, które mogą wystąpić podczas użytkowania przez człowieka. Na przykład, celowo pocieraj port stykowy mikrokontrolera o ludzkie ciało lub tkaninę ubrania, aby sprawdzić jego właściwości antystatyczne. Użyj wiertarki elektrycznej o dużej mocy, aby pracować blisko mikrokontrolera, aby sprawdzić jego odporność na zakłócenia elektromagnetyczne.  
Podsumowując, mikrokomputery jednoprocesorowe stały się ważnym aspektem rozwoju i zastosowań komputerów. Ich istotne znaczenie polega na tym, że radykalnie zmieniają tradycyjne koncepcje i metody projektowania systemów sterowania.  
Większość funkcji, które wcześniej musiały być realizowane za pomocą układów analogowych lub cyfrowych, można teraz realizować programowo, wykorzystując mikrokontrolery. Ten rodzaj technologii sterowania, w którym oprogramowanie zastępuje sprzęt, nazywany jest również technologią mikrokontroli i stanowi rewolucję w tradycyjnej technologii sterowania.  
Ponadto w trakcie procesu rozwoju i stosowania musimy doskonalić umiejętności i zwiększać wydajność, aby móc wykorzystywać oprogramowanie w szerszym zakresie celów.  
         

9

Podsumowanie operacji układu scalonego


 
 

Operacje na chipie to głównie operacje na rejestrach w chipie. Rejestry w chipie mają swoje unikalne adresy mapowane w pamięci, co oznacza operację na odpowiadających im adresach. Przyglądając się chipowi, najpierw należy przyjrzeć się diagramowi synchronizacji, następnie zrozumieć działanie odpowiednich rejestrów, zrozumieć sposób ich działania, zdefiniować wymagane porty (które mogą być zidentyfikowane przez program) oraz napisać procedury operacji zapisu i odczytu.


Jak zapisać dane na chipie, jak odczytać dane i przez który port wprowadzić lub odczytać dane (najważniejsza rzecz).  
Podłączając układy scalone przez magistralę, należy najpierw zrozumieć protokół magistrali. Układ scalony podłączony do magistrali I2C steruje nim głównie za jej pośrednictwem.  
  1,Jeden 74hc595 w sieci służy do wyboru kolumny, a pozostałe dwa do wyboru koloru. Sieć jest odpowiednikiem zbioru diod,
Dioda może się zaświecić tylko wtedy, gdy jeden koniec ma ustawiony wysoki poziom, a drugi niski. Tyle że gdy jeden koniec zostanie wybrany inaczej, zaświecą się inne kolory.  
Wybór trybu pracy timera: Cztery najwyższe bity ustawiają timer T1, a cztery najniższe bity ustawiają T0. Następnie dwie ostatnie cyfry każdego trybu ustawiają tryb pracy. Podczas ustawiania dwóch timerów należy pamiętać o użyciu symbolu lub (|). Podczas korzystania z przerwań należy pamiętać o wyczyszczeniu tych, które powinny zostać wyczyszczone po wejściu do przerwania.  
  2,Transceiver portu szeregowego: Prędkość transmisji jest zazwyczaj ustawiona w trybie 2 (automatyczne przywracanie do wartości początkowej). Ponieważ różne urządzenia mają różne możliwości przetwarzania danych, ustawienie prędkości transmisji ma na celu przede wszystkim obsługę urządzeń o niskiej prędkości i komunikację między nimi. Bit flagi przerwania musi zostać skasowany programowo. Podczas ustawiania przerwania portu szeregowego, niezależnie od tego, które z nich jest generowane podczas wysyłania lub odbierania, może ono wejść do funkcji przerwania, dlatego należy zwrócić uwagę na ustawienie funkcji przerwania. (Automatyczne ustawienie funkcji zazwyczaj dotyczy komputera hosta lub komputera podrzędnego).  
Jeśli używasz przerwania do wysyłania, musisz najpierw ustalić, jak wprowadzić przerwanie, więc najpierw musisz je wysłać, a potem możesz wprowadzić przerwanie. Jednorazowo można wysłać tylko jeden bajt, a kolejny bit można wysłać dopiero po ustawieniu TI.  
  3,Konwersja PCF8591AD ma cztery kanały wejściowe. Podczas odczytu PCF8591, niezależnie od wybranego kanału, odczytywane jest napięcie wejściowe tego kanału. Przekonwertowane dane są zapisywane w układzie scalonym, a następnie odczytywane. Podczas odczytu najpierw zapisywany jest adres układu scalonego, następnie podadres urządzenia (0x40|numer kanału), a na końcu odczytywane są dane.  
  4,Konwersja D-A polega na zapisaniu adresu urządzenia w chipie, następnie zapisaniu podadresu (0x40), a na końcu wartości cyfrowej do konwersji. Wprowadzane są informacje o adresie urządzenia w chipie.  
  5,W przypadku wyświetlacza LCD, po zapisaniu i wyświetleniu danych, będą one zawsze wyświetlane bez ciągłego odświeżania. Jeśli chcesz je zmienić, możesz je jedynie ponownie wprowadzić.  
  6,W przypadku układu zegara ds1302, podczas odczytu danych, pierwsze dane są odczytywane na opadającym zboczu ósmego sygnału zegara podczas zapisu danych, a następnie przygotowywane do kolejnego wyjścia. Należy zwrócić uwagę na metodę zapisu programu i lokalizację wartości zwracanej.  
  7,W Ds1302 najpierw określ rejestr, a następnie zapisz do niego dane. Rejestr w danych chipa wskazuje adres. (Nadal nie do końca rozumiem program ochrony przed zapisem. Czy zapis nie odbywa się zawsze? Dlaczego ochrona przed zapisem jest nadal włączona?)
(Według poprzedniego bohatera, można ustawić flagę po czasie inicjalizacji. Jeśli ta flaga istnieje, nie ma potrzeby inicjalizacji czasu. Jednak jeśli zasilanie zostanie wyłączone, pamięć RAM mikrokontrolera nie będzie mogła zapisać tej flagi, więc można użyć pamięci RAM układu DS1302 do zapisania flagi i odczytania jej po włączeniu zasilania. Ja również jestem początkujący i planuję niedawno użyć DS1302. Nie wiem, czy to prawda i jeszcze tego nie zaimplementowałem. Proszę o więcej informacji)
  8,Najlepiej zapisać inicjalizację na wypadek, gdybyś jej później zapomniał. Czasami warto zwrócić uwagę na to, czy podczas odczytu lub zapisu najpierw operowany jest bit najniższy, czy najwyższy – można to ocenić na podstawie diagramu czasowego.  
  9,W przypadku nadajnika-odbiornika podczerwieni, podczas odbioru, na podstawie czasu między dwoma opadającymi zboczami sygnału, określany jest poziom wysoki, czy niski. Pisząc program, należy najpierw użyć timera do określenia czasu, zapisać go, a następnie przekonwertować na postać binarną (przeczytaj więcej o tym, jak napisać ten program – jest bardzo dobry).  
  10,Silnik krokowy: Stosowany głównie do przełączania. Moment obrotowy silnika krokowego maleje wraz ze wzrostem prędkości obrotowej. Jest on wykorzystywany głównie do automatycznego podawania detali obrabianych na obrabiarkach. Może być również stosowany w systemach sterowania o wyższej precyzji.  
Silnik krokowy to urządzenie z otwartym elementem sterującym, które przetwarza impulsy elektryczne na przemieszczenie kątowe lub liniowe. W warunkach bez przeciążenia prędkość i położenie zatrzymania silnika zależą jedynie od częstotliwości i liczby impulsów sygnału impulsowego i nie są zależne od zmian obciążenia. Gdy sterownik silnika krokowego odbiera sygnał impulsowy, napędza silnik krokowy, aby obracał się w ustalonym kierunku pod stałym kątem, zwanym „kątem kroku”. Obrót odbywa się krok po kroku pod stałym kątem. Przemieszczenie kątowe można kontrolować poprzez kontrolowanie liczby impulsów, aby uzyskać dokładne pozycjonowanie; jednocześnie, prędkość i przyspieszenie obrotowe silnika można regulować poprzez kontrolowanie częstotliwości impulsów, aby uzyskać regulację prędkości.  
  11,Silnik serwo: (serwomotor) odnosi się do silnika, który steruje pracą elementów mechanicznych w systemie serwo. Jest to pośrednie urządzenie przekładniowe wspomagające silnik. Silniki serwo mogą bardzo dokładnie kontrolować prędkość i dokładność położenia, a także przetwarzać sygnały napięciowe na moment obrotowy i prędkość obrotową w celu napędzania obiektów sterowania. Prędkość wirnika silnika serwo jest kontrolowana przez sygnał wejściowy i może szybko reagować. W automatycznym systemie sterowania jest on używany jako siłownik i charakteryzuje się małą elektromechaniczną stałą czasową, wysoką liniowością, napięciem początkowym itp. Może on przetwarzać otrzymany sygnał elektryczny na wyjściową wartość przemieszczenia kątowego lub prędkości kątowej na wale silnika. Dzielą się one na dwie kategorie: silniki serwo prądu stałego i przemiennego. Ich główną cechą jest brak obrotów, gdy napięcie sygnału wynosi zero, a prędkość obrotowa maleje ze stałą prędkością wraz ze wzrostem momentu obrotowego. Silnik prądu stałego: duży zasięg, przeznaczony wyłącznie do małych samochodów.


Zastrzeżenie: Niniejszy artykuł został przedrukowany z „International Electronic Business Information”. Niniejszy artykuł przedstawia wyłącznie osobiste poglądy autora i nie reprezentuje poglądów Sacco Micro ani branży. Jest on przeznaczony wyłącznie do przedruku i udostępniania oraz służy ochronie praw własności intelektualnej. Prosimy o podanie oryginalnego źródła i autora przedruku. W przypadku naruszenia prosimy o kontakt w celu usunięcia artykułu.

Numer telefonu firmy: +86-0755-83044319
Faks/FAKS: +86-0755-83975897
E-mail: 1615456225@qq.com
QQ: 3518641314 Menedżer Li

QQ: 332496225 Menedżer Qiu

Adres: Pokój 809, Budynek C, Budynek Technologii Zhantao, nr 1079 Minzhi Avenue, Nowa Dzielnica Longhua, Shenzhen

whatsapp

Service Hotline

tel: +86 755 83044319

WhatsApp

Whatsapp:+8618073002950