Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
Sinais
Caique Miranda, Eric B. Dilger, Lucas Ferreira
Universidade Tecnológica Federal do Paraná - ZIP 85503-390, Pato Branco – PR
cai.que.93@hotmail.com, ericdilger@gmail.com, lucasferreira@utfpr.edu.br
Resumo — Este documento descreve uma atividade prática Por sua vez, o microcontrolador é encarregado de usar o
realizada na disciplina de controle digital. Na primeira parte desta sinal condicionado como referência para gerar um sinal PWM.
atividade, a amplitude de um sinal gerado é ajustado e O sinal deve ser novamente condicionado por um filtro e por
condicionado para o conversor analógico ser uma referência para finalmente observado com o osciloscópio, como mostra a
que um sistema de processamento digital de sinais gere um sinal Figura 1.
PWM. Na segunda etapa, ao invés de gerar um sinal de referência
analógico, um sinal digital é criado internamente pelo
microcontrolador para gerar o sinal PWM. Finalmente. São
apresentados os resultados simulados e experimentais.
I. INTRODUÇÃO
a C2 − √a2 C2
2 −4bC1 C2
Para condicionar para o sinal dentro de uma faixa de R1 = (4)
2Wc C1 C2
amplitude requerida pelo microcontrolador, pode-se ajustar um
offset com o gerador de funções seguido de um divisor a C2 + √a2 C2
2 −4bC1 C2
resistivo. O divisor resistivo garante que o próprio sinal de saída R2 = (5)
2Wc C1 C2
não se aproxime de 0𝑉, nem ultrapasse 3,6𝑉. Na Figura 4, a
atuação do divisor de tensão pode ser observada.
Para existir 𝑅1 e 𝑅2 :
4bC1
C2 ≥ (6)
a2
D. Modulação PWM IV. RESULTADOS
Para [7] a modulação de pulso é o processo de variação Na Figura 7, pode-se observar a simulação da onda do
de um sinal de pulso binário para representar a informação a ser gerador de função após passar pelo divisor resistivo e pelo
transmitida com boa tolerância à ruídos e capacidade para subtrator. O resultado experimental obtido é apresentado na
reconstruir sinais eliminando distorções. Figura 8.
O sinal digitalizado, após ser processado pelo Em sequência, o sinal que sai do divisor de tensão passa
controlador e gerar uma ação de controle, e enviado para o por um subtrator e um filtro ativo para ser convertido pelo
driver sob a forma de pulsos PWM. A largura desses pulsos microcontrolador, que por sua vez tem um sinal PWM como
varia conforme a amplitude imposta pelo controlador, porém, a saída. A simulação e o resultado prático obtido do sinal filtrado
energia a ser entregue a planta naquele intervalo de amostragem e do sinal PWM são mostrados nas Figuras 9 e 10.
(ou chaveamento) é a mesma do sinal original com amplitude Após o processamento digital dos sinais, o sinal PWM
variável [2]. gerado pelo microcontrolador é destinado a um filtro ativo para
Segundo [7] o PWM fornece pulsos de sinais com atenuar distúrbios no sinal e reconstruir a onda. A Figura 11
amplitude binária. A largura ou duração dos pulsos varia de apresenta a simulação desta onda, a qual também tem seu
acordo com o sinal analógico. Para baixas amplitudes resultado prático apresentado na Figura 12.
analógicas observa-se um estreitamento nos pulsos e para sinais
analógicos mais altos a largura dos pulsos aumenta.
E. Microcontrolador
F. Sistema
V. CONCLUSÕES
VI. REFERÊNCIAS
hold
stem(ts,xt,'b')
plot(ts,xt,'r')
grid on% k é a cor
CÓDIGO TRAPÉZIO #pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMERA0_RTI(void){
#include "msp430g2553.h" TA0CCR1 = ADC_VAL; //ATUALIZA O DUTY CYCLE
/* DEF. FUNCTIONS FOR MCU CONFIG. */ TA0CTL &~ TAIFG; //(POR SEGURANCA) DESABILITA
void ini_CLK(void); FLAG DE INTERRUPCAO
void ini_P1(void); }
void ini_TIMERA(void);
#pragma vector=TIMER0_A1_VECTOR
/* AUX VARIABLES */ __interrupt void TIMERA1_RTI(void){
double ulPeriod; TA1CTL &~ TAIFG; //(POR SEGURANCA) DESABILITA
unsigned long dutyCycle; FLAG DE INTERRUPCAO
int i=1,t=1,g=1,c=1,d=1,x=0,xt=0,n=1,;
int x; // Onda Trapézoidal
int xt; d=TA0CCR0/(33/2);
for (n=1;n<=N;n++)
/* MAIN */ {
int main(void) { ts(n)=(n-1)*Ts; // vetor
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer if (ts(n)==0) //para metade do periodo=1
ini_CLK(); /* START CLOCK CONFIG */ {
ini_P1(); /* START PORT 1 CONFIG */ TA0CCR1=666;
ini_TIMERA();
__bis_SR_register(GIE); /* GENERAL INTERRUPT ENABLE // end //ate aki resolve para um
while(1){} period
} }
//----------------------------------------------------- if (ts(n)<=1+p*T & ts(n)>0+p*T) // para metade do periodo=1
void ini_CLK(void){ {
/* DCOCTL Calibration Data for 16MHz */ TA0CCR1 = TA0CCR1 + d;
DCOCTL=CALDCO_16MHZ;
/* BCSCTL1 Calibration Data for 16MHz */ }
BCSCTL1=CALBC1_16MHZ; if (ts(n)<10+p*T & ts(n)>1+p*T) // para metade do periodo=1
/* SMCLK Divider 2: /1 */ { // xt(n)=A;
BCSCTL2=0;
/* XIN/XOUT Cap : 12.5 pF */ TA0CCR0=1998;
BCSCTL3=XCAP_3; }
while(BCSCTL3 & LFXT1OF); if (ts(n)<=11+p*T &
} ts(n)>=10+p*T) // para metade do periodo=1
//----------------------------------------------------- {
void ini_P1(void){ TA0CCR1 = TA0CCR1 - d;
/* 1.5 as input for ADC10 */
/* 1.6 as output from TA0 */ }
P1DIR |= BIT6; if (ts(n)<=20+p*T & ts(n)>11+p*T) // para metade do periodo=1
P1SEL |= BIT6; {
} TA0CCR1=666;
//----------------------------------------------------- }
void ini_TIMERA(void){ if (ts(n)>=T+p*T) // %resolve o problema para os proximos
/* Timer A clock source select: 2 - SMCLK = 16MHz*/ periodos
/* Timer A mode control: 1 - Up to CCR0 */ {
TA0CTL=TASSEL_2+MC_1; p=p+1; // % soma 1 para o programa saber que é para fazer o
/* PWM output mode: 7 - PWM reset/set */ proximo periodo.
/* Capture/compare interrupt enable */
TA0CCTL1=OUTMOD_7; // end
/* Capture/compare interrupt enable */ }
TA0CCTL0=CCIE; if (ts(n)>=40) // %para metade do periodo=1
/* Set TACCRO to 2667 for 6 kHz PWM output */ {
TA0CCR0=2667;
TA0CCR1=0; TA0CCR1=666;
/* Timer A clock source select: 2 - SMCLK = 16MHz*/
/* Timer A mode control: 1 - Up to CCR0 */ // end %ate aki resolve para um
TA1CTL=TASSEL_2+MC_1; periodo
/* PWM output mode: 7 - PWM reset/set */ }
/* Capture/compare interrupt enable */
TA1CCTL1=OUTMOD_7; }
/* Capture/compare interrupt enable */
TA1CCTL0=CCIE; }
TA1CCR0=1998;
TA1CCR1=0;
}