A Modulação por largura de pulso é crítica em aplicações que envolvam o controle de motores. Ajustando a largura do pulso, a velocidade de um motor pode ser eficientemente controlada sem a necessidade de etapas de potências de grandes dimensões. Alguns dispositivos PIC possuem módulos de hardware PWM. Estes módulos são construídos em torno dos módulos periféricos Capture/Compare/PWM (CCP). Os periféricos CCP são destinados para uma única saída PWM enquanto que os Enhanced CCP (ECCP) são projetados para excitar uma ponte H, controlando assim motores dc com escovas bidirecionalmente. Se o custo é importante num projeto, um PIC com CCP pode não estar disponível, assim, o PWM gerado por software pode ser uma boa alternativa.

Os algoritmos que damos a seguir são projetados para produzir uma saída PWM de 8 bits na família média de microcontroladores PIC. Estes algoritmos são implementados como macros. Se você quiser que estas macros sejam uma subrotina no seu programa, simplesmente remova as instruções macro e as troque por uma etiqueta e uma instrução de retorno.

A primeira é para PWM de 8 bits com uma saída.



Na segunda temos um PWM de 8 saídas com 8 bits.