Σελίδα 2 από 3 ΠρώτηΠρώτη 1 2 3 ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 11 έως 20 από 24

Θέμα: Photoelectric Speed Sensor Encoder

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

    Προεπιλογή

    δεν θα πας με interupt ανά μέτρηση παλμών. Αν η ταχύτητα είναι μικρή ή μηδενική θα έχεις θέμα. Αυτά τα κάνουμε φτιάχνοντας ενα timed interrupt. παίρνεις ένα τιμερ και τον βάζεις να μετρά ανά 1 sec - αυστηρα (δηλ οχι delay_ms(1000) ). Ταυτόχρονα με άλλο counter μετράς πόσοι παλμοί ήρθανε (τον μηδενιζεις στο interrupt) Έτσι με ακρίβεια χρόνου δεν χάνεις παλμούς. Διαιρείς και έχεις συχνότητα --> ταχύτητα. Αν δε σε παίρνει χρονικά το interrupt, κάνεις υπολογισμούς έξω από ρουτίνα interrupt. Για να βρεις απόσταση, αθροίζεις παλμούς που είχε μαζέψει κάθε φορά. Πρόσεχε overflow.....

    1 Not allowed! Not allowed!

  2. #12
    Μέλος Το avatar του χρήστη jskalitexnis
    Όνομα
    Astatos
    Εγγραφή
    Sep 2009
    Περιοχή
    ..............
    Μηνύματα
    192

    Προεπιλογή

    Αν του έβαζα ενα κουμπάκι και του έλεγα απο την στιγμή που πατηθεί ξεκίνα να μετράς παλμούς και χρόνω για 5" δεν θα ήτανε πιο εύκολο ?η βασική ρουτίνα για να μετράει ποια ειναι βρε παιδιά γιατι εχω χαθεί ?

    0 Not allowed! Not allowed!

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

    Προεπιλογή

    Αυτό ακριβώς λέω παραπάνω. Εχεις λοιπον να λύσεις 2 προβλήματα.
    Α. Να μτερήσεις με ακριβεια τα πχ 5 sec. Αυτό πως θα το κάνεις? Timer interrupt λοιπόν! Η λογική είναι η εξής: Τι ρολόι έχεις? πχ 1Khz = 1 tick / 1 mSec. Πόσα tick θές? 5000. Οπότε φορτώνεις το 5000 στον register του timer (διαβασε datasheet) και όποτε η τιμή του Timer = 5000 να δημιουργεί interrupt. Έτσι ξέρεις οτι εκτελείτε οταν ακριβώς πρέπει.

    Β. Να μετρήσεις παλμούς μεγάλης συχνότητας. Κοίτα αν ο arduino εχει hardware counter. Αν ναι σε καθε διαστημα του Α πάρε την τιμή του counter και μετά μηδένισέ τον. Αν δεν έχει παίξε με εξωτερικό interrupt. On rising edge -> interrupt / pulse++ / Σε κάθε διαστημα του Α διάβασε pulse και μετά μηδένισε.

    0 Not allowed! Not allowed!

  4. #14
    Μέλος Το avatar του χρήστη SProg
    Όνομα
    Σάββας
    Εγγραφή
    Mar 2014
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.612

    Προεπιλογή

    Γενικα μετρας ποσες εξωτερικες διακοπες ηρθαν σε γνωστο χρονικο διαστα.Η αποσταση εχει μετα να κανει με τη διαμετρο/ακτινα της ροδας.

    Η ταχυτητα δεν ειναι τιποτα αλλο παρα μια παραγωγος..ή αλλιως η πρωτη προς τα πισω διαφορα.

    0 Not allowed! Not allowed!

  5. #15
    Μέλος Το avatar του χρήστη jskalitexnis
    Όνομα
    Astatos
    Εγγραφή
    Sep 2009
    Περιοχή
    ..............
    Μηνύματα
    192

    Προεπιλογή

    Το πρόγραμμα πρέπει να αναγνωρίζει την εναλλαγή της καταστάσεις ώστε να ξεκινάει μόνο του και μετά να μετρά παλμούς σε προκαθορησμενο χρόνο ωστε να γίνετε ο υπολογισμός .
    δεν μπορώ όμως να το γράψω στη wiring c .μπορεί καποις που γνωρίζει να το κάνει ?

    0 Not allowed! Not allowed!

  6. #16
    Μέλος Το avatar του χρήστη cdesp
    Όνομα
    Χρήστος
    Εγγραφή
    Sep 2009
    Περιοχή
    Κιλκις
    Μηνύματα
    253

    Προεπιλογή

    Παρακάτω έχω κάποιες ρουτίνες που χρησιμοποιώ σε ένα δικό μου αυτοκινητάκι και λειτουργούν καλά (όχι με ακρίβεια χιλιοστού).

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

    Ελπίζω να βοηθηθείς.

    Κώδικας:
    enum RoboCommand {
      rcBackward,
      rcForward,
      rcStop,
      rcLeft,
      rcRight  
    };
    
    
    
    
    RoboCommand rcmd; //για να ξέρουμε που πηγαίνουμε
    RoboCommand lastrcmd;
    volatile int mydist=0; //οι διακοπές που μετρήσαμε
    int lastdist=0; //οι διακοπες στο τελευταίο stop 
    int distanceTravelled=0; //η απόσταση που διανηθηκε
    
    
    
    
      
    //η διακοπή
    void speedencint()
    {
       if (rcmd==rcForward)  mydist++;  //εαν πάμε μπροστά αυξάνουμε
       if (rcmd==rcBackward)  mydist--; //αλλιώς μειώνουμε
    }
    
    
    void setup()
    {
    
    
     pinMode (speedenc, INPUT) ;
     attachInterrupt(speedint, speedencint, CHANGE); //εγκατάσταση διακοπής
    }
    
    
    //εαν πρέπει να σταματήσουμε
    boolean moveIsUpCM(){
    	return (rcmd==rcForward || rcmd==rcBackward) && isDistanceReached();
    }
    
    
    
    
    boolean isDistanceReached(){	
    	return (abs(distanceNowCM())>=stepMoveinCm); //ποσο θέλουμε να προχωρήσουμε σε εκατοστά
    }
    
    
    //η τρέχουσα απόσταση
    int distanceNowCM(){
    	return inCM(mydist-lastdist);
    }
    
    
    void clearDistance(){
    	  mydist=0;
        distanceTravelled=0;
    }
    
    
    //μετατροπή διακοπών σε εκατοστά 
    float inCM(int dist){
    
    
      return mydist/0.87; //αλλάζουμε ανάλογα 
    }
    
    
    
    
    //σταμάτημα μοτερ
    void Stop(){
     
     motor1.run(RELEASE);
     motor2.run(RELEASE);
     motor3.run(RELEASE);
     motor4.run(RELEASE);
     
     distanceTravelled=mydist-lastdist;//απόσταση που διανύθηκε
     lastdist=mydist; //οι διακοπές μέχρι στιγμής
     
     rcmd=rcStop;//τρέχουσα κατάσταση
    
    
    }
    
    
    //πισω
    void DESP_Robot::Backward(){
     
     
     motor1.run(BACKWARD);
     motor2.run(BACKWARD);
     motor3.run(BACKWARD);
     motor4.run(BACKWARD);
    
    
     rcmd=rcBackward;
     lastrcmd=rcmd;
    }
    
    
    //μπρος
    void DESP_Robot::Forward(){
     
     
     motor1.run(FORWARD);
     motor2.run(FORWARD);
     motor3.run(FORWARD);
     motor4.run(FORWARD);
     
     rcmd=rcForward; 
     lastrcmd=rcmd;
    }

    0 Not allowed! Not allowed!

  7. #17
    Μέλος Το avatar του χρήστη picdev
    Όνομα
    akis
    Εγγραφή
    Jul 2007
    Περιοχή
    ____
    Μηνύματα
    7.381

    Προεπιλογή

    Το τι μετράς ταχύτητα δεν αναιρει ότι θα πρέπει να έχεις εν ιντεραπτ που θα μετράει παλμους.

    Ξεκινά να διαβάζεις το ιντεραπτ on change

    0 Not allowed! Not allowed!

  8. #18
    Μέλος Το avatar του χρήστη SProg
    Όνομα
    Σάββας
    Εγγραφή
    Mar 2014
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.612

    Προεπιλογή

    Τωρα ειδα το αισθητηριο.Ο κωδικας ειναι για RPM, καμια σχεση.

    Το αισθητηριο για μια πληρη περιστροφη μπορει να σου δωσει 100 διακοπες.

    Εαν μιλαμε για ροδα ακτινας 2cm τοτε η ελαχιστη αποσταση που μπορεις να καταλαβεις ειναι (2cm*3.14*2)/100 δηλαδη 1.256 χιλιοστα !


    Ο χρονος αναμεσα σε 2event σου λυνει την ταχυτητα αφου ξερεις το ποσο προχωρησε (1.256 mm) αρα δε σου λειπει κατι για να υπολογισεις τη ταχυτητα.

    Το ποσο προχωραει ειναι απλα μια προσθεση σε καθε διακοπη.


    Το χρονο αναμεσα σε 2 διακοπες θα τον μετρας με Timer.Με 16bit Timer και οσο γινεται μικροτερο Prescaler για μεγαλυτερη ακριβεια.Δυστηχως εαν θες ακριβεια δεν σου κανει η Wiring γιατι δεν ξερεις τι σφαλμα πρεπει να αφαιρεις καθε φορα απο εντολες.

    0 Not allowed! Not allowed!

  9. #19
    Μέλος Το avatar του χρήστη jskalitexnis
    Όνομα
    Astatos
    Εγγραφή
    Sep 2009
    Περιοχή
    ..............
    Μηνύματα
    192

    Προεπιλογή

    Καλήμερα παιδιά .
    πρώτα απο όλα ευχαριστώ πολύ για ενδιαφέρων και την βοήθεια.

    Χρήστο με εριξες στα βαθιά με το κώδικα και ψάχνω σωσίβιο !!!! που ορίζω το input για το digitalRead που πρέπει να κάνει ?

    Σάββα το ελάχιστο βήμα ανά παλμό είναι (22μμ*3,14)/200 =0,3454 δηλαδή δέκατα του χιλιοστού.
    θα μου πεις γιατί 200 αφού εχει 100 οπές.
    έχει 100 οπες δηλαδή 100 HIGH και 100 LOW.Aρα απο το HIGH μέχρι το LOW η απόσταση ειναι 0,3454 μμ

    0 Not allowed! Not allowed!

  10. #20
    Μέλος Το avatar του χρήστη rep
    Όνομα
    Χρυσοστομος
    Εγγραφή
    Oct 2009
    Περιοχή
    Μακροχωρι Βεροια
    Μηνύματα
    1.331

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από jskalitexnis Εμφάνιση μηνυμάτων
    κανένας δεν γνωρίζει κάτι επι του θέματος ?
    αν γνωριζεις απο bascom παρε μια ιδεα. http://www.hlektronika.gr/forum/showthread.php?t=87216

    0 Not allowed! Not allowed!

Σελίδα 2 από 3 ΠρώτηΠρώτη 1 2 3 ΤελευταίαΤελευταία

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

  1. speed control AC
    By fan1s in forum Αυτοματισμοί
    Απαντήσεις: 2
    Τελευταίο Μήνυμα: 05-03-15, 15:18
  2. Απαντήσεις: 1
    Τελευταίο Μήνυμα: 23-10-13, 17:19
  3. SPEED CONTROL
    By fm355 in forum Ηλεκτρονικά
    Απαντήσεις: 17
    Τελευταίο Μήνυμα: 21-05-13, 16:33
  4. αισθητήρες μέτρησης ταχύτητας (speed sensor transduser)
    By waverunner in forum Εξαρτήματα & Datasheets
    Απαντήσεις: 2
    Τελευταίο Μήνυμα: 14-05-09, 00:35

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

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