Este serviço descreve como utilizar o Timer do COP8 para gerar PWM (Pulse Wide Modulation). Como montagem prática, ensinamos a controlar um servo de Aeromodelo através da serial d PC.

 Nota: este artigo é de 1998. Seu valor é histórico e didático servindo de referência para muitos que estudam microcontroladores. Nesta seção temos outros artigos desta série do mesmo autor.

Um grande atrativo do COP8 é sua habilidade de gerar um sinal de PWM, independente do processamento da CPU. Na família COP8SAX temos o Timer T, que, programado no modo 1 (Processor Independent PWM Mode), irá gerar um sinal de PWM no pino T1A (PORT G pino 3).

As áreas de atuação de PWM são inúmeras, tais como:

- Controle de motores de corrente continua

- Geração de tons

- Conversor Digital Analógico

- Controle de cargas em corrente alternada (dimmer).

Na figura 1 temos a ilustração de um controle de velocidade de um motor de corrente Contínua com reversão de rotação.

 


 

 

 

 

Observe que para fazer o controle, variamos o Duty Cycle do sinal de controle de acionamento, podemos dizer que em condições ideais para um Duty Cycle de 70%, temos o motor aproximadamente a 70% da velocidade da tensão V. O pino SENTIDO faz o controle de reversão do motor.

Na figura 2 temos a ilustração de um circuito RC, onde aplicamos sinal PWM e obtemos uma tensão de saída proporcional ao Duty Cycle do PWM, portanto para um PWM com Duty Cycle de 50%, temos a metade da tensão do sinal de PWM. Podemos utilizar esse circuito como um D/A para diversas aplicações, onde não há necessidade de muita precisão na conversão.

 


 

 

Na figura 3, utilizando o mesmo conceito da figura 2 para gerar tensão mais um comparador analógico, obtemos um conversor A/D. O princípio é muito simples, geramos uma tensão crescente até que seja igual ou maior que a tensão analisada, que fará o pino de saída do comparador ficar em nível alto.

 


 

 

 

Na figura 4 podemos analisar O diagrama de blocos do Timer e observar que além do registrador principal Temporizador/Contador (T1) de 16 bits, existem mais dois registradores auxiliares de Captura e Auto carga (R1A E R1B) de 16 bits. É mostrada também a existência de dois pinos associados, T1A e T1B sendo que o pino T1A tem a função de I/O (entrada e saída) e o pino T1B, somente de entrada.

 


 

 

 

O Timer (T1) é decrementado a cada ciclo de instrução (tc), correspondente a frequência de entrada do microcontrolador dividida por 10. Por exemplo, para um cristal de 10 MHz, o tc será de 1 microssegundo, portanto o timer será decrementado a cada 1 microssegundo.

Como o registrador de Timer é de 16 bits, possibilita temporizações de 1 a 65.536 tc, que para o nosso exemplo, com um clock de 10 MHz, conseguimos temporizar de 1 microssegundo a 65.536 milissegundos. A figura 5 mostra simplificadamente o Timer T, configurado para operar no Modo PWM.

Nesse caso, os registradores auxiliares são utilizados para carregar com valores diferentes o Timer, possibilitando gerar temporizações diferentes para os níveis alto e baixo do sinal. Toda vez que o Timer chegar a zero, O dado no Latch é invertido, a saída desse Latch pode ou não estar conectada ao Pino T1A, depende da configuração do Timer, feita através dos bits T1C1, T1C2 e T1CS, situados no registrador CNTRL (veja Box). O bit TIC0 é o de controle de “Stop/Start” (Partida/Parada) do Timer. Toda vez que estiver em 1,0 Timer será decrementado e quando em 0, ficará parado.

Uma vez configurado o Timer T1 para PWM e ligado (TIC0 em 1), a primeira vez que o Timer for a zero, será carregado o valor armazenado no Registrador RA1, e quando esse chegar a zero novamente, será carregado o valor armazenado no Registrador RB1 e assim sucessivamente. O pino T1A, terá o seu nível lógico invertido cada vez que o Timer for a zero.

Tudo isso ocorre automaticamente, independente da CPU, significando um programa menor e mais fácil de ser elaborado. A ação da CPU, significando um programa menor e mais fácil de ser elaborado. A ação da CPU só será necessária para alterar os valores dos registradores auxiliares (RA1 e RB1), que irão alterar os valores de temporização do PWM.

 

PWM na prática

Como prática do uso de PWM, escolhemos fazer um controle de Servo motor de Aeromodelo através da interface serial do PC, por dois motivos: primeiro pela facilidade do servo ser encontrado nas lojas especializadas de modelismo, segundo, que o mesmo pode ser aplicado a um servo motor de controle industrial com as devidas adaptações.

A Figura 6 mostra um servo motor Típico de Aeromodelo, internamente ele possui um motor DC e uma caixa de redução para aumentar o torque. Para o controle de posição, possui um circuito eletrônico e um potenciômetro fixado ao eixo de saída do servo, esses elementos são mostrados no diagrama simplificado da figura 7.

 


 

 

 

 


 

 

 

O servo funciona recebendo um estímulo externo através de um sinal PWM e o circuito interno movimenta o motor fazendo com que o potenciômetro se posicione de tal maneira a equilibrar o sinal de entrada.

O servo que utilizamos (figura 6) é padrão de mercado, compatível com os modelos FUTABA, com especificação de posição central de 1520 microssegundos de sinal de estimulo. Fizemos testes para ver quais os estímulos necessários para posicionar nas extremidades, chegando a uma temporização de 1010 microssegundos para a esquerda e 2030 microssegundos para a direita. O servo espera que esses sinais ocorram em um intervalo de 20 milissegundos aproximadamente.

Na figura 8, o leitor pode observar esses sinais. Notar que esses sinais são correspondentes às extremidades e posição central.

 


| Clique na imagem para ampliar |

 

 

Para posicionar em qualquer outra posição, é só gerar um sinal proporcional. O valor desses sinais pode variar dependendo do fabricante.

 

Circuito de acionamento

O circuito utilizado é o mesmo da revista n° 309 (COP8 – Interface Serial) sendo necessário apenas fazer a conexão do servo mostrado na figura 9. Notar que o servo tem somente 3 pinos de conexão com alimentação de 4,8V e GND e sinal de controle (PWM) que é conectado no pino T1A do COP8.

 

Software do COP8

Decidimos fazer um software simples de controle onde no power on, O COP8 posiciona o servo na posição central, configurando os registradores do PWM (Timer T1) e fica aguardando o recebimento de um byte pela serial. Quando recebido, ele faz o cálculo da nova posição e altera os valores do PWM.

Um byte pode ser de 00 a FF (Hexadecimal) ou 0 a 255 (Decimal). Se o leitor observar o nosso, verá que a diferença de tempos dos sinais que posicionam nas extremidades é de 1020 microssegundos (figura 8), o que equivale a 255 x 4, portanto iremos utilizar a seguinte fórmula:

 

PWM = 1010 + (byte recebido x 4)

 

Esse novo valor será carregado no registrador RA1 que gera o sinal de nível alto do PWM.

Para o nível baixo, iremos fixar a temporização em 19 milissegundos, o que equivale a 1900 microssegundos e esse valor será carregado no power on no registrador RB1

A figura 10 mostra o fluxograma simplificado do programa. O leitor encontrará a rotina serial detalhada na edição nº 309.

 


 

 

 

 


 

 

 

O funcionamento do programa pode ser melhor analisado através dos comentários.

 

Programa de controle no PC

Mais uma vez decidimos utilizar o QBASIC do MS-DOS, devido à facilidade de programação e de estar incluso em qualquer PC com MS-DOS. O leitor pode adaptar para qualquer outra linguagem de programação como Delphi, Visual BASIC, Pascal, C, C++ entre outras, ou adaptar para funcionar no BASIC Stamp (ver artigo no site).

A figura 11 mostra o fluxograma do programa, seu funcionamento pode ser analisado também através dos comentários.

 


 

 

 

 


 

 

 

Agradecimento

Agradecemos ao Sr. Paulo, da Mock Models que gentilmente nos cedeu os modelos aqui expostos.

 

 

Conclusão

Acreditamos ter proporcionado ao leitor informações importantes sobre o uso de PWM no COP8 e sobre acionamento de Servo motores de aeromodelos. Com os exemplos de programação, o leitor poderá fazer programas mais elaborados para os mais diversos fins.

Não perca os próximos artigos onde estaremos publicando vários outros artigos sobre microcontroladores.

 


| Clique na imagem para ampliar |

 

 

 

 


| Clique na imagem para ampliar |

 


| Clique na imagem para ampliar |