Baixe o app para aproveitar ainda mais
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
Compartilhar