Het bouwen van een super servo

Gepost door Jeroen Vreuls op dinsdag 2 mei 2023

Software

We gaan nu naar een stukje programma kijken.

'*  Name    : SERVO_BESTURING.                                     
'*  Author  : H.van Zwieten.                                    
'*  Notice  : Copyright (c) 2010 H.v.Z.                         
'*          : All Rights Reserved                               
'*  Date    : 22-3-2010                                         
'*  Version : 1.0.
                                             
Device 16F887                            ; Processor type

Xtal 10                                  ; Crystal 10 Mhz

Asm                                      ; Config settings
CONFIG_REQ            
__CONFIG _CONFIG1, HS_OSC & WDT_OFF & DEBUG_OFF & FCMEN_OFF & LVP_OFF & IESO_OFF & BOR_OFF & CPD_OFF & CP_OFF & MCLRE_OFF & PWRTE_ON 
__CONFIG _CONFIG2, WRT_OFF & BOR40V 
EndAsm
     
All_Digital true                         ; Alle poorten digitaal

Declare LCD_RSPin PORTD.2                ; Reset display poort D.2
Declare LCD_ENPin PORTD.3                ; Enable display poort D.3
Declare LCD_DTPin PORTD.4                ; Data display poort D.4 t/m D.7

Declare Adin_Res    = 8                  ; Resolutie 8 bits      
Declare Adin_Tad    = frc                ; Set rc osc     
Declare Adin_Stime  = 50                 ; Sample tijd 5 

Symbol SERVO_MOT = PORTC.0               ; Uitgang servo

Dim POSITIE As Word                      ; Variabele positie servo

Dim DATA_IN As Byte                      ; Variabele data servo

Cls                                      ; Wis display

DelayMS 500                              ; Wachttijd

Clear                                    ; Wis geheugen 
                                   
         ;543210                         ; Hulpregel poort A
PORTA  = %000000                         ; Maak poort A laag
TRISA  = %111111                         ; Poort_A I/O

         ;543210                         ; Hulpregel poort B
PORTB  = %000000                         ; Maak poort B laag
TRISB  = %000001                         ; Poort_B I/O

         ;76543210                       ; Hulpregel poort C
PORTC  = %00000000                       ; Maak poort C laag
TRISC  = %00000000                       ; Poort_C I/O

         ;76543210                       ; Hulpregel poort D
PORTD  = %00000000                       ; Maak poort D laag
TRISD  = %00000000                       ; Poort_D I/O

         ;210                            ; Hulpregel poort E 
PORTE  = %000                            ; Maak poort E laag
TRISE  = %111                            ; Poort_E I/O

         ;76543210                       ; Hulpregel analoog
ADCON0 = %00000001                       ; ADCON0 register analoog

         ;543210                         ; Hulpregel analoog poort_B
;ANSELH = %000000                        ; ANSEL register analoog poort_B

;----------------------
; TEST PROGRAMMA SERVO.
;----------------------

RUN: 
                                      

    DATA_IN = ADIn 0
                          
    POSITIE = 850 + (DATA_IN*5)
    Servo SERVO_MOT,POSITIE 
    DelayMS 10 
    
    Print At 1,1,Dec4 POSITIE                
                                                           
GoTo RUN                                    

End

Zoals je kunt zien stelt het programma niets voor, met de instructie SERVO kun je heel snel iets opzetten om een servo te bedienen. De beginpositie van de servo is hier 850 en die loopt door tot 2125. De gebruikte waarde kan per servo verschillen, dus je moet eerst even testen tot hoever de servo kan.

Het signaal dat gegenereerd wordt ziet er dan als volgt uit, de waarde ligt tussen de 1 ms en 2 ms bij een vaste frequentie van 50 Hz. Alleen gebruik ik niet de standaard frequentie, maar een iets hogere. Analoog inlezen en een printopdracht geven kost ook wat tijd, dus vandaar de DELAYMS 10.

Signaal waarmee de servo aangestuurd wordtSignaal waarmee de servo aangestuurd wordt