Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
I denna instruerbara, förklarar jag dig hur
- styra en likströmsmotor med PWM
- kommunicera via UART
- hantera timeravbrott
Först och främst använder vi ett AVR Core -systemutvecklingskort som du kan hitta på Aliexpress runt 4 USD. Länken för utvecklingskortet är här. Vi kommer också att använda Atmel ICE Debugger och Atmel Studio för att programmera och felsöka vår programvara.
Steg 1: Djupdykning i datablad & källkod - Klockhastighet
I 1. kulan definierar vi vår kristallfrekvens där vi kan se på utvecklingsbordet
Steg 2: Ställa in UART -register
För att kommunicera med UART måste du ställa in USART Baud Rate Registers - UBRRnL och UBRRnH korrekt, du kan beräkna det själv eller använda onlinekalkylatorn för att enkelt få rätt värden
Onlinekalkylator
ruemohr.org/~ircjunk/avr/baudcalc/avrbaudca…
Så MYUBBR -värdet beräknas då, I register UCSR0B aktiverar vi RXEN0 (recv enable) TXEN0 (sändningsaktivering) och RXCIE0 (RX för avbrott). I register UCSR0C väljer vi 8 bitars charstorlek.
När vi ställt in RX -avbrottsbit bör vi lägga till ISR -funktion för USART0_RX_vect
ISR (USART0_RX_vect) {char rcvChar = UDR0; if (rcvChar! = '\ n') {buffer [bufferIndex] = rcvChar; bufferIndex ++; }}
Du bör inte göra någon affärslogik i din avbrottsrutin. Du måste göra funktionen tillbaka så fort som möjligt.
Steg 3: PWM -inställningar
I funktion initPWM ställer vi in vår CPU -klockskalare, timer/räknarläge som snabb PWM och ställer in dess beteende med COM -bitar
Vi bör också ansluta likströmsmotorn till OC2 -stift som anges i tabell 66. Jämför utgångsläge, snabbt PWM -läge i vårt datablad, du kommer också att se att OC2 -stift är (OC2/OC1C) PB7
Steg 4: Resultat
När du laddar upp källkoden i bilagan.
Du kan ange ett nytt PWM-värde (0-255) från UART (du kan använda arduino seriell portterminal) för att ställa in DC-motorns varvtal.