Simples transmissão AM com MSP430 Launchpad

AM

O processo de modulação, em termos gerais, consiste na técnica de deslocamento do espectro do sinal transmitido por meio de uma portadora de alta frequência [1]. Na abordagem clássica de modulações, a portadora é um sinal senoidal de frequência ωc . A modulação consiste na variação de uma característica da portadora em função do sinal mensagem a ser transmitido [2]. Dado que um sinal senoidal é completamente definido por sua amplitude, frequência e fase, a variação desses três parâmetros definem que tipo de modulação está sendo utilizada. Vamos abordar uma implementação de um transmissor que modula a portadora por amplitude (Amplitude Modulation – AM).

Circuito Modulador

Circuito Modulador utilizando o transistor 2n7000.

C1 = 22 μF
C2 = 0.2 μF
R = 220 Ω

A implementação abordada tem a particularidade de não utilizar nenhuma fonte externa para alimentação ou geração de sinais, dado que a plataforma MSP430 é capaz de atender esses requisitos. Sendo assim, os sinais de Audio e Clock e a alimentação VCC serão gerados na placa MSP430. O objetivo é transmitir uma música, que seja reconhecível, utilizando as saída de sinal da plataforma para gerar os tons que compõem a música tão como a portadora em que a música será transmitida. O sinal de Clock é uma onda quadrada de amplitude entre 0 e 3.3 V e de frequência em 1 MHz, e servirá de base para a portadora. Uma modulação AM com portadora em 1 MHz leva o sinal para a banda MF (Medium Frequency) entre 300 KHz e 3 MHz, em que é alocado a transmissão de radio AM. A alimentação VCC é de +3.3 V, e por sua vez o sinal de Audio será conjuntos de ondas quadradas de baixa frequência (relativo a frequência do Clock) de durações e frequências distintas para se definir uma música discernível.

O transistor 2N7000 é um dispositivo bastante utilizado em rádio amadorismo e em aplicações de chaveamento de baixa potência [3] e dado que a modulação por onda quadrada consiste essencialmente em cortar o sinal mensagem de acordo com o ciclo de Clock, este transistor se mostrou eficiente para a implementação. O capacitor C1 serve para desacoplar os sinais DC do pino da MSP430 que gera o sinal mensagem da polarização do transistor 2N7000, sendo este um capacitor de 22 μF. O resistor R serve para ajustar a corrente de polarização do transistor e foi utilizado R = 220 Ω. O capacitor C2 isola o nível DC do sinal a ser transmitido, sendo este um capacitor de 0.2 μF.

O funcionamento do circuito consiste no controle do sinal no dreno do transistor por meio do sinal de Clock na base. Dado que o sinal de Clock alterna entre dois estados (3.3 V e 0 V), a corrente no dreno será aproximadamente nula quando o Clock for 0 V, logo a tensão média no dreno será forçada à VCC; quando o Clock for 3.3 V a corrente é aproximadamente 14.6 mA (de acordo com simulações), portanto a tensão média no dreno é

$latex V_D = 3,3 – 220 * 14,6 \times 10^{-3}\approx 90mV$

Sendo assim, o circuito funciona aproximadamente com uma chave que alterna a tensão do dreno entre VCC e um nível próximo ao terra. Quando o sinal de áudio é aplicado, a tensão na antena alterna entre um nível máximo, quando a mensagem e a tensão no dreno são máximas, e um nível mínimo quando a mensagem e a tensão no dreno são mínimas, caracterizando a modulação em amplitude. A forma de onda do sinal na antena é similar a um sinal chaveado. Devido aos efeitos de carga e descarga dos capacitores do circuito e das capacitâncias parasitas do transistor, o chaveamento não é ideal e possui ciclos de carga.

MSP430

O software necessário para o funcionamento do sistema deve proceder da seguinte maneira: gerar um PWM de 1MHz que será utilizado como o sinal da portadora AM e gerar um outro PWM que será o sinal mensagem. Este segundo sinal deverá ter sua frequência modificada de acordo com as notas musicais da canção que se pretende enviar, em que para compor a música deve-se manter esta frequência de acordo com o intervalo de tempo necessário a cada nota.

A principal configuração a ser feita no software são os registradores relacionados a geração do PWM. Para que a onda PWM seja coerente com a nota desejada ou com a frequência da portadora deve-se configura os timers.

Estrutura completa do modulador AM

 

O Timer_A é um timer contador de 16 bits com três registradores comparadores, que suporta múltiplas capturas, saída PWM e setagem do intervalo de tempo.

A fonte de clock pode ser de ACLK, SMCLK ou externamente via TACLK ou INCLK. A fonte de clock é selecionada com os bits TASSELx. O clock selecionado pode passar diretamente ao timer ou ser dividido por 2, 4 ou 8 usando os bits IDx. O divisor do clock é resetado quando TACLR é setado.

Para iniciar ou reiniciar o timer, pode-se agir das seguintes formas: Toma-se MCx > 0 e a fonte do clock está ativa. Quando o timer está em modo Up ou Up/Down o timer pode ser parado escrevendo 0 para TACCR0, por sua vez, o mesmo pode ser reiniciado escrevendo um valor diferente de zero em TACCR0.

O modo Up é usado se o período do timer deve ser diferente da contagem de 0FFFFh. O timer incrementa repetitivamente e compara o seu valor ao registrador TACCR0, o qual define o seu período, como mostra a figura abaixo. O número de contagens do timer no período é de TACCR0 + 1. Quando o valor do timer é igual a TACCR0, a contagem é reiniciada do zero.

Cada bloco de captura/comparação possui uma unidade de saída. Esta unidade é utilizada para gerar sinais de saída, como o PWM. Cada unidade de saída possui oito modos de operação, os quais geram sinais baseados nos registradores EQU0 e EQUx.

Onda gerada no modo UP.

O modo de saída utilizado é Reset/Set, ou seja, a saída é resetada quando o timer conta até o valor de TACCRx. Ele então é setado quando o timer conta até o valor de TCACCR0.

Para a geração de um PWM de 1 MHz, sendo o clock do sistema de 8MHz, deve-se definir o valor de TA0CCR0 para 8 − 1, pois é feito uma contagem de 0 a 7, sendo 8 posições. Este então, é o período total do sinal. Para um duty-cycle de 50% o TA0CCR1 deve ser setado para a metade da contagem, em que no caso é contado até 4.

O trecho do código, mostrado abaixo, apresenta as configurações necessárias para a geração de dois sinais de PWM que serão necessários para o projeto.

/* ** Timer0_A Set - Up ** */
/* Sinal da portadora : 1 MHz */

TA0CCR0 |= 8 - 1;            // PWM Period
TA0CCTL1 |= OUTMOD_7 ;       // TA0CCR1 output mode = reset / set
TA0CCR1 |= 4;                // TA0CCR1 PWM duty cycle
TA0CTL |= TASSEL_2 + MC_1 ;  // SMCLK , Up Mode ( Counts to TA0CCR0 )
TA0CCTL0 |= CCIE ;

/* ** Timer1_A Set - Up ** */
/* Sinal mensagem */

TA1CCR0 |= C4 - 1;
TA1CCTL1 |= OUTMOD_7 ;
TA1CCR1 |= C4 /2;
TA1CTL |= TASSEL_2 + MC_1 ;
TA1CCR0 )
TA1CCTL0 |= CCIE ;

Cada nota musical pretendida corresponde a uma respectiva frequência no sinal mensagem. Para facilitar a composição das canções, estas frequências foram definidas, onde este valor será escrito no registrador TA1CCR0 e a metade de seu valor no registrador TA1CCR1, assim, cada vez que estes valores forem modificados o sinal enviado irá soar na frequência desejada.

Tomando como exemplo a nota C4, que corresponde a quarta oitava de Dó. Para que esta nota seja tocada deve-se ter um sinal com frequência de 523,251099Hz. Então divide-se 8Mhz por esta frequência para se obter o valor que deve ser colocado em TA1CCR0.

O trecho do código abaixo mostra a definição de alguns valores que irão corresponder a nota desejada, em que três oitavas foram definidas.

#define C4 15296
#define Cs4 14431
#define Db4 14431
#define D4 13621
#define Ds4 12856
#define Eb4 12856

Foi implementado uma função chamada play() que realiza troca dos valores dos registradores para se obter a nota desejada. O tempo que a nota ira soar é definido por um laço que irá se repetir de acordo com este valor de tempo indicado na chamada da função. O número de batidas por minuto (BPM) da música está relacionado com o laço interno do código, sendo que para que a música seja mais rápida basta diminuir o BPM, o que fará o laço permanecer por menor tempo em execução. O código mostrado a seguir expõe o que foi descrito.

void play(int nota, int dur) {
 
    for (j = 0; j <= dur; j++) {
	for (i = 0; i <= bpm; i++) {
		TA1CCR0 = nota - 1;
		TA1CCR1 = nota/2;
	}
    }
    P1OUT ^= RED;
}

Com isso, para compor a música basta utilizar a função play(), em que os parâmetros de entrada serão a nota desejada e o tempo do compasso. O código abaixo mostra um trecho de uma música composta pela função implementada.

play(E4, 1);
play(E4, 1);
rest(1);
play(E4, 1);
rest(1);
play(C4, 1);
play(E4, 1);
rest(1);
play(G4, 1);
rest(3);
play(G3, 1);
rest(3);

A partir da implementação mostrada foi possível transmitir o sinal mensagem musical na frequência de 1 MHz, que foi captado utilizando um radio simples sintonizado na faixa AM

Vídeo

Código

 

Por:
João Dantas (jcfdantas@gmail.com)
Higo Silva (higo.silva@cear.ufpb.br)

 

Referências

[1] LATHI, B. Modern Digital and Analog Communication Systems. Nova York: Oxford
University Press, 1998.
[2] ALENCAR, M. Sampaior de. Telefonia Celular. São Paulo: Editora Érica, 2004.
[3] FAIRCHILD SEMICONDUCTOR. [S.l.].

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *