Sommario:

Generatore/tester da 4-20 mA con Arduino: 8 passaggi
Generatore/tester da 4-20 mA con Arduino: 8 passaggi

Video: Generatore/tester da 4-20 mA con Arduino: 8 passaggi

Video: Generatore/tester da 4-20 mA con Arduino: 8 passaggi
Video: Ricevitore di segnale in corrente 4-20mA con Arduino - Video 518 2024, Giugno
Anonim
Generatore/tester da 4-20 mA con Arduino
Generatore/tester da 4-20 mA con Arduino

I generatori da 4-20 mA sono disponibili su ebay, ma io per primo amo la parte fai-da-te delle cose e l'utilizzo di parti che ho in giro.

Volevo testare gli ingressi analogici del nostro PLC per verificare le nostre letture scada e per testare l'uscita di strumenti 4-20mA. Ci sono un sacco di convertitori da corrente a tensione e convertitori da tensione a corrente per arduino su ebay, ma necessitano di calibrazione. Posso usarlo per calibrare uno di quei convertitori trovati su ebay e simili.

Ho deciso che farò il fai-da-te con un generatore e un tester. In questo momento è ancora un work in progress e un prototipo.

Avevo un vecchio sistema audio 2.1 che non veniva utilizzato (piccoli altoparlanti). Quindi ho usato una delle casse dell'altoparlante come custodia. Ho anche avuto un amplificatore che è morto a causa di un fulmine, ho rimosso il terminale dell'altoparlante da quell'amplificatore per rendere il collegamento un gioco da ragazzi. Ho intenzione di realizzare un PCB in futuro e un involucro migliore.

Forniture:

Elenco delle parti.

LCD // 20x4 (adatta il codice se il tuo è più piccolo)

LM7808 // Regolatore 8volt

LED // Qualsiasi tipo o dimensione

Resistore per LED // Adatto per il tipo LED e 8volt

Resistenza da 100 ohm + resistenza da 47 ohm in serie // Verrà utilizzata come resistenza di shunt

Resistore da 10K // Analogico Arduino in protezione contro l'alta tensione

Resistenza 22K // Per fermare A0 dal flottante

Trimpot 100 ohm + resistore 47 ohm in serie // simulatore PT100

Condensatore da 35 volt // Ho usato 470uF, solo per mantenere basse le fluttuazioni della tensione di alimentazione

RTD (trasduttore PT100) // L'intervallo non è importante (intervallo)

DIODO (per protezione polarità)

INA219

Arduino

Passo 1:

Immagine
Immagine

Seguendo lo schema dovresti iniziare a capire dove aggiungere le parti e collegarle.

L'LM7808 consente un ingresso massimo di 25 volt, il che va bene per i sistemi PLC, generalmente utilizzano alimentatori a 24 volt. Aggiungere un dissipatore di calore al regolatore e non utilizzarlo per lunghi periodi. La caduta di 16 volt fa sì che il regolatore generi molto calore.

L'alimentazione in ingresso alimenta il regolatore e si collega al VIN dell'INA219, in questa configurazione l'INA219 sarà anche in grado di misurare la corretta tensione di alimentazione meno la caduta di tensione dal diodo. Dovresti misurare la caduta di tensione del diodo e aggiungerla al codice in modo da ottenere la corretta lettura della tensione di alimentazione.

Dall'INA219 VOUT all'RTD+ accende l'RTD. RTD- a terra completa il circuito.

Per testare una scheda analogica PLC, collegherai RTD- all'ingresso sulla scheda analogica e la massa dalla scheda alla massa arduino. (Assicurarsi di scollegare qualsiasi strumento collegato al canale in prova).

R5 e LED1, che indicano che il sistema è acceso.

Il regolatore alimenta il VIN di arduino (arduino ha un regolatore integrato a 5 volt).

Il pin Arduino 5V va a INA219 per alimentare il chip di bordo. INA219 GND a massa arduino.

Trim pot wiper su RTD PIN1 e Trim pot pin 3 su RTD pin 2 simuleranno una connessione PT100. (Scambiare i fili se ruotando il trim pot in senso orario non si aumenta il mA).

Passaggio 2: test di uscita dello strumento

Per testare l'uscita dello strumento sono necessarie parti aggiuntive, come un resistore di shunt. I normali resistori da 0,25 W faranno bene il lavoro. È possibile lasciare il resistore di shunt e aggiungere un secondo INA219 per testare l'uscita dello strumento. Ne avevo solo uno, quindi ho usato un resistore.

Il test utilizzando uno shunt può essere eseguito solo sul lato negativo del dispositivo. Se usi il lato positivo, fornirai al tuo arduino più di 4 volte la tensione consentita e farai uscire il fumo.

Aggiungere la resistenza di shunt in serie con il filo negativo dello strumento. Il lato dello shunt più vicino al dispositivo diventerà l'analogo positivo per arduino. L'altro lato dello shunt più vicino all'alimentatore diventerà la massa arduino che completa il circuito di ingresso analogico.

Il resistore di shunt da 150 ohm è il massimo assoluto che dovrebbe essere utilizzato quando si utilizza un arduino. Il resistore ha una caduta di tensione lineare rispetto ai mA che lo attraversano. Maggiore è il mA maggiore è la tensione.

A 20 mA di corrente # 150 ohm * 0,02 A = 3 volt su arduino.

Con una corrente di 4 mA # 150 ohm * 0,004 A = 0,6 volt su arduino.

Ora potresti volere che la tensione sia più vicina a 5 volt in modo da poter utilizzare l'intera gamma ADC dell'arduino. (Non è una buona idea).

Gli RTD possono raggiungere un'uscita di 30,2 mA (il mio lo fa). 150 ohm * 0,03 A = 4,8 volt. Questo è il più vicino che vorrei essere.

Un altro sito web ha indicato di utilizzare un resistore da 250 ohm.

A 20 mA di corrente # 250 ohm * 0,02 A = 5 volt su arduino.

A 30 mA di corrente # 250 ohm * 0,03 A = 7,5 volt su arduino.

Rischi di bruciare il tuo ADC e arduino.

Per testare uno strumento sul campo, porta con te una batteria da 12 volt e collegala all'ingresso di alimentazione. L'utilizzo di una fonte di alimentazione esterna non influenzerà l'impostazione corrente del PLC.

Per testare una scheda di ingresso analogica sul campo, porta con te una batteria da 12 volt. Scollegare lo strumento + dal circuito. Collegare la massa alla massa dello strumento e l'RTD- al cavo dello strumento scollegato.

Passaggio 3: calibrazione

Calibrazione
Calibrazione

Per calibrare la lettura del resistore di shunt, collegare l'RTD- all'ingresso analogico dello shunt. Impostare il potenziometro del trim in modo che il mA generato sia 4mA. Se il mA del tuo dispositivo non è uguale, modifica il primo valore nel codice alla riga 84. Aumentando questo valore si abbasserà la lettura in mA.

Quindi imposta il tuo trim pot per generare 20 mA. Se il mA del tuo dispositivo non è uguale, modifica il secondo valore nel codice alla riga 84.

Quindi il tuo 4-20 mA diventerà ora 0,6-3 volt (teorico). Gamma più che sufficiente. Usando la libreria di eRCaGuy, il sovracampionamento ti darà una lettura migliore e stabile.

Spero che tu legga questo. Questo è il mio primo istruibile, quindi per favore rilassati se ho commesso un errore da qualche parte o ho tralasciato qualcosa.

Questo progetto probabilmente non è il modo migliore per realizzarlo, ma funziona per me ed è stato divertente realizzarlo.

Alcune idee che ho in più…

Aggiungi un servo per ruotare il trim pot all'interno della scatola.

Aggiungere pulsanti per ruotare il servo a sinistra oa destra.

Aggiungi un sensore di temperatura digitale al dissipatore di calore del regolatore per avvertire del calore pericoloso.

Passaggio 4: programmazione di Arduino

#includere

// #include //Decommenta se usi un LCD con un registro a scorrimento.

#includere

#includere

#includere

#includere

//A4 = (SDA)

//A5 = (SCL)

Adafruit_INA219 ina219;

LCD a cristalli liquidi (12, 11, 5, 4, 3, 2);

// LiquidCrystal_SR lcd(3, 4, 2); //Decommenta se usi un LCD con un registro a scorrimento.

// | | |_ Perno di chiusura

// | \_ Pin orologio

// \_ Dati/Abilita Pin

byte bitsOfResolution = 12; //risoluzione sovracampionata comandata

numSamplesToAvg lungo senza segno = 20; //numero di campioni ALLA RISOLUZIONE OVERSAMPLED che vuoi prendere e media

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

unsigned long precedenteMillis = 0;

tensione di shunt galleggiante = 0,0; //Da INA219

tensione del bus galleggiante = 0,0; //Da INA219

float current_mA = 0.0; //Da INA219

tensione di carico galleggiante = 0,0; //Da INA219

galleggiante arduinovoltaggio = 0.0; //Calcolo della tensione dal pin A0

Unsigned long A0analogReading = 0;

byte AnalogIn = A0;

float ma_mapped = 0.0; //Mappa tensione da A0 a 4-20mA

void setup() {

adc.setADCSpeed(ADCSpeed);

adc.setBitsOfResolution(bitsOfResolution);

adc.setNumSamplesToAvg(numSamplesToAvg);

uint32_t CurrentFrequency;

ina219.begin();

ina219.setCalibration_32V_30mA(); //Libreria modificata per una maggiore precisione su mA

lcd.begin(20, 4); // inizializza l'LCD

lcd.clear();

lcd.home(); // andare a casa

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

ritardo (2000);

lcd.clear();

}

ciclo vuoto()

{

unsigned long currentMillis = millis();

const lungo intervallo = 100;

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

Leggi i dispositivi I2C a intervalli e fai alcuni calcoli

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

if (Milliscorrente -Millisprecedente >= intervallo) {

precedenteMillis = correnteMillis;

Intervallo();

}

Stampa_su_LCD(); // Probabilmente non ho bisogno di aggiornare l'LCD così velocemente e posso essere spostato al di sotto di Interval()

}

vuoto

Intervallo() {

shuntvoltage = ina219.getShuntVoltage_mV();

busvoltage = ina219.getBusVoltage_V();

current_mA = ina219.getCurrent_mA();

tensione di carico = (tensione bus + (tensione shunt / 1000)) + 0,71; // +0.71 è la caduta di tensione del mio diodo

A0analogReading = adc.newAnalogRead(analogIn);

arduinovoltage = (5.0 * A0analogReading); //Calcolato in mV

ma_mapped = map(arduinovoltage, 752, 8459, 30, 220) / 10.0; //La mappa non può utilizzare i float. Aggiungi uno 0 dietro il valore mappato e dividi per 10 per ottenere la lettura float.

// La mappatura dal calcolo della tensione fornisce una lettura più stabile rispetto all'utilizzo della lettura grezza adc.

if (shuntvoltage >= -0,10 && shuntvoltage <= -0,01) // Senza carico l'INA219 tende a leggere sotto -0.01, beh il mio lo fa.

{

current_mA = 0;

tensione bus = 0;

tensione di carico = 0;

tensione di shunt = 0;

}

}

vuoto

Stampa_su_LCD() {

lcd.setCursor(0, 0);

if (ma_mapped < 1.25) { // Senza corrente questa è la mia lettura in mA, quindi la butto via.

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

}

altro {

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

}

lcd.setCursor(0, 1);

lcd.print("Dispositivo:");

lcd.setCursor(10, 1);

if (ma_mappato < 1.25) {

lcd.print("nessun dispositivo");

}

altro {

lcd.print(ma_mappato);

}

lcd.print("mA");

lcd.setCursor(0, 2);

lcd.print("Genera:");

lcd.setCursor(10, 2);

lcd.print(current_mA);

lcd.print("mA");

lcd.setCursor(0, 3);

lcd.print("Rifornimento:");

lcd.setCursor(10, 3);

lcd.print(tensione di carico);

lcd.print("V");

}

Passaggio 5: alcune altre foto

Qualche altra foto
Qualche altra foto

Terminale dell'altoparlante dell'amplificatore. LED pilotato dal generatore di corrente (RTD). Il cablaggio della scheda analogica sostituirà il LED.

Il terminale all'estrema sinistra è per l'ingresso di alimentazione. I terminali a destra sono per l'ingresso dello strumento.

Passaggio 6: montaggio

Adattamento
Adattamento

Tutto sembra adattarsi. Ho usato il silicone per tenere insieme temporaneamente alcune cose. Il trim pot è siliconato in alto a destra. È stato preforato un piccolo foro. Posso regolare la corrente dalla parte superiore della scatola.

Passaggio 7: solo foto

solo foto
solo foto
solo foto
solo foto
solo foto
solo foto
solo foto
solo foto

Passaggio 8: parole finali

Ho testato l'output di questo dispositivo con un PLC Allan Bradley. I risultati sono stati molto buoni. Ho una gamma completa. Ho anche testato questo dispositivo con un sensore di pressione da 4-20 mA con display LCD integrato. Anche in questo caso i risultati sono stati molto buoni. Le mie letture erano errate di un paio di decimali.

Scrivo il mio codice Arduino in schede. Nei PLC sono chiamate sottoroutine. Semplifica il debug per my.

In allegato sono i file di testo di quelle schede.

Consigliato: