- FM Radio General Working
- Απαιτούμενα στοιχεία
- Δέκτης RDA5807
- Ενισχυτής ήχου
- Διάγραμμα κυκλώματος δέκτη FM Arduino
- Επεξήγηση κωδικού ραδιοφώνου Arduino FM
- Εργασία του ραδιοφώνου Arduino FM
Σήμερα σχεδόν όλοι χρησιμοποιούν τα κινητά τους τηλέφωνα για να ακούσουν μουσική, ειδήσεις, podcasts κ.λπ. Αλλά λίγο καιρό πριν όλοι εξαρτήσαμε από τα τοπικά ραδιόφωνα FM για να λάβουμε τα τελευταία νέα και τραγούδια, σιγά-σιγά αυτά τα ραδιόφωνα χάνουν τη δημοτικότητά τους, αλλά σε καταστάσεις έκτακτης ανάγκης όταν το Διαδίκτυο είναι εκτός λειτουργίας, τα ραδιόφωνα διαδραματίζουν σημαντικό ρόλο για τη μετάδοση πληροφοριών στους χρήστες. Τα ραδιοσήματα είναι πάντα παρόντα στον αέρα (τα οποία μεταδίδονται από τους σταθμούς) και το μόνο που χρειαζόμαστε είναι ένα κύκλωμα δέκτη FM για να πιάσουμε αυτά τα ραδιοσήματα και να τα μεταφέρουμε σε ηχητικά σήματα. Στα προηγούμενα μαθήματά μας, δημιουργήσαμε επίσης μερικούς άλλους πομπούς FM και δέκτες που παρατίθενται παρακάτω.
- Πομπός Raspberry Pi FM
- Ραδιόφωνο δέκτη Raspberry Pi FM
- Κύκλωμα πομπού FM
- Κύκλωμα πομπού FM χωρίς πηνίο
Σε αυτό το σεμινάριο πρόκειται να κατασκευάσουμε έναν δέκτη FM Arduino και να τον προσθέσουμε στο οπλοστάσιο του έργου μας. Θα χρησιμοποιήσουμε το RDA5807 FM Receiver IC με το Arduino και θα το προγραμματίσουμε, θα παίξουμε οποιοδήποτε ραδιοφωνικό σταθμό FM που μπορεί να συντονιστεί από τον χρήστη με ποτενσιόμετρο. Θα χρησιμοποιήσουμε επίσης έναν ενισχυτή ήχου μαζί με το κύκλωμα για τον έλεγχο της έντασης εξόδου του ραδιοφώνου Arduino FM, ακούγεται ενδιαφέρον, σωστά; Ας ξεκινήσουμε λοιπόν.
FM Radio General Working
Οι ραδιοφωνικοί σταθμοί μετατρέπουν ηλεκτρικά σήματα σε ραδιοσήματα και αυτά τα σήματα πρέπει να διαμορφωθούν πριν μεταδοθούν μέσω της κεραίας. Υπάρχουν δύο μέθοδοι στις οποίες ένα σήμα μπορεί να διαμορφωθεί, δηλαδή AM και FM. Όπως υποδηλώνει το όνομα, η διαμόρφωση πλάτους (ΑΜ) διαμορφώνει το πλάτος πριν μεταδώσει ένα σήμα ενώ, στη διαμόρφωση συχνότητας (FM), η συχνότητα του σήματος διαμορφώνεται πριν από τη μετάδοση μέσω της κεραίας. Στους ραδιοφωνικούς σταθμούς, χρησιμοποιούν διαμόρφωση συχνότητας για να διαμορφώσουν το σήμα και μετά να μεταδώσουν τα δεδομένα. Τώρα, το μόνο που χρειάζεται να χτίσουμε είναι ένας δέκτης που μπορεί να συντονιστεί σε συγκεκριμένες συχνότητες και να λάβει αυτά τα σήματα και αργότερα να μετατρέψει αυτά τα ηλεκτρικά σήματα σε ηχητικά σήματα. Θα χρησιμοποιήσουμε τοRDA5807 FM δέκτη μονάδα σε αυτό το έργο, η οποία απλοποιεί το κύκλωμα μας.
Απαιτούμενα στοιχεία
- Arduino Nano
- Δέκτης RDA5807
- Ενισχυτής ήχου
- Σύνδεση καλωδίων
- Ποτ - 100K
- Πίνακας Perf
Δέκτης RDA5807
Το RDA5807 είναι μια μονάδα στερεοφωνικού ραδιοφωνικού δέκτη FM με ένα ολοκληρωμένο συνθεσάιζερ. Η μονάδα υποστηρίζει την παγκόσμια ζώνη συχνοτήτων 50 - 115MHz, έλεγχο έντασης και σίγαση, προγραμματιζόμενη απενεργοποίηση (50 / 75us), ένδειξη ισχύος σήματος λήψης και SNR, 32.768KHz κρυσταλλικός ταλαντωτής, ψηφιακός έλεγχος αυτόματου κέρδους κ.λπ. μπλοκ διάγραμμα του δέκτη RDA5807M.
Έχει ψηφιακή αρχιτεκτονική χαμηλού IF και ενσωματώνει ενισχυτή χαμηλού θορύβου (LNA), ο οποίος υποστηρίζει τη ζώνη εκπομπής FM (50 έως 115 MHz), έναν προγραμματιζόμενο έλεγχο κέρδους (PGA), έναν μετατροπέα αναλογικού προς ψηφιακό υψηλής ανάλυσης και μετατροπείς ψηφιακής σε αναλογικά υψηλής πιστότητας (DAC). Ο περιοριστής αποτρέπει την υπερφόρτωση και περιορίζει τον αριθμό των προϊόντων διαμόρφωσης που δημιουργούνται από γειτονικά κανάλια. Το PGA ενισχύει το σήμα εξόδου του μίκτη και μετά ψηφιοποιείται με ADCs. Ο πυρήνας DSP διαχειρίζεται την επιλογή καναλιών, την αποδιαμόρφωση FM, τον στερεοφωνικό αποκωδικοποιητή MPX και το σήμα ήχου εξόδου. Το διάγραμμα pinout RDA5807 για το IC δίνεται παρακάτω.
Η μονάδα λειτουργεί με τροφοδοσία 1,8 - 3,3V. Όταν έρχεται σε κατάσταση ηρεμίας και ελέγχου που έχει επιλεγεί, η μονάδα επαναφέρεται όταν το VIO είναι Ενεργοποιημένο και υποστηρίζει επίσης τη μαλακή επαναφορά από τη σκανδάλη του bit1 από το 0 έως το 1 της διεύθυνσης 02H. Η μονάδα χρησιμοποιεί επικοινωνία I2C για επικοινωνία με το MCU και η διεπαφή ξεκινά με κατάσταση έναρξης, byte εντολών και byte δεδομένων. Το RDA5807 έχει 13 καταχωρητές 16 bit, ο καθένας εκτελεί μια συγκεκριμένη λειτουργία. Οι διευθύνσεις μητρώου ξεκινούν με 00H, η οποία κατανέμεται σε chip ID και τελειώνει με 0FH. Και στους 13 καταχωρητές, ορισμένα bits διατηρούνται ενώ μερικά είναι R / W. Κάθε καταχωρητής εκτελεί εργασίες όπως μεταβαλλόμενος όγκος, αλλαγή καναλιών κ.λπ. ανάλογα με τα bit που τους έχουν ανατεθεί.
Δεν μπορούμε να χρησιμοποιήσουμε απευθείας τη μονάδα όταν τη συνδέουμε σε κύκλωμα καθώς οι ακίδες κλείνουν. Έτσι, χρησιμοποίησα έναν πίνακα αρωμάτων και μερικές αρσενικές καρφίτσες και συγκολλήσαμε κάθε πείρο της μονάδας σε κάθε αρσενικό πείρο όπως φαίνεται στην παρακάτω εικόνα.
Ενισχυτής ήχου
Ένας ενισχυτής ήχου είναι μια ηλεκτρονική συσκευή, η οποία ενισχύει τα ηλεκτρονικά σήματα ήχου χαμηλής ισχύος σε επίπεδο όπου είναι αρκετά υψηλό για την οδήγηση ηχείων ή ακουστικών. Έχουμε δημιουργήσει έναν απλό ενισχυτή ήχου χρησιμοποιώντας το LM386, το κύκλωμα για το ίδιο φαίνεται παρακάτω και μπορείτε επίσης να ελέγξετε τον σύνδεσμο για να μάθετε περισσότερα σχετικά με αυτό το κύκλωμα, επίσης να ελέγξετε άλλα κυκλώματα ενισχυτή ήχου.
Διάγραμμα κυκλώματος δέκτη FM Arduino
Χρησιμοποιήσαμε δύο ποτενσιόμετρα για το συντονισμό της ζώνης FM και τον έλεγχο της έντασης του ενισχυτή ήχου. Για να αλλάξετε την ένταση, μπορείτε είτε να τροποποιήσετε το δοχείο, το οποίο είναι συνδεδεμένο μεταξύ του 1ου και του 8ου πείρου του LM386 ή του δοχείου, το οποίο είναι συνδεδεμένο στον ακροδέκτη 3 του LM386. Η παρακάτω εικόνα δείχνει το πλήρες διάγραμμα κυκλώματος για το ραδιόφωνο Arduino FM.
Έκανα μικρές αλλαγές στον ενισχυτή. Αντί να χρησιμοποιώ δύο ποτενσιόμετρα στον ενισχυτή, χρησιμοποίησα μόνο ένα. Αντάλλαξα το δοχείο, το οποίο χρησιμοποιείται για να αλλάξω το κέρδος, με μια αντίσταση. Τώρα λοιπόν το έργο μας έχει δύο ποτενσιόμετρα ένα για συντονισμό και ένα για αλλαγή της έντασης. Το ποτενσιόμετρο, το οποίο χρησιμοποιείται για το συντονισμό του καναλιού συνδέεται με το Arduino nano. Ο κεντρικός πείρος του δοχείου συνδέεται με τον ακροδέκτη A0 του Arduino nano και ένας από τους υπόλοιπους δύο ακροδέκτες συνδέεται στο 5V και ο άλλος συνδέεται με το GND. Ένα άλλο δοχείο χρησιμοποιείται για τον έλεγχο της έντασης του ραδιοφώνου και συνδέεται όπως φαίνεται στο παραπάνω σχήμα.
Οι ακίδες A4 και A5 του Arduino συνδέονται με SDA και SCL pin του RDA5807M. λάβετε υπόψη ότι η μονάδα δέκτη λειτουργεί μόνο σε 3.3V. Συνδέστε λοιπόν τον ακροδέκτη 3v3 του Nano στον ακροδέκτη VCC της μονάδας δέκτη. Μόλις έγιναν οι συνδέσεις, η ρύθμιση μου έμοιαζε έτσι
Επεξήγηση κωδικού ραδιοφώνου Arduino FM
Ο κωδικός θα προετοιμάσει τη μονάδα δέκτη και στη συνέχεια ρυθμίζει το κανάλι με την προκαθορισμένη συχνότητα. Όταν η τιμή που διαβάζεται από το νανο στο πείρο Α0 αλλάζει (αλλάζοντας ποτ) η συχνότητα αλλάζει με τη σειρά της αλλάζει το κανάλι. Ο πλήρης κωδικός δίνεται στο τέλος της σελίδας.
Ξεκινάμε το πρόγραμμά μας προσθέτοντας την απαιτούμενη βιβλιοθήκη καλωδίων για επικοινωνία με το RDA5807. Στη συνέχεια, στη μεταβλητή "κανάλι" ορίζουμε την τιμή του καναλιού. Κάθε φορά που ξεκινά το ραδιόφωνο, θα συντονίζεται αυτόματα σε αυτό το κανάλι.
#περιλαμβάνω
Στη συνέχεια, θα φορτώσουμε bytes σε κάθε καταχωρητή στο RDA5807 IC για να ορίσουμε την αρχική μας διαμόρφωση. Σε αυτό το σημείο, επαναφέρουμε τον δέκτη.
uint8_t boot_config = {/ * register 0x02 * / 0b11000001, 0b00000011, / * register 0x03 * / 0b00000000, 0b00000000, / * register 0x04 * / 0b00001010, 0b00000000, / * register 0x05 * / 0b10001000, 0b10001000, 0b1001000 0b00000000, 0b00000000, / * εγγραφή 0x07 * / 0b01000010, 0b00000010,};
Μετά την επαναφορά της συσκευής, μπορούμε να συντονίσουμε τη συσκευή. Για συντονισμό του καναλιού, χρειάζεται μόνο να προγραμματίσουμε τα πρώτα 4 byte. Αυτό το μέρος του κώδικα θα αλλάξει το κανάλι στην επιθυμητή συχνότητα. Στην I2C αρχικά, ξεκινάμε τη μετάδοση, γράφουμε ή διαβάζουμε τα δεδομένα και μετά τερματίζουμε τη μετάδοση. Σε αυτό το IC δέκτη, δεν χρειάζεται να καθορίσουμε τη διεύθυνση καθώς το φύλλο δεδομένων λέει ξεκάθαρα ότι η διασύνδεση I2C έχει ένα σταθερό μητρώο εκκίνησης, δηλαδή 0x02h για μια λειτουργία εγγραφής και 0x0Ah για μια λειτουργία ανάγνωσης.
uint8_t tune_config = {/ * register 0x02 * / 0b11000000, 0b00000001, / * register 0x03 * / (κανάλι >> 2), ((κανάλι & 0b11) << 6) - 0b00010000};
Στην εγκατάσταση, αρχικοποιούμε τη διαμόρφωση εκκίνησης (επαναφορά) και μετά συντονίζουμε σε ένα κανάλι γράφοντας συντονίζοντας byte διαμόρφωσης στο RDA5807M.
άκυρη ρύθμιση () {Serial.begin (9600); pinMode (Α0, ΕΙΣΟΔΟΣ); / * Σύνδεση με δέκτη FM RDA5807M: * / Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (boot_config, BOOT_CONFIG_LEN); Wire.endTransmission (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Όταν χρησιμοποιούσα ποτ για συντονισμό σε συχνότητα, είχα αντιμετωπίσει ένα πρόβλημα. Οι τιμές που διαβάζονται από τον πείρο A0 δεν είναι σταθερές. Υπάρχει θόρυβος με την επιθυμητή τιμή. Χρησιμοποίησα έναν κεραμικό πυκνωτή 0.1uF συνδεδεμένο μεταξύ A0 και GND, αν και ο θόρυβος ελαχιστοποιήθηκε, δεν φτάνει στο επιθυμητό επίπεδο. Έτσι, έπρεπε να κάνω κάποιες αλλαγές στον κώδικα. Στην αρχή, σημείωσα τις μετρήσεις που επηρεάζονται από τον θόρυβο. Ανακάλυψα ότι η μέγιστη τιμή του θορύβου είναι 10. Γι 'αυτό έγραψα το πρόγραμμα με τέτοιο τρόπο ώστε να λαμβάνει υπόψη τη νέα τιμή μόνο εάν η διαφορά μεταξύ της νέας τιμής και της παλιάς τιμής του ίδιου πείρου είναι μεγαλύτερη από 10 και μετά συντονίζεται στο επιθυμητό κανάλι.
void loop () {int channel1 = 187, avg = 0, newA; static int oldA = 0; int αποτέλεσμα = 0; newA = analogRead (A0); εάν ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); εάν (newA! = oldA) {channel = channel1 + (newA / 10); myChangeChannel (κανάλι); oldA = newA; }}} // τέλος βρόχου
Αυτή η συνάρτηση χρησιμοποιείται για τον ορισμό των byte της συστοιχίας tune_config και στη συνέχεια μεταδίδει τα δεδομένα στο RDA5807M IC χρησιμοποιώντας το πρωτόκολλο I2C.
void myChangeChannel (int κανάλι) {/ * άκυρο αν δεν επιστραφεί τίποτα άλλο int * / tune_config = (κανάλι >> 2); tune_config = ((κανάλι & 0b11) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Εργασία του ραδιοφώνου Arduino FM
Όταν η μονάδα ενεργοποιείται, ο κωδικός μας επαναφέρει το RDA5807-M IC και το θέτει σε ένα κανάλι του επιθυμητού χρήστη (Σημείωση: αυτή η συχνότητα λαμβάνεται ως η βασική συχνότητα στην οποία θα αυξηθεί η συχνότητα). Αλλάζοντας το ποτενσιόμετρο (συνδεδεμένο στο A0), οι τιμές που διαβάζονται από το Arduino Nano αλλάζουν. Εάν η διαφορά μεταξύ της νέας και της παλαιάς τιμής είναι μεγαλύτερη από 10, ο κώδικας μας θα λάβει υπόψη αυτήν τη νέα τιμή. Το κανάλι αλλάζει ανάλογα με την αλλαγή στη νέα τιμή από την παλιά τιμή. Η αύξηση ή η μείωση της έντασης εξαρτάται από το ποτενσιόμετρο, το οποίο συνδέεται μεταξύ του πείρου 3 και του GND.
Στο τέλος της κατασκευής και της κωδικοποίησης, θα έχετε το δικό σας ραδιόφωνο FM. Η πλήρης λειτουργία του ραδιοφώνου FM βρίσκεται στο βίντεο που συνδέεται στο κάτω μέρος αυτής της σελίδας. Ελπίζω να απολαύσατε το έργο και να μάθετε κάτι χρήσιμο. Εάν έχετε οποιεσδήποτε ερωτήσεις για να λειτουργήσει αυτό το έργο, μπορείτε να τα αφήσετε στην ενότητα σχολίων ή να χρησιμοποιήσετε τα φόρουμ μας για άλλη τεχνική βοήθεια.