Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 1 έως 10 από 15

Θέμα: Μη-γραμμική σχέση δύο τιμών σε Arduino

  1. #1
    Μέλος
    Όνομα
    Γιάννης
    Εγγραφή
    May 2011
    Περιοχή
    Πέραμα
    Μηνύματα
    3.042

    Προεπιλογή Μη-γραμμική σχέση δύο τιμών σε Arduino

    Καλησπέρα σε όλους,

    Έχω μία έξοδο PWM σε Arduino Nano v3 που βάζω τιμές 0-1023 σε 7KHz συχνότητα, την οποία περνάω από ένα RC φίλτρο και έναν διαιρέτη τάσης για να πάρω μία τάση 0 - ~271mV (για Duty Cycle 0-100%). Ως εδώ όλα καλά, αλλά θέλω να υπολογίσω (όχι μετρήσω) στον κώδικά τι τάση θα έχω για την Χ τιμή PWM. Όμως η σχέση PWM / Vout δεν είναι γραμμική, και δεν ξέρω τι μαθηματική πράξη πρέπει να χρησιμοποιήσω για να έχω σωστά αποτελέσματα σε όλο το φάσμα τιμών.

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

    Βάζω μερικές τιμές για να δείτε την σχέση μεταξύ τιμής PWM και Τάσης εξόδου:

    PWM ____925 ____836 ___651 ___437 ____296 ___113 ___74 ____13
    mVolts __245.8 __222.6 _174.6 __118.6 ___82.0 __34.2 __24.1 ___8
    Rate ____3763 ___3756__3728 ___3684 __3609 __3304 __3070 __1625

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

    Ευχαριστώ πολύ για τον χρόνο σας!

    0 Not allowed! Not allowed!

  2. #2
    Μέλος Το avatar του χρήστη osek
    Όνομα
    Σωκράτης
    Εγγραφή
    Nov 2008
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    109

    Προεπιλογή

    Καλημέρα,
    αν και δεν κατάλαβα τι είναι το "Rate" που αναφέρεις, νομίζω πως ο τύπος που ψάχνεις είναι
    Τιμή_PWM / 1023 * Voutmax

    0 Not allowed! Not allowed!
    ...'Θα σε ξεχνάω κάθε μέρα'...

  3. #3
    Μέλος
    Όνομα
    Γιάννης
    Εγγραφή
    May 2011
    Περιοχή
    Πέραμα
    Μηνύματα
    3.042

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από osek Εμφάνιση μηνυμάτων
    Καλημέρα,
    αν και δεν κατάλαβα τι είναι το "Rate" που αναφέρεις, νομίζω πως ο τύπος που ψάχνεις είναι
    Τιμή_PWM / 1023 * Voutmax
    Αυτό που θέλω είναι να υπολογίσω στον κώδικα (για να το εμφανίσω στην LCD), είναι τι τάση θα έχω στην έξοδο (Vout ή "mVolt" στον ας πούμε πίνακα τιμών που έβαλα) για Χ τιμή PWMout (1-1023, "PWM" στον πίνακα).

    Πχ αν δώσω εντολή PWMout=925 ξέρω μετρώντας με το πολύμετρο ότι θα έχω στην έξοδο ~246mV, οπότε θα μπορούσα να πω ότι 925/0.246=3760.1 βρήκα την "σταθερά" μου (Rate?) για να υπολογίζω στον κώδικα τι θα έχω στην έξοδο.
    Αλλά δυστυχώς δεν συμβαίνει αυτό γιατί αν αλλάξω τιμή PWM, σε πχ PWMout=296 και έχω στον κώδικα Vout=PWMout/3760.1 τότε στον κώδικα έχω 296/3760.1= 78.7mV αλλά στην πραγματικότητα στην έξοδο έχω 82mV !!!

    Οπότε η σχέση των τιμών PWMout και Vout δεν είναι γραμμική.

    0 Not allowed! Not allowed!

  4. #4
    Μέλος
    Εγγραφή
    Nov 2007
    Μηνύματα
    1.459

    Προεπιλογή

    Μια πιο σωστή προσέγγιση αν έχεις ADC στο μΕ σου είναι να διαβάζεις την έξοδο του PWM και με ενα PID ή PI έλεγχο να μεταβάλεις το Duty ώστε η έξοδος να είναι πάντα η επιλεγμένη. Γιατί όμως έχεις τότο ακανόνιστη συμπεριφορά? Τραβάς φορτίο από την έξοδο? Έχεις κάποιο buffer (πχ τελεστικός?)

    0 Not allowed! Not allowed!

  5. #5
    Μέλος
    Όνομα
    Γιάννης
    Εγγραφή
    May 2011
    Περιοχή
    Πέραμα
    Μηνύματα
    3.042

    Προεπιλογή

    Το ξέρω ότι θα μπορούσα να μετράω την έξοδο, γι' αυτό και το έγραψα καθαρά στο αρχικό ποστ ότι "θέλω να υπολογίσω (όχι μετρήσω) στον κώδικά". Δεν λέω ότι το να μετρήσω την έξοδο χρησιμοποιώντας μία αναλογική είσοδο του Arduino δεν μπορεί να γίνει ή δεν είναι πιο "σωστό" ή θα δώσει καλύτερη ακρίβεια ή οτιδήποτε, απλώς δεν είναι αυτό που θέλω να κάνω αυτή τη στιγμή.
    Δεν έχει σημασία αν μετράω PWM ή οτιδήποτε άλλο, αυτό που θέλω είναι να μάθω πως γίνεται και αν γίνετε εύκολα (χωρίς πίνακα στον κώδικα) να υπολογίσω την σχέση μεταξύ δύο τιμών που δεν είναι γραμμική.

    Για την ιστορία το RC είναι διπλό, 4.7K/1uF + 3.9K/1uF (με την 4.7Κ σε σειρά το ρεύμα που τραβάω από το πιν είναι περίπου 1mA), και μετά ένας διαιρέτης 680Κ/56Κ, πάλι μεγάλες σε τιμή αντιστάσεις για μικρό ρεύμα (10μΑ στα 5V για τον διαιρέτη). Οι πυκνωτές μπορεί να είναι μεγάλοι σε τιμή, αλλά δεν με ενδιαφέρει η ταχύτητα (απόκρισή?) του RC σε αυτή τη φάση, με ενδιαφέρει πιο πολύ να έχει η έξοδος όσο το δυνατόν λιγότερη κυμάτωση...
    Δεν υπάρχει κάτι μετά από εκεί, ακόμα είμαι στην φάση του σχεδιασμού. Πριν βάλω τον διαιρέτη, είχα δώσει τα 0-4.9V που βγαίνουν από το RC σε έναν OpAmp (LM324) σε συνδεσμολογία Voltage Follower και είχα τα αναμενόμενα 0-4.9V στην έξοδο αυτού.

    Ευχαριστώ για τις απαντήσεις

    0 Not allowed! Not allowed!

  6. #6
    Μέλος Το avatar του χρήστη FILMAN
    Όνομα
    Φίλιππος
    Εγγραφή
    Dec 2009
    Περιοχή
    Δάφνη, Αθήνα
    Μηνύματα
    11.991

    Προεπιλογή

    Η σχέση PWM και αναλογικής τάσης μετά το φιλτράρισμα είναι γραμμική. Αυτό που δεν ξέρω αν ισχύει στην περίπτωσή σου είναι, η έξοδος του μ/ε έχει την ίδια ικανότητα παροχής και απορρόφησης ρεύματος; Γιατί αν όχι, έχοντας περισσότερο ή λιγότερο χρόνο την έξοδο σε μια από τις δύο αυτές καταστάσεις, αλλοιώνεις την αναμενόμενη αναλογική τάση εξόδου. Επίσης κάποιες διαφορές στον πίνακα που συνέταξες είναι ομολογουμένως πολύ μικρές και μπορεί να οφείλονται και σε σφάλμα μετρήσεων (π.χ. 3763 vs 3756)

    1 Not allowed! Not allowed!

  7. #7
    Μέλος
    Όνομα
    Γιάννης
    Εγγραφή
    May 2011
    Περιοχή
    Πέραμα
    Μηνύματα
    3.042

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από FILMAN Εμφάνιση μηνυμάτων
    Η σχέση PWM και αναλογικής τάσης μετά το φιλτράρισμα είναι γραμμική. Αυτό που δεν ξέρω αν ισχύει στην περίπτωσή σου είναι, η έξοδος του μ/ε έχει την ίδια ικανότητα παροχής και απορρόφησης ρεύματος; Γιατί αν όχι, έχοντας περισσότερο ή λιγότερο χρόνο την έξοδο σε μια από τις δύο αυτές καταστάσεις, αλλοιώνεις την αναμενόμενη αναλογική τάση εξόδου. Επίσης κάποιες διαφορές στον πίνακα που συνέταξες είναι ομολογουμένως πολύ μικρές και μπορεί να οφείλονται και σε σφάλμα μετρήσεων (π.χ. 3763 vs 3756)
    Χμ, δεν το ξέρω αυτό, είμαι και τελείως πρωτάρης με τον Arduino...

    Πίστευα ότι για να δουλεύουν τα φίλτρα RC με τις PWM εξόδους του Arduino (το όποιο το έχω δει παντού στο Google), θα πρέπει η τάση στον πυκνωτή του RC να ξεφορτίζεται "από τον ίδιο δρόμο", δηλαδή μέσο του πιν, οπότε όταν ο παλμός είναι "λογικό μηδέν" να απορροφάει (sink) ρεύμα...
    Πέρα από μια LCD δεν υπάρχει τίποτα άλλο πάνω στον Arduino αυτή τη στιγμή, οπότε το 1mA που ζητάω από το πιν είναι πολύ πιο κάτω από το μέγιστο που μπορεί να δώσει η πλακέτα.
    Συμφωνώ ότι μικρές διαφορές είναι μέσα στο "σφάλμα μέτρησης", δεν έχω πρόβλημα για μικρές αποκλίσεις, δεν αναζητώ την τελειότητα, αλλά κάτω από περίπου 6-7% Duty Cycle ο υπολογισμός βγαίνει τελείως λάθος όπως είναι τώρα τα πράγματα...

    Θα το παλέψω λίγο στο hardware κομμάτι λοιπόν σήμερα, να δω αν βελτιώνεται η κατάσταση με άλλες τιμές αντιστάσεων/πυκνωτών στο RC. Θα βάλω μικρότερη αντίσταση για 6-7mA ρεύμα και/ή μικρότερους πυκνωτές και θα δω..

    Το RC-διαιρέτης είναι αυτό:
    0000.jpg000.jpg


    Παρόλα αυτά, θα ήθελα να μάθω πως μπορείς να υπολογίσεις δύο τιμές που δεν έχουν γραμμική σχέση μεταξύ τους με τον Arduino, αν κάποιος ξέρει
    Συνημένες Εικόνες Συνημένες Εικόνες
    • Τύπος Αρχείου: png 000.png (7,7 KB, 10 εμφανίσεις)

    0 Not allowed! Not allowed!

  8. #8
    Μέλος
    Όνομα
    Γιάννης
    Εγγραφή
    May 2011
    Περιοχή
    Πέραμα
    Μηνύματα
    3.042

    Προεπιλογή

    Μέτρησα τώρα το ρεύμα που τραβάει ο διαιρέτης και αν πιστέψουμε ότι το πολύμετρό μου μπορεί να μετρήσει τόσο χαμηλά ρεύματα με ακρίβεια, ο διαιρέτης τραβάει από τίποτα (PWM=0) έως 6.60μΑ (PWM=Max)...
    Μπορεί να χαλάνε την γραμμική συμπεριφορά του κυκλώματος αυτά τα δεκάδες μΑ ???

    11.jpg




    EDIT:

    Άλλαξα την αντίσταση μόνο του πρώτου RC από 4.7Κ σε 820Ω για να έχω ~6mΑ ρεύμα φόρτισης του πρώτου πυκνωτή (πριν ήταν μόνο 1mA), και έφτιαξε λίγο η "γραμμικότητα":

    PWM __________19 ____31 ___111 ____498 ___1023
    Duty Cycle% ___1.86 __3.0 ___10.8 ____48.6 __100%
    mVolt _________6.73 _10.91 __39.45 __177.3 __363.4
    PWM/mV ______2.82 __2.84 __ 2.81 ___ 2.80 ___2.81

    Οπότε θα ξαναυπολογίσω αντιστάσεις/ρεύματα κτλ και μάλλον θα είμαι OK.

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

    Ευχαριστώ πολύ!

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη selectronic : 22-03-17 στις 14:00

  9. #9
    Μέλος Το avatar του χρήστη FILMAN
    Όνομα
    Φίλιππος
    Εγγραφή
    Dec 2009
    Περιοχή
    Δάφνη, Αθήνα
    Μηνύματα
    11.991

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από selectronic Εμφάνιση μηνυμάτων
    Πίστευα ότι για να δουλεύουν τα φίλτρα RC με τις PWM εξόδους του Arduino (το όποιο το έχω δει παντού στο Google), θα πρέπει η τάση στον πυκνωτή του RC να ξεφορτίζεται "από τον ίδιο δρόμο", δηλαδή μέσο του πιν, οπότε όταν ο παλμός είναι "λογικό μηδέν" να απορροφάει (sink) ρεύμα...
    Έτσι ακριβώς πρέπει να είναι.
    Παράθεση Αρχικό μήνυμα από selectronic Εμφάνιση μηνυμάτων
    Συμφωνώ ότι μικρές διαφορές είναι μέσα στο "σφάλμα μέτρησης", δεν έχω πρόβλημα για μικρές αποκλίσεις, δεν αναζητώ την τελειότητα, αλλά κάτω από περίπου 6-7% Duty Cycle ο υπολογισμός βγαίνει τελείως λάθος όπως είναι τώρα τα πράγματα...
    Η ορθογώνια κυματομορφή σε αυτά τα επίπεδα ελεγμένη με παλμογράφο έχει τους σωστούς χρόνους; Διότι αν δεν τους έχει, επόμενο είναι και η αναλογική τάση να είναι με απόκλιση!
    Παράθεση Αρχικό μήνυμα από selectronic Εμφάνιση μηνυμάτων
    Θα το παλέψω λίγο στο hardware κομμάτι λοιπόν σήμερα, να δω αν βελτιώνεται η κατάσταση με άλλες τιμές αντιστάσεων/πυκνωτών στο RC. Θα βάλω μικρότερη αντίσταση για 6-7mA ρεύμα και/ή μικρότερους πυκνωτές και θα δω..

    Το RC-διαιρέτης είναι αυτό:
    0000.jpg000.jpg
    Με μικρότερες αντιστάσεις ίσως χειροτερέψει η κατάσταση...

    Παράθεση Αρχικό μήνυμα από selectronic Εμφάνιση μηνυμάτων
    Μέτρησα τώρα το ρεύμα που τραβάει ο διαιρέτης και αν πιστέψουμε ότι το πολύμετρό μου μπορεί να μετρήσει τόσο χαμηλά ρεύματα με ακρίβεια, ο διαιρέτης τραβάει από τίποτα (PWM=0) έως 6.60μΑ (PWM=Max)...
    Μπορεί να χαλάνε την γραμμική συμπεριφορά του κυκλώματος αυτά τα δεκάδες μΑ ???

    11.jpg
    Όχι, και όσο μεγάλο ρεύμα και να τράβαγε ο διαιρέτης δεν θα είχες πρόβλημα γραμμικότητας.

    0 Not allowed! Not allowed!

  10. #10
    Μέλος Το avatar του χρήστη FILMAN
    Όνομα
    Φίλιππος
    Εγγραφή
    Dec 2009
    Περιοχή
    Δάφνη, Αθήνα
    Μηνύματα
    11.991

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από selectronic Εμφάνιση μηνυμάτων
    EDIT:

    Άλλαξα την αντίσταση μόνο του πρώτου RC από 4.7Κ σε 820Ω για να έχω ~6mΑ ρεύμα φόρτισης του πρώτου πυκνωτή (πριν ήταν μόνο 1mA), και έφτιαξε λίγο η "γραμμικότητα":

    PWM __________19 ____31 ___111 ____498 ___1023
    Duty Cycle% ___1.86 __3.0 ___10.8 ____48.6 __100%
    mVolt _________6.73 _10.91 __39.45 __177.3 __363.4
    PWM/mV ______2.82 __2.84 __ 2.81 ___ 2.80 ___2.81

    Οπότε θα ξαναυπολογίσω αντιστάσεις/ρεύματα κτλ και μάλλον θα είμαι OK.

    Δεν το βρίσκω λογικό
    Οι δυο πυκνωτές του 1μF που έχεις βάλει είναι ηλεκτρολυτικοί; Αν ναι κάνε μια δοκιμή με την αρχική αντίσταση των 4.7kΩ και με πυκνωτές 1μF πολυεστερικούς

    0 Not allowed! Not allowed!

Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία

Παρόμοια Θέματα

  1. Σχέση RF Ampere/ RF Watt
    By atatas in forum Ερωτήσεις Αρχάριων
    Απαντήσεις: 12
    Τελευταίο Μήνυμα: 24-12-13, 21:36
  2. Επικοινωνία μεταξύ δύο Arduino μέσω ethernet
    By rkiller in forum Μικροελεγκτές
    Απαντήσεις: 28
    Τελευταίο Μήνυμα: 20-04-13, 15:02
  3. Απαντήσεις: 3
    Τελευταίο Μήνυμα: 31-01-13, 13:20
  4. Απαντήσεις: 3
    Τελευταίο Μήνυμα: 10-06-09, 00:05

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας