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

Γεννήτρια κυματομορφής Arduino: 5 βήματα (με εικόνες)
Γεννήτρια κυματομορφής Arduino: 5 βήματα (με εικόνες)

Βίντεο: Γεννήτρια κυματομορφής Arduino: 5 βήματα (με εικόνες)

Βίντεο: Γεννήτρια κυματομορφής Arduino: 5 βήματα (με εικόνες)
Βίντεο: Τρόπος χρήσης του κιτ ψηφιακού παλμογράφου JYE Tech DSO138 2024, Ιούλιος
Anonim
Γεννήτρια κυματομορφής Arduino
Γεννήτρια κυματομορφής Arduino

Ενημέρωση Φεβρουαρίου 2021: δείτε τη νέα έκδοση με 300 φορές το ποσοστό δειγματοληψίας, με βάση το Raspberry Pi Pico

Στο εργαστήριο, χρειάζεται συχνά ένα επαναλαμβανόμενο σήμα συγκεκριμένης συχνότητας, σχήματος και πλάτους. Μπορεί να είναι να δοκιμάσετε έναν ενισχυτή, να ελέγξετε ένα κύκλωμα, ένα εξάρτημα ή έναν ενεργοποιητή. Ισχυρές γεννήτριες κυματομορφών διατίθενται στο εμπόριο, αλλά είναι σχετικά εύκολο να φτιάξετε μόνοι σας ένα Arduino Uno ή Arduino Nano, δείτε για παράδειγμα:

www.instructables.com/id/Arduino-Waveform-…

www.instructables.com/id/10-Resister-Ardui…

Ακολουθεί η περιγραφή ενός άλλου με τα ακόλουθα χαρακτηριστικά:

* Ακριβείς κυματομορφές: Έξοδος 8 bit χρησιμοποιώντας R2R DAC, σχήμα 256 δειγμάτων

* Γρήγορο: Ρυθμός δειγματοληψίας 381 kHz

* Ακριβής: Εύρος συχνοτήτων βημάτων 1mHz. Το ίδιο ακριβές με τον κρύσταλλο Arduino.

* Εύκολη λειτουργία: κυματομορφή και ρύθμιση συχνότητας με έναν περιστροφικό κωδικοποιητή

* Μεγάλο εύρος πλάτους: millivolts έως 20V

* 20 προκαθορισμένες κυματομορφές. Ευθεία για να προσθέσετε περισσότερα.

* Εύκολη κατασκευή: Arduino Uno ή Nano συν τυπικά εξαρτήματα

Βήμα 1: Τεχνικές εκτιμήσεις

Δημιουργία αναλογικού σήματος

Ένα μειονέκτημα του Arduino Uno και του Nano είναι ότι δεν διαθέτει μετατροπέα ψηφιακού σε αναλογικό (DAC), επομένως δεν είναι δυνατό να τον εξάγουμε μια αναλογική τάση απευθείας στις ακίδες. Μια λύση είναι η σκάλα R2R: 8 ψηφιακές ακίδες είναι συνδεδεμένες σε ένα δίκτυο αντιστάσεων έτσι ώστε να μπορούν να επιτευχθούν 256 επίπεδα εξόδου. Μέσω άμεσης πρόσβασης στη θύρα, το Arduino μπορεί να ορίσει 8 ακίδες ταυτόχρονα με μία μόνο εντολή. Για το δίκτυο αντιστάσεων, χρειάζονται 9 αντιστάσεις με τιμή R και 8 με τιμή 2R. Χρησιμοποίησα 10kOhm ως τιμή για το R, το οποίο διατηρεί το ρεύμα από τις ακίδες στα 0,5mA ή λιγότερο. Υποθέτω ότι το R = 1kOhm θα μπορούσε επίσης να λειτουργήσει, καθώς το Arduino μπορεί εύκολα να αποδώσει 5mA ανά καρφίτσα, 40mA ανά θύρα. Είναι σημαντικό ο λόγος μεταξύ των αντιστάσεων R και 2R να είναι πραγματικά 2. Αυτό επιτυγχάνεται πιο εύκολα βάζοντας 2 αντιστάσεις αξίας R σε σειρά, για συνολικά 25 αντιστάσεις.

Συσσωρευτής φάσης

Η δημιουργία κυματομορφής στη συνέχεια καταλήγει στην επανειλημμένη αποστολή μιας ακολουθίας αριθμών 8-bit στους ακροδέκτες Arduino. Η κυματομορφή αποθηκεύεται σε έναν πίνακα 256 byte και αυτή η συστοιχία λαμβάνεται δείγμα και αποστέλλεται στις ακίδες. Η συχνότητα του σήματος εξόδου καθορίζεται από το πόσο γρήγορα κάποιος προχωρά μέσα από τον πίνακα. Ένας ισχυρός, ακριβής και κομψός τρόπος για να το κάνετε αυτό είναι ένας συσσωρευτής φάσης: ένας αριθμός 32-bit αυξάνεται σε τακτά χρονικά διαστήματα και χρησιμοποιούμε τα 8 πιο σημαντικά bit ως δείκτη του πίνακα.

Γρήγορη δειγματοληψία

Οι διακοπές επιτρέπουν τη δειγματοληψία σε καλά καθορισμένους χρόνους, αλλά το γενικό κόστος των διακοπών περιορίζει τη συχνότητα δειγματοληψίας στα ~ 100kHz. Ένας άπειρος βρόχος για την ενημέρωση της φάσης, τη δειγματοληψία της κυματομορφής και τον καθορισμό των ακίδων διαρκεί 42 κύκλους ρολογιού, επιτυγχάνοντας έτσι ένα ρυθμό δειγματοληψίας 16MHz/42 = 381kHz. Η περιστροφή ή ώθηση του περιστροφικού κωδικοποιητή προκαλεί αλλαγή πείρου και διακοπή που βγαίνει από το βρόχο για να αλλάξει τη ρύθμιση (κυματομορφή ή συχνότητα). Σε αυτό το στάδιο οι 256 αριθμοί στον πίνακα επανυπολογίζονται έτσι ώστε να μην χρειάζεται να πραγματοποιηθούν πραγματικοί υπολογισμοί της κυματομορφής στον κύριο βρόχο. Η απόλυτη μέγιστη συχνότητα που μπορεί να δημιουργηθεί είναι 190kHz (το μισό του ρυθμού δειγματοληψίας), αλλά στη συνέχεια υπάρχουν μόνο δύο δείγματα ανά περίοδο, οπότε δεν υπάρχει πολύς έλεγχος του σχήματος. Η διεπαφή δεν επιτρέπει έτσι τη ρύθμιση της συχνότητας πάνω από 100kHz. Στα 50kHz, υπάρχουν 7-8 δείγματα ανά περίοδο και στα 1,5 kHz και κάτω από όλα τα 256 αριθμούς που είναι αποθηκευμένοι στη συστοιχία λαμβάνουν δείγμα κάθε περίοδο. Για κυματομορφές όπου το σήμα αλλάζει ομαλά, για παράδειγμα το ημιτονοειδές κύμα, η παράλειψη δειγμάτων δεν αποτελεί πρόβλημα. Αλλά για κυματομορφές με στενές αιχμές, για παράδειγμα ένα τετραγωνικό κύμα με μικρό κύκλο λειτουργίας, υπάρχει ο κίνδυνος για συχνότητες άνω των 1,5 kHz που λείπει ένα μόνο δείγμα να έχει ως αποτέλεσμα η κυματομορφή να μην συμπεριφέρεται όπως αναμενόταν

Ακρίβεια της συχνότητας

Ο αριθμός με τον οποίο αυξάνεται η φάση σε κάθε δείγμα είναι ανάλογος της συχνότητας. Η συχνότητα μπορεί έτσι να ρυθμιστεί σε ακρίβεια 381kHz/2^32 = 0,089mHz. Στην πράξη τέτοια ακρίβεια δεν χρειάζεται ποτέ, οπότε η διεπαφή περιορίζει τη ρύθμιση της συχνότητας σε βήματα του 1mHz. Η απόλυτη ακρίβεια της συχνότητας καθορίζεται από την ακρίβεια της συχνότητας ρολογιού Arduino. Αυτό εξαρτάται από τον τύπο Arduino, αλλά οι περισσότεροι καθορίζουν συχνότητα 16.000MHz, άρα ακρίβεια ~ 10^-4. Ο κώδικας επιτρέπει την τροποποίηση του λόγου της συχνότητας και της αύξησης φάσης για να διορθώσει τις μικρές αποκλίσεις της υπόθεσης των 16 MHz.

Αποθήκευση και ενίσχυση

Το δίκτυο αντιστάσεων έχει υψηλή σύνθετη αντίσταση εξόδου, οπότε η τάση εξόδου του πέφτει γρήγορα εάν συνδέεται φορτίο. Αυτό μπορεί να λυθεί με αποθήκευση ή ενίσχυση της εξόδου. Εδώ, το buffering και η ενίσχυση γίνονται με ένα opamp. Χρησιμοποίησα το LM358 επειδή είχα μερικά. Είναι ένα αργό opamp (ρυθμός ανατροπής 0,5V ανά μικροδευτερόλεπτο), οπότε σε υψηλή συχνότητα και υψηλό πλάτος το σήμα παραμορφώνεται. Ένα καλό είναι ότι μπορεί να χειριστεί τάσεις πολύ κοντά στα 0V. Ωστόσο, η τάση εξόδου περιορίζεται σε ~ 2V κάτω από τη ράγα, οπότε η χρήση ισχύος +5V περιορίζει την τάση εξόδου στα 3V. Οι μονάδες αναβάθμισης είναι συμπαγείς και φθηνές. Τροφοδοτώντας +20V στο opamp, μπορεί να παράγει σήματα με τάση έως 18V. (ΣΗΜΕΙΩΣΗ, το σχηματικό γράφει LTC3105 επειδή αυτό ήταν το μόνο βήμα που βρήκα στο Fritzing. Στην πραγματικότητα χρησιμοποίησα μια μονάδα MT3608, δείτε εικόνες στα επόμενα βήματα). Επιλέγω να εφαρμόσω μια μεταβλητή εξασθένηση στην έξοδο του R2R DAC και στη συνέχεια να χρησιμοποιήσω το ένα από τα opamps για να ρυθμίσω το σήμα χωρίς ενίσχυση και το άλλο για ενίσχυση κατά 5,7, έτσι ώστε το σήμα να μπορεί να φτάσει τη μέγιστη έξοδο περίπου 20V. Το ρεύμα εξόδου είναι μάλλον περιορισμένο, ~ 10mA, οπότε μπορεί να χρειαστεί ένας ισχυρότερος ενισχυτής εάν το σήμα πρόκειται να οδηγήσει ένα μεγάλο ηχείο ή ηλεκτρομαγνήτη.

Βήμα 2: Απαιτούμενα εξαρτήματα

Για τη γεννήτρια κύριας κυματομορφής

Arduino Uno ή Nano

Οθόνη LCD 16x2 + κοπτικό 20kOhm και αντίσταση σειράς 100Ohm για οπίσθιο φωτισμό

Περιστροφικός κωδικοποιητής 5 ακίδων (με ενσωματωμένο κουμπί)

25 αντιστάσεις 10kOhm

Για το buffer/ενισχυτή

LM358 ή άλλος διπλός ενισχυτής

ενότητα αναβάθμισης που βασίζεται στο MT3608

Μεταβλητή αντίσταση 50kOhm

Αντίσταση 10kOhm

Αντίσταση 47kOhm

Πυκνωτής 1muF

Βήμα 3: Κατασκευή

Κατασκευή
Κατασκευή
Κατασκευή
Κατασκευή

Συγκόλλησα τα πάντα σε έναν πίνακα πρωτοτύπων 7x9cm, όπως φαίνεται στην εικόνα. Δεδομένου ότι έγινε λίγο ακατάστατο με όλα τα καλώδια, προσπάθησα να χρωματίσω τα καλώδια που μεταφέρουν θετική τάση κόκκινο και αυτά που μεταφέρουν μαύρο στο έδαφος.

Ο κωδικοποιητής που χρησιμοποίησα έχει 5 ακίδες, 3 στη μία πλευρά, 2 στην άλλη πλευρά. Η πλευρά με 3 ακίδες είναι ο πραγματικός κωδικοποιητής, η πλευρά με 2 ακίδες είναι το ενσωματωμένο κουμπί ώθησης. Από την πλευρά των 3 ακίδων, ο κεντρικός πείρος πρέπει να συνδεθεί με τη γείωση, οι άλλοι δύο ακροδέκτες με το D10 και το D11. Στην πλευρά των 2 ακίδων, ο ένας πείρος πρέπει να είναι συνδεδεμένος στη γείωση και ο άλλος στο D12.

Είναι το πιο άσχημο πράγμα που έχω φτιάξει αλλά λειτουργεί. Θα ήταν ωραίο να βάλουμε ένα περίβλημα, αλλά προς το παρόν η επιπλέον εργασία και το κόστος δεν το δικαιολογούν πραγματικά. Το Nano και η οθόνη είναι προσαρτημένα με κεφαλίδες pin. Δεν θα το έκανα ξανά αν έφτιαχνα ένα νέο. Δεν έβαλα συνδετήρες στην πλακέτα για να πάρει τα σήματα. Αντ 'αυτού, τα μαζεύω με καλώδια κροκοδείλων από προεξέχοντα κομμάτια χάλκινου σύρματος, με την ετικέτα ως εξής:

R - ακατέργαστο σήμα από το R2R DAC

Β - ρυθμιστικό σήμα

Α - ενισχυμένο σήμα

Τ - σήμα χρονοδιακόπτη από τον ακροδέκτη 9

G - έδαφος

+ - θετική «υψηλή» τάση από τη μονάδα επιτάχυνσης

Βήμα 4: Ο κώδικας

Ο κωδικός, ένα σκίτσο Arduino, επισυνάπτεται και πρέπει να μεταφορτωθεί στο Arduino.

20 κυματομορφές έχουν προκαθοριστεί. Θα πρέπει να είναι απλό να προσθέσετε οποιοδήποτε άλλο κύμα. Σημειώστε ότι τα τυχαία κύματα γεμίζουν τον πίνακα 256 τιμών με τυχαίες τιμές, αλλά το ίδιο μοτίβο επαναλαμβάνεται κάθε περίοδος. Τα αληθινά τυχαία σήματα ακούγονται σαν θόρυβος, αλλά αυτή η κυματομορφή ακούγεται πολύ περισσότερο σαν ένα σφύριγμα.

Ο κωδικός ορίζει ένα σήμα 1kHz στην ακίδα D9 με TIMER1. Αυτό είναι χρήσιμο για τον έλεγχο του χρονισμού του αναλογικού σήματος. Έτσι κατάλαβα ότι ο αριθμός των κύκλων ρολογιού είναι 42: Αν υποθέσω 41 ή 43 και παράγω ένα σήμα 1kHz, έχει σαφώς διαφορετική συχνότητα από το σήμα στον ακροδέκτη D9. Με την τιμή 42 ταιριάζουν απόλυτα.

Κανονικά, το Arduino διακόπτει κάθε χιλιοστό του δευτερολέπτου για να παρακολουθεί τον χρόνο με τη συνάρτηση millis (). Αυτό θα διαταράξει την ακριβή παραγωγή σήματος, οπότε η συγκεκριμένη διακοπή απενεργοποιείται.

Ο μεταγλωττιστής λέει: "Το σκίτσο χρησιμοποιεί 7254 byte (23%) χώρου αποθήκευσης προγράμματος. Το μέγιστο είναι 30720 bytes. Οι καθολικές μεταβλητές χρησιμοποιούν 483 bytes (23%) δυναμικής μνήμης, αφήνοντας 1565 byte για τοπικές μεταβλητές. Το μέγιστο είναι 2048 bytes." Υπάρχει λοιπόν άφθονος χώρος για πιο εξελιγμένο κώδικα. Προσοχή ότι μπορεί να χρειαστεί να επιλέξετε "ATmega328P (παλιό bootloader)" για να ανεβάσετε με επιτυχία στο Nano.

Βήμα 5: Χρήση

Η γεννήτρια σήματος μπορεί να τροφοδοτηθεί απλά μέσω του καλωδίου mini-USB του Arduino Nano. Είναι καλύτερα να γίνεται με τράπεζα ισχύος, έτσι ώστε να μην υπάρχει τυχαίος βρόχος γείωσης με τη συσκευή με την οποία μπορεί να συνδεθεί.

Όταν είναι ενεργοποιημένο θα δημιουργήσει ημιτονοειδές κύμα 100Hz. Περιστρέφοντας το κουμπί, μπορείτε να επιλέξετε έναν από τους άλλους 20 τύπους κυμάτων. Περιστρέφοντας ενώ πιέζεστε, ο δρομέας μπορεί να ρυθμιστεί σε οποιοδήποτε από τα ψηφία της συχνότητας, τα οποία στη συνέχεια μπορούν να αλλάξουν στην επιθυμητή τιμή.

Το πλάτος μπορεί να ρυθμιστεί με το ποτενσιόμετρο και μπορεί να χρησιμοποιηθεί είτε το ρυθμιστικό ή το ενισχυμένο σήμα.

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

Για πολύ χαμηλές συχνότητες, η έξοδος μπορεί να απεικονιστεί με μια σειρά LED με αντίσταση 10kOhm. Οι συχνότητες ήχου μπορούν να ακουστούν με ένα ηχείο. Βεβαιωθείτε ότι έχετε ρυθμίσει το σήμα πολύ μικρό ~ 0.5V, διαφορετικά το ρεύμα γίνεται πολύ υψηλό και το σήμα αρχίζει να κουρεύεται.

Συνιστάται: