sexta-feira, 9 de agosto de 2013

MSP430: gerando PWM - Parte I

Por onde começar...

O meu interesse em gerar sinais PWM  (Pulse Width Modulation), é por conta da necessidade de fazer o controle de velocidade dos motores que estou usando para fazer o meu carrinho andar (veja aqui). Não vou entrar muito em detalhes sobre PWM pois não é esse o meu objetivo. Informações sobre o que é PWM, fundamentação teórica, aplicações e mais informações podem ser achadas aos monte no google.
Esse tipo de sinal, por ser filosoficamente digital, é bastante simples de ser gerado por microcontroladores, mesmo os mais simples, bastando para isso que ele tenha um timer em sua arquitetura interna.
Acho que a melhor maneira de aprender como utilizar os recursos do dispositivo é lendo a documentação disponibilizada pelo fabricante. Como estou utilizando o microcontrolador que veio junto com a placa Launchpad MPS430, o MSP430G2553, baixei a documentação do mesmo e pude encontrar tudo o que foi necessário para dar o ponta pé inicial (além de que há muita coisa disponível e já pronta na internet, novamente o google pode ajudar bastante...).
As informações sobre esse microcontroladores são encontradas em dois documentos: o primeiro é um datasheet para o dispositivo em questão e outro trata-se do manual da família à qual o dispositivo pertence. Os dois volumes se complementam, então é necessário ter os dois em mãos. Para o microcontrolador que utilizei, os arquivos são os dos links abaixo:


Gerando PWM

Como falei, para gerar sinais PWM num microcontrolador basta que se tenha disponível um timer em sua arquitetura interna e no MSP430G2553, que vem junto com a Launchpad, temos dois disponíveis.

Arquitetura MSP430G2553 retirada do datasheet do dispositivo.

Toda a informação dos modos de operação dos timers pode ser encontrada no manual da família do dispositivo, no capítulo 12 (Timer A). Para mais informações aconselho uma leitura desta seção.

 

Modo de operação do Timer

Segundo tabela do manual de operação da família, existem 4 modos de operação para o Timer deste dispositivo. Achei o modo "Up" mais interessante pois consigo ter o controle melhor do período do Timer e consigo gerar freqüência desejada mais facilmente (pelo menos no meu modo de pensar e raciocinar...). Neste modo de operação o contador do timer é resetado sempre o valor de TACC0 é atingido (TACCR0 - Timer A Capture/Compare Register 0). Abaixo cópia do trecho específico do manual descrevendo os modos de operação do Timer.

Blocos de Captura/Comparação (Capture/Compare Blocks)

O modo de Captura é utilizado para gravar eventos relacionados a temporização, podendo ser utilizados para contagem de eventos, cálculo de velocidades ou medição de tempo. Já o modo de Comparação é utilizado para gerar interrupções a intervalos regulares de tempo ou gerar sinais PWM. Logo, este é modo de operação que nos interessa aqui.
Cada bloco possui uma unidade de saída (output unit) que é utilizada para gerar sinais de saída como PWM, por exemplo. Essa saída pode operar nos 8 modos descritos no manual da família e reproduzido abaixo.

Output modes para os módulos de captura/comparação.

Escolhi operar no modo Reset/Set e por conta disso teremos algo parecido com o que mostra a figura seguinte como sinal geral pelo timer.

Sinal PWM gerado usando as configurações descritas.


No MSP430G2553 temos 3 blocos de Captura/Comparação. A minha idéia é utilizar o bloco 0 para estabelecer a freqüência de dois sinais PWM (TACCR0), e os outros dois módulos para gerenciar o duty-cycle de maneira independente desses dois sinais (TACCR1 e TACCR2).

Codificando...


Bom, com o básico do funcionamento do hardware apresentado já dá pra codificar e fazer a coisa acontecer. Esse é o tema do próximo post sobre esse assunto.

Nenhum comentário:

Postar um comentário