Pesquisar este blog

sexta-feira, 20 de novembro de 2020

Calibração de Voltímetros com o AD584

Circuito Integrado AD584


Quando temos alguns multímetros na bancada, depois de algum tempo eles se descalibram e podem fazer medições com um certo erro. O pior é que não saberemos qual faz uma medição correta e qual mede um valor com um certo erro.

Para resolver esse problema é preciso ter um padrão confiável  para fazer a comparação. No caso de tensões em corrente contínua de baixo valor, existe um circuito integrado que fornece valores de tensões padronizadas com uma precisão suficiente para uma calibração e comparação dos multímetros em modo voltímetro CC.

O AD584 da Analog Devices é um circuito integrado usado como referência de tensão, e pode fornecer valores de 10 V, 7.5 V, 5 V e 2.5 V com precisão de 0,3% graças à calibração por laser na fábrica. Para sua utilização um circuito muito simples é necessário, basta alimentá-lo com 15 V estáveis e um capacitor de 10 nF a 100 nF entre os pinos 6 e 7. As tensões são obtidas jumpeando alguns pinos conforme a tabela abaixo:

























Meu multímetro mais novo é um Aneng True RMS e de fato ele está bem calibrado, mediu os três valores com exatidão:

 


A seguir testei o multímetro DT830B  bem velhinho mas ainda bem funcional. Ele apesar do tempo de uso apresentou valores aceitáveis e sem necessidade de uma calibração:


O próximo é um SANWA PM3 de bolso, que também é novo e está bem calibrado:


Agora um multímetro analógico FT360 que eu tive que ajustar um trimpot para que a medição ficasse correta. Há apenas um trimpot que fica em série com o galvanômetro, de forma que o ajuste é bem simples:



Feito o ajuste, as medidas ficaram bem precisas:




Outro multímetro analógico que eu tenho há 35 anos que apresentou medidas um pouco abaixo, mas  dentro do aceitável e como eu não achei um trimpot para ajuste vai ficar assim mesmo:







O teste com um FLUKE 111 True RMS também teve valores bem precisos:



Por fim testei meu voltímetro eletrônico de alta resistência já mostrado neste blog. Também teve medidas aceitáveis:




A montagem do ci foi em protoboard e alimentado com 15 V.




















segunda-feira, 11 de maio de 2020

Grilo Eletrônico


Um pequeno e simples circuito que fiz há muito tempo. Ele usa um fototransistor para detetar se há luz ambiente e quando fica escuro ele habilita que o PIC comece a emitir sons de um grilo, em períodos de tempo aleatórios. No caso de alguém acender a luz, ele suspende o som de grilo.  Um bom brinquedinho para as crianças.
O buzzer deve ser daqueles que emite som só com a alimentação, sem precisar de um oscilador. A combinação com os pulsos vindos do PIC é que formam o som parecido com o cri-cri de grilos.  

Código para gravar no PIC:
:100000006928210820040319A00A8030201AA106BB
:100010002019A106A018A106210DA00DA10D64288C
:10002000A301A200FF30A207031CA307031C64283E
:100030000330A100DF301E201228A101E83EA000FD
:10004000A109FC30031C2728A00703182428A007B7
:100050006400A10F242820182D28A01C312800009E
:1000600031280800A20001303828A20006303828C4
:10007000A80023082102031D3F2822082002043083
:1000800003180130031902302805031DFF306428CE
:10009000A501A4011030A600210DA40DA50D220874
:1000A000A4022308031C230FA50203185E282208BC
:1000B000A40723080318230FA5070310A00DA10D03
:1000C000A60B4C28200864288313031383126400B2
:1000D00008000730990083162F30850083128501B0
:1000E000B801B9016400851A76288F203A08A0006B
:1000F0003B08A10001202008BA002108BB003A08F3
:10010000A0003B08A1000A30A200A3014820BC00C7
:100110002108BD003D08A3003C08112070283A08C2
:10012000A0003B08A10001202008BA002108BB0064
:100130003A08A0003B08A100EA30A3006030352057
:10014000031DA6282730A300103011200330A30080
:10015000E83011200130B800B9013808A000390892
:10016000A100A30128303220031DC028051603304A
:100170001020051204301020B80A0319B90FAD2859
:08018000051208006300C2280B
:02400E008C3FE5
:00000001FF




sábado, 22 de fevereiro de 2020

Monitor de Temperatura e Uso do Processador do Raspberry Pi


Há muito tempo eu tinha montado uma plaquinha com 3 displays de 7 segmentos e um tecladinho para usar com projetos com PICs.  Mas eles também servem para ser usados com outras plataformas, como o Arduíno e o Raspberry Pi.  
Eu uma revista inglesa eu vi um projeto interessante para usar um display OLED para monitorar a temperatura, o uso de processamento e a memória do Raspberry Pi.  Eu até tenho o display OLED, mas resolvi usar um display de leds para fazer esse monitoramento.
A linguagem utilizada é o Python, que é bem fácil de aprender e programar. A parte mais importante é saber quais módulos importar para ter algumas funções que desempenhem o trabalho.  Dois módulos são importantes nesse caso: o "psutil" e o "gpiozero", além do "time".  O primeiro vai permitir que se leia o nível de processamento do Raspberry, e o módulo gpiozero facilita para acionar os segmentos e os displays através das portas GPIO do Raspberry.

O esquema da plaquinha do display é o seguinte:
É importante lembrar que as portas do Raspberry tem capacidade de corrente bem menor do que os PICs ou do Arduíno.  Uma GPIO do Pi pode fornecer até 16mA individualmente e até 50mA somadas todas as portas.  Além disso a tensão delas é de 3,3V.  Considerando que a tensão sobre o segmento led seja de 1,7V e a tensão Vce do transistor chaveador esteja por volta de 0,3V, a corrente por porta chegaria a um valor aproximado de 1,3V/330ohms = 4mA por porta/segmento, o que está bem confortável.  Como os transistores são PNP e os displays são anodo comum, os acionamentos se farão com nível lógico baixo nas portas GPIO.  Além disso, os displays serão multiplexados.

Uma foto da minha plaquinha e tecladinho:

 Aqui a placa com mais detalhe:
Os resistores estão pelo lado de baixo e são SMDs 1206.

Para interligar com o Pi, eu uso aqueles fios com conectores fêmea nas duas pontas, vendidos já prontos e comuns nos kits de Arduíno.

Agora a listagem do programa em Python 3:

##################################################################
from gpiozero import Button, LED
from time import sleep
import psutil

segma = LED(14)      #designa as portas para cada segmento
segmb = LED(15)
segmc = LED(18)
segmd = LED(23)
segme = LED(24)
segmf = LED(25)
segmg = LED(8)
segmp = LED(7)

anod1 = LED(11)    #designa as portas para chavear os displays
anod2 = LED(9)
anod3 = LED(10)

anod1.on()      #desliga os displays
anod2.on()
anod3.on()

tempo = 0.005    #tempo de acionamento de cada display 5ms
unidade = 0
dezena = 0
centena = 0

def digito(x): #função para codificar os segmentos de acordo com o digito
   
if x == 0:
        segma.off()
        segmb.off()
        segmc.off()
        segmd.off()
        segme.off()
        segmf.off()
        segmg.on()

    elif x == 1:
        segma.on()
        segmb.off()
        segmc.off()
        segmd.on()
        segme.on()
        segmf.on()
        segmg.on()       
       
    elif x == 2:
        segma.off()
        segmb.off()
        segmc.on()
        segmd.off()
        segme.off()
        segmf.on()
        segmg.off() 

    elif x == 3:
        segma.off()
        segmb.off()
        segmc.off()
        segmd.off()
        segme.on()
        segmf.on()
        segmg.off()
       
    elif x == 4:
        segma.on()
        segmb.off()
        segmc.off()
        segmd.on()
        segme.on()
        segmf.off()
        segmg.off()
       
    elif x == 5:
        segma.off()
        segmb.on()
        segmc.off()
        segmd.off()
        segme.on()
        segmf.off()
        segmg.off() 
       
    elif x == 6:
        segma.off()
        segmb.on()
        segmc.off()
        segmd.off()
        segme.off()
        segmf.off()
        segmg.off()
       
    elif x == 7:
        segma.off()
        segmb.off()
        segmc.off()
        segmd.on()
        segme.on()
        segmf.on()
        segmg.on() 


    elif x == 8:
        segma.off()
        segmb.off()
        segmc.off()
        segmd.off()
        segme.off()
        segmf.off()
        segmg.off()
       
    elif x == 9:
        segma.off()
        segmb.off()
        segmc.off()
        segmd.off()
        segme.on()
        segmf.off()
        segmg.off()
       
def scan():   #faz a multiplexação dos displays
   
digito(unidade)
    anod1.off()
    sleep(tempo)
    anod1.on()
    digito(dezena)
    segmp.off()
   
if dezena == 0 and centena == 0:
        anod2.on()
    else:
        anod2.off()
    sleep(tempo)
    anod2.on()
    segmp.on()
    digito(centena)
    if centena == 0:
        anod3.on()
    else:
        anod3.off()
    sleep(tempo)
    anod3.on()

while True:
    #print(centena,dezena,unidade)    #mostra os valores no shell
   
for i in range(50):
        scan()         #chama a multiplexação
    #obtem o valor da temperatura do processador
    f=open("/sys/class/thermal/thermal_zone0/temp","r")
    t=f.readline()
    t=float(t)
    t=round(t/1000,2)
    # mostra a temperatura no shell
    print(t)
   
centena = int(t/10)
    dezena = int(t-(10*centena))
    unidade = 10*(t-(10*centena)-dezena)
    for i in range(50):
       
scan()  #chama a multiplexação
    # obtem o uso de processamento da CPU
    cpu=psutil.cpu_percent(interval=1)
    cpu=round(cpu)
   
print(cpu)   # mostra o uso no shell
    centena = int(cpu/100)
    dezena = int((cpu-(centena*100))/10)
    unidade = cpu - (10*dezena) - (100*centena)

################################################################

 O programa em Python lê o valor do sensor de temperatura interno do processador e mostra o valor no display em °C  (o valor de 3 dígitos), em seguida obtém  o valor porcentual de uso do processador (de 0 a 100) e mostra no display.  Não implementei o valor de uso da memória RAM.

No programa Python é importante se ater ao indentamento correto de cada linha (a tabulação é de 4 espaços por vez).

Aqui um vídeo mostrando o monitoramento da temperatura e do processamento:

https://youtu.be/5Pkx20tYdWs

Houve algum problema no acionamento do ponto decimal, portanto a temperatura não é de 444°C, mas de 44.4°C.

E o vídeo com o Raspberry rodando Minecraft:

https://youtu.be/NlfPD95fYDw

Eu rodei o programa e a placa ligados a um Raspberry Pi 1 modelo B, com 512M de RAM.  Deve rodar sem problemas nas versões mais modernas do Raspberry.





quinta-feira, 12 de dezembro de 2019

Código Original do Computador Nestor

Para quem for montar o circuito original do Nestor da revista Nova Eletrônica, segue a listagem hexadecimal do código a ser gravado na EPROM 2716.

:020000040000FA
:100000000620804F305E963A47D44520140439DAF2
:10001000A201512245910C292932D04049C14806FC
:1000200020B1016B53081D501107B292D500C502D3
:10003000B2B807820062C02E97E822E1800001106A
:100040000620804F305E963A47D44520140439DAB2
:10005000A201512245910C292932D04049C14806BC
:1000600020B1016B53081D501107B292D500C50293
:10007000B2B807820062C02E97E822E1800001102A
:100080000620804F305E963A47D44520140439DA72
:10009000A201512245910C292932D04049C148067C
:1000A00020B1016B53081D501107B292D500C50253
:1000B000B2B807820062C02E97E822E180000110EA
:1000C0000620804F305E963A47D44520140439DA32
:1000D000A201512245910C292932D04049C148063C
:1000E00020B1016B53081D501107B292D500C50213
:1000F000B2B807820062C02E97E822E180000110AA
:100100000620804F305E963A47D44520140439DAF1
:10011000A201512245910C292932D04049C14806FB
:1001200020B1016B53081D501107B292D500C502D2
:10013000B2B807820062C02E97E822E18000011069
:100140000620804F305E963A47D44520140439DAB1
:10015000A201512245910C292932D04049C14806BB
:1001600020B1016B53081D501107B292D500C50292
:10017000B2B807820062C02E97E822E18000011029
:100180000620804F305E963A47D44520140439DA71
:10019000A201512245910C292932D04049C148067B
:1001A00020B1016B53081D501107B292D500C50252
:1001B000B2B807820062C02E97E822E180000110E9
:1001C0000620804F305E963A47D44520140439DA31
:1001D000A201512245910C292932D04049C148063B
:1001E00020B1016B53081D501107B292D500C50212
:1001F000B2B807820062C02E97E822E180000110A9
:100200000620804F305E963A47D44520140439DAF0
:10021000A201512245910C292932D04049C14806FA
:1002200020B1016B53081D501107B292D500C502D1
:10023000B2B807820062C02E97E822E18000011068
:100240000620804F305E963A47D44520140439DAB0
:10025000A201512245910C292932D04049C14806BA
:1002600020B1016B53081D501107B292D500C50291
:10027000B2B807820062C02E97E822E18000011028
:100280000620804F305E963A47D44520140439DA70
:10029000A201512245910C292932D04049C148067A
:1002A00020B1016B53081D501107B292D500C50251
:1002B000B2B807820062C02E97E822E180000110E8
:1002C0000620804F305E963A47D44520140439DA30
:1002D000A201512245910C292932D04049C148063A
:1002E00020B1016B53081D501107B292D500C50211
:1002F000B2B807820062C02E97E822E180000110A8
:100300000620804F305E963A47D44520140439DAEF
:10031000A201512245910C292932D04049C14806F9
:1003200020B1016B53081D501107B292D500C502D0
:10033000B2B807820062C02E97E822E18000011067
:100340000620804F305E963A47D44520140439DAAF
:10035000A201512245910C292932D04049C14806B9
:1003600020B1016B53081D501107B292D500C50290
:10037000B2B807820062C02E97E822E18000011027
:100380000620804F305E963A47D44520140439DA6F
:10039000A201512245910C292932D04049C1480679
:1003A00020B1016B53081D501107B292D500C50250
:1003B000B2B807820062C02E97E822E180000110E7
:1003C0000620804F305E963A47D44520140439DA2F
:1003D000A201512245910C292932D04049C1480639
:1003E00020B1016B53081D501107B292D500C50210
:1003F000B2B807820062C02E97E822E180000110A7
:100400000620804F305E963A47D44520140439DAEE
:10041000A201512245910C292932D04049C14806F8
:1004200020B1016B53081D501107B292D500C502CF
:10043000B2B807820062C02E97E822E18000011066
:100440000620804F305E963A47D44520140439DAAE
:10045000A201512245910C292932D04049C14806B8
:1004600020B1016B53081D501107B292D500C5028F
:10047000B2B807820062C02E97E822E18000011026
:100480000620804F305E963A47D44520140439DA6E
:10049000A201512245910C292932D04049C1480678
:1004A00020B1016B53081D501107B292D500C5024F
:1004B000B2B807820062C02E97E822E180000110E6
:1004C0000620804F305E963A47D44520140439DA2E
:1004D000A201512245910C292932D04049C1480638
:1004E00020B1016B53081D501107B292D500C5020F
:1004F000B2B807820062C02E97E822E180000110A6
:100500000620804F305E963A47D44520140439DAED
:10051000A201512245910C292932D04049C14806F7
:1005200020B1016B53081D501107B292D500C502CE
:10053000B2B807820062C02E97E822E18000011065
:100540000620804F305E963A47D44520140439DAAD
:10055000A201512245910C292932D04049C14806B7
:1005600020B1016B53081D501107B292D500C5028E
:10057000B2B807820062C02E97E822E18000011025
:100580000620804F305E963A47D44520140439DA6D
:10059000A201512245910C292932D04049C1480677
:1005A00020B1016B53081D501107B292D500C5024E
:1005B000B2B807820062C02E97E822E180000110E5
:1005C0000620804F305E963A47D44520140439DA2D
:1005D000A201512245910C292932D04049C1480637
:1005E00020B1016B53081D501107B292D500C5020E
:1005F000B2B807820062C02E97E822E180000110A5
:100600000620804F305E963A47D44520140439DAEC
:10061000A201512245910C292932D04049C14806F6
:1006200020B1016B53081D501107B292D500C502CD
:10063000B2B807820062C02E97E822E18000011064
:100640000620804F305E963A47D44520140439DAAC
:10065000A201512245910C292932D04049C14806B6
:1006600020B1016B53081D501107B292D500C5028D
:10067000B2B807820062C02E97E822E18000011024
:100680000620804F305E963A47D44520140439DA6C
:10069000A201512245910C292932D04049C1480676
:1006A00020B1016B53081D501107B292D500C5024D
:1006B000B2B807820062C02E97E822E180000110E4
:1006C0000620804F305E963A47D44520140439DA2C
:1006D000A201512245910C292932D04049C1480636
:1006E00020B1016B53081D501107B292D500C5020D
:1006F000B2B807820062C02E97E822E180000110A4
:100700000620804F305E963A47D44520140439DAEB
:10071000A201512245910C292932D04049C14806F5
:1007200020B1016B53081D501107B292D500C502CC
:10073000B2B807820062C02E97E822E18000011063
:100740000620804F305E963A47D44520140439DAAB
:10075000A201512245910C292932D04049C14806B5
:1007600020B1016B53081D501107B292D500C5028C
:10077000B2B807820062C02E97E822E18000011023
:100780000620804F305E963A47D44520140439DA6B
:10079000A201512245910C292932D04049C1480675
:1007A00020B1016B53081D501107B292D500C5024C
:1007B000B2B807820062C02E97E822E180000110E3
:1007C0000620804F305E963A47D44520140439DA2B
:1007D000A201512245910C292932D04049C1480635
:1007E00020B1016B53081D501107B292D500C5020C
:1007F000B2B807820062C02E97E822E180000110A3
:100800000620804F305E963A47D44520140439DAEA
:10081000A201512245910C292932D04049C14806F4
:1008200020B1016B53081D501107B292D500C502CB
:10083000B2B807820062C02E97E822E18000011062
:100840000620804F305E963A47D44520140439DAAA
:10085000A201512245910C292932D04049C14806B4
:1008600020B1016B53081D501107B292D500C5028B
:10087000B2B807820062C02E97E822E18000011022
:100880000620804F305E963A47D44520140439DA6A
:10089000A201512245910C292932D04049C1480674
:1008A00020B1016B53081D501107B292D500C5024B
:1008B000B2B807820062C02E97E822E180000110E2
:1008C0000620804F305E963A47D44520140439DA2A
:1008D000A201512245910C292932D04049C1480634
:1008E00020B1016B53081D501107B292D500C5020B
:1008F000B2B807820062C02E97E822E180000110A2
:100900000620804F305E963A47D44520140439DAE9
:10091000A201512245910C292932D04049C14806F3
:1009200020B1016B53081D501107B292D500C502CA
:10093000B2B807820062C02E97E822E18000011061
:100940000620804F305E963A47D44520140439DAA9
:10095000A201512245910C292932D04049C14806B3
:1009600020B1016B53081D501107B292D500C5028A
:10097000B2B807820062C02E97E822E18000011021
:100980000620804F305E963A47D44520140439DA69
:10099000A201512245910C292932D04049C1480673
:1009A00020B1016B53081D501107B292D500C5024A
:1009B000B2B807820062C02E97E822E180000110E1
:1009C0000620804F305E963A47D44520140439DA29
:1009D000A201512245910C292932D04049C1480633
:1009E00020B1016B53081D501107B292D500C5020A
:1009F000B2B807820062C02E97E822E180000110A1
:100A00000620804F305E963A47D44520140439DAE8
:100A1000A201512245910C292932D04049C14806F2
:100A200020B1016B53081D501107B292D500C502C9
:100A3000B2B807820062C02E97E822E18000011060
:100A40000620804F305E963A47D44520140439DAA8
:100A5000A201512245910C292932D04049C14806B2
:100A600020B1016B53081D501107B292D500C50289
:100A7000B2B807820062C02E97E822E18000011020
:100A80000620804F305E963A47D44520140439DA68
:100A9000A201512245910C292932D04049C1480672
:100AA00020B1016B53081D501107B292D500C50249
:100AB000B2B807820062C02E97E822E180000110E0
:100AC0000620804F305E963A47D44520140439DA28
:100AD000A201512245910C292932D04049C1480632
:100AE00020B1016B53081D501107B292D500C50209
:100AF000B2B807820062C02E97E822E180000110A0
:100B00000620804F305E963A47D44520140439DAE7
:100B1000A201512245910C292932D04049C14806F1
:100B200020B1016B53081D501107B292D500C502C8
:100B3000B2B807820062C02E97E822E1800001105F
:100B40000620804F305E963A47D44520140439DAA7
:100B5000A201512245910C292932D04049C14806B1
:100B600020B1016B53081D501107B292D500C50288
:100B7000B2B807820062C02E97E822E1800001101F
:100B80000620804F305E963A47D44520140439DA67
:100B9000A201512245910C292932D04049C1480671
:100BA00020B1016B53081D501107B292D500C50248
:100BB000B2B807820062C02E97E822E180000110DF
:100BC0000620804F305E963A47D44520140439DA27
:100BD000A201512245910C292932D04049C1480631
:100BE00020B1016B53081D501107B292D500C50208
:100BF000B2B807820062C02E97E822E1800001109F
:100C00000620804F305E963A47D44520140439DAE6
:100C1000A201512245910C292932D04049C14806F0
:100C200020B1016B53081D501107B292D500C502C7
:100C3000B2B807820062C02E97E822E1800001105E
:100C40000620804F305E963A47D44520140439DAA6
:100C5000A201512245910C292932D04049C14806B0
:100C600020B1016B53081D501107B292D500C50287
:100C7000B2B807820062C02E97E822E1800001101E
:100C80000620804F305E963A47D44520140439DA66
:100C9000A201512245910C292932D04049C1480670
:100CA00020B1016B53081D501107B292D500C50247
:100CB000B2B807820062C02E97E822E180000110DE
:100CC0000620804F305E963A47D44520140439DA26
:100CD000A201512245910C292932D04049C1480630
:100CE00020B1016B53081D501107B292D500C50207
:100CF000B2B807820062C02E97E822E1800001109E
:100D00000620804F305E963A47D44520140439DAE5
:100D1000A201512245910C292932D04049C14806EF
:100D200020B1016B53081D501107B292D500C502C6
:100D3000B2B807820062C02E97E822E1800001105D
:100D40000620804F305E963A47D44520140439DAA5
:100D5000A201512245910C292932D04049C14806AF
:100D600020B1016B53081D501107B292D500C50286
:100D7000B2B807820062C02E97E822E1800001101D
:100D80000620804F305E963A47D44520140439DA65
:100D9000A201512245910C292932D04049C148066F
:100DA00020B1016B53081D501107B292D500C50246
:100DB000B2B807820062C02E97E822E180000110DD
:100DC0000620804F305E963A47D44520140439DA25
:100DD000A201512245910C292932D04049C148062F
:100DE00020B1016B53081D501107B292D500C50206
:100DF000B2B807820062C02E97E822E1800001109D
:100E00000620804F305E963A47D44520140439DAE4
:100E1000A201512245910C292932D04049C14806EE
:100E200020B1016B53081D501107B292D500C502C5
:100E3000B2B807820062C02E97E822E1800001105C
:100E40000620804F305E963A47D44520140439DAA4
:100E5000A201512245910C292932D04049C14806AE
:100E600020B1016B53081D501107B292D500C50285
:100E7000B2B807820062C02E97E822E1800001101C
:100E80000620804F305E963A47D44520140439DA64
:100E9000A201512245910C292932D04049C148066E
:100EA00020B1016B53081D501107B292D500C50245
:100EB000B2B807820062C02E97E822E180000110DC
:100EC0000620804F305E963A47D44520140439DA24
:100ED000A201512245910C292932D04049C148062E
:100EE00020B1016B53081D501107B292D500C50205
:100EF000B2B807820062C02E97E822E1800001109C
:100F00000620804F305E963A47D44520140439DAE3
:100F1000A201512245910C292932D04049C14806ED
:100F200020B1016B53081D501107B292D500C502C4
:100F3000B2B807820062C02E97E822E1800001105B
:100F40000620804F305E963A47D44520140439DAA3
:100F5000A201512245910C292932D04049C14806AD
:100F600020B1016B53081D501107B292D500C50284
:100F7000B2B807820062C02E97E822E1800001101B
:100F80000620804F305E963A47D44520140439DA63
:100F9000A201512245910C292932D04049C148066D
:100FA00020B1016B53081D501107B292D500C50244
:100FB000B2B807820062C02E97E822E180000110DB
:100FC0000620804F305E963A47D44520140439DA23
:100FD000A201512245910C292932D04049C148062D
:100FE00020B1016B53081D501107B292D500C50204
:100FF000B2B807820062C02E97E822E1800001109B
:00000001FF


segunda-feira, 7 de outubro de 2019

Driver para Motores A4988


Há um tempo eu ganhei duas plaquinhas com o driver de motor A4988 da Allegro que facilita enormemente o uso de motores de passo, sem precisar fazer uma programação voltada para acionar as bobinas em sequência correta. Com esse driver, basta selecionar o microstepping desejado, a direção do motor e enviar os pulsos. E ele ainda aceita níveis lógicos de 5V de 3.3V, facilitando tanto o uso por Arduinos como Raspberry Pi.

As dimensões da plaquinha são reduzidas e já vem com duas fileiras de barras de pinos, facilitando o uso com protoboard. Segundo a datasheet, o driver permite o controle de altas correntes (2A) e mesmo com o tamanho reduzido, não esquenta muito (apesar do dissipador pequeno).

Veja como pode ser o interfaceamento com um microcontrolador:


Mas o acionamento do driver e do motor de passo não precisa de um microcontrolador (ou Arduino ou RPI).  Basta uma fonte de pulsos (eu usei um simples 555 em modo astável) e fornecer os níveis lógicos adequados para os pinos RESET, ENABLE, DIR (direção), MS!-3 (que definem o microstepping) e jogar os pulsos vindos do 555 no pino STEP.  

O vídeo com a montagem usando o 555:





quinta-feira, 29 de agosto de 2019

Fonte de Alimentação para Raspberry Pi

Eu estava com problemas para usar meus Raspberry Pis por causa da alimentação deles. Como eu não comprei uma fonte apropriada e original, pois diziam que os carregadores de celular poderiam funcionar, comecei a ter instabilidade no funcionamento das plaquinhas, sem falar no aparecimento inevitável do "raiozinho" amarelo no canto superior direito da tela (no Raspbian).  A causa é que apesar de pequeno, o Raspberry Pi consome uma corrente considerável a 5V.  E como ele é alimentado na maioria das vezes pela porta USB micro, muitas vezes o cabo usado tem uma resistência (ida e volta) que gera uma queda de tensão na alimentação da plaquinha, causando a instabilidade e reboot.

É recomendado que a fonte de alimentação tenha 5,25Vdc de tensão e forneça pelo menos 2A de corrente (3A no caso do novo Pi4). As portas USB normalmente fornecem 5V, talvez os 0,25V adicionais sejam para compensar as perdas no cabo. Como essa tensão não é comum nos reguladores lineares (ex. 7805), a alternativa seria fazer uma fonte com um regulador de tensão ajustável como o LM317T. Só que o LM317T só fornece até 1,5A (o 7805 só 1A). Existe a versão de 3A do LM317T que é o LM350T, mas o desperdício de energia em forma de calor seria muito grande e exigiria um dissipador enorme.  Um amigo (Eduardo) sugeriu usar os reguladores chaveados. Eu já usava um regulador LM2576T de 5V para alimentar os protótipos em protoboard.  O LM2576T tem uma versão ajustável cuja tensão de saída é programada por dois resistores externos. E o melhor de tudo é que ele fornece até 3A de corrente.

Pra obter os 5,25Vdc na saída, eu calculei que os resistores deveriam ser de 3300 ohms e 1000 ohms.
A fórmula é:  

Vout = Vref x (1 + R2/R1)     Sendo que Vref=1,23V   e R1 maior ou igual a 1000 ohms.

Assim:  Vout =  1,23V x (1 + 3300/1000) = 5,29V     um pouquinho a mais.

No caso, basta escolher um resistor de 3300 ohms com valor um pouco abaixo e um de 1000 ohms com valor um pouco acima (por causa das tolerâncias). Por exemplo, usar um de 3290 e outro de 1010 ohms, deixa a tensão de saída mais perto dos 5,25V.  Embora isso não seja crítico porque a tensão  vai ser derrubada por causa da perda no cabo, quem for preciosista pode selecionar os resistores mais acertados. Eu pensei em usar um trimpot, mas fiquei com medo de que uma mexida sem querer, possa alterar o valor e depois queimar o Raspberry Pi.

Um componente chato pra se usar com esse regulador é o indutor. Mas como ele não é muito crítico, eu usei um de 400uH que eu tinha, e ele funcionou sem problemas.  O LM2576 funciona com chaveamento a 52kHz e é um regulador tipo Buck (redutor de tensão com aumento da corrente de saída).

O circuito é este:


Eu optei por poder entrar com alimentação AC (transformador de 12Vac-0-12Vac) ou uma fonte de tensão de 12Vdc a 15Vdc 1A de parede que é muito comum de se achar.  Na saída coloquei um borne de parafusos e também um conector fêmea USB A duplo para ligar os cabos USB para o Raspberry Pi.

A montagem eu fiz em uma plaquinha de 10 x 5 cm, face simples, desenhada a mão mesmo.





No teste, usei uma carga de 1,66 ohms (dois resistores de 4 ohms em paralelo com um de 10 ohms) para consumir perto dos 3A.  O consumo foi de 2,8A e a tensão na fonte ficou em 5,14Vdc.  Depois no teste com o Raspberry Pi 3, usei até o meu cabo USB mais longo de 2m e a tensão medida no barramento da plaquinha do Pi3 foi de 5,05Vdc (com teclado, mouse, wifi, Bluetooth tudo ligado e rodando programa Python), com mínimo de 4,90Vdc no boot.




quarta-feira, 10 de outubro de 2018

Osciloscópio com Matriz de Leds


Há muitos anos eu achei um artigo da revista Popular Electronics de novembro de 1996, onde havia um projeto de osciloscópio digital. O cerne do projeto era um baseado em um microcontrolador PIC 16C71, um dos primeiros da Microchip a ter conversores analógico-digitais. O PIC realizava a conversão de um sinal analógico para 8 bits, que em seguida eram encaminhadas através de uma porta paralela de PC (a usada em impressoras paralelas) e processadas por um software (em MS-DOS) para apresentar a plotagem na tela do PC.

Pois bem, eu redesenhei o layout da placa e montei o projeto, com algumas alterações: eu usei o PIC 16C711 que é muito parecido com o 16C71, alterando algumas linhas do código em assembly fornecido. Entretanto, o osciloscópio não funcionou. A parte do software no PC se mostrou não funcional e assim por muitos anos guardei a plaquinha.

Mas havia outro projeto de eletrônica que sempre me deu vontade de fazer, que era um osciloscópio de matriz de leds. Recentemente adquiri dois displays de matriz de leds de 8x8.  A maioria dos projetos que se encontra na internet usa os cis LM3914 que é um acionador de leds tipo VU, e contadores Johnson CD4017.  Eles são fáceis de se achar e conseguem cada um acionar 10 saídas (portanto 10 linhas para o LM3914 e 10 colunas para o CD4017).  O LM3914  liga uma de suas 10 saídas de acordo com o nível de tensão na sua entrada, enquanto que o CD 4017 faz ligar uma coluna por vez, fazendo a varredura horizontal da matriz de leds.  A maioria dos projetos não tem ajuste de trigger (disparo da varredura), o que torna a visualização da forma de onda instável e difícil de parar na tela.

Mas, os dois cis tornam difícil a utilização dos meus displays  (vai sobrar ou faltar saídas de acionamento), além disso, os displays são mais fáceis de se usar se estiverem lado a lado e não empilhados. Logo, a minha tela seria mais viável no formato 8 linhas x 16 colunas.

Pensei então em aproveitar a plaquinha do projeto com o PIC para fazer a conversão e acionar as linhas dos displays.  Haveria então a possibilidade do PIC realizar a conversão e acionar apenas uma das linhas do display a cada coluna, ele mesmo enviar o clock para a varredura horizontal e realizar o trigger da varredura, sincronizando o sinal automaticamente e estabilizar a visualização do sinal na matriz.

Só que usei agora um PIC 16F819, que é mais moderno que o 16C711 (que era OTP - programável uma vez) por um PIC que tem memória de programa FLASH, o que facilita de sobremaneira o desenvolvimento e teste do programa.  Ao invés de o PIC enviar 8 bits (o que significava 256 pontos de resolução vertical), agora o 16F819 apenas lê o sinal de entrada e aciona apenas uma das 8 saídas ligadas às linhas dos displays. O conversor aceita de 0 a +5V na entrada, Ou seja, cada linha representa uma faixa de tensão de 5/8 = 0,625V.  O 16F819 tem conversores de 10 bits, mas a conversão é feita em 8 bits,  o que significa 256 valores, assim cada faixa de 0,625V representam 32 valores na conversão (256/8).

O esquema é o seguinte:




Cada vez que o PIC faz uma conversão, ele também envia um pulso para que a varredura horizontal avance uma coluna (duas opções: 1ms  / led e 100us / led).  Como esse PIC tem poucas portas, há a necessidade de circuitos auxiliares para fazer a varredura horizontal: um contador binário de 4 bits  74197, e dois decodificadores de 3 para 8 linhas  74138.  O contador recebe os pulsos do PIC e conta de 0 a 15 (ou seja as 16 colunas), onde 3 linhas menos significativas vão endereçar as saídas dos 74138, e o bit mais significativo do contador habilita ou desabilita cada um dos 74138.
Por fim, o PIC realiza o trigger automático, através do monitoramento de uma nova passagem por zero (na verdade passagem de 2,5V) após a varredura chegar na última coluna.  Ele fica esperando o evento e quando a passagem ocorre, ele envia um reset para o contador e recomeça o envio dos pulsos para contagem da varredura.

O condicionamento do sinal de entrada é o do projeto original da revista.  O sinal analógico entra em um divisor de tensão formado por resistores (no total 1M ohm que é a resistência de entrada). Há 3 faixas possíveis de entrada de sinal: 10Vpp, 25Vpp e 50Vpp.  No caso de 10Vpp, o sinal é dividido por 2, o que fornece até 5Vpp para um amplificador operacional LF347, que soma o sinal com um offset de 2,5Vdc para que a entrada do PIC receba um sinal não negativo e dentro da faixa de 0 a +5Vdc.  A entrada do PIC tem um zener de 5,1V para proteção.

Originalmente, o projeto da revista era alimentado com apenas uma fonte de tensão de +9V (bateria de 9V ou fonte de alimentação).  Um ci ICL7662 convertia os +9V para fornecer -9V para que o LF347 tenha fonte simétrica, e mais dois cis 78L05 e 79L05 para fornecer +5V (para o PIC) e -5V para o ajuste de offset.

Esse circuito serve apenas para brincadeira e tem um visual muito legal.  A varredura horizontal é de 1ms por coluna, o que permite apenas a visualização de sinais de até poucas centenas de hertz.  Veja o resultado:

A matriz de leds e os cis TTL foram montados na protoboard, enquanto que o PIC e o resto do circuito está na plaquinha antiga, ligada pelos fios na parte inferior da foto.

Aqui dois vídeos demonstrando o funcionamento. O primeiro vídeo está sem o autotrigger, e o segundo já com o autotrigger:



Lista de componentes:
PIC 16F819
Cristal de 16MHz
2 capacitores de 15pF
6 capacitores de 100nF
3 capacitores de 10uF
2 capacitores de 1uF
4 resistores de 100k
2 resistores de 1M
9 resistores de 1k
2 resistores de 2k2
1 resistor de 1k5
1 resistor de 1,82k (ou 1k5 + 120R)
1 trimpot de 1k
1 chave 1 pólo 3 posições
1 ci 74197
2 cis 74138
1 ci LF347
1 ci 78L05
1 ci 79L05
1 diodo zener 5,1V

A listagem do firmware para o PIC (arquivo HEX):

:100000004828A000A00DA00D200D383981389F0090
:100010000030A1001E3013201F151F190D28A1014B
:100020001E084328A101FB3EA000A109FF30031CCC
:100030001C28A00703181928A0076400A10F19287D
:1000400000000800A101A301A20001302C28A10199
:10005000A301A20004302C28A80023082102031DBC
:10006000332822082002043003180130031902301B
:100070002805031DFF3043280038031DFF30040509
:10008000031DFF3043288313031383126400080009
:1000900080309F0083160E309F00A33085008601BC
:1000A0008312BF01BC018030BD0085153F08BD0033
:1000B00000300120BF00640020303F020318622896
:1000C0000130BE003F08A0001F302220B8003F08CA
:1000D000A00040302720BA00380884003A083C20AD
:1000E000BA00BB0064003A083B04031979280230C7
:1000F000BE003F08A0003F302220B8003F08A0000B
:1001000060302720BA00380884003A083C20BA0042
:10011000BB0064003A083B04031990280430BE0079
:100120003F08A0005F302220B8003F08A0008030C8
:100130002720BA00380884003A083C20BA00BB00E7
:1001400064003A083B040319A7280830BE003F08A2
:10015000A0007F302220B8003F08A000A030272058
:10016000BA00380884003A083C20BA00BB0064009A
:100170003A083B040319BE281030BE003F08A00017
:100180009F302220B8003F08A000C0302720BA00CE
:10019000380884003A083C20BA00BB0064003A08E2
:1001A0003B040319D5282030BE003F08A000BF3013
:1001B0002220B8003F08A000E0302720BA0038080D
:1001C00084003A083C20BA00BB0064003A083B04B3
:1001D0000319EC284030BE006400E0303F02031CED
:1001E000F3288030BE0064000F303C020318FA2868
:1001F000FB28FB280B293E08860005116400851E9C
:1002000006290330A100CA301320082946301220E5
:100210000515BC0A56283D08A00080302720B800EC
:100220003F08A0007F302220BA00380884003A0836
:100230003C20BA00BB0064003A083B040319332990
:10024000BC013E088600851114301220851564001B
:10025000851E2F290330A100CA30132031294630D2
:0C02600012205628342956286300342947
:02400E00023F6F
:00000001FF