Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
V tomto návodu vám vysvětlím, jak na to
- ovládání stejnosměrného motoru pomocí PWM
- komunikovat přes UART
- zvládnout přerušení časovače
Nejprve použijeme vývojovou desku systému AVR Core, kterou najdete na Aliexpress kolem 4 USD. Odkaz na vývojovou desku je zde. K programování a ladění našeho softwaru použijeme také Atmel ICE Debugger a Atmel Studio.
Krok 1: Hluboké potápění do datového listu a zdrojového kódu - rychlost hodin
V 1. kulce definujeme naši krystalovou frekvenci, kde můžeme vidět na vývojové desce
Krok 2: Nastavení registrů UART
Abyste mohli komunikovat s UART, musíte správně nastavit registry přenosové rychlosti USART - UBRRnL a UBRRnH, můžete si to vypočítat sami nebo můžete pomocí online kalkulačky snadno získat správné hodnoty
Online kalkulačka
ruemohr.org/~ircjunk/avr/baudcalc/avrbaudca…
Takže se vypočítá hodnota MYUBBR, v registru UCSR0B povolíme RXEN0 (povolit příjem) TXEN0 (povolení přenosu) a RXCIE0 (RX pro přerušení). V registru UCSR0C vybereme 8bitovou velikost znaku.
Poté, co nastavíme bit přerušení RX, měli bychom přidat funkci ISR pro USART0_RX_vect
ISR (USART0_RX_vect) {char rcvChar = UDR0; if (rcvChar! = '\ n') {buffer [bufferIndex] = rcvChar; bufferIndex ++; }}
V rutině služby přerušení byste neměli dělat žádnou obchodní logiku. Musíte zajistit, aby se funkce vrátila co nejdříve.
Krok 3: Nastavení PWM
Ve funkci initPWM nastavíme náš scaler hodin CPU, režim Timer/Counter jako Fast PWM a nastavíme jeho chování s COM bity
Rovněž bychom měli připojit stejnosměrný motor na pin OC2, který je uveden v tabulce 66. Porovnejte výstupní režim, rychlý režim PWM v našem datovém listu, uvidíte také, že pin OC2 je (OC2/OC1C) PB7
Krok 4: Výsledek
Když nahrajete zdrojový kód v příloze.
Pro nastavení otáček motoru DC můžete zadat novou hodnotu PWM (0-255) z UART (můžete použít terminál sériového portu arduino).