Timers, PWM e Interrupções: Guia de Microcontroladores

Neste tutorial, exploramos três periféricos fundamentais em microcontroladoresMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorDescubra as principais diferenças entre microprocessadores e microcontroladores, entendendo suas aplicações, custos e consumo de energia em sistemas embarcados.: timers, PWMDesenvolvimento de Projetos com ArduinoDesenvolvimento de Projetos com ArduinoDomine o Arduino: entenda a configuração do hardware e software, e pratique com exemplos como o blink e a leitura de sensores. (Pulse Width ModulationDesenvolvimento de Projetos com ArduinoDesenvolvimento de Projetos com ArduinoDomine o Arduino: entenda a configuração do hardware e software, e pratique com exemplos como o blink e a leitura de sensores.) e interrupçõesBoas Práticas de Programação Embarcada e Otimização de CódigoBoas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos.. Esses recursos são largamente utilizados em projetosIntrodução ao SystemVerilog: História e EvoluçãoIntrodução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital. embarcados, sistemas de controle, robótica e aplicações de IoT. A compreensão de como configurar e utilizar cada um deles é essencial para o desenvolvimento de soluções confiáveis e eficientes.

Visão Geral e Importância🔗

MicrocontroladoresMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorDescubra as principais diferenças entre microprocessadores e microcontroladores, entendendo suas aplicações, custos e consumo de energia em sistemas embarcados. modernos dispõem de diversos periféricos internos que agilizam e simplificam tarefas de controle e processamentoBoas Práticas de Programação Embarcada e Otimização de CódigoBoas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos.. Entre eles, destacam-se:

Esses periféricos funcionam em conjunto com a unidade central de processamentoMicroprocessadores e Microcontroladores: Arquitetura: Von Neumann vs. Harvard (CPU, ALU, barramentos)Microprocessadores e Microcontroladores: Arquitetura: Von Neumann vs. Harvard (CPU, ALU, barramentos)Descubra os princípios das arquiteturas Von Neumann e Harvard, componentes essenciais como CPU, ALU e barramentos, e suas aplicações em sistemas digitais. (CPU do microcontrolador), mas operam em grande parte de modo independente, liberando o processador para outras tarefas.

Timers🔗

Conceito de Temporização

Um timer é um módulo interno que conta impulsos de clock ou de fontes externas. Podemos configurar esse móduloOrganização de Projeto: Divisão em MódulosOrganização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil. para:

Na prática, o timer é um registradorContadores e Registradores: organização e aplicação em sistemas digitaisContadores e Registradores: organização e aplicação em sistemas digitaisDescubra como contadores e registradores são essenciais na organização e manipulação de dados em circuitos digitais, fundamentais para a computação moderna. que incrementa periodicamente. Quando ele transborda (overflow) ou atinge um valor de comparação (compare match), dispara um evento – que pode ser uma interrupção ou atualização de outro periférico.

Prescaler e Precisão

Para medir intervalos de tempo mais longos ou adequar o timer a um clock de frequênciaOsciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoOsciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoDescubra o papel essencial dos osciladores e sinais de clock na sincronização e funcionamento de circuitos digitais modernos. alta, utiliza-se o prescaler. Ele divide a frequência de clock para que o timer seja incrementado em uma razão menor. Por exemplo, se o clock do microcontroladorMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorDescubra as principais diferenças entre microprocessadores e microcontroladores, entendendo suas aplicações, custos e consumo de energia em sistemas embarcados. é de 16 MHz e usamos um prescaler 8, o timer receberá pulsos a cada 16 MHz / 8 = 2 MHz.

Isso impacta diretamente a resolução e a faixa de medição:

  • Menor prescaler → maior resolução de tempo (incrementos mais rápidos), porém alcance menor antes do overflow.
  • Maior prescaler → menor resolução, porém maior faixa de medição.

Modos de Operação

Alguns microcontroladoresMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorDescubra as principais diferenças entre microprocessadores e microcontroladores, entendendo suas aplicações, custos e consumo de energia em sistemas embarcados. oferecem diferentes modos para seus timers, como:

Essas configurações são feitas por meio de registradores específicos no microcontroladorMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorDescubra as principais diferenças entre microprocessadores e microcontroladores, entendendo suas aplicações, custos e consumo de energia em sistemas embarcados. e variam conforme o fabricante.

PWM (Pulse Width Modulation)🔗

Conceito de PWM

A Modulação por Largura de Pulso (PWMDesenvolvimento de Projetos com ArduinoDesenvolvimento de Projetos com ArduinoDomine o Arduino: entenda a configuração do hardware e software, e pratique com exemplos como o blink e a leitura de sensores.) é uma técnica de controle de potência ou nível médio de tensão através de pulsos digitais de mesma frequênciaOsciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoOsciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoDescubra o papel essencial dos osciladores e sinais de clock na sincronização e funcionamento de circuitos digitais modernos., porém com largura de pulso variável (duty cycleOsciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoOsciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoDescubra o papel essencial dos osciladores e sinais de clock na sincronização e funcionamento de circuitos digitais modernos.). A razão entre o tempo em nível alto (t_on) e o período total (T) determina o valor médio aplicado à carga.

Sinal de PWM (Duty Cycle de 50%):
 ___     ___     ___
|   |___|   |___|   |___ ...

Duty CycleOsciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoOsciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoDescubra o papel essencial dos osciladores e sinais de clock na sincronização e funcionamento de circuitos digitais modernos. = (t_on / T) × 100%

Geração de PWM via Timers

A maioria dos microcontroladoresMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorDescubra as principais diferenças entre microprocessadores e microcontroladores, entendendo suas aplicações, custos e consumo de energia em sistemas embarcados. gera PWM a partir de timers configurados em modos especiais (por exemplo, Fast PWMDesenvolvimento de Projetos com ArduinoDesenvolvimento de Projetos com ArduinoDomine o Arduino: entenda a configuração do hardware e software, e pratique com exemplos como o blink e a leitura de sensores., Phase Correct, etc.). Em muitos casos:

1. É escolhido um timer compatível com modo PWMDesenvolvimento de Projetos com ArduinoDesenvolvimento de Projetos com ArduinoDomine o Arduino: entenda a configuração do hardware e software, e pratique com exemplos como o blink e a leitura de sensores..

2. Define-se a frequênciaOsciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoOsciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoDescubra o papel essencial dos osciladores e sinais de clock na sincronização e funcionamento de circuitos digitais modernos. desejada (calculada a partir do clock e do prescaler).

3. Ajusta-se o duty cycleOsciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoOsciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoDescubra o papel essencial dos osciladores e sinais de clock na sincronização e funcionamento de circuitos digitais modernos. via registradoresContadores e Registradores: organização e aplicação em sistemas digitaisContadores e Registradores: organização e aplicação em sistemas digitaisDescubra como contadores e registradores são essenciais na organização e manipulação de dados em circuitos digitais, fundamentais para a computação moderna. de comparação, que definem em que ponto do período o sinal muda de nível.

O processo ocorre de forma automática no hardware, sem depender de intervenção constante do software. Assim, o microcontroladorMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorDescubra as principais diferenças entre microprocessadores e microcontroladores, entendendo suas aplicações, custos e consumo de energia em sistemas embarcados. pode executar outras tarefas enquanto o PWM segue ativo.

Aplicações Típicas

1. Controle de velocidadePortas Lógicas e Famílias Lógicas: Comparação de famílias lógicas: TTL, CMOS, ECL (vantagens e limitações)Portas Lógicas e Famílias Lógicas: Comparação de famílias lógicas: TTL, CMOS, ECL (vantagens e limitações)Descubra as características, vantagens e limitações das famílias lógicas TTL, CMOS e ECL, essenciais para projetos digitais modernos. de motores: Alterar o duty cycleOsciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoOsciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoDescubra o papel essencial dos osciladores e sinais de clock na sincronização e funcionamento de circuitos digitais modernos. muda a tensão média no motor, controlando a rotação.

2. Brilho de LEDsLedLedDescubra tudo sobre LEDs: entenda seu funcionamento, aprenda a calcular resistores e monte circuitos seguros com dicas práticas e eficientes.: Um PWMDesenvolvimento de Projetos com ArduinoDesenvolvimento de Projetos com ArduinoDomine o Arduino: entenda a configuração do hardware e software, e pratique com exemplos como o blink e a leitura de sensores. rápido (acima de ~200 Hz) permite variar o brilho sem percepção de cintilação (flicker).

3. Gerar sinais de áudio: É possível produzir tons ou mesmo formas de onda básicas por PWMDesenvolvimento de Projetos com ArduinoDesenvolvimento de Projetos com ArduinoDomine o Arduino: entenda a configuração do hardware e software, e pratique com exemplos como o blink e a leitura de sensores. (desde que filtradas adequadamente).

Interrupções🔗

O que são Interrupções?

InterrupçõesBoas Práticas de Programação Embarcada e Otimização de CódigoBoas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos. são eventosEventos e Semáforos: Controle de Fluxo ConcorrenteEventos e Semáforos: Controle de Fluxo ConcorrenteDescubra como eventos e semáforos facilitam a sincronização e o controle de recursos em SystemVerilog, otimizando fluxos concorrentes. que forçam a CPU a interromper o fluxo normal de execução e saltar para uma rotina especial, chamada Rotina de Serviço de Interrupção (ISR). Ao concluir essa tarefa, o processador retorna ao ponto onde parou, prosseguindo a execução normal.

Isso é particularmente eficiente para lidar com situações onde se precisa de resposta imediata, ou não se deseja desperdiçar tempo fazendo “polling” de um eventoEventos e Semáforos: Controle de Fluxo ConcorrenteEventos e Semáforos: Controle de Fluxo ConcorrenteDescubra como eventos e semáforos facilitam a sincronização e o controle de recursos em SystemVerilog, otimizando fluxos concorrentes.. Exemplos de fontes de interrupção:

Como Funcionam?

De modo geral, cada interrupção possui um vetor (endereço) associado. Quando o eventoEventos e Semáforos: Controle de Fluxo ConcorrenteEventos e Semáforos: Controle de Fluxo ConcorrenteDescubra como eventos e semáforos facilitam a sincronização e o controle de recursos em SystemVerilog, otimizando fluxos concorrentes. ocorre:

1. A CPU salva o contexto (registradorContadores e Registradores: organização e aplicação em sistemas digitaisContadores e Registradores: organização e aplicação em sistemas digitaisDescubra como contadores e registradores são essenciais na organização e manipulação de dados em circuitos digitais, fundamentais para a computação moderna. de programa, etc.).

2. A execução salta para o endereço do vetor de interrupção.

3. A rotina ISR executa as instruções para tratar o eventoEventos e Semáforos: Controle de Fluxo ConcorrenteEventos e Semáforos: Controle de Fluxo ConcorrenteDescubra como eventos e semáforos facilitam a sincronização e o controle de recursos em SystemVerilog, otimizando fluxos concorrentes..

4. É executada a instrução de retorno de interrupção (retorne).

5. A CPUMicroprocessadores e Microcontroladores: Arquitetura: Von Neumann vs. Harvard (CPU, ALU, barramentos)Microprocessadores e Microcontroladores: Arquitetura: Von Neumann vs. Harvard (CPU, ALU, barramentos)Descubra os princípios das arquiteturas Von Neumann e Harvard, componentes essenciais como CPU, ALU e barramentos, e suas aplicações em sistemas digitais. restaura o contexto salvo e volta ao programa principal.

Podemos representar esse fluxo em um diagrama simplificado:

flowchart TD A(Início do Programa) --> B[Configurar Timer e Habilitar Interrupções] B --> C[Executar Loop Principal] C -->|Evento de Interrupção| D{Interrupção Ocorre?} D -->|Sim| E[Rotina de Interrupção (ISR)] E --> F[Retorno ao Loop Principal] D -->|Não| C

Priorização e Máscara de Interrupções

Em muitos microcontroladoresMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorDescubra as principais diferenças entre microprocessadores e microcontroladores, entendendo suas aplicações, custos e consumo de energia em sistemas embarcados., pode haver vários tipos de interrupções habilitadas simultaneamente. Para gerenciá-las:

Boas Práticas em Rotinas de Interrupção

Ao escrever uma rotina de serviço de interrupção (ISR), recomenda-se:

1. Executar o mínimo de operações possível, liberando logo o processador.

2. Tratar variáveisMapas de Karnaugh: Otimização de Circuitos e Minimização de FunçõesMapas de Karnaugh: Otimização de Circuitos e Minimização de FunçõesDescubra como os Mapas de Karnaugh simplificam expressões lógicas, otimizando circuitos digitais e facilitando o projeto em eletrônica digital. globais com cuidado devido a possíveis acessos simultâneos.

3. Utilizar voláteis se necessário, pois o compilador não deve otimizar variáveisMapas de Karnaugh: Otimização de Circuitos e Minimização de FunçõesMapas de Karnaugh: Otimização de Circuitos e Minimização de FunçõesDescubra como os Mapas de Karnaugh simplificam expressões lógicas, otimizando circuitos digitais e facilitando o projeto em eletrônica digital. que podem mudar fora do fluxo principal.

4. Limpar os flags de interrupção adequadamente, evitando repetição infinita da ISR.

Exemplo de Utilização Conjunta🔗

Uma aplicação bastante comum envolve a utilização dos três recursos de forma integrada. Por exemplo:

1. Timer gerando interrupçõesBoas Práticas de Programação Embarcada e Otimização de CódigoBoas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos. a cada período pré-definido (p. ex., a cada 1 ms).

2. Dentro da ISR do timer, faz-se a leitura de sensores ou incremento de contadoresRegistradores e Contadores: Contadores síncronos e assíncronos: sequências personalizadasRegistradores e Contadores: Contadores síncronos e assíncronos: sequências personalizadasAprenda as diferenças entre contadores assíncronos e síncronos, e descubra como utilizar sequências personalizadas para otimizar sistemas digitais. de tempo.

3. PWMDesenvolvimento de Projetos com ArduinoDesenvolvimento de Projetos com ArduinoDomine o Arduino: entenda a configuração do hardware e software, e pratique com exemplos como o blink e a leitura de sensores. é utilizado para controlar a velocidade de um motor ou o brilho de um LED. A cada interrupção, pode-se atualizar o valor do duty cycleOsciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoOsciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoDescubra o papel essencial dos osciladores e sinais de clock na sincronização e funcionamento de circuitos digitais modernos. conforme medições de sensor.

Dessa forma, o sistema reage instantaneamente às mudanças, sem precisar verificar continuamente se o tempo passou ou se um eventoEventos e Semáforos: Controle de Fluxo ConcorrenteEventos e Semáforos: Controle de Fluxo ConcorrenteDescubra como eventos e semáforos facilitam a sincronização e o controle de recursos em SystemVerilog, otimizando fluxos concorrentes. ocorreu.

Tabela de Comparação: Timers, PWM e Interrupções🔗

A tabela a seguir resume as funçõesMétodos e Sobrecarga: Técnicas para Maior FlexibilidadeMétodos e Sobrecarga: Técnicas para Maior FlexibilidadeDescubra como métodos, tasks, functions e sobrecarga em SystemVerilog otimizam a programação orientada a objetos com exemplos práticos e dicas de boas práticas. e características principais desses periféricos:

PeriféricoFunção PrincipalConfiguração BásicaAplicações Típicas
TimerMedir intervalos de tempo e contagensDefine modo (normal, CTC, captura), prescaler, valor de comparaçãoGeração de atrasos, contadores, clock para outras funções
PWMGerar sinal com ciclo de trabalho variávelSeleciona Timer com modo PWM, define frequência e duty cycleControle de motores, LEDs, aquecedores, saída analógica aproximada
InterrupçõesDetecção assíncrona de eventos internos/externosHabilita interrupção, configura vetor e prioridadeResposta imediata a mudanças de estado (ex.: timers, GPIO, comunicação)

Conclusão🔗

Timers, PWM e interrupçõesBoas Práticas de Programação Embarcada e Otimização de CódigoBoas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos. são elementos-chave no desenvolvimento de aplicações digitais de controle e automação. Entendê-los em profundidade permite ao projetista:

O domínio desses periféricos é um passo essencial para projetos profissionais de eletrônica digitalIntrodução à Eletrônica Digital: Conceitos Básicos e AplicaçõesIntrodução à Eletrônica Digital: Conceitos Básicos e AplicaçõesDescubra os conceitos e aplicações essenciais da Eletrônica Digital, do funcionamento de sinais binários aos transistores, e comece sua jornada tecnológica., sistemas embarcados e todas as áreas em que estabilidade, desempenho e confiabilidade sejam necessários.

Dica: Consulte sempre o datasheet do microcontroladorMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorMicroprocessadores e Microcontroladores: Diferença entre microprocessador e microcontroladorDescubra as principais diferenças entre microprocessadores e microcontroladores, entendendo suas aplicações, custos e consumo de energia em sistemas embarcados. para conhecer detalhes sobre registradores, modos de operação e sinais específicos de cada família. Mesmo que o conceito geral seja semelhante, a implementação varia de acordo com o fabricante.

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados