Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
În acest instructiv, vă voi explica cum să faceți acest lucru
- controlați un motor DC cu PWM
- comunica prin UART
- întrerupe temporizatorul de mâner
În primul rând, vom folosi o placă de dezvoltare a sistemului AVR Core pe care o puteți găsi pe Aliexpress în jur de 4 USD. Link-ul pentru placa de dezvoltare este aici. De asemenea, vom folosi Atmel ICE Debugger și Atmel Studio pentru a programa și depana software-ul nostru.
Pasul 1: Scufundare profundă în foaia de date și codul sursă - Viteza ceasului
În 1. glonțul ne definim frecvența cristalului unde putem vedea pe placa de dezvoltare
Pasul 2: Setarea registrelor UART
Pentru a comunica cu UART trebuie să setați USART Baud Rate Registers - UBRRnL și UBRRnH corect, îl puteți calcula singur sau puteți utiliza calculatorul online pentru a obține cu ușurință valorile corecte
Calculator online
ruemohr.org/~ircjunk/avr/baudcalc/avrbaudca…
Deci valoarea MYUBBR este calculată atunci, în registrul UCSR0B activăm RXEN0 (activare recv) TXEN0 (activare transmisie) și RXCIE0 (RX pentru întrerupere). În registrul UCSR0C selectăm dimensiunea caracterelor de 8 biți.
După ce setăm bitul de întrerupere RX, ar trebui să adăugăm funcția ISR pentru USART0_RX_vect
ISR (USART0_RX_vect) {char rcvChar = UDR0; if (rcvChar! = '\ n') {buffer [bufferIndex] = rcvChar; bufferIndex ++; }}
Nu ar trebui să faceți nicio logică de afaceri în rutina de servicii de întrerupere. Trebuie să faceți funcția să revină cât mai curând posibil.
Pasul 3: Setări PWM
În funcția initPWM setăm scalerul de ceas al procesorului, modul Timer / Counter ca PWM rapid și setăm comportamentul său cu biți COM
De asemenea, ar trebui să conectăm motorul de curent continuu la pinul OC2 care este specificat în tabelul 66. Comparați modul de ieșire, modul PWM rapid în foaia noastră de date, veți vedea, de asemenea, că pinul OC2 este (OC2 / OC1C) PB7
Pasul 4: Rezultat
Când încărcați codul sursă în atașament.
Puteți introduce o nouă valoare PWM (0-255) din UART (puteți utiliza terminalul de port serial arduino) pentru a seta viteza motorului de curent continuu.