Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
In deze instructable leg ik je uit hoe je
- een DC-motor besturen met PWM
- communiceren via UART
- omgaan met timeronderbrekingen
Allereerst gebruiken we een AVR Core-systeemontwikkelingsbord dat u op Aliexpress ongeveer 4 USD kunt vinden. De link voor het ontwikkelbord is hier. We zullen ook Atmel ICE Debugger en Atmel Studio gebruiken om onze software te programmeren en te debuggen.
Stap 1: diep duiken in gegevensblad en broncode - kloksnelheid
In 1. de kogel definiëren we onze kristalfrequentie waar we kunnen zien op het ontwikkelbord
Stap 2: UART-registers instellen
Om met UART te communiceren, moet u de USART-baudrateregisters - UBRRnL en UBRRnH correct instellen, u kunt het zelf berekenen of u kunt een online rekenmachine gebruiken om gemakkelijk de juiste waarden te krijgen
Online rekenmachine
ruemohr.org/~ircjunk/avr/baudcalc/avrbaudca…
Dus de MYUBBR-waarde wordt dan berekend. In register UCSR0B schakelen we RXEN0 (recv enable) TXEN0 (transmit enable) en RXCIE0 (RX voor interrupt) in. In register UCSR0C selecteren we 8 bit char size.
Nadat we de RX-interruptbit hebben ingesteld, moeten we de ISR-functie toevoegen voor USART0_RX_vect
ISR(USART0_RX_vect){ char rcvChar = UDR0; if(rcvChar != '\n') { buffer[bufferIndex] = rcvChar; bufferIndex++; } }
U moet geen bedrijfslogica toepassen in uw interruptserviceroutine. Je moet de functie zo snel mogelijk terug laten komen.
Stap 3: PWM-instellingen
In de functie initPWM stellen we onze CPU-klokscaler, Timer/Counter-modus in op Fast PWM en stellen we het gedrag ervan in met COM-bits
We moeten ook de DC-motor aansluiten op de OC2-pin die is gespecificeerd in Tabel 66. Vergelijk Output Mode, Fast PWM Mode in onze datasheet, je zult ook zien dat de OC2-pin (OC2/OC1C) PB7 is
Stap 4: Resultaat
Wanneer u de broncode uploadt in de bijlage.
U kunt een nieuwe PWM-waarde (0-255) van UART invoeren (u kunt de arduino seriële poortterminal gebruiken) om de DC-motorsnelheid in te stellen.