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

Κάντε οποιοδήποτε αισθητήρα από ένα FPGA: 4 βήματα
Κάντε οποιοδήποτε αισθητήρα από ένα FPGA: 4 βήματα

Βίντεο: Κάντε οποιοδήποτε αισθητήρα από ένα FPGA: 4 βήματα

Βίντεο: Κάντε οποιοδήποτε αισθητήρα από ένα FPGA: 4 βήματα
Βίντεο: Ένας εύκολος τρόπος για να αφαιρέσεις ή να εγκαταστήσεις εύκολα έναν αισθητήρα οξυγόνου | AUTODOC 2024, Νοέμβριος
Anonim
Image
Image
Το FPGA
Το FPGA

Οι περισσότεροι κατασκευαστές προσπάθησαν να δημιουργήσουν τουλάχιστον μία φορά στη ζωή τους ένα θερμόμετρο, ίσως αυτό που έχουν στο σπίτι δεν είναι αρκετά έξυπνο ή ίσως πιστεύουν ότι μπορούν να κατασκευάσουν το επόμενο NEST. Παρ 'όλα αυτά, κάποια στιγμή είχαν έναν μικροελεγκτή με το υπερσύγχρονο λογισμικό τους συνδεδεμένο με έναν αισθητήρα θερμοκρασίας (και ίσως άλλους αισθητήρες: πίεση, φως). Μέχρι τώρα όλα ήταν τέλεια, το λογισμικό λειτουργεί και ο αισθητήρας ανιχνεύει. Ας το δοκιμάσουμε!

Χμμμ … ίσως πρέπει να ζεστάνει τον αισθητήρα χρησιμοποιώντας πιστολάκι και να τον ψύξει χρησιμοποιώντας πάγο, λειτουργεί για λίγο. Αλλά δεν φαίνεται επαγγελματικό, ο αισθητήρας αλλάζει τιμές πολύ γρήγορα αν τον ζεστάνετε, δεν θερμαίνεται περισσότερο από δύο βαθμούς. Το έργο είναι προτομή! Αλλά ο αλγόριθμος είναι νέος, λαμβάνει υπόψη πολλούς παράγοντες, κρίμα που κόλλησε σε αυτό το ηλίθιο μικρό πράγμα.

Η λύση μου είναι η εξής: κάντε ένα FPGA να λειτουργεί ως αισθητήρας με τιμές που ρέουν από έναν υπολογιστή (ή αποθηκεύονται στη μνήμη ή δημιουργούνται ad-hoc μέσα στο FPGA). Έτσι, για το πολύτιμο MCU σας, το FPGA μοιάζει με αισθητήρα, αλλά όχι με οποιονδήποτε αισθητήρα: όποιος αισθητήρας σας αρέσει. Maybeσως αποφασίσετε ότι χρειάζεστε περισσότερη ανάλυση ή γρηγορότερο χρόνο απόκρισης από τον αναμενόμενο, πρέπει να αλλάξετε τον αισθητήρα. Παραγγείλτε το στο διαδίκτυο, θα φτάσει σε μερικές μέρες, σε μερικούς μήνες, ποιος ξέρει. Στερεώστε το PCB σας ή παραγγείλετε μια μονάδα με τον νέο αισθητήρα. Or… μερικά κλικ και το FPGA έχει διαμορφωθεί ως ο ολοκαίνουργιος αισθητήρας σας και μπορεί να μιμηθεί την ακριβή εσωτερική διαμόρφωση.

Τη στιγμή που γράφω αυτό, το FPGA θα μπορούσε να λειτουργήσει ως LM75 με δεδομένα θερμοκρασίας αποθηκευμένα στο BRAM (στο FPGA).

Βήμα 1: Το MCU

Το MCU της επιλογής μου είναι ένα LPC4337 σε ένα LPCXpresso. Πάνω από αυτό έχω μια ασπίδα (LPC General Purpose Shield) με οθόνη και πραγματικό αισθητήρα LM75. Το LPC4337 είναι ένα ARM Cortex M4 που λειτουργεί στα 200MHz και ένα μικρότερο Cortex M0 (δεν χρησιμοποιείται εδώ). Ο πραγματικός αισθητήρας συνδέεται με περιφερειακό I2C1 και ο εικονικός μας θα συνδεθεί με I2C0. Η πηγή είναι διαθέσιμη στο GitHub μου.

Πώς να το χτίσετε; Κατεβάστε το LPCXpresso IDE μαζί με τη βιβλιοθήκη LPCOpen. Εισαγάγετε τη βιβλιοθήκη στο IDE και ανοίξτε επίσης το έργο από το GitHub. Όλα πρέπει να ρυθμιστούν και μπορείτε να κάνετε κλικ στο "Debug" στην κάτω αριστερή γωνία.

Ολόκληρο το έργο βασίζεται σε ένα από τα παραδείγματα του NXP (για να δείξω ότι το έργο μου προσομοιώνει έναν πραγματικό αισθητήρα και δεν χρειάζεται ειδικό κώδικα από την πλευρά του MCU). Στο κύριο αρχείο (που ονομάζεται iox_sensor.cpp) βρίσκεται αυτός ο κωδικός:

#define SENSORS_ON_SHIELD

#if defined (SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elif defined (SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif

Αλλάζοντας το SENSOR_ON_SHIELD και το SENSOR_OR_FPGA, ο χρήστης μπορεί να αλλάξει κατά τη μεταγλώττιση σε ποιον αισθητήρα θα μιλήσει, τον πραγματικό ή τον εικονικό, καθώς βρίσκονται σε διαφορετικές ακίδες I2C.

Βήμα 2: Το FPGA

Ο πίνακας επιλογής μου FPGA είναι ένα Artix 7 της Digilent, με Xilinx Arty 7. Δύο από τους συνδετήρες PMod χρησιμοποιούνται, ένας για εντοπισμό σφαλμάτων και ένας για πραγματικό ωφέλιμο φορτίο, η σύνδεση με την πλακέτα MCU.

Και πάλι, ο πηγαίος κώδικας για το FPGA είναι διαθέσιμος στο GitHub μου (φάκελος fpgaSide).

Πώς να το χτίσετε; Κατεβάστε, αγοράστε ή ανοίξτε το Xilinx Vivado IDE. Εισαγάγετε τα αρχεία έργου από το GitHub. Ένα από τα αρχεία (content.coe) είναι τα δεδομένα θερμοκρασίας σε ακατέργαστη μορφή που πρόκειται να μεταδοθούν στον ψεύτικο αισθητήρα. Υπάρχει επίσης ένα αρχείο Excel με το ίδιο όνομα που βοηθά στη μετατροπή δεδομένων αναγνώσιμης θερμοκρασίας από τον άνθρωπο σε ακατέργαστα δεδομένα LM75. Σχεδιάζω να το αλλάξω σε μια αυτοματοποιημένη διαδικασία με ένα κομμάτι λογισμικού γραμμένο σε Java, αλλά μέχρι τότε αυτή η λύση λειτουργεί. Η σύνθεση και η υλοποίηση πρέπει να διαρκέσουν λίγο, λάβετε αυτό υπόψη.

Βήμα 3: Πώς λειτουργεί;

Πώς λειτουργεί?
Πώς λειτουργεί?
Πώς λειτουργεί?
Πώς λειτουργεί?

Όπως είπα, για το MCU, το FPGA μοιάζει με αισθητήρα, πιο συγκεκριμένα με αισθητήρα I2C. Η έξοδος του περιφερειακού I2C συνδέεται με την είσοδο του FPGA. Μέσα στο FPGA υπάρχουν 3 κύρια συστατικά:- Ελεγκτής I2C- Συσκευή I2C- Δεδομένα Ο ελεγκτής I2C λαμβάνει δεδομένα I2C από τις ακίδες του FPGA και τα στέλνει στα υπόλοιπα FPGA και κάνει το ίδιο με αντίστροφη σειρά. Διατηρεί μια εσωτερική μηχανή κατάστασης για το πρωτόκολλο I2C (παρεμπιπτόντως, εδώ είναι η τεκμηρίωση για αυτό). Τι στέλνει αυτό το στοιχείο στη συσκευή I2C; Το τρέχον byte, θέση αυτού του byte στην τρέχουσα επικοινωνία και αν το MCU γράφει ή διαβάζει από το FPGA. Η συσκευή I2C λαμβάνει τα αποστελλόμενα byte και ενημερώνει την προσομοιωμένη εσωτερική δομή του αισθητήρα. Μπορεί απλώς να ενημερώσει τον δείκτη καταχωρητή ή να ζητήσει νέα δεδομένα από την πηγή δεδομένων. Το στοιχείο δεδομένων μεταδίδει νέα σημεία δεδομένων. Προς το παρόν είναι απλώς μια μνήμη ROM της οποίας η διεύθυνση αυξάνεται (περίπου) δύο φορές το δευτερόλεπτο.

Ποιος είναι ο τελικός μου στόχος; Εμφανίζεται στη δεύτερη εικόνα. Δηλαδή: καταστήστε δυνατή την προσομοίωση περισσότερων συσκευών I2C (αισθητήρες και άλλες) ταυτόχρονα στο FPGA. Τα δεδομένα στο backend του αισθητήρα που αποθηκεύονται στο FPGA και μεταδίδονται από υπολογιστή μέσω USB ή Ethernet. Υποστηρίξτε πιο προηγμένους αισθητήρες και άλλες συσκευές I2C (μνήμη, προγράμματα οδήγησης LED κ.λπ.).

Βήμα 4: Το βάζουμε όλα μαζί

Το βάζουμε όλα μαζί
Το βάζουμε όλα μαζί
Το βάζουμε όλα μαζί
Το βάζουμε όλα μαζί

Τώρα είναι η ώρα να τα συνδέσουμε όλα μαζί. Θεωρητικά, είναι απλό: η πλακέτα mcu διαθέτει υποδοχή PMod (I2C0 & SSP0 (μπορεί να λειτουργήσει σαν SPI)). Ο πίνακας Artix διαθέτει 4 υποδοχές PMod που μπορούν να χρησιμοποιηθούν όπως θέλετε. Επιλέγω τον σύνδεσμο D για να μιλήσω με το MCU και τον σύνδεσμο B για να συνδεθώ στο Logic Analyzer μου.

Προειδοποίηση

Δεν μπορείτε να συνδέσετε τους δύο πίνακες μαζί έτσι ακριβώς. Γιατί; Το PMod δημιουργήθηκε για να διευκολύνει τη σύνδεση μιας πλακέτας Master/Host (που δίνει ενέργεια) σε μια πλακέτα Slave/Sensor (που λαμβάνει ενέργεια). Αλλά σε αυτό το έργο και οι δύο πίνακες δίνουν ισχύ και αν συνδέσετε την έξοδο 3.3V από τη μία πλακέτα στην έξοδο 3.3V της άλλης πλακέτας θα μπορούσαν να συμβούν άσχημα πράγματα. Αλλά μπορεί να μην το κάνουν και εσείς απλά να αλλάξετε τις παραμέτρους των ράβδων ισχύος του FPGA (είναι πολύ προσεκτικά σχεδιασμένες). Μην παίρνετε λοιπόν αυτό το ρίσκο και μετακινήστε τη φίσα μία ακίδα προς τα αριστερά (και επίσης γυρίστε την πλακέτα FPGA) όπως φαίνεται στις παραπάνω εικόνες. Εδώ είναι η προδιαγραφή PMod, μπορείτε να τη μελετήσετε, αυτό που έκανα με λίγα λόγια είναι να μην συνδέσω τα VCCs των δύο σανίδων.

Συνιστάται: