Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Neste instrutível, vou explicar como
- controlar um motor DC com PWM
- comunicar via UART
- lidar com interrupções do cronômetro
Em primeiro lugar, usaremos uma placa de desenvolvimento de sistema AVR Core que você pode encontrar no Aliexpress por volta de 4 USD. O link da placa de desenvolvimento está aqui. Também usaremos o Atmel ICE Debugger e o Atmel Studio para programar e depurar nosso software.
Etapa 1: Mergulho Profundo na Folha de Dados e Código Fonte - Velocidade do Relógio
Em 1. o marcador, definimos nossa frequência de cristal, onde podemos ver na placa de desenvolvimento
Etapa 2: Configurando Registros UART
Para se comunicar com o UART, você deve definir os registros de taxa de transmissão USART - UBRRnL e UBRRnH corretamente, você pode calculá-lo sozinho ou pode usar a calculadora online para obter os valores corretos facilmente
Calculadora Online
ruemohr.org/~ircjunk/avr/baudcalc/avrbaudca…
Então o valor de MYUBBR é calculado, no registro UCSR0B nós habilitamos RXEN0 (habilitar recv) TXEN0 (habilitar transmissão) e RXCIE0 (RX para interrupção). No registro UCSR0C nós selecionamos o tamanho do char de 8 bits.
Depois de definir o bit de interrupção RX, devemos adicionar a função ISR para USART0_RX_vect
ISR (USART0_RX_vect) {char rcvChar = UDR0; if (rcvChar! = '\ n') {buffer [bufferIndex] = rcvChar; bufferIndex ++; }}
Você não deve fazer nenhuma lógica de negócios em sua rotina de serviço de interrupção. Você tem que fazer a função retornar o mais rápido possível.
Etapa 3: Configurações de PWM
Na função initPWM, definimos o escalonador de relógio da CPU, o modo Timer / Contador como Fast PWM e definimos seu comportamento com bits COM
Também devemos conectar o motor DC ao pino OC2, que é especificado na Tabela 66. Compare o modo de saída, modo PWM rápido em nossa folha de dados, você também verá que o pino OC2 é (OC2 / OC1C) PB7
Etapa 4: Resultado
Quando você carrega o código-fonte no anexo.
Você pode inserir um novo valor PWM (0-255) do UART (você pode usar o terminal de porta serial do arduino) para definir a velocidade do motor DC.