sexta-feira, 28 de setembro de 2018

Relógio/Voltímetro para carro.

        Fiz a heresia de não ter som no possante, assim a baia vaga do mesmo foi aproveitada para por dois conversores para 5V com dois conectores USB cada um e no meio, um voltímetro.


Modelo que comprei.

Foto do anúncio com o conversor e voltímetro ligados. Os LEDs dos conversores USB/5V foram trocados por brancos para não destoarem da iluminação original do carro. 
O kit vem parecido com este, mas com espelho de três lugares.

Vista superior da placa do voltímetro.

Vista inferior da placa do voltímetro.
        Preciso de pelo menos três tomadas USB no carro, uma para a câmera veicular, uma para meu celular quando uso GPS e outro para o celular do carona (quem tem mulher sabe como é). Montei tudo usando o conector do som incluso no carro, não precisando fazer nenhuma alteração na fiação original. Tudo funcionando, mas me incomodou o voltímetro: é muito brilhante à noite e faz poucas amostragens por segundo. Parti então para fazer o meu próprio voltímetro, mais preciso e realizando mais amostragens por segundo. O primeiro problema foi o tamanho do display:

Detalhe mostrando o tamanho do display no suporte do voltímetro.

        Precisava de um display de 4 ou 5 dígitos para mostrar a hora, mas o suporte do voltímetro só cabe um display de 3 dígitos. Procurando por displays que coubessem, só consegui um: um bubble display da HP modelo 5082-7405.
Comparação entre o display HP5082-7405 e o do voltímetro.

Cheguei a considerar este display, mas é caríssimo e ficaria muito ruim de mostrar as horas pois só tem 4 caracteres.
Lado inferior da placa.
Lado superior da placa.
Display com sua placa montado no suporte.

Placa conectada ao display.


Esquemático.
        Outro problema que tive foi o gerenciamento de energia, pois para manter a hora, o PIC16F1825 precisa estar ligado na bateria. Para manter o consumo de corrente abaixo de 1mA, ao perceber a ignição desligada, o microcontrolador põe o IC MAX7219 em shutdown e fica em SLEEP, somente acordando a cada meio segundo para contar a hora ou quando a ignição é ligada. Ao ligar a ignição, o firmware mostra a tensão da bateria, independente da última seleção pois é muito útil saber a tensão antes e depois de ligar o motor. Quando a ignição está ligada, o microcontrolador não entra em SLEEP e amostra a tensão 62,5 vezes por segundo, fazendo uma média de 16 amostragens e assim atualizando o display com o valor da tensão 4 vezes por segundo aproximadamente. Depois de 125 segundos, o firmware muda automaticamente para hora. Para alternar entre hora/tensão, pressiona-se o pequeno botão vermelho ao lado do display e para ajustar a hora, pressiona-se por mais de 2 segundos, entrando no modo de ajuste.

Mostrando a hora.
Mostrando a tensão da bateria.

Mostrando a tensão com as luzes noturnas ligadas.

quarta-feira, 19 de setembro de 2018

Placa acionadora de motor trifásico de corrente contínua sem escovas (BLDC Motor) com o JY01.

        Comprei esta placa recentemente baseada no obscuro IC JY01, cujo datasheet está somente em chinês. Ele pode trabalhar com sensores Hall ou sem sensores (sensorless mode), usando a técnica de detecção de contra-força eletromotriz (back-EMF sensing technique) para comutação das fases.
         A placa que comprei veio erroneamente ajustada para usar sensores hall, porém ela vem com os componentes montados para 'sensorless', com exceção do IC LM339. Para funcionar no modo 'sensorless', deve-se soldar este IC e adicionar um resistor SMD ligado ao pino 1. Quando o IC JY01 é energizado, ele verifica a tensão neste pino, se for 0 ou 5V ele assume o modo com sensores Hall, se estiver entre 1 a 4V, ele assume o modo sem sensores. Esta tensão, neste modo, ajusta também o torque inicial, assim soldei provisoriamente um trimpot para ajustar este torque inicial e determinar os valores dos resistores.

Placa vista de cima. O IC JY01 está raspado, mas vendo o anúncio de outras placas iguais pode-se identificá-lo. O conector para os sensores hall foi retirado e foi trocado os dois capacitores perto do conector branco.

Placa vista de baixo onde estão os seis MOSFETs, sem o dissipador de calor que ocupa a toda a área da placa.


         Nesta placa, o IC JY01 aciona as fases do motor através de seis MOSFETs ligados aos seus respectivos acionadores (IC FD2501 ou IR2101). Ele ajusta a velocidade através de uma tensão DC no pino 16 (VR), ligado a um potenciômetro externo. O sinal de rotação está disponível no pino 6 (M). Pode-se inverter o sentido de rotação através do pino 5 (Z/F). O IC JY01 também monitora a corrente através de um resistor shunt ligado ao pino 2 (IS).

JY01 Hall sensor mode.
JY01 Sensorless mode.
Saída do sinal de rotação (pino 6, M). Note que é um sinal ruidoso mas o JY01 os filtra eficientemente.



Saída no pino 10 (BB, lado baixo da fase B).


Saída no pino 10 (BT, lado alto da fase B), com o PWM para controle da velocidade.


Detalhe da mesma saída, detalhando o PWM.





quarta-feira, 12 de setembro de 2018

Driver de Motor DC trifásico sem escovas LB11870 com espelho poligonal.

       Retirei este motor com espelho poligonal de um LASER scanning unit (LSU) de uma impressora LASER. Ele é montado em uma placa metálica com outra placa de circuito impresso colado em cima e usa o IC LB11870, um driver de motor DC trifásico sem escovas.

Placa com o motor. As faces laterais do hexágono são os espelhos (alumínio extremamente polido)

Detalhe do conector e face do hexágono.
       Este IC controla a rotação do motor através de um PLL interno cujo sinal de referência (1~10kHz) vem pelo pino CLK. Para gerar este clock, usei o módulo PWM do PIC12F683 que ainda controla o sinal S/S (Start/Stop control), recebe o sinal LD (Phase Lock state) e controla um LED bicolor para mostrar as condições do motor (laranja para motor parado, verde piscante para motor girando mas fora da velocidade constante e verde contínuo para rotação constante).


Placa com o PIC12F683, LED bicolor e o regulador de 5V, cujos fios brancos são ligados ao conector da placa com o IC LB11870.

Saída PWM do PIC12F683.

Saída de uma das fases do LB11870.
Pinagem do LB11870.
Diagrama interno.

Outra placa retirada de outra impressora mas com a mesma pinagem do conector. Esta usa o IC AN44000A da Panasonic. Não consegui o datasheet deste IC.
Placa vista de lado.









segunda-feira, 10 de setembro de 2018

Teste do sensor de pressão atmosférica HP203B.

        Os sensores de pressão atmosférica da Bosch (BMP180 por exemplo) são muito bons porém requerem cálculos complexos para se chegar no valor final (há várias constantes de compensação), sendo difícil de implementar isso em um microcontrolador básico. Felizmente, há agora os sensores da HopeRF que disponibilizam o resultado pronto com as devidas compensações, sem necessidade de pós-processamento. Testei o HP203B, que tem interface I²C e são disponibilizados em encapsulamento SMD.
        Futuramente, este sensor será incorporado ao relógio com display I²C (ver posts anteriores) para que se tenha uma previsão de chuvas através de um histograma com 80 valores.

HP203B montado na placa visto por cima, note o furo na tampa metálica para permitir a medição de pressão.

HP203B visto por baixo bem como as conexões na placa.

        Para o teste, usei um PIC16F1503 com um display OLED de 128x64 para mostrar os valores de temperatura e pressão, bem como os bits dos registradores de status.

Firmware lendo os valores do HP203B:
ALT: Offset da altitude;
PAH: Limite superior de Pressão/Altitude;
PAM: Limite intermediário de Pressão/Altitude;
PAL: Limite inferior de Pressão/Altitude;
TH: Limite superior de Temperatura;
TM: Limite intermediário de Temperatura;
TL: Limite inferior de Temperatura;
EN: Bits de habilitação dos limites de Temperatura/Pressão/Altitude;
CFG: alguns bits de status e configuração;
TMP: Temperatura (em °C x 100);
PRS: Pressão (em hPa x 100);
        Após o teste com a placa de testes com o PIC16F1503, montei uma placa específica com o PIC12F1840, usando um display de celular antigo (Motorola C115, com interface I²C), implementando um histograma com 80 valores em intervalos de 1/2 hora totalizando 1 2/3 dias, cujos valores ficam entre 1000 a 1031hPa. Com este histograma pode-se acompanhar a variação da pressão atmosférica, que quanto maior a variação decrescente, maior a probabilidade de chuva. De forma inversa, uma variação crescente indica melhora nas condições do tempo.

Placa com o HP203 conectado.
Display com o histograma. Cada pixel é um valor e ao lado é último valor lido sem a parte decimal e menos 1000hPA, ficando assim entre 0 e 31.


Teste do LED SK9822 (clone do APA102).

  O SK9822 é um LED RGB com controlador integrado, um clone do APA102, cuja comunicação é síncrona (Data e Clock), ao contrário dos populares WS2811, WS2812 e seus clones que usam somente um sinal de comunicação. Por usar uma comunicação síncrona, não há problemas de temporização, além de poder usar o hardware de comunicação do microcontrolador.
        Cheguei a testar o WS2812 com o PIC12F1840 com apenas uma unidade, mas as temporizações críticas da comunicação tornam a tarefa bastante difícil. Há o application note AN1606 da Microchip que usa o módulo CLC combinado com o MSSP e PWM para suportar o protocolo do WS2812 via hardware.

Destaco aqui o estudo do Tim's Blog sobre o APA102 e a comparação entre este e o SK9822 e como demostrado pelo mesmo, o protocolo compatível com ambos fica assim:

1. 1 Start Frame de 4 bytes com valor zero (0x00, 0x00, 0x00, 0x00);
2. 1 LED Frame de 4 bytes para cada LED no string consistindo de 1 byte (0xE0+brilho de 5 bits) e 3 bytes de cor (azul, verde e vermelho, nesta ordem);
3. 1 SK9822 Reset Frame de 4 bytes com valor zero (0x00, 0x00, 0x00, 0x00);
4. 1 End Frame de pelo menos n/2 bits de valor 0, onde n é a quantidade de LEDs no string. Na minha aplicação uso 4 bytes com valor 0x00 independente do número de LEDs, limitando assim a quantidade a 64;
Placa montada com 10 LEDs SK9822.
Lado inferior, mostrando o PIC12F1822.
Teste de cores básicas.