Εμφάνιση αποτελεσμάτων : 1 έως 9 από 9

Θέμα: Αλγόριθμος για discrete PID controller

  1. #1
    Μέλος Το avatar του χρήστη basjot
    Όνομα
    Βασίλης
    Εγγραφή
    Apr 2009
    Περιοχή
    Αθήνα
    Μηνύματα
    38

    Προεπιλογή Αλγόριθμος για discrete PID controller

    Καλησπέρα
    Θέλω να κατασκευάσω έναν PID controller σε C (για PIC16F876). Μήπως γνωρίζει κάποιος τον αλγόρυθμο (που να του δούλεψε)?

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη gsmaster : 01-08-09 στις 13:29

  2. #2
    ΥπερΣυντονιστής Το avatar του χρήστη gsmaster
    Όνομα
    Γιάννης
    Εγγραφή
    Aug 2003
    Περιοχή
    Γιάννενα
    Μηνύματα
    4.444

    Προεπιλογή

    Εξαρτάται απο τι θελεις να ελέγξεις. Μπορεί να μην σου κάνει ο PID.

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


    Αν θες να κάνεις κανονικό PID απο τη στιγμή που δουλεύεις με C είναι σχετικά απλό.
    Google για "ΑΝ937" "ΑΝ964" application notes της microchip και για το "PID without a PHD"
    Ψάξε και σε κανα compilerοφορουμ να βρεις καμια εφαρμογή να πάρεις καμια ιδέα.



    ΥΓ Σε ποιον compiler δουλεύεις?

    0 Not allowed! Not allowed!
    Πριν γράψετε ένα νέο θέμα στο φόρουμ, ψάξτε ->εδώ<-, κάτι θα βρείτε που δεν ξέρατε.

  3. #3
    Μέλος Το avatar του χρήστη lastid
    Όνομα
    Δημήτρης
    Εγγραφή
    Feb 2009
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    841

    Προεπιλογή

    Για μία γρήγορη αρχή, ιδού εύκολα υλοποιήσιμος ψευδοκώδικας από το λήμμα Wikipedia-PID controller

    Κώδικας:
    previous_error = 0
    integral = 0 
    start:
      error = setpoint - actual_position
      integral = integral + (error*dt)
      derivative = (error - previous_error)/dt
      output = (Kp*error) + (Ki*integral) + (Kd*derivative)
      previous_error = error
      wait(dt)
      goto start

    0 Not allowed! Not allowed!

  4. #4
    Μέλος Το avatar του χρήστη basjot
    Όνομα
    Βασίλης
    Εγγραφή
    Apr 2009
    Περιοχή
    Αθήνα
    Μηνύματα
    38

    Προεπιλογή

    Τον PID τον θέλω για dc-κινητήρα.
    Έχω εγκαταστήσει το HI TECH C PRO. Και δουλεύω με ότι compiler έχει αυτό.

    Έχω μια απορία στον τύπο που μου ανέφερες πιο πάνω, το (dt) φαντάζομαι είναι ο χρόνος δειγματοληψίας, πως μπορώ να τον ρυθμίσω (για κρύσταλο 10MHz)?

    0 Not allowed! Not allowed!

  5. #5
    ΥπερΣυντονιστής Το avatar του χρήστη gsmaster
    Όνομα
    Γιάννης
    Εγγραφή
    Aug 2003
    Περιοχή
    Γιάννενα
    Μηνύματα
    4.444

    Προεπιλογή

    Θα το βάλεις με ένα interrupt, Δες τα Application notes εχει μπλοκ διαγράμματα πως μπορείς να το κάνεις.

    Ο χρόνος εξαρτάται απο την ταχύτητα απόκρισης του hardware σου. Φτιάξτο πρώτα ως αλγόριθμο και μετά το προσαρμόζεις.

    0 Not allowed! Not allowed!
    Πριν γράψετε ένα νέο θέμα στο φόρουμ, ψάξτε ->εδώ<-, κάτι θα βρείτε που δεν ξέρατε.

  6. #6
    Μέλος Το avatar του χρήστη dikos
    Όνομα
    Δήμος
    Εγγραφή
    Nov 2005
    Περιοχή
    ΑΘΗΝΑ - ΠΕΙΡΑΙΑΣ
    Μηνύματα
    319

    Προεπιλογή

    Ρίξε μια ματιά στις παρακάτω συνδέσεις

    http://www.grobot.gr/index.php?optio...=article&id=88
    http://www.grobot.gr/phpBB3/viewtopic.php?f=5&t=14

    0 Not allowed! Not allowed!
    ΕΛΛΗΝΙΚΗ ΠΥΛΗ ΡΟΜΠΟΤΙΚΗΣ
    http://www.GRobot.gr

  7. #7
    Μέλος Το avatar του χρήστη basjot
    Όνομα
    Βασίλης
    Εγγραφή
    Apr 2009
    Περιοχή
    Αθήνα
    Μηνύματα
    38

    Προεπιλογή

    Όταν η έξοδος του PID έχει τιμή άνω των 10 bits (όπου και είναι η έξοδος PWM), με ποιο λόγο πρέπει να πολλαπλασιάσω για να το φέρω στα 10 bits?
    (H έξοδος του PID είναι δηλωμένη σαν signed float)

    0 Not allowed! Not allowed!

  8. #8
    Μέλος Το avatar του χρήστη lastid
    Όνομα
    Δημήτρης
    Εγγραφή
    Feb 2009
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    841

    Προεπιλογή

    Δεν είμαι σίγουρος αλλά νομίζω ότι θέλεις το εξής:
    Αν υπολογίσεις την μέγιστη και ελάχιστη τιμή που μπορεί να πάρει η output, θα βρεις αυτό που θέλεις. Οι ακραίες τιμές αυτές υπολογίζονται από τις ακραίες τιμές των setpoint, actual_position, dt, Kp,Ki,Kd.
    Αν π.χ. βρείς ότι η output είναι μεταξύ -10000 και 10000, τότε για να την φέρεις στα 10 bits με πρόσημο (-511..511), θα πρέπει να διαιρέσεις με το 19. Εναλλακτικά, μπορείς να διαιρέσεις με το 32 (δεξιά ολίσθηση 5 bits) για ευκολία.

    0 Not allowed! Not allowed!

  9. #9
    Μέλος Το avatar του χρήστη basjot
    Όνομα
    Βασίλης
    Εγγραφή
    Apr 2009
    Περιοχή
    Αθήνα
    Μηνύματα
    38

    Προεπιλογή

    Αυτό σκέφτηκα να κάνω, απλά ήθελα και μια επιβεβαίωση από κάποιον άλλον. Ευχαριστώ

    0 Not allowed! Not allowed!

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

  1. PID controller
    By Gaou in forum Ερωτήσεις Αρχάριων
    Απαντήσεις: 4
    Τελευταίο Μήνυμα: 14-07-15, 20:14
  2. REX-C100 PID Controller Λίγη Βοήθεια...
    By Highlander in forum Αυτοματισμοί
    Απαντήσεις: 5
    Τελευταίο Μήνυμα: 19-06-14, 14:39
  3. HELP !! PID Controller με Mathematica προγραμμ.
    By tripodous in forum Ηλεκτρονικά
    Απαντήσεις: 12
    Τελευταίο Μήνυμα: 21-04-12, 22:31
  4. Αλγοριθμος PID για σταθμο κολλησης
    By herctrap in forum Αυτοματισμοί
    Απαντήσεις: 3
    Τελευταίο Μήνυμα: 02-07-11, 15:50
  5. ΕΡΓΑΣΙΑ Ο αλγόριθμος Kruskal και Prim αλγόριθμος.
    By fiesta1420 in forum Ερωτήσεις Θεωρίας
    Απαντήσεις: 8
    Τελευταίο Μήνυμα: 18-04-10, 13:19

Tags for this Thread

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

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