Zasady mikrokontrolera

Mikroprocesory [RS Elektronika] #43 (Lipiec 2019).

$config[ads_text] not found
Anonim

Zasady mikrokontrolera

Obwody cyfrowe


Pytanie 1

Przeczytaj następujący cytat, a następnie zbadaj termin mikrokontroler, aby zobaczyć, jakie znaczenie ma ono dla cytatu:

Byłem na mojej pierwszej konferencji komputerowej w New York Hilton około 20 lat temu. Kiedy ktoś przewidział, że rynek mikroprocesorów ostatecznie wyniesie miliony, ktoś inny powiedział: "Gdzie oni wszyscy pójdą" # 1 "> Odsłoń odpowiedź Ukryj odpowiedź

Pozwolę ci zrobić swoją pracę domową w tej kwestii!

Uwagi:

Nie tylko cytat jest zabawny, ale także zaskakujący, szczególnie dla tych z nas, którzy urodzili się bez komputerów w naszych domach, a tym bardziej z wielu komputerów osobistych.

Punktem, który chciałbym uczynić, aby uczniowie badali termin "mikrokontroler", jest przekonanie się, że większość istniejących komputerów nie należy do odmiany, o której zwykle się mówi przez etykietę "komputer". Te klamki komputerowe - a także sterowanie silnikiem komputery w samochodach, sprzęty kuchenne, telefony komórkowe, implanty biomedyczne, mówiące kartki urodzinowe i inne małe urządzenia - są znacznie mniejsze i znacznie bardziej wyspecjalizowane niż komputery "ogólnego zastosowania", które ludzie używają przy biurkach do pisania dokumentów lub przeglądania Internetu. Są cichą, niewidoczną stroną współczesnej "rewolucji komputerowej" i pod wieloma względami są bardziej odpowiednie dla początkujących studentów cyfrowej elektroniki do zbadania niż ich większe, uniwersalne odpowiedniki.

pytanie 2

Jednostka mikrokontrolera lub MCU jest wyspecjalizowanym typem komputera cyfrowego służącego do automatycznego sekwencjonowania lub sterowania systemem. Mikrokontrolery różnią się od zwykłych komputerów cyfrowych bardzo małymi rozmiarami (zwykle jednym układem scalonym), z kilkoma dedykowanymi pinami do wprowadzania i / lub wyprowadzania sygnałów cyfrowych i ograniczonej pamięci. Instrukcje zaprogramowane w pamięci mikrokontrolera informują, jak reagować na warunki wejściowe i jakie typy sygnałów należy wysłać na wyjścia.

Najprostszym rodzajem sygnału "rozumianego" przez mikrokontroler jest dyskretny poziom napięcia: albo "wysoki" (w przybliżeniu + V), albo "niski" (w przybliżeniu potencjał ziemi) zmierzony przy określonym pinie na chipie. Tranzystory znajdujące się wewnątrz mikrokontrolera wytwarzają te sygnały "wysokie" i "niskie" na stykach wyjściowych, a ich działania są modelowane za pomocą przełączników SPDT dla uproszczenia:

Mikrokontrolery mogą być zaprogramowane do emulowania funkcji cyfrowych bramek logicznych (AND, OR, NAND, NOR, itd.) Oprócz szerokiej gamy funkcji kombinacyjnych i wielowibracyjnych. Jedyne rzeczywiste ograniczenia tego, co może zrobić mikrokontroler to pamięć (jak duże mogą być przechowywane programy) oraz piny wejścia / wyjścia w układzie MCU.

Jednak same mikrokontrolery składają się z wielu tysięcy (lub milionów!) Obwodów bramki logicznej. Dlaczego miałoby sens używanie mikrokontrolera do wykonywania funkcji logicznej, którą niewielka część jego bramek mogłaby bezpośrednio osiągnąć "# 2"> Odsłoń odpowiedź Ukryj odpowiedź

Łatwość konfiguracji i elastyczność!

Uwagi:

Zauważ, że nie zawracałem sobie głowy wyjaśnieniem mojej niezwykle zwięzłej odpowiedzi. Jest to temat, który chcę, aby studenci długo i ciężko myśleli, ponieważ prawdziwa odpowiedź na to pytanie jest powodem rozwoju wszystkich programowalnych urządzeń cyfrowych.

pytanie 3

Student decyduje się zbudować obwód światła-migacza za pomocą mikrokontrolera zamiast zegarów 555 lub innego twardego obwodu astabilnego. Niestety, gdzieś jest problem. Po pierwszym włączeniu dioda zapala się na 1 sekundę, a następnie wyłącza się i nigdy się nie włącza. Jedynym sposobem, w jaki dioda LED powraca, jest resetowanie MCU lub jego wyłączanie i włączanie:

Zadeklaruj Pin0 jako wynik

ZACZYNAĆ

Ustaw Pin0 HIGH

Przerwij na 1 sekundę

Ustaw Pin0 LOW

KONIEC

Inny uczeń, gdy zostanie poproszony o pomoc, modyfikuje listę programów i ponownie wysyła je z komputera osobistego, w którym jest edytowany do mikrokontrolera, za pomocą kabla do programowania. Lista programów brzmi teraz tak:

Zadeklaruj Pin0 jako wynik

PĘTLA

Ustaw Pin0 HIGH

Przerwij na 1 sekundę

Ustaw Pin0 LOW

ENDLOOP

Po zresetowaniu MCU w nowym programie dioda LED zaczyna migać. . . raczej. Dioda LED "włącza się" przez większość czasu, ale raz na sekundę wyłącza się i natychmiast wraca. W rzeczywistości okres "wyłączenia" jest tak krótki, że ledwie zauważalny.

To, czego chciał uczeń, to 50% cykl pracy: "włączony" przez 1 sekundę, a następnie "wyłączony" na 1 sekundę, powtarzając ten cykl w nieskończoność. Najpierw wyjaśnij znaczenie modyfikacji programu dla kolegi z klasy, a następnie zmodyfikuj listę programów ponownie, aby dioda LED spełniała wymagania ucznia.

Ujawnij odpowiedź Ukryj odpowiedź

Aby MCU mogła powtarzać sekwencję włączania / wyłączania / wyłączania, niezbędna jest "pętla". Teraz potrzebna jest inna zwłoka czasowa w pętli:

Zadeklaruj Pin0 jako wynik

PĘTLA

Ustaw Pin0 HIGH

Przerwij na 1 sekundę

Ustaw Pin0 LOW

Wstrzymaj na 1 sekundę ( nowa linia kodu )

ENDLOOP

Uwagi:

Celem tego pytania jest uświadomienie uczniom, że mikrokontroler musi zostać poinformowany o "zapętleniu się" przez migające instrukcje świetlne. Naprawdę, to tylko ilustracja pętli w praktycznym kontekście.

Jeśli zastanawiasz się, dlaczego piszę w pseudokodowym, oto kilka powodów:

Żadne wcześniejsze doświadczenie z programowaniem nie było konieczne, aby zrozumieć pseudokod
Nigdy nie wychodzi z mody
Sprzęt niezależny
Brak błędów składniowych

Gdybym zdecydował się zaprezentować kod, który faktycznie działałby w mikrokontrolerze, zadawałbym pytanie przestarzałemu. W ten sposób mogę przekazać ducha programu bez przykrycia do rzeczywistego standardu programowania. Jedyną wadą jest to, że uczniowie będą musieli przetłumaczyć mój pseudokod do prawdziwego kodu, który faktycznie będzie działał na ich konkretnym sprzęcie MCU, ale jest to problem gwarantowany dla niektórych, bez względu na to, jaki wybiorę prawdziwy język programowania.

Oczywiście mogłem wziąć podejście Donalda Knutha i wymyślić własny (wyobrażony) sprzęt i zestaw instrukcji. . .

Pytanie 4

Student decyduje się zbudować obwód światła-migacza za pomocą mikrokontrolera. Dioda LED powinna migać tylko wtedy, gdy przycisk jest wciśnięty. Powinien się wyłączyć, gdy przełącznik zostanie zwolniony:

Zadeklaruj Pin0 jako wynik

Zadeklaruj Pin1 jako dane wejściowe

WHILE Pin1 jest WYSOKI

Ustaw Pin0 HIGH

Przerwij na 0, 5 sekundy

Ustaw Pin0 LOW

Przerwij na 0, 5 sekundy

ENDWHILE

Dioda LED miga i gaśnie, o ile przycisk jest przytrzymywany, gdy MCU jest włączony lub zresetowany. Po zwolnieniu przełącznika dioda LED zgaśnie i nigdy się nie włączy. Jeśli przełącznik nie został naciśnięty podczas rozruchu, dioda LED nigdy nie zaświeci się! Wyjaśnij, co się dzieje, i zmodyfikuj program, aby rozwiązać ten problem.

Ujawnij odpowiedź Ukryj odpowiedź

Warunkowa pętla "WHILE" musi być umieszczona w bezwarunkowej pętli:

Zadeklaruj Pin0 jako wynik

Zadeklaruj Pin1 jako dane wejściowe

PĘTLA

WHILE Pin1 jest WYSOKI

Ustaw Pin0 HIGH

Przerwij na 0, 5 sekundy

Ustaw Pin0 LOW

Przerwij na 0, 5 sekundy

ENDWHILE

ENDLOOP

Pytanie uzupełniające: w jakim celu rezystor R pulldown służy w obwodzie "Notatki ukryte"> Uwagi:

Celem tego pytania jest zrozumienie przez uczniów, czym jest pętla "WHILE" w praktyce: pętla z warunkiem (stanami). Kontrastuje on również pętlę warunkową z bezwarunkową pętlą i pokazuje, w jaki sposób oba odgrywają rolę w systemach interaktywnych, takich jak ten.

Jeśli zastanawiasz się, dlaczego piszę w pseudokodowym, oto kilka powodów:

Żadne wcześniejsze doświadczenie z programowaniem nie było konieczne, aby zrozumieć pseudokod
Nigdy nie wychodzi z mody
Sprzęt niezależny
Brak błędów składniowych

Gdybym zdecydował się zaprezentować kod, który faktycznie działałby w mikrokontrolerze, zadawałbym pytanie przestarzałemu. W ten sposób mogę przekazać ducha programu bez przykrycia do rzeczywistego standardu programowania. Jedyną wadą jest to, że uczniowie będą musieli przetłumaczyć mój pseudokod do prawdziwego kodu, który faktycznie będzie działał na ich konkretnym sprzęcie MCU, ale jest to problem gwarantowany dla niektórych, bez względu na to, jaki wybiorę prawdziwy język programowania.

Oczywiście mogłem wziąć podejście Donalda Knutha i wymyślić własny (wyobrażony) sprzęt i zestaw instrukcji. . .

Pytanie 5

Sprawdź poniższy schemat i listę programów (napisaną w "pseudokodach" zamiast formalnym języku programowania), aby określić, jaki rodzaj podstawowej funkcji logicznej jest implementowany w tym mikrokontrolera:

Zadeklaruj Pin0 jako wynik

Zadeklaruj Pin1 i Pin2 jako dane wejściowe

PĘTLA

JEŚLI Pin1 jest WYSOKI, ustaw Pin0 HIGH

ELSEIF Pin2 jest WYSOKI, ustaw Pin0 HIGH

ELSE ustaw Pin0 LOW

ENDIF

ENDLOOP

Ujawnij odpowiedź Ukryj odpowiedź

Ten mikrokontroler implementuje logiczną funkcję OR.

Uwagi:

Chociaż ta funkcja logiczna mogłaby być łatwiejsza i tańsza w logice przewodowej (gate), celem jest nakłonienie uczniów do myślenia o wykonywaniu operacji logicznych za pomocą sekwencjonowanego zestawu instrukcji wewnątrz programowalnego urządzenia (MCU). Jest to skok koncepcyjny, podstawowy, ale bardzo ważny.

Jeśli zastanawiasz się, dlaczego piszę w pseudokodowym, oto kilka powodów:

Żadne wcześniejsze doświadczenie z programowaniem nie było konieczne, aby zrozumieć pseudokod
Nigdy nie wychodzi z mody
Sprzęt niezależny
Brak błędów składniowych

Gdybym zdecydował się zaprezentować kod, który faktycznie działałby w mikrokontrolerze, zadawałbym pytanie przestarzałemu. W ten sposób mogę przekazać ducha programu bez przykrycia do rzeczywistego standardu programowania. Jedyną wadą jest to, że uczniowie będą musieli przetłumaczyć mój pseudokod do prawdziwego kodu, który faktycznie będzie działał na ich konkretnym sprzęcie MCU, ale jest to problem gwarantowany dla niektórych, bez względu na to, jaki wybiorę prawdziwy język programowania.

Oczywiście mogłem wziąć podejście Donalda Knutha i wymyślić własny (wyobrażony) sprzęt i zestaw instrukcji. . .

Pytanie 6

Sprawdź poniższy schemat i listę programów (napisaną w "pseudokodach" zamiast formalnym języku programowania), aby określić, jaki rodzaj podstawowej funkcji logicznej jest implementowany w tym mikrokontrolera:

Zadeklaruj Pin0 jako wynik

Zadeklaruj Pin1 i Pin2 jako dane wejściowe

PĘTLA

JEŚLI Pin1 ma wartość LOW, ustaw Pin0 LOW

ELSEIF Pin2 jest LOW, ustaw Pin0 LOW

ELSE ustaw Pin0 HIGH

ENDIF

ENDLOOP

Ujawnij odpowiedź Ukryj odpowiedź

Ten mikrokontroler implementuje logiczną funkcję AND.

Uwagi:

Chociaż ta funkcja logiczna mogłaby być łatwiejsza i tańsza w logice przewodowej (gate), celem jest nakłonienie uczniów do myślenia o wykonywaniu operacji logicznych za pomocą sekwencjonowanego zestawu instrukcji wewnątrz programowalnego urządzenia (MCU). Jest to skok koncepcyjny, podstawowy, ale bardzo ważny.

Jeśli zastanawiasz się, dlaczego piszę w pseudokodowym, oto kilka powodów:

Żadne wcześniejsze doświadczenie z programowaniem nie było konieczne, aby zrozumieć pseudokod
Nigdy nie wychodzi z mody
Sprzęt niezależny
Brak błędów składniowych

Gdybym zdecydował się zaprezentować kod, który faktycznie działałby w mikrokontrolerze, zadawałbym pytanie przestarzałemu. W ten sposób mogę przekazać ducha programu bez przykrycia do rzeczywistego standardu programowania. Jedyną wadą jest to, że uczniowie będą musieli przetłumaczyć mój pseudokod do prawdziwego kodu, który faktycznie będzie działał na ich konkretnym sprzęcie MCU, ale jest to problem gwarantowany dla niektórych, bez względu na to, jaki wybiorę prawdziwy język programowania.

Oczywiście mogłem wziąć podejście Donalda Knutha i wymyślić własny (wyobrażony) sprzęt i zestaw instrukcji. . .

Pytanie 7

Sprawdź poniższy schemat i listę programów (napisaną w "pseudokodach" zamiast formalnym języku programowania), aby określić, jaki rodzaj podstawowej funkcji logicznej jest implementowany w tym mikrokontrolera:

Zadeklaruj Pin0 jako wynik

Zadeklaruj Pin1 i Pin2 jako dane wejściowe

PĘTLA

JEŚLI Pin1 ma LOW, ustaw Pin0 HIGH

ELSEIF Pin2 jest LOW, ustaw Pin0 HIGH

ELSE ustaw Pin0 LOW

ENDIF

ENDLOOP

Ujawnij odpowiedź Ukryj odpowiedź

Ten mikrokontroler implementuje logiczną funkcję NAND.

Uwagi:

Chociaż ta funkcja logiczna mogłaby być łatwiejsza i tańsza w logice przewodowej (gate), celem jest nakłonienie uczniów do myślenia o wykonywaniu operacji logicznych za pomocą sekwencjonowanego zestawu instrukcji wewnątrz programowalnego urządzenia (MCU). Jest to skok koncepcyjny, podstawowy, ale bardzo ważny.

Jeśli zastanawiasz się, dlaczego piszę w pseudokodowym, oto kilka powodów:

Żadne wcześniejsze doświadczenie z programowaniem nie było konieczne, aby zrozumieć pseudokod
Nigdy nie wychodzi z mody
Sprzęt niezależny
Brak błędów składniowych

Gdybym zdecydował się zaprezentować kod, który faktycznie działałby w mikrokontrolerze, zadawałbym pytanie przestarzałemu. W ten sposób mogę przekazać ducha programu bez przykrycia do rzeczywistego standardu programowania. Jedyną wadą jest to, że uczniowie będą musieli przetłumaczyć mój pseudokod do prawdziwego kodu, który faktycznie będzie działał na ich konkretnym sprzęcie MCU, ale jest to problem gwarantowany dla niektórych, bez względu na to, jaki wybiorę prawdziwy język programowania.

Oczywiście mogłem wziąć podejście Donalda Knutha i wymyślić własny (wyobrażony) sprzęt i zestaw instrukcji. . .

Pytanie 8

Sprawdź poniższy schemat i listę programów (napisaną w "pseudokodach" zamiast formalnym języku programowania), aby określić, jaki rodzaj podstawowej funkcji logicznej jest implementowany w tym mikrokontrolera:

Zadeklaruj Pin0 jako wynik

Zadeklaruj Pin1 i Pin2 jako dane wejściowe

PĘTLA

JEŚLI Pin1 jest WYSOKI, ustaw Pin0 LOW

ELSEIF Pin2 jest WYSOKI, zestaw Pin0 LOW

ELSE ustaw Pin0 HIGH

ENDIF

ENDLOOP

Ujawnij odpowiedź Ukryj odpowiedź

Ten mikrokontroler implementuje logiczną funkcję NOR.

Uwagi:

Chociaż ta funkcja logiczna mogłaby być łatwiejsza i tańsza w logice przewodowej (gate), celem jest nakłonienie uczniów do myślenia o wykonywaniu operacji logicznych za pomocą sekwencjonowanego zestawu instrukcji wewnątrz programowalnego urządzenia (MCU). Jest to skok koncepcyjny, podstawowy, ale bardzo ważny.

Jeśli zastanawiasz się, dlaczego piszę w pseudokodowym, oto kilka powodów:

Żadne wcześniejsze doświadczenie z programowaniem nie było konieczne, aby zrozumieć pseudokod
Nigdy nie wychodzi z mody
Sprzęt niezależny
Brak błędów składniowych

Gdybym zdecydował się zaprezentować kod, który faktycznie działałby w mikrokontrolerze, zadawałbym pytanie przestarzałemu. W ten sposób mogę przekazać ducha programu bez przykrycia do rzeczywistego standardu programowania. Jedyną wadą jest to, że uczniowie będą musieli przetłumaczyć mój pseudokod do prawdziwego kodu, który faktycznie będzie działał na ich konkretnym sprzęcie MCU, ale jest to problem gwarantowany dla niektórych, bez względu na to, jaki wybiorę prawdziwy język programowania.

Oczywiście mogłem wziąć podejście Donalda Knutha i wymyślić własny (wyobrażony) sprzęt i zestaw instrukcji. . .

Pytanie 9

Sprawdź poniższy schemat i listę programów (napisaną w "pseudokodach" zamiast formalnym języku programowania), aby określić, jaki rodzaj podstawowej funkcji logicznej jest implementowany w tym mikrokontrolera:

Zadeklaruj Pin0 jako wynik

Zadeklaruj Pin1 i Pin2 jako dane wejściowe

PĘTLA

JEŚLI Pin1 jest taki sam jak Pin2, ustaw Pin 0 LOW

ELSE ustaw Pin0 HIGH

ENDIF

ENDLOOP

Ujawnij odpowiedź Ukryj odpowiedź

Ten mikrokontroler implementuje logiczną funkcję Exclusive-OR.

Uwagi:

Chociaż ta funkcja logiczna mogłaby być łatwiejsza i tańsza w logice przewodowej (gate), celem jest nakłonienie uczniów do myślenia o wykonywaniu operacji logicznych za pomocą sekwencjonowanego zestawu instrukcji wewnątrz programowalnego urządzenia (MCU). Jest to skok koncepcyjny, podstawowy, ale bardzo ważny.

Jeśli zastanawiasz się, dlaczego piszę w pseudokodowym, oto kilka powodów:

Żadne wcześniejsze doświadczenie z programowaniem nie było konieczne, aby zrozumieć pseudokod
Nigdy nie wychodzi z mody
Sprzęt niezależny
Brak błędów składniowych

Gdybym zdecydował się zaprezentować kod, który faktycznie działałby w mikrokontrolerze, zadawałbym pytanie przestarzałemu. W ten sposób mogę przekazać ducha programu bez przykrycia do rzeczywistego standardu programowania. Jedyną wadą jest to, że uczniowie będą musieli przetłumaczyć mój pseudokod do prawdziwego kodu, który faktycznie będzie działał na ich konkretnym sprzęcie MCU, ale jest to problem gwarantowany dla niektórych, bez względu na to, jaki wybiorę prawdziwy język programowania.

Oczywiście mogłem wziąć podejście Donalda Knutha i wymyślić własny (wyobrażony) sprzęt i zestaw instrukcji. . .

Pytanie 10

Mikrokontroler to wyspecjalizowany typ komputera cyfrowego służący do automatycznego sekwencjonowania lub sterowania systemem. Mikrokontrolery różnią się od zwykłych komputerów cyfrowych bardzo małymi rozmiarami (zwykle jednym układem scalonym), z kilkoma dedykowanymi pinami do wprowadzania i / lub wyprowadzania sygnałów cyfrowych i ograniczonej pamięci. Instrukcje zaprogramowane w pamięci mikrokontrolera informują, jak reagować na warunki wejściowe i jakie typy sygnałów należy wysłać na wyjścia.

Najprostszym rodzajem sygnału "rozumianego" przez mikrokontroler jest dyskretny poziom napięcia: albo "wysoki" (w przybliżeniu + V), albo "niski" (w przybliżeniu potencjał ziemi) zmierzony przy określonym pinie na chipie. Tranzystory znajdujące się wewnątrz mikrokontrolera wytwarzają te sygnały "wysokie" i "niskie" na stykach wyjściowych, a ich działania są modelowane za pomocą przełączników SPDT dla uproszczenia:

Nie wymaga dużej wyobraźni, aby wizualizować, w jaki sposób mikrokontrolery mogą być używane w praktycznych systemach: włączanie i wyłączanie urządzeń zewnętrznych zgodnie z pinami wejściowymi i / lub warunkami czasowymi. Przykłady obejmują sterowanie urządzeniem (timery pieców, regulatory temperatury), sterowanie silnikiem samochodowym (wtryskiwacze paliwa, czas zapłonu, systemy autodiagnostyki) i robotykę (uruchamianie serwomechanizmów, przetwarzanie sensoryczne, logika nawigacji). W rzeczywistości, jeśli mieszkasz w uprzemysłowionym kraju, prawdopodobnie posiadasz kilkadziesiąt mikrokontrolerów (osadzonych w różnych urządzeniach) i nawet nie zdajesz sobie z tego sprawy!

Jednym z praktycznych ograniczeń mikrokontrolerów jest jednak ich niski poziom wyjściowy prądu napędowego: zwykle mniej niż 50 mA. Miniaturyzacja wewnętrznych obwodów mikrokontrolera zabrania włączania tranzystorów wyjściowych mających jakąkolwiek znaczącą moc znamionową, a więc musimy podłączyć tranzystory do pinów wyjściowych, aby sterować jakimkolwiek znaczącym obciążeniem (s).

Załóżmy, że chcielibyśmy, aby mikrokontroler napędzał sterowany prądem stałym zawór elektromagnetyczny wymagający 2 amperów prądu przy 24 woltach. Prostym rozwiązaniem byłoby użycie tranzystora NPN jako urządzenia "interpolującego" między mikrokontrolerem a zaworem elektromagnetycznym w następujący sposób:

Niestety, pojedynczy BJT nie zapewnia wystarczającego wzmocnienia prądu do uruchomienia solenoidu. Przy 20 mA prądu wyjściowego ze szpilki mikrokontrolera i β tylko 25 (typowe dla tranzystora mocy), zapewnia to tylko około 500 mA cewce elektromagnesu.

Rozwiązaniem tego problemu są dwa tranzystory bipolarne w układzie pary Darlington :

Jednak istnieje jeszcze inne rozwiązanie - zastąp pojedyncze BJT pojedynczym tranzystorem MOSFET, który w ogóle nie wymaga prądu. Pokaż, jak to zrobić:

Ujawnij odpowiedź Ukryj odpowiedź

Uwagi:

Celem tego rozwlekłego pytania jest nie tylko po to, aby uczniowie wymyślili, jak zamienić BJT na MOSFET, ale także aby wprowadzić je do koncepcji mikrokontrolera, który jest urządzeniem o rosnącym znaczeniu w nowoczesnych systemach elektronicznych.

Niektórzy uczniowie mogą zapytać o cel diody w tym obwodzie. Wyjaśnij im, że jest to dioda komutująca, zwana czasami diodą wolnobieżną, niezbędna, aby zapobiec nadmiernemu napięciu tranzystora przez tranzystory wysokonapięciowe wytwarzane przez cewkę elektromagnesu przy wyłączonym napięciu ("odruch indukcyjny").

Pytanie 11

Mikrokontroler służy do automatycznej korekty współczynnika mocy dla obciążenia AC:

Sprawdź ten schemat, a następnie odpowiedz na następujące pytania:

W jaki sposób mikrokontroler może wykryć współczynnik mocy obciążenia AC "# 11"> Ujawnij odpowiedź Ukryj odpowiedź

Pozwolę wam i kolegom z klasy omówić, w jaki sposób MCU może wykryć współczynnik mocy. Istnieje więcej niż jedno prawidłowe rozwiązanie!

Oba kondensatory 20 μF i 80 μF będą włączone: Wyjście MCU DCBA powinno być 0101 (zwróć uwagę, że wyjścia muszą iść w stan niski, aby zasilić odpowiednie przekaźniki!). Przy tym wyjściu skorygowany współczynnik mocy będzie wynosić 0, 99939 zamiast pierwotnego 0, 77.

Uwagi:

To pytanie stanowi kilka ciekawych pomysłów do przeglądu, a także syntezy starych i nowych koncepcji w elektronice dla uczniów do rozważenia. Koniecznie poświęć dużo czasu na dyskusję na temat tego pytania, a także konieczny czas przeglądu obliczeń współczynnika mocy!

Pytanie 12

Ten mikrokontroler jest zaprogramowany tak, aby zmieniać postrzeganą jasność diody LED za pomocą sterowania modulacją szerokości impulsu (PWM) wyjścia kołka 0:

Zadeklaruj Pin0 jako wynik

Zadeklaruj X jako zmienną całkowitą

PĘTLA

Ustaw Pin0 LOW

Przerwij na 100 - X mikrosekund

Ustaw Pin0 HIGH

Zatrzymaj na X mikrosekund

ENDLOOP

Określ wartość X, aby ustawić jasność LED na 80%, a także częstotliwość sygnału PWM.

Ujawnij odpowiedź Ukryj odpowiedź

Na to pytanie najlepiej odpowiedzieć, rysując wykres czasowy wyjścia Pin 0, zwracając uwagę na czasy 100 - X μs i X μs.

Pytanie uzupełniające: jaka jest rozdzielczość tego sterowania PWM, biorąc pod uwagę, że X jest zmienną całkowitą "notes hidden"> Uwagi:

Modulacja szerokości impulsu (PWM) jest bardzo powszechnym i użytecznym sposobem generowania wyjścia analogowego z mikrokontrolera (lub innego cyfrowego obwodu elektronicznego) zdolnego tylko do "wysokiego" i "niskiego" poziomu wyjściowego napięcia. W przypadku PWM czas (a dokładniej, cykl roboczy ) jest domeną analogową, podczas gdy amplituda jest domeną cyfrową. Pozwala nam to "zakradać się" sygnału analogowego poprzez cyfrowy (on-off) kanał danych.

Jeśli zastanawiasz się, dlaczego piszę w pseudokodowym, oto kilka powodów:

Żadne wcześniejsze doświadczenie z programowaniem nie było konieczne, aby zrozumieć pseudokod
Nigdy nie wychodzi z mody
Sprzęt niezależny
Brak błędów składniowych

Gdybym zdecydował się zaprezentować kod, który faktycznie działałby w mikrokontrolerze, zadawałbym pytanie przestarzałemu. W ten sposób mogę przekazać ducha programu bez przykrycia do rzeczywistego standardu programowania. Jedyną wadą jest to, że uczniowie będą musieli przetłumaczyć mój pseudokod do prawdziwego kodu, który faktycznie będzie działał na ich konkretnym sprzęcie MCU, ale jest to problem gwarantowany dla niektórych, bez względu na to, jaki wybiorę prawdziwy język programowania.

Oczywiście mogłem wziąć podejście Donalda Knutha i wymyślić własny (wyobrażony) sprzęt i zestaw instrukcji. . .

Pytanie 13

Wiele mikrokontrolerów jest wyposażonych we wbudowaną funkcję PWM, dzięki czemu nie trzeba samemu kodować niestandardowego algorytmu PWM. Fakt ten wskazuje na popularność modulacji szerokości impulsu jako schematu sterowania. Wyjaśnij, dlaczego PWM jest tak popularny, i daj kilka praktycznych przykładów, jak można go wykorzystać.

Ujawnij odpowiedź Ukryj odpowiedź

Pozwolę ci zrobić własne badania na to pytanie! Odpowiedź / odpowiedzi są trudne do znalezienia.

Uwagi:

Modulacja szerokości impulsu (PWM) jest bardzo powszechnym i użytecznym sposobem generowania wyjścia analogowego z mikrokontrolera (lub innego cyfrowego obwodu elektronicznego) zdolnego tylko do "wysokiego" i "niskiego" poziomu wyjściowego napięcia. W przypadku PWM czas (a dokładniej, cykl roboczy ) jest domeną analogową, podczas gdy amplituda jest domeną cyfrową. Pozwala nam to "zakradać się" sygnału analogowego poprzez cyfrowy (on-off) kanał danych.

Pytanie 14

Modulacja szerokości impulsu (PWM) jest użyteczna nie tylko do generowania wyjścia analogowego z mikrokontrolerem, ale jest również przydatna do odbierania wejścia analogowego przez pin, który obsługuje tylko poziomy napięcia cyfrowego typu off-off (high-low). Następujący obwód pobiera analogowy sygnał napięciowy do komparatora, generuje PWM, a następnie wysyła ten sygnał PWM do wejścia mikrokontrolera:

Zadeklaruj Pin0 jako dane wejściowe

Zadeklaruj Last_Pin0 jako zmienną boolean

Zadeklaruj Time_High jako zmienną całkowitą

Deklaruj Time_Low jako zmienną całkowitą

Zadeklaruj Duty_Cycle jako zmienną zmiennoprzecinkową

Ustaw Time_High i Time_Low na zero

PĘTLA

Ustaw Last_Pin0 równy Pin0

Jeśli Pin0 jest WYSOKI, zwiększ czas o jeden

Jeśli Pin0 ma wartość LOW, zwiększ czas_Lu o jeden

Jeśli Last_Pin0 nie jest równe Pin0, przejdź do SUBROUTINE

ENDLOOP

SUBROUTINE

Ustaw Duty_Cycle równe (Time_High / (Time_High + Time_Low))

Ustaw Time_High i Time_Low na zero

Wróć do pętli dzwoniącej

ENDSUBROUTINE

Wyjaśnij, jak działa ten program. Wskazówka: zmienna binarna Last_Pin0 służy do wykrywania, kiedy stan Pin 0 zmienił się z 0 na 1 lub z 1 na 0.

Ujawnij odpowiedź Ukryj odpowiedź

Najtrudniejszą częścią tego programu jest ustalenie funkcji zmiennej Last_Pin0 i określenie, kiedy należy wykonać podprogram. Zdecydowanie zaleca się przeprowadzenie "eksperymentu myślowego" z powolnym sygnałem wejściowym o prostokątnej fali do mikrokontrolera, badając, w jaki sposób zmienne Time_High i Time_Low są zwiększane ze stanem fali kwadratowej.

Uwagi:

Modulacja szerokości impulsu (PWM) jest bardzo powszechnym i użytecznym sposobem generowania wyjścia analogowego z mikrokontrolera (lub innego cyfrowego obwodu elektronicznego) zdolnego tylko do "wysokiego" i "niskiego" poziomu wyjściowego napięcia. Tutaj również widzimy, że jest to forma modulacji sygnału wejściowego . W przypadku PWM czas (a dokładniej, cykl roboczy ) jest domeną analogową, podczas gdy amplituda jest domeną cyfrową. Pozwala nam to "zakradać się" sygnału analogowego poprzez cyfrowy (on-off) kanał danych.

Jeśli zastanawiasz się, dlaczego piszę w pseudokodowym, oto kilka powodów:

Żadne wcześniejsze doświadczenie z programowaniem nie było konieczne, aby zrozumieć pseudokod
Nigdy nie wychodzi z mody
Sprzęt niezależny
Brak błędów składniowych

Gdybym zdecydował się zaprezentować kod, który faktycznie działałby w mikrokontrolerze, zadawałbym pytanie przestarzałemu. W ten sposób mogę przekazać ducha programu bez przykrycia do rzeczywistego standardu programowania. Jedyną wadą jest to, że uczniowie będą musieli przetłumaczyć mój pseudokod do prawdziwego kodu, który faktycznie będzie działał na ich konkretnym sprzęcie MCU, ale jest to problem gwarantowany dla niektórych, bez względu na to, jaki wybiorę prawdziwy język programowania.

Oczywiście mogłem wziąć podejście Donalda Knutha i wymyślić własny (wyobrażony) sprzęt i zestaw instrukcji. . .

Pytanie 15

Komputery cyfrowe komunikują się z urządzeniami zewnętrznymi za pośrednictwem portów : zestawy terminali zazwyczaj rozmieszczone w grupach 4, 8, 16 lub więcej (4 bity = 1 wartość, 8 bitów = 1 bajt, 16 bitów = 2 bajty). Terminale te mogą być ustawione na wysoki lub niski stan logiczny, pisząc program dla komputera, który wysyła wartość liczbową do portu. Na przykład tutaj przedstawiono ilustrację mikrokontrolera, który ma wysłać numer szesnastkowy F3 do portu A i 2C do portu B:

Załóżmy, że chcielibyśmy użyć czterech górnych bitów portu A (piny 7, 6, 5 i 4) do napędzania cewek silnika krokowego w tej ośmiostopniowej sekwencji:

Krok 1:
0001
Krok 2:
0011
Krok 3:
0010
Krok 4:
0110
Krok 5:
0100
Krok 6:
1100
Krok 7:
1000
Krok 8:
1001

Gdy każdy z pinów idzie wysoko, włącza on MOSFET mocy, który przesyła prąd przez odpowiednią cewkę silnika krokowego. Wykonując sekwencję "zmiany", jak pokazano, silnik obraca się o niewielką ilość w każdym cyklu.

Napisz niezbędną sekwencję liczb do wysłania do portu A, aby wygenerować tę konkretną kolejność przesunięć bitowych, w systemie szesnastkowym. Pozostaw niższy czterobitowy port A w stanie niskiej logiki.

Ujawnij odpowiedź Ukryj odpowiedź

Krok 1:
10 16
Krok 2:
30 16
Krok 3:
20 16
Krok 4:
60 16
Krok 5:
40 16
Krok 6:
C0 16
Krok 7:
80 16
Krok 8:
90 16

Pytanie uzupełniające: wpisz tę samą sekwencję w systemie dziesiętnym zamiast w systemie szesnastkowym:

Krok 1:
Krok 2:
Krok 3:
Krok 4:
Krok 5:
Krok 6:
Krok 7:
Krok 8:

Uwagi:

Chociaż korzeń tego pytania nie jest niczym więcej niż konwersją binarną na szesnastkową, wprowadza także studentów w koncepcję kontrolowania stanów bitowych w portach mikrokomputera poprzez pisanie wartości szesnastkowych. Jako takie, to pytanie jest bardzo praktyczne!

Jeśli uczniowie zapytają, daj im znać, że przedrostek ze znakiem dolnym jest czasem używany do oznaczenia liczby szesnastkowej. Innym razem używany jest prefiks 0x (np. $ F3 i 0xF3 oznaczają to samo).

Pytanie 16

Sprawdź poniższy schemat i listę programów (napisaną w "pseudokodach" zamiast formalnym języku programowania), aby określić, jaki rodzaj podstawowej funkcji logicznej jest implementowany w tym mikrokontrolera:

Zadeklaruj Pin0 jako wynik

Zadeklaruj Pin1 i Pin2 jako dane wejściowe

PĘTLA

JEŚLI Pin1 jest taki sam jak Pin2, ustaw Pin0 HIGH

ELSE ustaw Pin0 LOW

ENDIF

ENDLOOP

Ujawnij odpowiedź Ukryj odpowiedź

Ten mikrokontroler implementuje logiczną funkcję Exclusive-NOR.

Uwagi:

Chociaż ta funkcja logiczna mogłaby być łatwiejsza i tańsza w logice przewodowej (gate), celem jest nakłonienie uczniów do myślenia o wykonywaniu operacji logicznych za pomocą sekwencjonowanego zestawu instrukcji wewnątrz programowalnego urządzenia (MCU). Jest to skok koncepcyjny, podstawowy, ale bardzo ważny.

Jeśli zastanawiasz się, dlaczego piszę w pseudokodowym, oto kilka powodów:

Żadne wcześniejsze doświadczenie z programowaniem nie było konieczne, aby zrozumieć pseudokod
Nigdy nie wychodzi z mody
Sprzęt niezależny
Brak błędów składniowych

Gdybym zdecydował się zaprezentować kod, który faktycznie działałby w mikrokontrolerze, zadawałbym pytanie przestarzałemu. W ten sposób mogę przekazać ducha programu bez przykrycia do rzeczywistego standardu programowania. Jedyną wadą jest to, że uczniowie będą musieli przetłumaczyć mój pseudokod do prawdziwego kodu, który faktycznie będzie działał na ich konkretnym sprzęcie MCU, ale jest to problem gwarantowany dla niektórych, bez względu na to, jaki wybiorę prawdziwy język programowania.

Oczywiście mogłem wziąć podejście Donalda Knutha i wymyślić własny (wyobrażony) sprzęt i zestaw instrukcji. . .

Pytanie 17

Komputery cyfrowe komunikują się z urządzeniami zewnętrznymi za pośrednictwem portów : zestawy terminali zazwyczaj rozmieszczone w grupach 4, 8, 16 lub więcej. Terminale te mogą być ustawione na wysoki lub niski stan logiczny, pisząc program dla komputera, który wysyła wartość liczbową do portu. Na przykład tutaj przedstawiono ilustrację mikrokontrolera, który ma wysłać szesnastkową liczbę 2B do portu A i A9 do portu B:

Załóżmy, że chcielibyśmy użyć pierwszych siedmiu bitów każdego portu (piny od 0 do 6) do napędzania dwóch 7-segmentowych wyświetlaczy ze wspólną katodą, zamiast korzystać z układów dekodera BCD-7 segmentów:

Napisz niezbędne wartości szesnastkowe, które będą wyprowadzane na portach A i B, aby wygenerować ekran "42" na dwóch 7-segmentowych wyświetlaczach.

Ujawnij odpowiedź Ukryj odpowiedź

Port A = 5B 16 Port B = 66 16

Pamiętaj, że następujące odpowiedzi są również prawidłowe:

Port A = DB 16 Port B = E6 16

Pytanie uzupełniające: wpisz te same wartości liczbowe w systemie dziesiętnym zamiast w systemie szesnastkowym.

Uwagi:

Korzeń tego pytania to niewiele więcej niż konwersja binarna do szesnastkowej, ale wprowadza też studentów w koncepcję kontrolowania stanów bitowych w portach mikrokomputera poprzez pisanie wartości szesnastkowych. Jako takie, to pytanie jest bardzo praktyczne! Chociaż jest mało prawdopodobne, aby ktoś pomijał dekodery BCD-do-7 segmentów podczas budowania dwucyfrowego ekranu dziesiętnego (ponieważ robi to w ten sposób wykorzystuje tak wiele cennych mikrokontrolerów), jest to z pewnością możliwe! Istnieje wiele aplikacji innych niż ta, w których trzeba uzyskać mikrokontroler, aby wyprowadzić pewną kombinację stanów wysokiego i niskiego, a najszybszym sposobem zaprogramowania tego jest wyprowadzenie wartości szesnastkowych do portów.

Jeśli uczniowie zapytają, daj im znać, że przedrostek ze znakiem dolnym jest czasem używany do oznaczenia liczby szesnastkowej. Innym razem używany jest prefiks 0x (np. $ F3 i 0xF3 oznaczają to samo).

Pytanie 18

Jedną z metod renderowania pikseli w wyświetlaniu opartym na siatce jest uporządkowanie pikseli w wiersze i kolumny, a następnie zaznaczenie pojedynczych pikseli dla oświetlenia przez przecięcie określonej linii wiersza i określonej linii kolumny. W tym przykładzie kontrolujemy sieć 8 × 8 diod LED z dwoma 8-bitowymi (1-bajtowymi) portami mikrokontrolera:

Należy zauważyć, że wymagany jest wysoki stan na jednym z bolców portu B, aby aktywować wiersz, a niski stan jest wymagany na jednym z bolców portu A do aktywacji kolumny, ponieważ anody LED łączą się z portem A, a katody LED łączą się z portem B.

Określ kody szesnastkowe, które musimy wyprowadzić na portach A i B, aby zasilić diodę LED w dolnym lewym dolnym rogu siatki 8 × 8.

Port A =

Port B =

Ujawnij odpowiedź Ukryj odpowiedź

Port A = $ FE

Port B = 80 USD

Uwagi:

Pytanie 19

Sprawdź poniższy schemat i listę programów (napisaną w "pseudokodach" zamiast formalnym języku programowania), aby określić, jaki rodzaj podstawowej funkcji logicznej jest implementowany w tym mikrokontrolera:

Zadeklaruj Pin0 jako wynik

Zadeklaruj Pin1, Pin2 i Pin3 jako dane wejściowe

PĘTLA

JEŚLI Pin1 jest WYSOKI, ustaw Pin0 HIGH

ELSEIF Pin2 jest WYSOKI, ustaw Pin0 HIGH

ELSEIF Pin3 jest WYSOKI, ustaw Pin0 HIGH

ELSE ustaw Pin0 LOW

ENDIF

ENDLOOP

Ujawnij odpowiedź Ukryj odpowiedź

Ten mikrokontroler implementuje 3-wejściową funkcję logiczną OR.

Uwagi:

Chociaż ta funkcja logiczna mogłaby być łatwiejsza i tańsza w logice przewodowej (gate), celem jest nakłonienie uczniów do myślenia o wykonywaniu operacji logicznych za pomocą sekwencjonowanego zestawu instrukcji wewnątrz programowalnego urządzenia (MCU). Jest to skok koncepcyjny, podstawowy, ale bardzo ważny.

Jeśli zastanawiasz się, dlaczego piszę w pseudokodowym, oto kilka powodów:

Żadne wcześniejsze doświadczenie z programowaniem nie było konieczne, aby zrozumieć pseudokod
Nigdy nie wychodzi z mody
Sprzęt niezależny
Brak błędów składniowych

Gdybym zdecydował się zaprezentować kod, który faktycznie działałby w mikrokontrolerze, zadawałbym pytanie przestarzałemu. W ten sposób mogę przekazać ducha programu bez przykrycia do rzeczywistego standardu programowania. Jedyną wadą jest to, że uczniowie będą musieli przetłumaczyć mój pseudokod do prawdziwego kodu, który faktycznie będzie działał na ich konkretnym sprzęcie MCU, ale jest to problem gwarantowany dla niektórych, bez względu na to, jaki wybiorę prawdziwy język programowania.

Oczywiście mogłem wziąć podejście Donalda Knutha i wymyślić własny (wyobrażony) sprzęt i zestaw instrukcji. . .

Pytanie 20

Student buduje obwód mikrokontrolera, aby włączyć diodę LED raz na pięć uruchomień przełącznika wejściowego. Układ jest prosty, a mikrokontroler używa pętli warunkowej do zwiększania wartości zmiennej za każdym naciśnięciem przełącznika:

Zadeklaruj Pin0 jako wynik

Zadeklaruj Pin1 jako dane wejściowe

Zadeklaruj X jako zmienną całkowitą

PĘTLA

WHILE Pin1 jest WYSOKI

Dodaj 1 do X (X = X + 1)

ENDWHILE

Jeśli X jest równe 5, ustaw Pin0 HIGH i ustaw X na 0

ELSE ustaw Pin0 LOW

ENDIF

ENDLOOP

Niestety program nie działa zgodnie z planem. Zamiast zapalania diody LED raz na pięć naciśnięć przełącznika, wydaje się, że włącza się losowo po zwolnieniu przełącznika. Czasami dioda LED włącza się po pierwszym uruchomieniu przełącznika, podczas gdy innym razem potrzeba więcej niż pięciu naciśnięć przełącznika, aby włączyć go.

Po przeprowadzeniu wnikliwej analizy uczeń stwierdza, że ​​problem leży w pętli WHILE. Ponieważ mikrokontroler jest znacznie szybszy niż ludzka ręka, ta pętla wykonuje wiele razy, podczas gdy przełącznik jest wciskany raczej niż raz, co oznacza, że ​​zmienna X liczy od 0 do 5 wiele razy wokół każdego uruchomienia przełącznika. Jest tylko przypadkiem, że X będzie równe pięć po zakończeniu pętli WHILE.

To, czego potrzebuje uczeń, to zmiana na przyrost o 1 tylko dla przełączania przełączającego: przy dodatniej krawędzi impulsu wejściowego. Problem polega na tym, jak to zrobić za pomocą programowania.

Inny uczeń, gdy stanął wobec tego samego problemu, postanowił rozwiązać to w ten sposób i działało dobrze:

Zadeklaruj Pin0 jako wynik

Zadeklaruj Pin1 jako dane wejściowe

Deklaruj Przełącz jako zmienną typu Boolean (0 lub 1)

Zadeklaruj Last_Switch jako zmienną typu Boolean (0 lub 1)

Zadeklaruj X jako zmienną całkowitą

PĘTLA

Ustaw Last_Switch równy Switch

Ustaw przełącznik równy Pin1

Przełącznik IF = 1 i Last_Switch = 0 THEN dodaj 1 do X (X = X + 1)

ELSE nic nie rób Xowi

ENDIF

Jeśli X jest równe 5, ustaw Pin0 HIGH i ustaw X na 0

ELSE ustaw Pin0 LOW

ENDIF

ENDLOOP

Wyjaśnij, w jaki sposób ten program z powodzeniem zwiększa X tylko przy każdym przełączeniu przełącznika przyciskowego, podczas gdy inny program zwiększa szybko X przez cały czas naciśnięcia przełącznika przyciskowego.

Ujawnij odpowiedź Ukryj odpowiedź

Kluczem do zrozumienia działania tego algorytmu jest uświadomienie sobie, że zmienna Last_Switch będzie zawsze jednym skanem (wykonywanie pętli) za zmienną Switch.

Pytanie dotyczące wyzwania: czy ma znaczenie, w którym miejscu w programie następujące dwa wiersze idą "notatki ukryte"> Uwagi:

Ten algorytm wykrywania tętna jest bardzo często stosowany w programach zajmujących się wejściami przełączników świata rzeczywistego. W oprogramowaniu wykonuje to, co sieć wykrywania impulsów wykonuje wewnątrz klapek uruchamianych krawędziami, dla tego samego efektu: inicjowanie jakiegoś działania tylko na krawędzi sygnału impulsu.

  • ← Poprzedni arkusz roboczy

  • Indeks arkusza roboczego

  • Następny arkusz roboczy →