Índice:

Gerador / testador de 4-20ma usando Arduino: 8 etapas
Gerador / testador de 4-20ma usando Arduino: 8 etapas

Vídeo: Gerador / testador de 4-20ma usando Arduino: 8 etapas

Vídeo: Gerador / testador de 4-20ma usando Arduino: 8 etapas
Vídeo: GERADOR 4mA a 20mA | Vídeo Aula #473 2024, Novembro
Anonim
Gerador / testador 4-20ma usando Arduino
Gerador / testador 4-20ma usando Arduino

Os geradores de 4-20 mA estão disponíveis no ebay, mas eu adoro a parte DIY das coisas e usar as peças que tenho por aí.

Eu queria testar as entradas analógicas de nosso PLC para verificar nossas leituras de scada e testar a saída de instrumentos de 4-20 mA. Existem muitos conversores de corrente para tensão e conversores de tensão para corrente para Arduino no ebay, mas eles precisam de calibração. Posso usar isso para calibrar qualquer um desses conversores encontrados no ebay e similares.

Eu decidi que vou fazer DIY um gerador e testador. No momento, ainda é um trabalho em andamento e um protótipo.

Eu tinha um sistema de som 2.1 antigo que não estava sendo usado (alto-falantes pequenos). Então, usei uma das caixas de alto-falante como um invólucro. Eu também tinha um amplificador que morreu por causa de um raio, removi o terminal de alto-falante desse amplificador para tornar a conexão uma brisa. Pretendo fazer um PCB no futuro e um gabinete melhor.

Suprimentos:

Lista de peças.

LCD // 20x4 (adapte o código se o seu for menor)

LM7808 // regulador de 8 volts

LED // Qualquer tipo ou tamanho

Resistor para LED // Apropriado para o tipo LED e 8 volts

Resistor de 100 ohm + resistor de 47 ohm em série // Será usado como resistor de derivação

10K resistor // Arduino analógico em proteção contra alta tensão

22K resistor // Para parar A0 de flutuar

Resistor Trimpot 100 ohm + 47 ohm em série // simulador PT100

Capacitor de 35 volts // eu usei 470uF, apenas para manter as flutuações de tensão de alimentação baixas

RTD (transdutor PT100) // Span não importa (faixa)

DIODO (para proteção de polaridade)

INA219

Arduino

Passo 1:

Imagem
Imagem

Seguir o esquema deve ajudar você a saber onde adicionar as peças e conectá-las.

O LM7808 permite uma entrada máxima de 25 volts, o que é bom para sistemas PLC, eles geralmente usam fontes de alimentação de 24 volts. Adicione um dissipador de calor ao regulador e não o use por longos períodos. A queda de 16 volts faz com que o regulador gere muito calor.

A alimentação de entrada alimenta o regulador e se conecta ao INA219 VIN, nesta configuração o INA219 também será capaz de medir a tensão de alimentação correta menos a queda de tensão do diodo. Você deve medir a queda de tensão do diodo e adicioná-la ao código para obter a leitura correta da tensão de alimentação.

Do VOUT INA219 para o RTD + energiza o RTD. RTD- para aterramento completa o circuito.

Para testar uma placa analógica PLC, você conectaria o RTD- à entrada na placa analógica e o aterramento da placa ao aterramento Arduino. (Certifique-se de desconectar qualquer instrumento conectado ao canal que está sendo testado).

R5 e LED1, indicando que o sistema está ligado.

O regulador alimenta o arduino VIN (o arduino tem regulador integrado para 5 volts).

O pino do Arduino 5V vai para INA219 para alimentar o chip on-board. INA219 GND para aterramento arduino.

Trim pot Wiper para RTD PIN1 e Trim pot pino 3 para RTD pino 2 irá simular uma conexão PT100. (Troque os fios se girar o potenciômetro no sentido horário não aumentar o mA).

Etapa 2: Teste de Saída de Instrumento

Para testar a saída do instrumento, são necessárias peças extras, como um resistor de derivação. Resistores normais de 0,25 W farão o trabalho muito bem. Você pode deixar o resistor shunt e adicionar um segundo INA219 para testar a saída do instrumento. Eu só tinha um, então usei um resistor.

O teste com um shunt só pode ser feito no lado negativo do dispositivo. Se você usar o lado positivo, fornecerá ao seu arduino mais de 4 vezes a voltagem permitida e deixará a fumaça sair.

Adicione o resistor shunt em série com o fio negativo do instrumento. O lado do shunt mais próximo do dispositivo se tornará o analógico positivo para o arduino. O outro lado do shunt mais próximo da fonte de alimentação se tornará o aterramento do Arduino, completando o circuito de entrada analógica.

O resistor shunt de 150 ohms é o máximo absoluto que deve ser usado ao usar um arduino. O resistor tem uma queda de tensão linear ao mA que flui através dele. Quanto maior for o mA, maior será a tensão.

Na corrente de 20mA # 150ohm * 0,02A = 3 volts para arduino.

Em 4mA atual # 150ohm * 0,004A = 0,6 volts para arduino.

Agora você pode querer que a voltagem esteja próxima de 5 volts para que você possa usar a faixa ADC completa do arduino. (Não é uma boa ideia).

Os RTDs podem atingir uma saída de 30,2 mA (o meu chega). 150 ohm * 0,03A = 4,8 volts. Isso é o mais próximo que eu gostaria de estar.

Outro site indicou usar um resistor de 250ohm.

Na corrente de 20mA # 250ohm * 0,02A = 5 volts para arduino.

Na corrente de 30mA # 250ohm * 0,03A = 7,5 volts para arduino.

Você corre o risco de queimar seu ADC e Arduino.

Para testar um instrumento em campo, leve uma bateria de 12 volts com você e conecte-a à entrada de alimentação. O uso de uma fonte de alimentação externa não influencia a configuração atual do PLC.

Para testar uma placa de entrada analógica em campo, leve uma bateria de 12 volts com você. Desconecte o instrumento + do circuito. Conecte o aterramento ao aterramento do instrumento e o RTD- ao fio do instrumento desconectado.

Etapa 3: Calibração

Calibração
Calibração

Para calibrar a leitura do resistor de shunt, conecte o RTD- à entrada analógica do shunt. Defina o potenciômetro de compensação de modo que o mA gerado seja de 4 mA. Se o mA do seu dispositivo não for igual, modifique o primeiro valor no código na linha 84. Aumentar esse valor diminuirá a leitura de mA.

Em seguida, defina seu potenciômetro de compensação para gerar 20 mA. Se o mA do seu dispositivo não for igual, modifique o segundo valor no código na linha 84.

Portanto, seu 4-20mA agora se tornará 0,6-3volts (teórico). Alcance mais do que suficiente. Usando a biblioteca do eRCaGuy, a sobreamostragem fornecerá uma leitura melhor e estável.

Espero que você leia isso. Este é o meu primeiro instrutível, então, por favor, vá com calma se eu tiver cometido um erro em algum lugar ou deixado algo de fora.

Este projeto provavelmente não é a melhor maneira de realizá-lo, mas funciona para mim e foi divertido fazê-lo.

Algumas ideias que tenho extra…

Adicione um servo para girar o trim pot dentro da caixa.

Adicione botões para girar o servo para a esquerda ou direita.

Adicione um sensor de temperatura digital ao dissipador de calor do regulador para alertar sobre o calor perigoso.

Etapa 4: Programação do Arduino

#incluir

// #include // Remova o comentário se você usar um LCD com um registrador de deslocamento.

#incluir

#incluir

#incluir

#incluir

// A4 = (SDA)

// A5 = (SCL)

Adafruit_INA219 ina219;

LiquidCrystal lcd (12, 11, 5, 4, 3, 2);

// LiquidCrystal_SR lcd (3, 4, 2); // Remova o comentário se você usar um LCD com um registro de deslocamento.

// | | | _ Pino de trava

// | / _ Pin do relógio

// / _ Dados / Habilitar Pin

byte bitsOfResolution = 12; // resolução sobreamostrada comandada

longo sem sinal numSamplesToAvg = 20; // número de amostras NA RESOLUÇÃO OVERSAMPLED que você deseja obter e fazer a média

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

sem sinal long previousMillis = 0;

flutuação da tensão de derivação = 0,0; // De INA219

tensão de barramento flutuante = 0,0; // De INA219

float current_mA = 0,0; // De INA219

flutuação da tensão de carga = 0,0; // De INA219

arduinovoltagem flutuante = 0,0; // Cálculo da tensão do pino A0

Longo sem sinal A0analogReading = 0;

byte analogIn = A0;

float ma_mapped = 0.0; // Mapeie a tensão de A0 a 4-20mA

void setup () {

adc.setADCSpeed (ADCSpeed);

adc.setBitsOfResolution (bitsOfResolution);

adc.setNumSamplesToAvg (numSamplesToAvg);

uint32_t currentFrequency;

ina219.begin ();

ina219.setCalibration_32V_30mA (); // Biblioteca modificada para mais precisão em mA

lcd.begin (20, 4); // inicializa o LCD

lcd.clear ();

lcd.home (); // vá para casa

lcd.print ("********************");

atraso (2000);

lcd.clear ();

}

void loop ()

{

currentMillis longo sem sinal = millis ();

intervalo longo const = 100;

//&&&&&&&&&&&&&&&&&

Leia dispositivos I2C em intervalos e faça alguns cálculos

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

if (currentMillis - previousMillis> = intervalo) {

anteriorMillis = currentMillis;

Intervalo();

}

Print_To_LCD (); // Provavelmente não preciso atualizar o LCD tão rápido e posso ser movido para abaixo de Interval ()

}

vazio

Intervalo() {

shuntvoltage = ina219.getShuntVoltage_mV ();

busvoltage = ina219.getBusVoltage_V ();

current_mA = ina219.getCurrent_mA ();

tensão de carga = (tensão de barramento + (tensão de derivação / 1000)) + 0,71; // +0,71 é a queda de tensão do meu diodo

A0analogReading = adc.newAnalogRead (analogIn);

arduinovoltage = (5.0 * A0analogReading); // Calculado para mV

ma_mapped = map (arduinovoltage, 752, 8459, 30, 220) / 10,0; // O mapa não pode usar flutuadores. Adicione um 0 atrás do valor mapeado e divida por 10 para obter a leitura flutuante.

// O mapeamento a partir do cálculo de tensão fornece uma leitura mais estável do que usar a leitura adc bruta.

if (shuntvoltage> = -0,10 && shuntvoltage <= -0,01) // Sem carga o INA219 tende a ler abaixo de -0,01, bem o meu faz.

{

current_mA = 0;

busvoltage = 0;

tensão de carga = 0;

shuntvoltage = 0;

}

}

vazio

Print_To_LCD () {

lcd.setCursor (0, 0);

if (ma_mapped <1.25) {// Sem corrente, esta é minha leitura de mA, então eu simplesmente a jogo fora.

lcd.print ("* Gerador 4-20 mA *");

}

outro {

lcd.print ("** Analog Tester **");

}

lcd.setCursor (0, 1);

lcd.print ("Dispositivo:");

lcd.setCursor (10, 1);

if (ma_mapped <1,25) {

lcd.print ("sem dispositivo");

}

outro {

lcd.print (ma_mapped);

}

lcd.print ("mA");

lcd.setCursor (0, 2);

lcd.print ("Gerar:");

lcd.setCursor (10, 2);

lcd.print (current_mA);

lcd.print ("mA");

lcd.setCursor (0, 3);

lcd.print ("Fornecimento:");

lcd.setCursor (10, 3);

lcd.print (tensão de carga);

lcd.print ("V");

}

Etapa 5: Mais algumas fotos

Mais algumas fotos
Mais algumas fotos

Terminal de alto-falante amplificador. LED acionado pelo gerador de corrente (RTD). A fiação da placa analógica substituirá o LED.

O terminal mais à esquerda é para entrada de alimentação. Os terminais à direita são para entrada de instrumento.

Etapa 6: encaixando

Se enquadrar
Se enquadrar

Tudo parece se encaixar. Usei silicone para segurar temporariamente algumas coisas. O potenciômetro de acabamento é feito de silicone no canto superior direito. Um pequeno buraco foi pré-perfurado. Posso ajustar a corrente do topo da caixa.

Etapa 7: apenas fotos

Apenas fotos
Apenas fotos
Apenas fotos
Apenas fotos
Apenas fotos
Apenas fotos
Apenas fotos
Apenas fotos

Etapa 8: Palavras Finais

Testei a saída deste dispositivo com um PLC Allan Bradley. Os resultados foram muito bons. Também testei este dispositivo com sensor de pressão de 4-20 mA que possui um display LCD integrado. Novamente os resultados foram muito bons. Minhas leituras estavam erradas por algumas casas decimais.

Eu escrevo meu código do Arduino em guias. Nos PLCs são chamados de sub-rotinas. Facilita a depuração para mim.

Em anexo estão os arquivos de texto dessas guias.

Recomendado: