Υλοποίηση preamplifier PGA23xx

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

Στο ψηφιακό τα In-Out είναι από αριστερά προς τα δεξιά: V+, SDI/SDO, CS, SCLK, GND

Ανεβάζω το layout για συζήτηση.
 

Attachments

  • pga.jpg
    pga.jpg
    77.6 KB · Views: 221
Παιδες η προενυσχηση πως θα γινεται? μεσω του pga?..η ο καθενας οτι θελει? εχασα κατι?
 
Μέσω του pga ασφαλώς.
Εάν σε παραξένεψε η δυνατότητα εξασθένησης σε κάθε είσοδο (κατά -6dB) στο στάδιο της εισόδου, προφανώς βάζει αυτή τη δυνατότητα ο Ντίνος (χειροκίνητη) για προστασία από πηγή με υπερβολική υψηλή έξοδο και αποφυγή ψαλιδισμού εισόδου.

Θα τα αναλύσουμε όλα αυτά με την παρουσίαση της δουλειάς του.
 
Προσωπικά χρησιμοποιώ τον IR κώδικα του hifiduino, ο οποίος δεν έρχεται καν σε μορφή library.. απλά πράγματα.. δουλεύει out-of-the-box με το τηλεκοντρόλ της Apple αλλά και με οποιοδήποτε τηλεκοντρόλ παίζει με τους κώδικες της NEC. Εγώ το δουλεύω ακόμα με ένα τ/χ από BlueSky.. :p

Όσο αφορά το memory footprint, δεν έχω ιδέα. Ο κώδικας του βουβαλιού μου έχει περάσει πλέον τις 2200 γραμμές και τα 70ΚΒ οπότε τρέχα γύρευε.. Πάντως το κομμάτι του IR λογικά θα είναι πολύ πιο μικρό από 10Κ.

Περισσότερα εδώ: http://hifiduino.wordpress.com/code/

Καλά δεν είναι και λίγα απλά ο άλλος παίζει ΤΑ ΠΆΝΤΑ ΌΛΑ. Συν ότι πρέπει να καταλάβουμε τί κάνει και πώς για να πάρουμε αυτό που θέλουμε.
Προσωπικά μου αρέσουν οι βιβλιοθήκες στο arduino διότι κρατάνε το sketch μικρό και ουσιαστικό.
Το έχουμε στα υπόψιν πάντως.
 
Ανεβάζω το σχηματικό για σχολιασμό, τροποποιήσεις και διορθώσεις. Θα ακολουθήσουν πρόσθετες διευκρινήσεις και μια λίστα με ερωτήσεις για το τελικό σχέδιο.

View attachment Pre Input.pdf
 
To τύπωσα και εγώ σε Α4 και κατάλαβα ότι δεν ειναι απλά σεντόνι, είναι πανό!
Μόνο σε οθόνη με αρκετή μεγέθυνση και επισκόπηση ανά περιοχές...

Ωραία δουλειά Ντίνο, θέλω να το μελετήσω και άλλο, πριν γράψω.
 
Χμμ. αφού ξεπέρασα το αρχικό εγκεφαλικό (με την καλή έννοια) της δουλείας που έχεις ρίξει να σου πω και ένα μπράβο :)

Μια ένσταση την οποία δεν την απευθύνω μόνο σε εσένα dino αλλά σε όλους όσους θα ενδιαφερθούν να το φτιάξουν αυτό το project όταν με το καλό τελειώσει.
Η παραπάνω πλακέτα έχει πολλά χαρακτηριστικά, μήπως είναι λίγο overkill? Πχ το pre-out το θεωρώ μάλλον περιττό μιας και pre κάνουμε

Έχεις καμιά ιδέα πόσο μεγάλη θα βγει η πλακέτα ?
Μεγάλη πλακέτα μεγάλο κόστος -> μεγάλος κόστος λιγότερο ενδιαφέρον -> ακόμα ακριβότερη πλακέτα.

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


Υγ. Τα τροφοδοτικά μάλλον βγάλε τα τελείως διότι εκτός του ότι οι περισσότεροι θα πάνε σε salas, μάλλον θα είναι και κοινά με αυτά των pga.
Άσε μόνο αυτό της τροφοδοσίας των relay για την ώρα.
 
Απάντηση: Re: Υλοποίηση preamplifier PGA23xx

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

Ας μαζέψουμε τις παρατηρήσεις μας, έτσι ώστε να το ολοκληρώσουμε.

Έχεις καμιά ιδέα πόσο μεγάλη θα βγει η πλακέτα ?
Μεγάλη πλακέτα μεγάλο κόστος -> μεγάλος κόστος λιγότερο ενδιαφέρον -> ακόμα ακριβότερη πλακέτα.

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

Η παραπάνω σκέψη του VFXCode, είχε προταθεί και στην αρχή του νήματος αν και δεν της είχα δώσει και τόσο προσοχή, γιατί σε μένα το μυαλό μου στροβιλίζει από τη diy προσέγγιση.
Είναι σωστή όμως, όταν η δουλειά δοθεί σε κατασκευαστή πλακετών και εκεί τα πάντα μετράνε!
Εάν σπάσει η πλακέτα της εισόδου σε τμήματα που να συνδέονται παράπλευρα - όπως αυτό του pga - θα ρίξει το κόστος κατασκευής σε κάποιον που δεν τον ενδιαφέρουν πολλά input-output. Σε κάποιον άλλον που θέλει επεκτάσεις, απλά θα αθρώνει τις πλακέτες (κουμπωτές).
Αυτή η προσέγγιση θα ρίξει το κόστος και των υλικών, αλλά και της παραγγελίας της πλακέτας ως μικρότερη διάσταση.

Υγ. Τα τροφοδοτικά μάλλον βγάλε τα τελείως διότι εκτός του ότι οι περισσότεροι θα πάνε σε salas, μάλλον θα είναι και κοινά με αυτά των pga.
Άσε μόνο αυτό της τροφοδοσίας των relay για την ώρα.

- Συμφωνώ, να παραμείνει το τροφοδοτικό για την οδήγηση των ρελέ και η τροφοδοσία των τελεστικών να παραμείνει αυτόνομη για ελεύθερη προσέγγιση. Άλλωστε τα τροφοδοτικά που σχεδίασες Ντίνο, θα τα δώσουμε σε χωριστό pcb για diy κατασκευή. Αυτό το τροφοδοτικό μπορεί να συνδιαστεί και με την απαίτηση της τροφοδοσίας του ελεγκτή, οπότε εάν είναι κοινή τότε ή θα τραβήξουμε από εδώ γραμμή και για τον ελεγκτή ή θα το βγάλουμε εντελώς και θα μπει δίπλα στα λοιπά τροφοδοτικά και η κάθε πλακέτα απλά θα έχει είσοδο για την απαιτούμενη τάση δίχως κανένα τροφοδοτικό επάνω της.

- Βλέπω ότι το σήμα από την έξοδο των ρελέ πάει καρφί στον τελεστικό δίχως Lo & Hi Filter. Ούτε στην είσοδο του pga έχουμε υλοποιήσει στάδιο φιλτραρίσματος. Τι θα κάνουμε θα το αφήσουμε αφιλτράριστο με μεγάλη προσοχή στην τοποθέτηση τελεστικού ή μήπως να υλοποιήσουμε μεταξύ τελεστικού και εξόδου ρελέ ένα διπλό φίλτρο χαλαρό;

- Βλέπω ότι μου έχεις προβλέψει, 10πινη φίσα για το pga. Να το δούμε λίγο αυτό.
Pin1/Pin 3 = μου έχεις το σήμα από τους τελεστικούς...ΟΚ έχω αφήσει σχετική αναμονή.
Pin2/Pin4/Pin6 = μου έχεις γείωση που μου τη στέλνεις με τρία πιν. Έχω αφήσει μόνο ένα πιν γείωσης εισόδου αναλογικού σήματος και ένα pin γείωσης εξόδου αναλογικού σήματος προς την πλακέτα σου. Υπάρχει κάτι που μου ξεφεύγει;
Pin5/Pin7 = αναμένεις από μένα έξοδο pga L+R για bypass pre έτσι; Δεν το έχω υπολογίσει. Εάν το θέλουμε να το τροποποιήσω.
Pin8/Pin9 = προφανώς είναι η δική μου έξοδος γραμμής L και R, ΟΚ εδώ
Pin10 = βλέπω μου στέλνεις τάση από το τροφοδοτικό των ρελέ. Βλέπω οτι γράφεις τιμή 5-12V αναλόγως των τύπων των ρελέ. Έχω αφήσει στο pga ένα πιν εισόδου για ψηφιακή τροφοδοσία και άλλο ένα pin για τη γείωσή της, αλλά να το δούμε και ως προς τον ελεγκτή για να γίνει αυτή η τροφοδοσία ενιαία, είτε θα μπει στη δική σου πλακέτα είτε στου ελεγκτή είτε αυτόνομη.

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

Δεν έχω κάτι άλλο να συμπληρώσω προς το παρόν.
 
Σίγουρα είναι προενισχυτής..... υπερπαραγωγή, όμως οι πολλές είσοδοι είναι μια παράμετρος που μας διαφοροποιεί από τις υπόλοιπες κατασκευές. Σήμερα δεν μπορεί να βρει κανείς εύκολα προενισχυτή με 4 tapes. Προσωπικά χρησιμοποιώ ένα πολύ παλιό αρθρωτό Meridian κυρίως γι’ αυτή του την ιδιότητα (έχει 4 απολύτως αυτόνομα tape). Οι υπόλοιποι λόγοι είναι πως μου αρέσει ο ήχος του (ή πιο σωστά η απουσία κάποιου ιδιαίτερου χαρακτήρα και η ησυχία που έχει, ειδικά μετά τα απαραίτητα refurbishments) αλλά και γενικότερα είμαι .......vintage τύπος.

Φυσικά κάποιος μπορεί να κάνει downsizing και να μην τοποθετήσει τα υλικά των εισόδων που δεν χρειάζεται. Υπολογίζω πως το μέγεθος της πλακέτας θα είναι 20 – 25 cm μήκος και 10 cm πλάτος, ίσως και μικρότερη εφ’ όσον παραλείψουμε τα τροφοδοτικά και μερικές εισόδους (π.χ μια tape και μία line λιγότερο). Σκοπεύω να χρησιμοποιήσω πλακέτα δύο όψεων και να αποφύγω τις επιμεταλλωμένες τρύπες. Αντίθετα για την επικοινωνία των δυο επιφανειών έχω σκοπό να χρησιμοποιώ συρμάτινα jumpers που θα κολλάνε και στις δυο όψεις (αυτό είναι κάτι που ρίχνει αρκετά το κόστος).

Αν θέλετε modular κατασκευή, κανένα πρόβλημα. Μπορώ να σχεδιάσω μικρά πλακετάκια που θα περιλαμβάνουν όλα όσα χρειάζεται μια είσοδος με έξοδο tape. Η διάταξη αυτή μας γλυτώνει και από τα τέσσερα ρελέ στο tape out, αλλά χρησιμοποιεί δύο τελεστικούς ανά είσοδο (ένα για τη γραμμή της ακρόασης και ένα για τη γραμμή της ηχογράφησης, με λογική επιλογή των τελεστικών το κόστος είναι μικρότερο από την αγορά ενός καλού ρελέ). Στη συνέχεια αυτά τα πακετάκια θα μπορούν να τοποθετούνται το ένα επάνω στο άλλο με Molex.

Οι τελεστικοί στο σχηματικό που έχω επισυνάψει, δεν αφορούν τον κυρίως προενισχυτή αλλά αποτελούν μπάφερς για το PGA και για τις εξόδους των tapes αντιστοίχως. Η κύρια έξοδος του προενισχυτή γίνεται από το PGA. Απλά το σήμα επαναδρομολογείται στη πλακέτα όπου φιλοξενείται και το ρελέ εξόδου (για το mute). Οι τελεστικοί απλά απομονώνουν το σήμα εισόδου και συνδέονται με τον εκάστοτε attenuator κάθε εισόδου ξεχωριστά. Η εξασθένιση επιτυγχάνεται με το P1 – P16 (με κατάληξη το <p> για playback και <r> για record). Έγινε επιλογή της μη αναστρέφουσας τοπολογίας για λόγους που συνδέονται με τη χρήση τελεστικών με fet στη είσοδο. Αυτό σημαίνει πως η χρήση του ΝΕ5532 δεν συνιστάται. Χρησιμοποίησα το 2604 γιατί το έχω ξαναδούλεψει, έχει πολύ καλό ήχο, κοστίζει ελάχιστα γι’ αυτά που προσφέρει και έχει εισόδους fet, ώστε ο θόρυβος ρεύματος στη είσοδο από την εν σειρά αντίσταση του attenuator δεν είναι μεγάλος (φυσικά υπερβαίνει τη πολύ καλή προδιαγραφή του 2604 στα 10nV/Hz1/2).
Με τις τιμές του attenuator που επιλέγησαν, η αντίσταση εισόδου κυμαίνεται από 45,7 Kohm (με εξασθένηση -0,057db και υπολογισμένο θόρυβο -126db ή 3,2nV/Hz1/2 από τις αντιστάσεις του attenuator με BW 20KHz στους 35 βαθμούς Κελσίου) έως τα 49,1 Kohm (με εξασθένηση -6,29db και επίσης υπολογισμένο θόρυβο -110db ή 20 nV/Hz1/2 από τις αντιστάσεις του attenuator, πάλι με BW 20KHz στους 35 βαθμούς Κελσίου). Είναι προφανές πως η μικρότερη εξασθένηση μας δίνει και λιγότερο θόρυβο. Η αναστρέφουσα τοπολογία είναι ελκυστική τουλάχιστον όσο αφορά την παραμόρφωση κοινού σήματος, αλλά η χρήση του attenuator στη είσοδο μοιραία επεμβαίνει στο κύκλωμα ανάδρασης μεταβάλλοντας το κέρδος. Θα την επέλεγα αν δεν εφάρμοζα το attenuator στη είσοδο, αλλά μετά (π.χ στη είσοδο του PGA) και με την προϋπόθεση μεγάλου δυναμικού εύρους στην έξοδο του τελεστικού και χαμηλότερης αντίστασης εισόδου (εδώ ταιριάζουν τα 600ohm που είχαμε συζητήσει παλαιότερα).

Το τροφοδοτικό θα το αφαιρέσω και ο καθένας ας χρησιμοποιήσει ότι θέλει, θα δώσω όμως μερικές πληροφορίες.

α) το ρεύμα που χρειάζονται οι τελεστικοί δεν είναι ιδιαίτερα μεγάλο (ως μέση κατανάλωση), ενώ για τα μεταβατικά και το θόρυβο στις υψηλότερες συχνότητες, κυρίαρχο ρόλο παίζει η σωστή τοποθέτηση των κατάλληλων πυκνωτών απόζευξης. Ακόμα και το καλύτερο τροφοδοτικό να βάλετε π.χ salas, η χρήση γραμμών τροφοδοσίας μεγάλου μήκους υποβαθμίζει ή καλύπτει τις αρετές του καλού τροφοδοτικού. Νομίζω πως το salas θα ήταν πιο ωφέλιμο για το αναλογικό τμήμα του PGA, με βασική προϋπόθεση την εγγύτητα όσο αφορά τη τοποθέτηση. Επίσης θέλει προσοχή ώστε να μην χρησιμοποιήσετε μεγάλες θερμοκρασίες κοντά στους τελεστικούς, διότι τότε εμφανίζουν θερμοκρασιακή ολίσθηση και αύξηση του θορύβου πολύ πέρα από τις αναμενόμενες προδιαγραφές.

Η λύση που υιοθέτησα χρησιμοποιεί τα ταπεινά LM317/337, με προϋπόθεση ότι και αυτά με τη σειρά τους τροφοδοτούνται από σταθεροποιημένη τάση από κάποιο άλλο εξωτερικό τροφοδοτικό. Με τη λύση των δύο διαδοχικών σταθεροποιήσεων κερδίζουμε μια μικρή βελτίωση στο θόρυβο, αλλά πρέπει να υπολογίσουμε και την εξίσου σχηματική ικανότητα απόρριψης θορύβου τροφοδοσίας από τον τελεστικό (OPA 2604). Με τη μεθοδολογία αυτή και με τελεστικό πολύ πιο απαιτητικό (OPA 627) είχα πετύχει επιδόσεις θορύβου και παραμορφώσεων, πέρα από τη διακριτική ευχέρεια ενός AP sys1 στο οποίο είχα παλιά πρόσβαση.

Επίσης χρησιμοποιώ επίτηδες τον 2604 διότι είναι από τους λίγους τελεστικούς που αντέχουν τα +/- 24 V τροφοδοσίας και αποκτούν μεγάλο εύρος όσο αφορά την υπερφόρτωση (δηλ. ότι θέλουμε από ένα μπάφερ εισόδου). Η υψηλή τροφοδοσία (π.χ +/- 24 V) και οι πυκνωτές απόζευξης είναι οι παράμετροι που δίνουν τα κύρια πλεονεκτήματα και τις επιδόσεις των τελεστικών. Αξίζει το κόπο να δείτε αν μπορεί το τροφοδοτικό του salas να ρυθμιστεί στα +/- 22V.

Υ.Γ
Μανόλη θα φτιάξουμε το Molex όπως σε βολεύει μην ανησυχείς, άλλωστε όλα είναι ακόμα ασκήσεις επί χάρτου. φίλτρα δεν έχω βάλει διότι δεν μου έτυχε ποτέ ταλάντωση με το συγκεκριμένο τελεστικό. Αν χρειάζεται μπορώ να κάνω κάτι απλά πες μου το επίπεδο εφαρμογής (π.χ έξοδο του μπάφερ). Επίσης παρέλειψα συνειδητά τις διόδους προστασίας για να μην αυξηθεί ο θόρυβος. Είχα σκεφτεί και μικρή ασφάλεια στην είσοδο (όπως στα μετρητικά όργανα) αλλά τελικά έκανα πίσω διότι φοβήθηκα την πρόσθετη πολυπλοκότητα σε ένα σχέδιο που ήδη ήταν φορτωμένο.
 
Ντίνο, τα τροφοδοτικά έκδοσης 1.1 με τα ανάλογα σεραρίσματα πάνε από 2,5-45V.
Επίσης, επειδή χρησιμοποιούν ταυτόγχρονη έξοδο με αισθητήρες τύπου Kelvin, παρακάμπτουν το γνωστό πρόβλημα που δημιουργεί η αντίσταση των καλωδίων.

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

Για το φιλτράρισμα θέλω να ακούσω και τους λοιπούς.
Φυσικά, περιμένω και τις γνώμες των λοιπών μελών που συμμετέχουν στο νήμα για να καθορίσουμε καλύτερα τις ανάγκες μας.
 
Μια μεγάλη πλακέτα εισόδου με πολλές εισόδους/εξόδους και εμένα θα μου ήταν χρήσιμη. Μια όμως.
Οι μικρές θα έβρισκαν πιο συχνή χρήση σε μικρά projects. Τα συνηθισμένα για πολλούς από εμάς.
Άρα δε θεωρώ απαραίτητα κακό να ξεκινήσουμε από μια μεγάλη πλακέτα εσόδου, και να υπάρχει και μια εναλλακτική μικρή αργότερα.

Τα 317/337 δεν είναι απαραίτητο να αφαιρεθούν από το τυπωμένο. Εάν θέλει κάποιος δε τα βάζει στη πλακέτα και φέρνει ρεύμα από όπου αλλού. Λχ. πιθανά είναι εύκολο να προβλέψουμε σχετική αναμονή, και βάζουμε και ένα cut trace here Χ .
 
Τάσο, εάν το δούμε από πλευράς diy, το σχέδιο του Ντίνου είναι καταπληκτικό και όπως λες μπορεί να παραμείνει επάνω του ότι θέλουμε και ότι δεν θέλουμε απλά το παρακάμπτουμε είτε γεφυρώνοντάς το είτε απλά δεν βάζεις τους επιπλέον ρελέ για εκείνες τις εισόδους-εξόδους που δεν θέλεις.

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

Οι δύο παρακάτω φώτο, ίσως δείχνουν τι εννοεί ο VFXCode (ήδη προς αυτή την κατεύθυνση τροποποίησα το σχέδιο της πλακέτας pga). Μικρές αυτόνομες πλακέτες που εάν ενωθούν, επεκτείνουν τη σχεδίαση κατά το δοκούν, οπότε προσαρμόζεται η υλοποίηση κατά τις ανάγκες του καθενός.
Φυσικά όλο αυτό υπό την προυπόθεση ότι ο Ντίνος θα πει ότι γίνεται, ότι κερδίζουμε σε τιμη πλακέτας δεν το χάνουμε από επαναλήψεις υλικών, ότι δεν δημιουργεί αύξηση θορύβου ή οτιδήποτε σχετικό κ.ο.κ

n2xd1.jpg
electrowave.gif

 
Ντίνο, τα τροφοδοτικά έκδοσης 1.1 με τα ανάλογα σεραρίσματα πάνε από 2,5-45V.
Επίσης, επειδή χρησιμοποιούν ταυτόγχρονη έξοδο με αισθητήρες τύπου Kelvin, παρακάμπτουν το γνωστό πρόβλημα που δημιουργεί η αντίσταση των καλωδίων.

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

Για το φιλτράρισμα θέλω να ακούσω και τους λοιπούς.
Φυσικά, περιμένω και τις γνώμες των λοιπών μελών που συμμετέχουν στο νήμα για να καθορίσουμε καλύτερα τις ανάγκες μας.

Μανόλη τα συστήματα ανάδρασης με επιτόπια λήψη (π.χ Kelvin σύνδεση) δουλεύουν πολύ καλά σε υψηλές συχνότητες κυρίως σε steady state καταστάσεις. Αντίθετα σε απότομα και μη αναμενόμενα μεταβατικά θα πρέπει ο βρόγχος ανάδρασης να είναι ταχύτερος από τις στιγμιαίες απαιτήσεις ρεύματος του τελεστικού. Απ’ όσο έχω δει και διαβάσει, η τροφοδοσία του salas είναι μια σημαντική βελτίωση αλλά δεν αντικαθιστά τις τοπικές αποζεύξεις, αντίθετα μπορεί να ταλαντώσει από αυτές. Για το λόγο αυτό χρειάζεται πάντα έλεγχος (βλέπε παλμογράφος) και ίσως επιτόπια αντιστάθμιση.
 
Απάντηση: Re: Υλοποίηση preamplifier PGA23xx

Μια μεγάλη πλακέτα εισόδου με πολλές εισόδους/εξόδους και εμένα θα μου ήταν χρήσιμη. Μια όμως.
Οι μικρές θα έβρισκαν πιο συχνή χρήση σε μικρά projects. Τα συνηθισμένα για πολλούς από εμάς.
Άρα δε θεωρώ απαραίτητα κακό να ξεκινήσουμε από μια μεγάλη πλακέτα εσόδου, και να υπάρχει και μια εναλλακτική μικρή αργότερα.

Τα 317/337 δεν είναι απαραίτητο να αφαιρεθούν από το τυπωμένο. Εάν θέλει κάποιος δε τα βάζει στη πλακέτα και φέρνει ρεύμα από όπου αλλού. Λχ. πιθανά είναι εύκολο να προβλέψουμε σχετική αναμονή, και βάζουμε και ένα cut trace here Χ .


Τάσο ήδη ξεκίνησα και σχέδιο modular.
Σε μια με δύο ημέρες θα είναι έτοιμο και χρησιμοποιεί την αρχιτεκτονική της εικόνας που δίνει ο Μανόλης.
Στο μεσοδιάστημα κάντε προτάσεις για τελεστικούς και τοπολογίες, άλλους προβληματισμούς και θέματα όπως προστασία εισόδων, κόστος και γενικά ότι σας κατέβει.
 
Ντίνο στο ίδιο κύκλωμα pga (του κινέζου), όταν είχα κάνει την αλλαγή της τροφοδοσίας, αφαιρώντας τα 78ΧΧ θετικής και αρνητικής τροφοδοσίας και τους ηλεκτρολυτικούς αποσύζευξης, είχα ξεχάσει να βγάλω τους μικρούς 0,1 (αποσύζευξης του 78ΧΧ) με αποτέλεσμα να έχω πρόβλημα που φάνηκε στον παλμογράφο.

Ο Κινέζος αποσύζευξη του pga έκανε μόνο στο ψηφιακό μέρος μόνο με έναν πυκνωτή, ο οποίος παρέμεινε δίχως να επηρρεάσει το αντίστοιχο Salas τροφοδοτικό.

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

Τώρα ειδική ανάλυση επί του κυκλώματός του, δεν είμαι σε θέση να κάνω, εργαστηριακές μετρήσεις που έχουν γίνει, δείχνουν χαμηλότατη αντίσταση εξόδου σε όλο το φάσμα των συχνοτήτων και γνωρίζω από τις μεταφρασμένες οδηγίες ότι ουσιαστικά λόγω του remote sense, "φέρνει" το φορτίο σε επαφή με το σταθεροποιητή ανεξαρτήτως της απόστασης των καλωδίων.

Φυσικά όλα αυτά δεν μπορούν να προβλεφθούν, αλλά να μετρηθούν επί τόπου και να αποφασιστεί η βέλτιστη λύση - για αυτό λέγαμε για δοκιμαστικές πλακέτες που σίγουρα θα κάνουμε πριν τις τελικές...
 
Νομίζω να κρατήσεις αυτό το κομμάτι συν τα τρανζίστορ οδήγησης των relay.
Επίσης βάλε και ένα 595 για να οδηγεί τα τρανζίστορ για τα relay.

preinput.jpg

Με 6 τέτοιες πλακέτες βγάζεις τις δυνατότητες, και παραπάνω, του σχεδίου που έδωσες με λιγότερο κόστος.
Επιπλέον θα μπορεί να επεκταθεί και να προσαρμοστεί σε άπειρες επιπλέον περιπτώσεις.
 
Ας δώσω και εγώ ένα δείγμα από ότι έχω κάνει στον κώδικα.
Σκοπός μου είναι να γίνει με τέτοιο τρόπο ώστε πολύ εύκολα κάποιος που δεν είναι εξοικειωμένος με C να μπορεί να παραμετροποιήσει, να ενεργοποιήσει και να απενεργοποιήσει λειτουργίες και δυνατότητες το προγράμματος.

Στον παρακάτω κώδικα κάνοντας comment τα #define στην αρχή, στα οποία δηλώνονται τα pins στα οποία είναι συνδεδεμένα τα περιφεριακά, τα κομμάτια που αφορούν το συγκεκριμένο περιφερειακό δεν γίνονται compile σώζοντας χώρο στο Arduino.

Για ρίξτε μια ματιά και πείτε μου τι νομίζεται. Εννοείτε ότι μπορεί να υποστηρίξει τα πάντα.

Code:
/*  
 *  Pin Assigment for the various Periferals
 *  Comment out the pin assigments you dont use. 
 *  This should skip compilation of the respective code 
 *  saving precious codespace.
 */
//Rotary Encoder without Interrupts
#define ENCA 19
#define ENCB 18
//General Mute Button
#define MUTEBUTTON 17
//A "Simple" 16 Led Graph
#define LEDGraphSelect 10 
//PGA23xx. You propably need it
#define PGASelect 12
//Paraller LCD connected in a 4bit transfer mode.
#define PlcdRS 2
#define PlcdEN 3
#define PlcdD4 7
#define PlcdD5 6
#define PlcdD6 5
#define PlcdD7 4

/*
 *   General Settings for this Pre Amplifier
 */
//Maximum gain. Some offset values will override it. 
#define MaximumVolume 192
//Number of channels. This should always be an even number since each PGA has 2 channels.
#define ChannelNumber 2
//Volume offset values. Negative values will lower volume.
int offset[ChannelNumber] = {};



  
 /*
  *  Venture further below if you know what you are getting into :).
  */
#include <SPI.h>

#if defined(PlcdRS) && defined(PlcdEN) && defined(PlcdD4) && defined(PlcdD5) && defined(PlcdD6) && defined(PlcdD7)
  #include <LiquidCrystal.h>
  LiquidCrystal lcd(PlcdRS, PlcdEN, PlcdD4, PlcdD5, PlcdD6, PlcdD7);
  int curpos = 8;
#endif

void setup() {
  #if defined(PlcdRS) && defined(PlcdEN) && defined(PlcdD4) && defined(PlcdD5) && defined(PlcdD6) && defined(PlcdD7)
    lcd.begin(16, 2);
    lcd.setCursor(0, 0);
    lcd.print("Volume:   MUTE  ");
    lcd.setCursor(0, 1);
    lcd.print("Input : Computer");
  #endif
  
  #if defined(ENCA) && defined(ENCB)
    pinMode(ENCA, INPUT);digitalWrite(ENCA, HIGH);
    pinMode(ENCB, INPUT);digitalWrite(ENCB, HIGH);
  #endif
  
  #if defined(MUTEBUTTON)
    pinMode(MUTEBUTTON, INPUT);digitalWrite(MUTEBUTTON, HIGH);
  #endif
  
  #if defined(LEDGraphSelect)
    pinMode(LEDGraphSelect, OUTPUT);
  #endif
  
  
  
  SPI.begin() ;
  Serial.begin(9600);

}



unsigned int volume=0;
unsigned int previousVolume=255;
void loop() {
  #if defined(MUTEBUTTON)
    muteButtonPoll();
  #endif
  
  #if defined(ENCA) && defined(ENCB)
    int dir=RotEncoder();
    if        (dir==1&&volume>0) {
      volume=volume-1;
    } else if (dir==2&&volume<MaximumVolume) {
      volume=volume+1;
    }   
  #endif
  delay(1); // Software Debouncing. The correct way is with capacitors and resistors but its vastly more complicated.
   /*
    *  Things here are executed each time the volume changes. This should generaly be output commands.
    */
  if (volume != previousVolume) {
    previousVolume=volume;
    
    #if defined(PlcdRS) && defined(PlcdEN) && defined(PlcdD4) && defined(PlcdD5) && defined(PlcdD6) && defined(PlcdD7)
      int gain=315-(5*(255-volume));
      char buffer[17] ="";
      if (volume==0) 
        sprintf(buffer, "   MUTE  ",gain/10,abs(gain)%10);
      else
        sprintf(buffer, " %3d.%ddb ",gain/10,abs(gain)%10);
      lcd.setCursor(7, 0);
      lcd.print(buffer);
    #endif
    #if defined(LEDGraphSelect)
      LEDShow(volume);
    #endif
    
    //setVol(volume, volume);
  }
  
  
}

 /* 
  * Helper functions that automate simple tasks.
  */
unsigned int unmuteVolume=0;
void mute () {
  if (volume == 0)
    volume=unmuteVolume;
  else {
    unmuteVolume=volume;
    volume=0;
  }
}

void setVol (unsigned int volumeL, unsigned int volumeR) {
  digitalWrite(PGASelect, LOW);
  SPI.transfer(volumeL); 
  SPI.transfer(volumeR);
  digitalWrite(PGASelect, HIGH);
}


/* Below this comment we have the functions that check each of the buttons and do the neccessary functions */
/* We should call them only when we need then to conserve cycles */
#if defined(ENCA) && defined(ENCB)
int state0[]={0,0,0,0};
int RotEncoder() {
  int encc = (digitalRead( ENCA ) << 1) + digitalRead( ENCB );
  int out=4;

  int state1[]={1,0,2,3};
  int state2[]={0,2,3,1};
  int state3[]={2,3,1,0};
  int state4[]={3,1,0,2};
  int state5[]={0,1,3,2};
  int state6[]={1,3,2,0};
  int state7[]={3,2,0,1};
  int state8[]={2,0,1,3};

  if (state0[3] != encc) {
    for (int i=0;i<4;i++) {
      if (i<3) state0[i]=state0[i+1];
      else state0[i]=encc;
    }
    
    if ((state1[0] == state0[0] && state1[1] == state0[1] && state1[2] == state0[2] && state1[3] == state0[3])||
        (state2[0] == state0[0] && state2[1] == state0[1] && state2[2] == state0[2] && state2[3] == state0[3])||
        (state3[0] == state0[0] && state3[1] == state0[1] && state3[2] == state0[2] && state3[3] == state0[3])||
        (state4[0] == state0[0] && state4[1] == state0[1] && state4[2] == state0[2] && state4[3] == state0[3])) 
    out = 1;
    else if ((state5[0] == state0[0] && state5[1] == state0[1] && state5[2] == state0[2] && state5[3] == state0[3])||
             (state6[0] == state0[0] && state6[1] == state0[1] && state6[2] == state0[2] && state6[3] == state0[3])||
             (state7[0] == state0[0] && state7[1] == state0[1] && state7[2] == state0[2] && state7[3] == state0[3])||
             (state8[0] == state0[0] && state8[1] == state0[1] && state8[2] == state0[2] && state8[3] == state0[3])) 
    out = 2;
    else
    out = 3;
  }
  return out;
}
#endif


#if defined(MUTEBUTTON)
boolean previusInputCT = 0;
void muteButtonPoll () {
  boolean inputCT = digitalRead(MUTEBUTTON);
  if (inputCT != previusInputCT && inputCT == LOW) {
    mute();
  }
  previusInputCT = inputCT;
}
#endif


#if defined(LEDGraphSelect)
void LEDShow(int value) {
  int bytehigh=0, bytelow=0;
  
  if (volume==0) {
    bytelow=0;
    bytehigh=1;
  } else {
    int localhigh = map(volume, 0, MaximumVolume, 1, 15);
    int ledstate = 0;
    for (int i=0;i<15;i++) {
      if (i < localhigh ) {
        ledstate+=1;
      }
      ledstate=(unsigned int)ledstate << 1;
    }
    bytehigh= ledstate&255;
    bytelow= ((unsigned int)ledstate&65280) >> 8;
  }

  SPI.setBitOrder(LSBFIRST);
  SPI.transfer(bytehigh); 
  SPI.transfer(bytelow);
  digitalWrite(LEDGraphSelect, HIGH);
  digitalWrite(LEDGraphSelect, LOW);
}
#endif