Πίνακας περιεχομένων:

4-20ma Generator/Tester Using Arduino: 8 βήματα
4-20ma Generator/Tester Using Arduino: 8 βήματα

Βίντεο: 4-20ma Generator/Tester Using Arduino: 8 βήματα

Βίντεο: 4-20ma Generator/Tester Using Arduino: 8 βήματα
Βίντεο: Leap Motion SDK 2024, Ιούνιος
Anonim
4-20ma Γεννήτρια/Δοκιμαστής χρησιμοποιώντας Arduino
4-20ma Γεννήτρια/Δοκιμαστής χρησιμοποιώντας Arduino

Οι γεννήτριες 4-20mA είναι διαθέσιμες στο ebay, αλλά μου αρέσει το μέρος των πραγμάτων DIY και χρησιμοποιώ μέρη που έχω γύρω.

Wantedθελα να δοκιμάσω τις αναλογικές εισόδους του PLC για να επαληθεύσω τις ενδείξεις scada και να δοκιμάσω την έξοδο των οργάνων 4-20mA. Υπάρχουν φορτία μετατροπέων ρεύματος σε τάσης και μετατροπείς τάσης σε ρεύμα για arduino στο ebay, ωστόσο χρειάζονται βαθμονόμηση. Μπορώ να το χρησιμοποιήσω για να βαθμονομήσω οποιονδήποτε από αυτούς τους μετατροπείς που βρέθηκαν στο ebay και τα παρόμοια.

Αποφάσισα ότι θα κάνω DIY μια γεννήτρια και έναν δοκιμαστή. Σε αυτό το χρονικό σημείο είναι ακόμα ένα έργο σε εξέλιξη και ένα πρωτότυπο.

Είχα ένα παλιό ηχοσύστημα 2.1 που δεν χρησιμοποιούνταν (μικρά ηχεία). Έτσι χρησιμοποίησα ένα από τα κουτιά ηχείων ως περίβλημα. Είχα επίσης έναν ενισχυτή που πέθανε λόγω κεραυνού, έβγαλα τον ακροδέκτη του ηχείου από αυτόν τον ενισχυτή για να κάνω τη σύνδεση. Σκοπεύω να φτιάξω ένα PCB στο μέλλον και ένα καλύτερο περίβλημα.

Προμήθειες:

Λίστα μερών.

LCD // 20x4 (προσαρμόστε τον κωδικό εάν ο δικός σας είναι μικρότερος)

LM7808 // ρυθμιστής 8Volt

LED // Οποιουδήποτε τύπου ή μεγέθους

Αντίσταση για LED // Κατάλληλο για τον τύπο LED και 8Volt

Αντίσταση 100 ohm + αντίσταση 47 ohm σε σειρά // Θα χρησιμοποιηθεί ως αντίσταση διακλάδωσης

Αντίσταση 10Κ // Αναλογικό Arduino σε προστασία από υψηλή τάση

Αντίσταση 22Κ // Για να σταματήσει να επιπλέει το A0

Αντίσταση Trimpot 100 ohm + 47 ohm σε σειρά // προσομοιωτής PT100

Πυκνωτής 35 volt // Χρησιμοποίησα 470uF, μόνο για να διατηρήσω τις διακυμάνσεις της τάσης τροφοδοσίας χαμηλές

RTD (μετατροπέας PT100) // Το εύρος δεν έχει σημασία (εύρος)

ΔΙΟΔΟΣ (για προστασία πολικότητας)

INA219

Arduino

Βήμα 1:

Εικόνα
Εικόνα

Ακολουθώντας το σχηματικό θα πρέπει να ξεκινήσετε για το πού να προσθέσετε τα εξαρτήματα και να τα συνδέσετε.

Το LM7808 επιτρέπει μέγιστη είσοδο 25 βολτ, κάτι που είναι καλό για συστήματα PLC, συνήθως χρησιμοποιούν τροφοδοτικά 24 βολτ. Προσθέστε μια ψύκτρα στο ρυθμιστή και μην τη χρησιμοποιείτε για παρατεταμένα χρονικά διαστήματα. Η πτώση 16 βολτ προκαλεί στον ρυθμιστή να παράγει πολλή θερμότητα.

Η παροχή εισόδου τροφοδοτεί τον ρυθμιστή και συνδέεται με το INA219 VIN, σε αυτή τη διαμόρφωση το INA219 θα μπορεί επίσης να μετρήσει τη σωστή τάση τροφοδοσίας μείον την πτώση τάσης από τη δίοδο. Θα πρέπει να μετρήσετε την πτώση τάσης διόδου και να την προσθέσετε στον κωδικό, ώστε να λάβετε τη σωστή ανάγνωση τάσης τροφοδοσίας.

Από το INA219 VOUT έως το RTD+ ενισχύει το RTD. Το RTD- στο έδαφος ολοκληρώνει το κύκλωμα.

Για να δοκιμάσετε μια αναλογική κάρτα PLC θα συνδέσετε το RTD- στην είσοδο της αναλογικής κάρτας και τη γείωση από την κάρτα στη γείωση arduino. (Βεβαιωθείτε ότι έχετε αποσυνδέσει οποιοδήποτε όργανο είναι συνδεδεμένο στο δοκιμαζόμενο κανάλι).

R5 και LED1, υποδεικνύοντας ότι το σύστημα είναι ενεργοποιημένο.

Ο ρυθμιστής τροφοδοτείται με το arduino VIN (το arduino έχει ενσωματωμένο ρυθμιστή στα 5 βολτ).

Ο πείρος Arduino 5V πηγαίνει στο INA219 για να τροφοδοτήσει το ενσωματωμένο τσιπ. INA219 GND στο έδαφος arduino.

Περικοπή υαλοκαθαριστήρα δοχείου σε RTD PIN1 και Trim δοχείο καρφίτσα 3 σε RTD καρφίτσα 2 θα προσομοιώσει μια σύνδεση PT100. (Αντικαταστήστε τα καλώδια εάν η περιστροφή του δοχείου δεξιόστροφα δεν αυξήσει τα mA).

Βήμα 2: Δοκιμή εξόδου οργάνου

Για τον έλεγχο της εξόδου του οργάνου χρειάζονται επιπλέον μέρη, όπως μια αντίσταση διακλάδωσης. Οι κανονικές αντιστάσεις 0,25W θα κάνουν τη δουλειά μια χαρά. Μπορείτε να αφήσετε την αντίσταση διακλάδωσης και να προσθέσετε ένα δεύτερο INA219 στη δοκιμή εξόδου οργάνου. Μου έμεινε μόνο ένα, οπότε χρησιμοποίησα αντίσταση.

Η δοκιμή χρησιμοποιώντας ένα shunt μπορεί να γίνει μόνο στην αρνητική πλευρά της συσκευής. Εάν χρησιμοποιείτε τη θετική πλευρά, θα τροφοδοτήσετε το arduino σας με πάνω από 4 φορές την επιτρεπόμενη τάση και θα αφήσετε τον καπνό να βγει.

Προσθέστε την αντίσταση shunt σε σειρά με αρνητικό σύρμα του οργάνου. Η πλευρά του shunt που βρίσκεται πιο κοντά στη συσκευή θα γίνει το θετικό ανάλογο για το arduino. Η άλλη πλευρά της διακλάδωσης πιο κοντά στο τροφοδοτικό θα γίνει η γείωση arduino που ολοκληρώνει το κύκλωμα αναλογικής εισόδου.

Η αντίσταση διακλάδωσης 150 ohm είναι το απόλυτο μέγιστο που πρέπει να χρησιμοποιείται όταν χρησιμοποιείτε arduino. Η αντίσταση έχει γραμμική πτώση τάσης στο mA που ρέει μέσα από αυτήν. Όσο μεγαλύτερο είναι το mA τόσο μεγαλύτερη είναι η τάση.

Στα 20mA ρεύμα # 150ohm*0.02A = 3volt στο arduino.

Στα 4mA ρεύμα # 150ohm*0.004A = 0.6volt στο arduino.

Τώρα μπορεί να θέλετε η τάση να είναι πιο κοντά στα 5 βολτ, ώστε να μπορείτε να μας στείλετε το πλήρες εύρος ADC του arduino. (Δεν είναι καλή ιδέα).

Τα RTD μπορούν να φτάσουν τα 30,2 mA (το δικό μου). 150ohm*0.03A = 4.8volts. Είναι τόσο κοντά όσο θα ήθελα να είμαι.

Ένας άλλος ιστότοπος υποδεικνύει ότι χρησιμοποιεί αντίσταση 250ohm.

Στα 20mA ρεύμα # 250ohm*0.02A = 5volt στο arduino.

Στα 30mA ρεύμα # 250ohm*0.03A = 7.5volt στο arduino.

Κινδυνεύετε να κάψετε το ADC και το arduino σας.

Για να δοκιμάσετε ένα όργανο στο πεδίο, πάρτε μαζί σας μια μπαταρία 12Volt και συνδέστε την στην είσοδο τροφοδοσίας. Η χρήση εξωτερικής πηγής ενέργειας δεν θα επηρεάσει την τρέχουσα ρύθμιση PLC.

Για να δοκιμάσετε μια κάρτα αναλογικής εισόδου στο πεδίο, πάρτε μαζί σας μια μπαταρία 12Volt. Αποσυνδέστε το όργανο + από το κύκλωμα. Συνδέστε τη γείωση με τη γείωση οργάνων και το RTD- στο αποσυνδεδεμένο καλώδιο οργάνων.

Βήμα 3: Βαθμονόμηση

Βαθμονόμηση
Βαθμονόμηση

Για να βαθμονομήσετε την ένδειξη της αντίστασης διακλάδωσης, συνδέστε το RTD- στο Analog in shunt. Ρυθμίστε το δοχείο περικοπής σας έτσι ώστε το παραγόμενο mA να είναι 4mA. Εάν το mA της συσκευής σας δεν είναι ίσο, τροποποιήστε την πρώτη τιμή στον κώδικα στη γραμμή 84. Η αύξηση αυτής της τιμής θα μειώσει την ανάγνωση mA.

Στη συνέχεια, ρυθμίστε το δοχείο περικοπής να παράγει 20mA. Εάν το mA της συσκευής σας δεν είναι ίσο, τροποποιήστε τη δεύτερη τιμή στον κωδικό στη γραμμή 84.

Έτσι, τα 4-20mA σας θα γίνουν τώρα 0,6-3volts (θεωρητικά). Περισσότερο από αρκετό εύρος. Χρησιμοποιώντας τη βιβλιοθήκη από το eRCaGuy, η υπερ -δειγματοληψία θα σας δώσει μια καλύτερη και σταθερή ανάγνωση.

Ελπίζω να το διαβάσετε αυτό. Αυτό είναι το πρώτο μου διδάξιμο, οπότε παρακαλώ να το χαλαρώσετε αν έχω κάνει λάθος κάπου ή έχω αφήσει κάτι έξω.

Αυτό το έργο πιθανότατα δεν είναι ο καλύτερος τρόπος για να το πετύχει, αλλά λειτουργεί για μένα και ήταν διασκεδαστικό να το κάνω.

Μερικές ιδέες έχω επιπλέον…

Προσθέστε ένα σερβο για να περιστρέψετε το δοχείο στο εσωτερικό του κουτιού.

Προσθέστε κουμπιά για να περιστρέψετε το σερβο αριστερά ή δεξιά.

Προσθέστε έναν ψηφιακό αισθητήρα θερμοκρασίας στη ψύκτρα ρυθμιστή για να προειδοποιήσετε για επικίνδυνη θερμότητα.

Βήμα 4: Προγραμματισμός Arduino

#περιλαμβάνω

// #include // Μην σχολιάσετε εάν χρησιμοποιείτε LCD με καταχωρητή αλλαγής ταχυτήτων.

#περιλαμβάνω

#περιλαμβάνω

#περιλαμβάνω

#περιλαμβάνω

// A4 = (SDA)

// A5 = (SCL)

Adafruit_INA219 ina219;

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

// LiquidCrystal_SR lcd (3, 4, 2); // Μην σχολιάσετε εάν χρησιμοποιείτε LCD με καταχωρητή αλλαγής ταχυτήτων.

// | | | _ Καρφίτσα ασφάλισης

// | / _ Καρφίτσα ρολογιού

// / _ Δεδομένα/Ενεργοποίηση Pin

byte bitsOfResolution = 12; // εντολή υπερβολικής δειγματοληψίας ανάλυσης

ανυπόγραφο μακρύ numSamplesToAvg = 20; // αριθμός δειγμάτων ΣΤΟ ΠΑΡΑΓΝΩΣΤΟ ESΗΦΙΣΜΑ που θέλετε να πάρετε και κατά μέσο όρο

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

ανυπόγραφο προηγουμένωςMillis = 0;

float shuntvoltage = 0,0; // Από INA219

τάση πλωτήρα = 0,0; // Από INA219

float current_mA = 0.0; // Από INA219

τάση φόρτωσης = 0,0; // Από INA219

float arduinovoltage = 0,0; // Υπολογισμός τάσης από ακίδα Α0

Ανυπόγραφο μακρύ A0analogReading = 0;

byte analogIn = A0;

float ma_mapped = 0,0; // Τάση χαρτών από A0 έως 4-20mA

void setup () {

adc.setADCSpeed (ADCSpeed);

adc.setBitsOfResolution (bitsOfResolution);

adc.setNumSamplesToAvg (numSamplesToAvg);

uint32_t currentFrequency;

ina219.begin ();

ina219.setCalibration_32V_30mA (); // Τροποποιημένη βιβλιοθήκη για μεγαλύτερη ακρίβεια στο mA

lcd.αρχή (20, 4); // προετοιμάστε την οθόνη LCD

lcd.clear ();

lcd.home (); // πήγαινε σπίτι

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

καθυστέρηση (2000).

lcd.clear ();

}

κενός βρόχος ()

{

ανυπόγραφο μακρύ ρεύμαMillis = millis ();

const μεγάλο διάστημα = 100;

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

Διαβάστε συσκευές I2C ανά διαστήματα και κάντε μερικούς υπολογισμούς

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

if (currentMillis - previousMillis> = διάστημα) {

previousMillis = currentMillis;

Διάστημα();

}

Print_To_LCD (); // Πιθανώς δεν χρειάζεται να ενημερώσω τόσο γρήγορα την οθόνη LCD και μπορεί να μετακινηθεί σε κάτω από το διάστημα ()

}

κενός

Διάστημα () {

shuntvoltage = ina219.getShuntVoltage_mV ();

busvoltage = ina219.getBusVoltage_V ();

current_mA = ina219.getCurrent_mA ();

τάση φόρτωσης = (τάση διαύλου + (τάση διακοπής / 1000)) + 0,71; // +0.71 είναι η πτώση τάσης της δίοδος μου

A0analogReading = adc.newAnalogRead (analogIn);

arduinovoltage = (5.0 * A0analogReading); // Υπολογίζεται σε mV

ma_mapped = χάρτης (arduinovoltage, 752, 8459, 30, 220) / 10.0; // Ο χάρτης δεν μπορεί να χρησιμοποιήσει floats. Προσθέστε ένα 0 πίσω από τη χαρτογραφημένη τιμή και διαιρέστε με το 10 για να λάβετε την ανάγνωση float.

// Η χαρτογράφηση από τον υπολογισμό της τάσης δίνει πιο σταθερή ανάγνωση από τη χρήση της ακατέργαστης ανάγνωσης adc.

εάν (shuntvoltage> = -0,10 && shuntvoltage <= -0,01) // Χωρίς φορτίο το INA219 τείνει να διαβάζει κάτω από -0,01, το κάνει και το δικό μου.

{

current_mA = 0;

τάση διαύλου = 0;

τάση φόρτωσης = 0;

shuntvoltage = 0;

}

}

κενός

Print_To_LCD () {

lcd.setCursor (0, 0);

εάν (ma_mapped <1,25) {// Χωρίς ρεύμα, αυτή είναι η ανάγνωσή μου mA, οπότε απλώς το έκοψα.

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

}

αλλιώς {

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

}

lcd.setCursor (0, 1);

lcd.print ("Συσκευή:");

lcd.setCursor (10, 1);

εάν (ma_mapped <1,25) {

lcd.print ("καμία συσκευή");

}

αλλιώς {

lcd.print (ma_mapped);

}

lcd.print ("mA");

lcd.setCursor (0, 2);

lcd.print ("Δημιουργία:");

lcd.setCursor (10, 2);

lcd.print (current_mA);

lcd.print ("mA");

lcd.setCursor (0, 3);

lcd.print ("Προμήθεια:");

lcd.setCursor (10, 3);

lcd.print (τάση φόρτωσης);

lcd.print ("V");

}

Βήμα 5: Μερικές περισσότερες φωτογραφίες

Μερικές περισσότερες φωτογραφίες
Μερικές περισσότερες φωτογραφίες

Ακροδέκτης ηχείων ενισχυτή. LED που οδηγείται από την τρέχουσα γεννήτρια (RTD). Η καλωδίωση αναλογικής κάρτας θα αντικαταστήσει το LED.

Το τερματικό στα αριστερά είναι για είσοδο τροφοδοσίας. Τα τερματικά στα δεξιά είναι για είσοδο οργάνων.

Βήμα 6: Τοποθέτηση

Χωράει
Χωράει

Όλα φαίνεται να ταιριάζουν. Χρησιμοποίησα σιλικόνη για να συγκρατήσω προσωρινά κάποια πράγματα μαζί. Η κατσαρόλα έχει σιλικόνη πάνω δεξιά. Μια μικρή τρύπα είχε προηγηθεί. Μπορώ να ρυθμίσω το ρεύμα από την κορυφή του κουτιού.

Βήμα 7: Απλώς φωτογραφίες

Απλώς Φωτογραφίες
Απλώς Φωτογραφίες
Απλώς Φωτογραφίες
Απλώς Φωτογραφίες
Απλώς Φωτογραφίες
Απλώς Φωτογραφίες
Μόνο Φωτογραφίες
Μόνο Φωτογραφίες

Βήμα 8: Τελικές λέξεις

Έχω δοκιμάσει την έξοδο αυτής της συσκευής με ένα PLC Allan Bradley. Τα αποτελέσματα ήταν πολύ καλά. Έχω πλήρη εμβέλεια. Έχω επίσης δοκιμάσει αυτήν τη συσκευή με αισθητήρα πίεσης 4-20mA που έχει ενσωματωμένη οθόνη LCD. Και πάλι τα αποτελέσματα ήταν πολύ καλά. Οι αναγνώσεις μου απενεργοποιήθηκαν από δύο δεκαδικά ψηφία.

Γράφω τον κώδικα arduino μου σε καρτέλες. Στα PLC ονομάζονται υπορουτίνες. Διευκολύνει τον εντοπισμό σφαλμάτων για το δικό μου.

Επισυνάπτονται αρχεία κειμένου αυτών των καρτελών.

Συνιστάται: