quinta-feira, 27 de agosto de 2015

Controle motor

Olá pessoal,

Para quem curte o assunto controle motor, segue dois link de arquivos bastante relevantes ao assunto:

http://epubl.ltu.se/1402-1617/2005/303/LTU-EX-05303-SE.pdf

http://www.oldfordcrewcabs.com/public_pdf/Book%20-%20Understanding%20Automotive%20Electronics%20(Newnes).pdf

Boa leitura ;-)

quarta-feira, 26 de agosto de 2015

Comando Serial I

Este exemplo tem como objetivo mostrar como podemos controlar a velocidade de piscada do led usando comando pela USB do micro em uma placa de desenvolvimento.

Supondo que queremos controlar a abertura dos injetores de um veículo que seque a sequencia 1-3-4-2 usando os leds 1 3 5 e 6.

O valor enviado é guardado dentro da EEPROM do micro, e depois lido pela lógica para controlar o comando de tempo delay_ms

Para enviar os códigos, usei o programa de envio de informações pela Serial ACE Pic
(o link esta no post que fiz neste blog em agosto 2015 - ferramental)

O envio de comando se faz na seguinte maneira:

         (w - para escrever) + (0 - endereço da EEPROM) + ( d - valor)

Lembrando também que os caracteres são enviados em ASCII, ou seja:

         w - equivale a 0x77 em hexadecimal ASCII
         0 - equivale a 0x30 em hexadecimal ASCII
         d - equivale a 0x64 em hexadecimal ASCII

A leitura do endereço da EEPROM se faz da seguinte maneira:

        (r - desejo de ler a memória) + (0 - endereço da EEPROM que se quer ler)


O código principal: 

#include "C:\Users\main.h"

#priority int_RDA    //Da prioridade a interrupção da porta serial

char resp=0;      
char rec[3];        
char end,cal,sw;  
int a;
int temp_inj=1000;   //Valor inicial do tempo de injeção (um segundo)

#int_RDA             //interrupção pela porta serial
void trata_serial()
{
   gets(rec);                    //Pega os bytes vindos da serial
   sw=rec[0];                    //aramazena o primeiro byte relativo ao comando (w - escreve / r - lê a                                                    EEPROM)
 
   printf("%c",'s');             //Devolve na serial que "s" (sim) para avisar que a interrupção foi ativada

   
      if(sw=='r')
      {
         end = rec[1];                    //Armazena o endereo da EEPROM que se quer ler
         cal = read_eeprom(end); //Armazena o valor lido noendereço "end" excrever da EEPROM
         printf("%c",cal);              //Envia para serial o valor lido "cal" no endereço "end"
      }
      if(sw=='w')                         // Write EEprom
      {
         end = rec[1];                   //Armazena o endereo da EEPROM que se quer escrever
         cal = rec[2];                    //Armazena o valor que se quer excrever na EEPROM
         write_eeprom(end,cal);  //escreve no endereço "end" da EEPROM o valor armazenado na                                                            variável "cal"
         resp=read_eeprom(end);  //Lê o endereço "end" da EEPROM e armazena na variável resp
         printf("%c",resp);
     
      }

}
 
//Incia bloco principal

void main()
{

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_Vref(FALSE);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab


temp_inj=read_eeprom(0x30);   //Carrega valor desejado de tempo de injeção da do endereço (0x30)h da EEPROM

     while(true)
   {

       temp_inj=read_eeprom(0x30); //Atualiza a variável
     
       //sequencia de injeção 1 - 3 - 4 - 2
     
       //Injetor 1
     
       output_high(pin_d0);         //abre injetor 1
       delay_ms(temp_inj);           //carrega o tempo de abertura desejado
       output_low(pin_d0);          //Fecha injetor 1
     
       //Injetor3
     
       output_high(pin_d4);         //abre injetor 3
       delay_ms(temp_inj);           //carrega o tempo de abertura desejado
       output_low(pin_d4);          //Fecha injetor 3
     
       //Injetor4
     
       output_high(pin_d6);         //abre injetor 4
       delay_ms(temp_inj);           //carrega o tempo de abertura desejado
       output_low(pin_d6);          //Fecha injetor 4
     
       //Injetor2
     
       output_high(pin_d2);         //abre injetor 2
       delay_ms(temp_inj);           //carrega o tempo de abertura desejado
       output_low(pin_d2);          //Fecha injetor 2
     
       //printf("%c",temp_inj);
   
   }

}

ARQUIVO main.h

#include <18F4550.h>
//#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES HS                       //High Speed Crystal/Resonator with PLL enabled
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES BORV20                   //Brownout reset at 2.0V
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection
#FUSES MCLR                     //Master Clear pin enabled
#FUSES LPT1OSC                  //Timer1 configured for low-power operation
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES PLL12                    //Divide By 12(48MHz oscillator input)
#FUSES CPUDIV1                  //System Clock by 4
#FUSES USBDIV                   //USB clock source comes from PLL divide by 2
#FUSES VREGEN                   //USB voltage regulator enabled
#FUSES ICPRT                    //ICPRT enabled

#use delay(clock=8000000)

#use rs232(baud=256000,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

sábado, 22 de agosto de 2015

Injeção Eletrônica

Esse é o projeto de formatura de um grupo de alunos que tive o prazer de orientar. Trata-se de um motor de pouco mais de 6 HP injetado com o coletor de uma CG 150 e controlado com um Pic 18F4550 com todo o software feito  em linguagem C.

O sistema era baseado no clássico Speed Density, onde se lê a pressão e a temperatura do ar no coletor e se calcula o tempo de injeção. Temperatura do motor e rpm também eram lidos e entravam na cadeia de cálculo do tempo de injeção.

Por fim, o motor depois foi instalado em um kart onde funcionou como esperado. 




Tabela ASCII



Valores dos Resistores

A tabela abaixo mostra as bases, cujo os valores nominais são seus múltiplos e submúltiplos. Comercialmente, esses valores servem somente para resistores de 2%, 5%, 10% ou 20% de tolerância

10
11
12
13
15
16
18
20
22
24
27
30
33
36
39
43
47
51
56
62
68
75
82
91



Antena "L"

Este esboço eu desenhei baseado em vários exemplos desse projeto que fui encontrando pela internet. Caso você tenha os cálculos ou referências bibliograficas, por favor entre em contato comigo.


Oscilador 555

Este circuito integrado foi desenvolvido no começo dos anos 70 e ganhou o nome de temporizador 555. Este temporizador é um CI barato estável e de muito fácil configuração. No início era usado apenas em operações monoestáveis e astáveis, mas posteriormente uma grande quantidade de circuitos foi desenvolvido com base neste circuito integrado.

O encapsulamento mais usual do CI 555 tem 8 pinos, A figura 1 mostra a vista em planta do CI mostrando a função de cada pino

Figura 1 - Pinagem do 555 

O circuito multivibrador astável é um circuito que opera em duas situações, permanecendo um determinado intervalo de tempo em nível alto (1) e nível baixo (0). A figura 2 mostra como se comporta o sinal de saída do 555

Figura 2 - Forma de onda obtida no pino 3 

Com isso, obtemos um gerador de onda quadrada. Este tipo de sinal é largamente usado para a construção de relógios (clock) de sincronismo A montagem do CI 555 para este fim pode ser vista abaixo:

Figura 3 - Configuração do 555 

Os resistores Ra, Rb e o capacitor C poderão ser dimensionados de acordo com o tempo que se quer que ele permaneça em nível alto (T1) e nível baixo (T2) através das relações:

T1= 0,69 x (Ra + Rb) x C
T2 = 0,69 x (Rb) x C

Com esses valores podemos determinar a freqüência de operação do astável, já que T (período) será igual a soma T1 + T2, e como freqüência é o inverso do período temos que:

F = 1/T

Outra definição usada em projeto é a do ciclo de operação (D) do astável que poderá ser calculada através das seguintes fórmulas:

D = T1/T 
D = (Ra + Rb) / (Ra + (2 x Rb))

Um outro detalhe prático para projeto é que se define um valor fixo para o capacitor C, e a partir daí dimensionamos Ra e Rb, de acordo com a freqüência e o tempo em nível alto ou nível baixo que se deseja.

Filtros de RF (FPB & FPA)

Em eletrônica, o uso de filtro é altamente recomendado quando se deseja atenuar uma determinada frequência. Durante uma modulação ou amplificação de um sinal, pode haver a geração de sinais indesejados.
A única maneira de se atenuar esses harmônicos é colocar um filtro na saída do circuito amplificador do transmissor, ou mesmo na própria linha que liga o transmissor a antena, para que se evite que múltiplos da frequência que se esta transmitindo interfira em outras faixas de comunicação.

Projeto prático de um Filtro Passa Baixa (FPB)

Como exemplo, irei calcular um FPB (filtro passa baixa) de ordem 5 com frequência de corte igual a 27,255 MHz. (A ordem do filtro diretamente ligada a quantidade de componentes que serão usados na sua montagem).

Lembre-se de que quando escolhemos a frequência de corte, esta por teoria, vai ter um ganho de -3db, ou seja, na frequência que escolhemos para projeto, a amplitude do sinal na saída sofrerá uma perda da metade da potência. Como será visto mais adiante, você deve colocar a frequência de corte acima do ponto que se vai trabalhar no caso do FPB. E se estivermos projetando um FPA, a frequência de corte deve estar abaixo da frequência que se deseja trabalhar.

1) Tabelar os requerimentos desejados para o projeto:


2) Desenhar o esquema elétrico do filtro:

Se ele é de ordem 5, terá cinco componentes. Se tratando de um FPB, a arquitetura para ordem 5 fica sendo como mostrado abaixo:



3) Encontrar os polos do filtro

      3.1) Encontrar o ângulo entre os polos do filtro: Ângulo será: (360 / (2 x ordem do filtro))

Para este caso temos: (360/ (2 x 5)) = 36°

      3.2) Plotar os polos no circulo de raio 1 separados entre si por 36°



Figura 2 - Alocação dos pólos do FPB




4) Para cada polo, encontrar seu valor no eixo Re (real) e Im (imaginário)

      P1 = -0.309 + j 0,9511
      P2 = -0,809 + j 0,5878
      P3 = -1
      P4 = -0,809 - j 0,5878
      P5 = -0,309 - j 0,9511


5) Reunir as impedâcias normalizadas numa tabela:

É simples, basta multiplicar por dois o valor real de cada polo na ordem dos componentes do esquema da figura 1:





6) Encontrar os valores reais para capacitancia e indutância

L = ((Ln x R) / W) e C = ( Cn / (W x R))

Onde:

      [Ln] - Indutância normalizada;
      [Cn] - Capacitância normalizada;
      [L] - Indutancia real;
      [C] - Capacitância real;
      [R] - Resistência do gerador
      [W] - Frequência de corte em rad/s (frequencia onde o ganho cai 3db)

Onde [W] = 2 x Pi x frequencia -> 2 x 3,14 x 27,255 MHz = 171,25 M rad/s

*** Recomenda-se que a frequencia de corte esteja acima da frequencia que se vai operar para FPB (filtro passa baixa) e abaixo quando estivermos falando de FPA (filtro passa alta)

Cálculando os valores reais para Capacitencia e Indutancia do filtro


Tabela 3 - Valores reais para capacitores e indutores para FPB.

*** Os valores dos capacitores mostrados na tabela já estam com valores comerciais.


7) Verificação parcial dos resultados:
O diagrama de Bode a seguir, mostra o comportamento do ganho do filtro em função da variação da frequência:

Figura 3 - Filtro com valores reais e reposta no diagrama de bode.


Projeto prático de um Filtro Passa Alta (FPA).

no caso de um projeto de um filtro passa-alta, apenas deve-se mudar o formato do circuito como mostrado a abaixo. Os procedimentos de cálculo para os valores dos componetes são os mesmo.



Lembrando que a ordem fica por sua conta, ou seja, aqui usamos 5º ordem, mas nada impede que seja usado o mesmo procedimento para se fazer filtros demias ordem. Lembrando que quanto mais se aumenta a ordem, mais inclinada vai ser a perda acima da frequencia de corte (no caso de FPB) ou abaixo da frequencia de corte (no caso do FPA).

Para se avalair o projeto antes da montagem final, recomendo que no minimo se use o EWB para que se faça a curva de Bode para avaliar a esposta do projeto (como foi feito acima) ou qualquer outro programa de simulação de circuito.


O Ferramental

Antes de prosseguir com as experiências, todo grande cientista precisa de um laboratório para iniciar a sua conquista do mundo (ou do seu metro quadrado merecido).

Listarei aqui algumas ferramentas básicas de software e hardware para que possamos compartilhar as experiências e evoluirmos juntos no tratamento da "atrofia da criação" a que vocês foram expostos durante anos de Excel e relatórios que nunca foram apreciados pelos seus superiores e que agora descansam eternamente no Sharepoint.


Como nosso foco é eletrônica, algumas ferramentas básicas fazem necessário, outras serão opcionais. Mas as tiverem, serão engenheiros um pouco menos desrespeitados no cafezinho. Vamos a elas:

1-SOFTWARES

1.1 -PROTEUS - Com esse programa, o engenheiro oprimido poderá criar e testar seus circuitos. Com a vantagem de gerar a placa de circuito impresso (tema da próxima postagem). Além de possuir ferramentas como oscilocópio, multimetros, amperimetros e outras ferramentas presentes na mesa de um verdadeiro engenheiro romantico que ame sua formação. Outra vantagem éF testar códigos compilados para microcontroladores. Sim, ele roda!



1.2 - PIC C COMPILER / CCS - Esta ferramenta compila de forma bem simples códigos escritos em C para microntroladores da família PIC 12/16/18F. Não é necessária longas horas de estudo do datasheet do componente escolhido. A função Wizard te auxilia nesse trabalho. Se possível, consiga a versão mais atuais, pois as antigas possuem problemas como na geração de interrupções.



1.3 - VISUAL C# 2010 EXPRESS - Compilador C# gratuito da Microsoft para criação de ferramentas visuais. Este compilador será necessário para exemplos de criação de sistemas supervisórios, tema que também abordarei aqui. Ele tem todo o pacote necessário para a criação de programas supervisórios (que acessam a seria do micro) para envio e recebimento de informações. A imagem abaixo é de um programinha meu para leitura do conversor analógico/digital do micro 18F4550.



2 - HARDWARE

2.1 - Kit de desenvolvimento ACEPIC 40N (PIC18F) - Você poderá utilizar qualquer outra placa de desenvolvimento, apenas recomendo esta para que os códigos postados aqui sejam diretamente gravados no PIC e rodem sem maiores adaptações ( disponível em: http://www.acepic.com.br )


2.2 - Gravador e depurador para microcontroladores PIC ACE USB - O nome já denuncia... Este hardware é necessário para executar as gravações do seu código compilado dentro da memória flash do microntrolador. este modelo indicado tem a vantagem de se conectar a placa acima, sem a necessidade de retirar o chip para gravação. agiliza bastante o processo de teste e verificações ( disponível em: http://www.acepic.com.br )


3 - INSTRUMENTAÇÃO

3.1 - MULTIMETRO - Bom, dispensa apresentações. Esta ferramenta é necessária basicamente para medir tensões, corrente e resistência elétrica. Alguns modelos medem indutância e capacitância. Este instrumento é importante para checar continuidade e tensão na placa (porta A/D)


3.2 - OSCILOSCÓPIO - Essa ferramenta para muitos é um gasto alto, para mim um investimento. Necessário para aplicações onde a precisão da geração de pulsos da sua placa é importante. Lembro que para aplicações com microcontroladores, não se exige grandes taxas de amostragens. Já para aplicações que envolvem RF isso é muito importante. Mas é bom pesquisar e entender os requisitos dos sinais que se deseja medir antes de fechar uma compra. Vale lembrar também que existem lojas especializadas no aluguel desse ferramenta.



3.3 - ANALISADOR DE ANTENA - Esse instrumento é indispensável em projetos de antenas. O medido mostrado abaixo já integra a medição da impedância (X e Z) e de SWR. Ferramenta indispensável aos engenheiros oprimidos que desejam gastar boas horas da sua folga dedicando a essa área da engenharia que é quase uma bruxaria.




3.4 - GERADOR DE SINAIS/FUNÇÕES
- Este instrumento nos faz ganhar um bom tempo quando desejamos testar leitura de pulsos ou mesmo quando vamos montar circuitos moduladores. Com ele podemos gerar uma portadora estável e ajusta-lo rapidamente para se adequar ao teste executado.




Abertura

Se você chegou até está página, certamente é um engenheiro formado em uma boa faculdade, com horas de estudo e boa experiência que no final são utilizadas apenas para edições das linhas do Excel ou longos aquivos do project para serem descumpridos na próxima semana pelo seu desmotivado time de trabalho. 

Esse blog resgata a essência do seu talento, um socorro aos que amam a profissão mas que receberam do mercado a triste incumbência de serem apenas mais um residente das grandes corporações aqui no Brasil. 

Alguns ainda tem a ilusão que produzimos industrialmente, mas lembro que nosso país é não potencialmente industrializado. O seu PIB é composto basicamente por SERVIÇOS (micro empresas) e não produção industrial de grande escala.

Compartilharei projeto feitos em casa para sua diversão e realização dos seus projetos pessoais para que possamos a voltar a serem engenheiros de verdade novamente. Além de ser uma oportunidade para trocarmos experiências.

Sou engenheiro formado pela FEI de São Bernardo do Campo, já fui professor na FATEC e atuo a 10 anos área de engenharia automotiva. Portanto boa parte dos exemplos seguirão exemplos aplicados a essa e outras área. 

Entre os assuntos que aqui serão discutidos aqui:
  • Eletrônica
  • Radio transmissões e antena
  • Mecânica e eletrônica automotiva
  • Programação em Visual C#, Labview, Microcontroladores (PIC);
Espero que se divirtam nas horas vagas e quem sabe, iniciem seu próprio negócio. Mas acima de tudo, não percam as esperanças, embora oprimidos no real motivação de nosso títulos, não iremos desistir das reais causas que defendemos ao sermos diplomados: Criar, aplicar e desenvolver novas tecnologia e soluções para o bem estar da humanidade. Esses sim os reais ideais que nos movem como engenheiros. Para nós, a mandioca não foi e nunca será "A MAIOR CONQUISTA DO BRASIL" (Rousseff, Dilma 2015).

Um grande abraço a todos e sempre acreditem no seu potencial.