Buscar

elt024 10 PwmAd

Prévia do material em texto

Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWM
Prof.MSc.Rodrigo Maximiano Antunes de Almeida
Universidade Federal de Itajuba´
rodrigomax@unifei.edu.br
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 1 / 1
LCD
Revisa˜o
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 2 / 1
Serial
Comunicac¸a˜o Serial
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 3 / 1
Comunicac¸a˜o Serial
Vantagens
Simplificac¸a˜o do hardware
Aumento da taxa de transmissa˜o devido a reduc¸a˜o de problemas de
sincronia
Economia de cabos
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 4 / 1
Comunicac¸a˜o Serial
A comunicac¸a˜o e´ feita como nos LCD’s, mas nesse caso apenas um
bit e´ enviado por vez:
1 SDA e SCL comec¸am em n´ıvel alto
2 SDA e´ levado para n´ıvel baixo como sinal de in´ıcio
3 SCL e´ levado para n´ıvel baixo
4 o primeiro bit (menos significativo) e´ colocado em SDA
5 SCL e´ levado para n´ıvel alto, aguarda-se o tempo do sistema e
abaixa-se novamente SCL
6 repete-se o processo do item 3 ate´ o fim da transmissa˜o
7 SDA e´ levado para n´ıvel alto indicando fim de transmissa˜o
SDA e SCL no envio de um dado
http://en.wikipedia.org/w/index.php?title=File:I2C data transfer.svg
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 5 / 1
Serial
1 v o i d writeByte ( uns igned char dados ) {
2 uns igned char i ;
3 f o r ( i = 0 ; i < 8 ; i++) {
4 // A n a l i s a o b i t a s e r t r a n s m i t i d o
5 i f ( dados & 0x01 ) {
6 SDA_ON ( ) ;
7 } e l s e {
8 SDA_OFF ( ) ;
9 }
10 // g e r a c¸ a˜ o do p u l s o de c l o c k
11 SCL_ON ( ) ;
12 DELAY ( ) ; // i n f o r m a c¸ a˜ o v a´ l i d a
13 SCL_OFF ( ) ;
14 DELAY ( ) ;
15 // pega o pr o´x imo b i t
16 dados >>= 1 ;
17 }
18 }
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 6 / 1
Comunicac¸a˜o Serial
Exemplo de circuitos para interface com UART
Comunicac¸a˜o UART
Comunicac¸a˜o USB
Comunicac¸a˜o RS232
Comunicac¸a˜o RS485
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 7 / 1
Comunicac¸a˜o Serial
Para dois dispositivos se comunicarem e´ necessa´rio compatibilizar o
sistema f´ısico e o sistema lo´gico.
F´ısico (Hardware)
Tipo de conector
Pinagem do conector
N´ıveis de tensa˜o
Lo´gico (Software)
Codificac¸a˜o utilizada
Tamanho da palavra
Tamanho do stop/start bits
Bit de paridade
Taxa de transmissa˜o
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 8 / 1
Serial
1 #include "serial.h"
2 #include "basico.h"
3 v o i d EnviaSerial ( uns igned char c ) {
4 w h i l e ( ! BitTst ( PIR1 , 4 ) ) ; // aguarda o r e g i s t r o f i c a r d i s p o n ı´ v e l
5 TXREG=c ; // c o l o c a o v a l o r para s e r e n v i a d o
6 }
7 uns igned char RecebeSerial ( v o i d ) {
8 i f ( BitTst ( PIR1 , 5 ) ) // V e r i f i c a s e e x i s t e v a l o r d i s p o n i v e l
9 {
10 r e t u r n RCREG ; // r e t o r n a o v a l o r
11 }
12 r e t u r n 0 ; // c o n d i c¸ a˜ o de e r r o
13 }
14 v o i d InicializaSerial ( v o i d ) {
15 TXSTA = 0b00101100 ; // c o n f i g u r a a t r a n s m i s s a˜ o
16 RCSTA = 0b10010000 ; // c o n f i g u r a a r e c e p c¸ a˜ o
17 BAUDCON = 0b00001000 ; // c o n f i g u r a v e l o c i d a d e da s e r i a l
18 SPBRGH = 0b00000000 ; // c o n f i g u r a para 56 k
19 SPBRG = 0b00100010 ; // c o n f i g u r a para 56 k
20 BitSet ( TRISC , 6 ) ; // p i n o de r e c e p c¸ a˜ o de dados
21 BitClr ( TRISC , 7 ) ; // p i n o de e n v i o de dados
22 }
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 9 / 1
Conversor AD
Conversor AD
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 10 / 1
Conversor AD
Transdutores
Processo de conversa˜o ana´logico digital
Utilizac¸a˜o de comparadores de tensa˜o
Discretizac¸a˜o do sinal
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 11 / 1
Conversor AD
Sensor de aˆngulo (passivo)
Potencioˆmetro como divisor de tensa˜o
http://en.wikipedia.org/wiki/File:Potentiometer with load.png
VRL =
VS ∗ R2
R1 + R2
= VS ∗ ( R2
RPot
)
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 12 / 1
Conversor AD
Conversor analo´gico digital de 2 bits
http://en.wikipedia.org/wiki/File:Flash ADC.png - Jon Guerber
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 13 / 1
Conversor AD
0,675
1,875
3,125
4,375
5
4
3
2
1
00
01
10
11
Intervalos
de valor
Limites de
comparação
Faixa de valores na conversa˜o de AD com 2 bits
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 14 / 1
Conversor AD
LM35
Sensor ativo de temperatura
Entrega um sinal proporcional a` temperatura
Possui diversos circuitos internos de estabilizac¸a˜o e correc¸a˜o
Mais simples e mais caro
Evita uso de CPU’s mais caras ou circuitos de interface (NTC/PTC)
VS = T ∗ 0.5(mVoC )
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 15 / 1
Conversor AD
Circuito integrado LM35
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 16 / 1
Conversor AD
Lendo o sensor com um AD de 10 bits:
Faixa de temperatura = -40 a` 150 graus
Faixa de tensa˜o do sensor = -400 a` 1500 milivolts
Faixa de conversa˜o = 0 a` 1024
Faixa de tensa˜o do AD = 0 a` 5 volts
Calcular fator de conversa˜o.
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 17 / 1
Conversor AD
Criac¸a˜o da biblioteca para o conversor AD
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 18 / 1
Conversor AD
Toda conversa˜o AD exige um determinado tempo. Para que o
microcontrolador realize corretamente a conversa˜o e´ necessa´rio seguir os
seguintes passos:
1 Configurar o conversor
2 Iniciar a conversa˜o
3 Aguardar o final da conversa˜o
4 Ler o valor
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 19 / 1
Conversor AD
1 #include "adc.h"
2 #include "basico.h"
3 v o i d InicializaAD ( v o i d )
4 {
5 BitSet ( TRISA , 0 ) ; // s e t a o b i t 0 como e n t r a d a
6 ADCON0 = 0b00000001 ; // s e l e c i o n a o c a n a l 0 e l i g a o AD
7 ADCON1 = 0b00001110 ; // s o´ AN0 e´ a n a l o´ g i c o , r e f e r e n c i a na f o n t e
8 ADCON2 = 0b10101010 ; //FOSC/32 , A l i n h a d o a` d i r e i t a , t c =12 TAD
9 }
10
11 i n t LeValorAD ( v o i d )
12 {
13 uns igned i n t ADvalor ;
14 BitSet ( ADCON0 , 1 ) ; // i n i c i a c o n v e r s a˜ o
15 w h i l e ( BitTst ( ADCON0 , 1 ) ) ; // e s p e r a t e r m i n a r a c o n v e r s a˜ o ;
16 ADvalor = ADRESH ; // l eˆ o r e s u l t a d o
17 ADvalor <<= 8 ;
18 ADvalor += ADRESL ;
19 r e t u r n ADvalor ;
20 }
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 20 / 1
Conversor AD
1 #ifndef ADC_H
2 #define ADC_H
3 v o i d InicializaAD ( v o i d ) ;
4 i n t LeValorAD ( v o i d ) ;
5 #endif //ADC H
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 21 / 1
Conversor AD
1 #include "basico.h"
2 #include "config.h"
3 #include "disp7seg.h"
4 #include "adc.h"
5 v o i d main ( v o i d ) {
6 uns igned i n t i ;
7 i n t temp = 0 ;
8 InicializaDisplays ( ) ;
9 InicializaAD ( ) ;
10 f o r ( ; ; ) {
11 temp = LeValorAD ( ) ;
12 temp %= 10000;
13 MudaDigito ( temp / 1000 ,3) ;
14 temp %= 1 0 0 0 ;
15 MudaDigito ( temp / 100 , 2 ) ;
16 temp %= 1 0 0 ;
17 MudaDigito( temp / 10 , 1 ) ;
18 temp %= 1 0 ;
19 MudaDigito ( temp , 0 ) ;
20 AtualizaDisplay ( ) ;
21 f o r ( i = 0 ; i < 1 0 0 0 ; i++) ;
22 }
23 }
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 22 / 1
Sa´ıdas PWM
Sa´ıdas PWM
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 23 / 1
Sa´ıdas PWM
Sinais PWM com variac¸a˜o do duty cycle
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 24 / 1
Sa´ıdas PWM
Vantagens
Mais barato que uma sa´ıda analo´gica
Pode ser transformado numa sa´ıda analo´gica atrave´s de um filtro passa
baixa
Para algumas situac¸o˜es o filtro na˜o e´ necessa´rio1
Desvantagens
Na˜o e´ uma sa´ıda analo´gica
1Quando o dispositivo a ser controlado ja´ possui um filtro passa baixa, normalmente
por causa da sua construc¸a˜o f´ısica. Ex: aquecimento por resisteˆncias
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 25 / 1
Sa´ıdas PWM
Frequeˆncia do PWM
Depende do circuito que implementa o PWM
Quanto mais alta melhor para simular uma sa´ıda analo´gica
Pode ser utilizada para sinalizac¸a˜o sonora
Ca´lculo:
FrequenciaPWM =
FOSC
[(PR2) + 1] ∗ 4 ∗ (TMR2Prescaler )
Para um cristal de 8 MHz podemos atingir frequeˆncias de 488Hz ate´
2MHz
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 26 / 1
Sa´ıdas PWM
Problemas com frequeˆncias muito altas: Perda de resoluc¸a˜o
ResolucaoPWM(max) =
log( FOSCFPWM )
log(2)
bits
Para frequeˆncia de 2MHz 2 a resoluc¸a˜o e´ de 2 bits, ou seja, podemos
configurar o duty cycle apenas para 12.5%, 37.5%, 62.5% ou 87.5%
do valor.
2Frequeˆncia ma´xima com um clock de 8MHz
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 27 / 1
Sa´ıdas PWM
Conhecendo a quantidade de bits de resoluc¸a˜o dispon´ıveis para a
frequeˆncia escolhida podemos ajustar o duty-cycle de acordo com a
expressa˜o abaixo:
DutyCyclePWM =
[CCPRxL : CCPxCON(5 : 4)]
(PR2 + 1) ∗ 4
O valor do duty cycle pode ser entendido como uma porcentagem do
tempo, onde 1023 = 100%3
3Na realidade 1023=99,95%, devido aos efeitos de discretizac¸a˜o do circuito digital
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 28 / 1
Sa´ıdas PWM
Criac¸a˜o da biblioteca para as sa´ıdas PWM
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 29 / 1
Sa´ıdas PWM
Para configurar as sa´ıdas PWM devemos especificar:
1 Frequeˆncia de trabalho atrave´s de PR24 e TCON2
2 Duty cycle em CCPR1L e CCPR2L
3 Configurar como sa´ıda em TRISC
4 Configurar a sa´ıda como PWM em CCP1CON e CCP2CON
4O prescaler foi configurado para 16 bits de modo a obter a maior faixa de frequeˆncia
aud´ıvel.
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 30 / 1
Sa´ıdas PWM
1 #include "pwm.h"
2 #include "basico.h"
3
4 v o i d SetaPWM1 ( uns igned char porcento ) {
5
6 // f o r m u l a do duty c y c l e :
7 // DC porcento = V / ( ( PR2+1) *4 ;
8 //V = DC/100 * (PR2+1) * 4) = DC * (PR2+1) /25
9
10 uns igned i n t val = ( ( uns igned i n t ) porcento ) *( PR2+1) ;
11 val = val / 2 5 ;
12
13 // g a r a n t e que tem apenas 10 b i t s
14 val &= 0x03ff ;
15
16 // os 8 p r i m e i r o s b i t s s a˜o c o l o c a d o s no CCPR1L
17 CCPR1L = val >> 2 ;
18
19 // os u´ l t i m o s d o i s s a˜o c o l o c a d o s na p o s i c¸ a˜ o 5 e 4 do CCP1CON
20 CCP1CON |= ( val & 0x0003 ) << 4 ;
21 }
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 31 / 1
Sa´ıdas PWM
1 v o i d SetaPWM2 ( uns igned char porcento )
2 {
3 uns igned i n t val = porcento * PR2 ;
4 val /= 2 5 ;
5 val &= 0x03ff ;
6 CCPR2L = val >> 2 ;
7 CCP2CON |= ( val & 0x0003 ) << 4 ;
8 }
9 v o i d SetaFreqPWM ( uns igned i n t freq )
10 {
11 //PR2 = f o s c /( fpwm*4* p r e s c a l e r )−1 = (8000000/( f r e q *4*16) ) − 1
12 PR2 = (125000/( freq ) ) − 1 ;
13 }
14 v o i d InicializaPWM ( v o i d )
15 {
16 BitClr ( TRISC , 2 ) ; // c o n f i g u r a os p i n o s como s a ı´ d a s
17 BitClr ( TRISC , 1 ) ;
18 T2CON |= 0b00000011 ; // c o n f i g u r a o p r e s c a l e para 1 : 1 6
19 BitSet ( T2CON , 2 ) ; // L i g a o t i m e r 2
20 CCP1CON |= 0b00001100 ; // c o n f i g u r a CCP1 como um PWM
21 CCP2CON |= 0b00001100 ; // c o n f i g u r a CCP2 como um PWM
22 }
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 32 / 1
Sa´ıdas PWM
1 #ifndef PWM_H
2 #define PWM_H
3 v o i d SetaPWM1 ( uns igned char porcento ) ;
4 v o i d SetaPWM2 ( uns igned char porcento ) ;
5 v o i d SetaFreqPWM ( uns igned i n t freq ) ;
6 v o i d InicializaPWM ( v o i d ) ;
7 #endif //PWM H
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 33 / 1
Sa´ıdas PWM
1 #include "config.h"
2 #include "basico.h"
3 #include "pwm.h"
4 #include "adc.h"
5 // i n i c i o do programa
6 v o i d main ( v o i d )
7 {
8 i n t temp ;
9 InicializaPWM ( ) ;
10 InicializaAD ( ) ;
11 f o r ( ; ; ) {
12 temp = LeValorAD ( ) ;
13 // a j u s t a n d o a f r e q u eˆ n c i a de acordo com e n t r a d a a n a l o´ g i c a
14 SetaFreqPWM ( temp ) ;
15 // a j u s t a n d o o duty−c y c l e para 50%
16 SetaPWM1 ( 5 0 ) ;
17 }
18 }
ELT024 Comunicac¸a˜o serial, Conversor AD e Sa´ıdas PWMrodrigomax@unifei.edu.br 34 / 1

Outros materiais