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

Θέμα: Οδήγηση servo μέσω PIC μικροελεγκτή κ MikroBasic.

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

    Προεπιλογή

    H Mikrobasic δεν έχει wait_us(variable) ώστε να την χρησιμοποιήσεις. Έχει όμως από ότι βλέπω delay_Cyc(cyclesdiv10). Για 4ΜΗz κρύσταλλο:
    - η delay_Cyc(3) προκαλεί καθυστέρηση 30 microseconds. Αυτή είναι και η ελάχιστη καθυστέρηση που μπορεί να δώσει.
    - η delay_Cyc(255) προκαλεί καθυστέρηση 2,55 milliseconds. Αυτή είναι και η μέγιστη καθυστέρηση που μπορεί να δώσει.

    Εσύ θέλεις καθυστέρηση 1 ms .... 2 ms. Άρα η παράμετρος cyclesdiv10 θα παίρνει τιμές 100...200.
    Χρειάζεσαι λοιπόν έναν μετασχηματισμό της μεταβλητής temp που διαβάζεις από την αναλογική είσοδο (0..255) στην τιμή (100..200) της cyclesdiv10. Ο μετασχηματισμός αυτός είναι ο εξής:

    cyclesdiv10 = 100 + (100*temp)/256

    0 Not allowed! Not allowed!

  2. #12
    Μέλος Το avatar του χρήστη Stergios_[.gr]
    Όνομα
    Στέργιος
    Εγγραφή
    Dec 2008
    Περιοχή
    Αθήνα
    Μηνύματα
    930

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από lastid Εμφάνιση μηνυμάτων
    H Mikrobasic δεν έχει wait_us(variable) ώστε να την χρησιμοποιήσεις. Έχει όμως από ότι βλέπω delay_Cyc(cyclesdiv10). Για 4ΜΗz κρύσταλλο:
    - η delay_Cyc(3) προκαλεί καθυστέρηση 30 microseconds. Αυτή είναι και η ελάχιστη καθυστέρηση που μπορεί να δώσει.
    - η delay_Cyc(255) προκαλεί καθυστέρηση 2,55 milliseconds. Αυτή είναι και η μέγιστη καθυστέρηση που μπορεί να δώσει.

    Εσύ θέλεις καθυστέρηση 1 ms .... 2 ms. Άρα η παράμετρος cyclesdiv10 θα παίρνει τιμές 100...200.
    Χρειάζεσαι λοιπόν έναν μετασχηματισμό της μεταβλητής temp που διαβάζεις από την αναλογική είσοδο (0..255) στην τιμή (100..200) της cyclesdiv10. Ο μετασχηματισμός αυτός είναι ο εξής:

    cyclesdiv10 = 100 + (100*temp)/256
    Ευχαριστώ πάρα πολύ!! Είναι μόλις η 3η μου βδομάδα στους μΕ και την MB!!

    Καλά, 578 σελίδες manual έχει η MikroBasic, και δεν έχει πουθενά εξήγηση για την delay_CYC(*)???

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη Stergios_[.gr] : 21-10-09 στις 11:50

  3. #13
    Μέλος Το avatar του χρήστη Nemmesis
    Όνομα
    Παναγιωτης
    Εγγραφή
    Jun 2006
    Περιοχή
    Πτολεμαιδα
    Μηνύματα
    3.299

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από Stergios_[.gr] Εμφάνιση μηνυμάτων
    Ευχαριστώ πάρα πολύ!! Είναι μόλις η 3η μου βδομάδα στους μΕ και την MB!!

    Καλά, 578 σελίδες manual έχει η MikroBasic, και δεν έχει πουθενά εξήγηση για την delay_CYC(*)???
    την εχει σιγουρα στο help παντος... και να μην την ειχε μπορεις να κανεις εναν account στη σελιδα με το φορουμ την mikrobasic και οτι απορια-προβλημα εχεις σε βοηθαν εκει μεσα... πολλες φορες μαλιστα απανταν και οι ιδιοι που την φτιαξαν οποτε καταλαβενεις..

    0 Not allowed! Not allowed!
    φανατικος αντιαεικινηστης....
    δεν επιτρεπω την εξελιξη γιατι εχω πετρελαια...

  4. #14
    Μέλος Το avatar του χρήστη Stergios_[.gr]
    Όνομα
    Στέργιος
    Εγγραφή
    Dec 2008
    Περιοχή
    Αθήνα
    Μηνύματα
    930

    Προεπιλογή

    Άρχισα να δουλεύω delay_cyc.. Δεν ξέρω αν πέτυχε, γιατί όταν τροφοδότησα σέρβο + μΕ, ο σέρβο άρχισε να κάνει σπασμωδικές κινήσεις! Μαζί με τον σέρβο, τρεμοπαίζαν και τa LEDs που χρησιμοποίησα για ένδειξη του, οπότε υπέθεσα ότι μάλλον φταίει η USB τροφοδοσία..
    Κώδικας:
    program MiniSimTest
    
    ' * Description
    ' PWM library was unable to drive the SG5010 digital servo, so i am writing
    ' my own program. It will read Analog from PORTA.0 and it will create pulse
    ' of apropriate width every 20ms in PORTC.2  . NOW IN mikroBasic PRO.
    '
    ' * Test configuration
    '     MCU:            P16F887
    '     Dev.Board:      44pin demo board
    '     Oscillator:     internal 4Mhz
    dim temp_adc as word
    dim temp as word
    dim LED as byte
    
    main:
      ANSEL = %00000001          ' Configure AN0 pin as analog
      TRISA = %00000001          ' PORTA is input
      TRISC = %00000000          ' PORTC is output for pulses
      TRISD = %00000000          ' PORTD is output for temp_adc
    
      while true
        temp_adc = ADC_READ(0)
    
        PORTC = %00000100
        temp = 100 + (temp_adc div 10)  'η μεταβλητή που ορίζει την καθυστέρηση
        PORTD = temp 'εμφανίζω την μεταβλητή ΤΕΜΡ στα LEDs 
        delay_cyc(temp)
        PORTC = %00000000
        delay_cyc(200-temp) 'περιμένει τον αναγκαίο χρόνο ώστε να συμπληρωθούν τα 20ms της περιόδου
        delay_ms(18)
      wend
    end.
    Για να γλυτώσω την USB τροφοδοσία, σκέφτηκα να χρησιμοποιήσω τρανζίστορ. Δεν έχω ξαναχρησιμοποιήσει όμως, θα μπορούσε να με καθοδηγήσει κάποιος?
    ΕΥΧΑΡΙΣΤΩ

    0 Not allowed! Not allowed!

  5. #15
    Μέλος Το avatar του χρήστη DT200
    Όνομα
    Ιωάννης
    Εγγραφή
    Nov 2005
    Περιοχή
    ΜΕΓΑΡΑ
    Μηνύματα
    1.245

    Προεπιλογή

    αχ ... τι μου θυμίζετε τώρα εγώ δεν προλαβαίνω ποια.

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

    η εντολή delay_cyc δεν μπορεί να πάρει όποια τιμή θέλεις εσύ αλλά
    παίρνει μόνο τιμές από 3 έως 255.

    καλή συνέχεια.

    0 Not allowed! Not allowed!

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

    Προεπιλογή

    Στο παραπάνω πρόγραμμα:
    Η temp_adc είναι από 0 έως 255.

    Άρα:
    H temp θα είναι από 100 μέχρι 125, εντός των ορίων της delay_cyc() δηλαδή.
    Η πρώτη delay (ON παλμός) θα είναι από 1 ms μέχρι 1.25ms.
    Η δεύτερη delay (OFF παλμός) θα είναι από 19 ms μέχρι 18.75 ms.

    Συμπέρασμα:
    Θα έπρεπε να παρατηρείται ομαλή κίνηση του σέρβο σε μία μικρή περιοχή (25% της πλήρους διαδρομής ).
    To γεγονός ότι δεν παρατηρείται αυτό, σημαίνει ότι πρέπει να βρεις πού είναι το λάθος.
    Αφού το βρεις, θα πρέπει να αλλάξεις και την πράξη, ώστε να έχεις 1ms...2ms

    Μπορείς να πειραματιστείς με τα εξής:
    - Μάθε με τα leds τί τιμή παίρνει η temp
    - Μάθε με τα leds τί τιμή παίρνει η temp div 10
    - Τα leds αναβοσβήνουν τρελά ακόμη και αν αποσυνδεθεί το σέρβο?

    0 Not allowed! Not allowed!

  7. #17
    Μέλος Το avatar του χρήστη DT200
    Όνομα
    Ιωάννης
    Εγγραφή
    Nov 2005
    Περιοχή
    ΜΕΓΑΡΑ
    Μηνύματα
    1.245

    Προεπιλογή

    θα ρωτήσω κάτι ακόμα και δεν θα σας ¨ενοχλήσω¨ άλλο,
    η λέξη του ADC είναι 10 bit άρα παίρνει τιμές από το 0 έως το 1023.
    πώς περιορίζετε ο αριθμός του ADC μέχρι την τιμή 255 ?

    0 Not allowed! Not allowed!

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

    Προεπιλογή

    Έχεις δίκιο, είναι 10 bits.
    Απλά επειδή δεν είχα δουλέψει σε Mikrobasic και επειδή αναφερόμενος παραπάνω (στο μήνυμα #11) σε 8 bits αποτέλεσμα δεν το παρατήρησε κανένας, θεώρησα και τώρα ότι το αποτέλεσμα που επιστρέφει η ADC_READ() είναι 8-bits.
    Όμως ακόμη και έτσι, η delay_cyc() του πρώτου παλμού παίρνει έγκυρες τιμές παντού, σωστά? Διότι η temp θα είναι από 100 μέχρι 202.

    0 Not allowed! Not allowed!

  9. #19
    Μέλος Το avatar του χρήστη Stergios_[.gr]
    Όνομα
    Στέργιος
    Εγγραφή
    Dec 2008
    Περιοχή
    Αθήνα
    Μηνύματα
    930

    Προεπιλογή

    Παιδιά σας ευχαριστώ για τις απόψεις σας! Έλειπα και έχασα τον διάλογο...
    LastID, όπως σωστά λες, η temp παίρνει τιμές από 100 έως 202, οπότε είναι μέσα στο "αποδεκτό" για σέρβο.
    Κώδικας:
    Παράδειγμα ΜΑΧ:
    ADC_READ(0) = 1024
    temp = 100 + (1024 div 11) = 100 + 102 = 202
    delay_cyc(temp) = delay_cyc(202) = delay 2,02 ms
    Προσπαθώ αλλά δεν μου κάθεται...

    ΠΑΡΑΚΑΛΩ ενόχλησέ μας DT200 ΟΣΟ ΘΕΣ!!!
    Tα LEDs ΔΕΝ αναβοσβήνουν τρελά μόλις βγάλω τον σερβο.. Λειτουργούν ομαλά.

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη Stergios_[.gr] : 01-11-09 στις 02:59

  10. #20
    Μέλος Το avatar του χρήστη Stergios_[.gr]
    Όνομα
    Στέργιος
    Εγγραφή
    Dec 2008
    Περιοχή
    Αθήνα
    Μηνύματα
    930

    Προεπιλογή

    Πήρα και μικρούς σέρβο, ΜΗ-ψηφιακούς, για να δοκιμάσω τον θεωρητικά σωστό αλγόριθμό μου... για να δούμε..
    Αυτοί είναι οι σέρβο, από ΕΒΑΥ:

    http://cgi.ebay.com/ws/eBayISAPI.dll...d=&mfe=sidebar

    0 Not allowed! Not allowed!

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

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

  1. Οδήγηση servo ηλεκτροβάνας με arduino
    By Holy Driver in forum Κυκλώματα για Auto & Moto
    Απαντήσεις: 1
    Τελευταίο Μήνυμα: 31-08-13, 17:38
  2. οδήγηση βιομηχανικού Servo
    By picdev in forum Μικροελεγκτές
    Απαντήσεις: 5
    Τελευταίο Μήνυμα: 04-04-13, 18:51
  3. Οδήγηση μπάρας 50 LED από μικροελεγκτή PIC
    By Stergios_[.gr] in forum Μικροελεγκτές
    Απαντήσεις: 9
    Τελευταίο Μήνυμα: 01-03-12, 23:53
  4. Απαντήσεις: 7
    Τελευταίο Μήνυμα: 24-05-11, 01:42
  5. Κατασκευή τροφοδοτικού για οδήγηση DC servo
    By kpap in forum Κυκλώματα Τροφοδοτικών
    Απαντήσεις: 9
    Τελευταίο Μήνυμα: 28-01-11, 10:53

Tags for this Thread

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

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