sexta-feira, 5 de outubro de 2018

Display Siemens HDSP2114S com o MCP23017.

        O Siemens HDSP2114S é um display de matriz de LEDs 7x5 verdes de 8 caracteres que opera em 5V.
Display HDSP2114S visto de cima.
Display HDSP2114S visto de baixo.
Display HDSP2114S visto de lado.
       Assim como o display HPDL-1414 mostrado em um post anterior, este display também usa uma antiquada interface paralela. E novamente, para minhas aplicações, é bem mais útil usar uma interface I²C ou SPI. Para converter a interface paralela do HDSP2114S em I²C foi usado novamente o IC MCP23017 da Microchip. As saídas GPA7~GPA0 são ligadas às entradas D7~D0 do HDSP2114S e as saídas GPB7~GPB0 ligadas às A4~A0, CE, WR e RST.
Esquemático.
        O display HDSP2114S fica no lado superior. Ainda neste lado, está o IC MCP23017 e no lado inferior está um microcontrolador PIC de 8 pinos (como o PIC12F1822 ou PIC12F1840). Tem somente um header para interface I²C. Esta placa também pode ser usada sem o microcontrolador através do header I²C.

Lado inferior da placa, mostrando o microcontrolador e o header I²C.
Lado superior da placa, mostrando o IC MCP32017.
Placa com todos os componentes montados vista de lado. Ficou um sanduíche difícil de montar mas muito compacto.

Display HDSP2114S em ação com um acrílico fumê.
Mostrando a tensão do IC INA219.
Mostrando a corrente do IC INA219.
Sinal do pino CLK I/O do HDSP2114S, usado para sincronizar outras unidades.


terça-feira, 2 de outubro de 2018

Display HPDL-1414 com o MCP23017.

        Em um post anterior, foi mostrado o display HPDL-1414 ligado diretamente a um microcontrolador (PIC16F1933). Este tipo de display usa uma antiquada interface paralela já que na época em que foi lançado era uma interface muito comum. Para minhas aplicações, é bem mais útil usar uma interface I²C ou SPI. Para converter a interface paralela do HPDL-1414 em I²C foi usado o IC MCP23017 da Microchip. Ele possui duas portas de 8 vias: GPA7~GPA0 ligados a D6~D0 do HPDL-1414 e GPB7~GPB0 ligados a A1~A0 e WR de cada HPDL-1414.

Esquemático.
        A placa usa quatro displays HPDL-1414 no lado superior, totalizando 16 caracteres. No lado inferior, estão o IC MCP23017 e um microcontrolador PIC de 8 pinos (como o PIC12F1822 ou PIC12F1840). Tem dois headers: um para interface I²C e outra para programação/debug do microcontrolador. Esta placa pode ser usada também sem o microcontrolador através do header I²C.

Lado superior com os 4 displays HPDL-1414.
Lado inferior com o IC MCP23017 e PIC12F1822. O header branco é a interface I²C e o amarelo a interface de programação.
Placa vista de lado. É difícil montar assim mas fica bem compacto.
Display em ação. Foi fotografado com um acrílico fumê para melhorar a visualização.
Com mais iluminação mostrando o acrílico.
Mostrando tensão e corrente do IC INA219.







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.