Gepost door Jeroen Vreuls op dinsdag 2 mei 2023
Nu besturen we de servo via een potmeter, maar dat kun je ook via de PC doen met Profilab Expert 4.0. Ik ga daar een voorbeeld van laten zien hoe je dat kunt maken. De data wordt serieel verzonden via de USB-poort, in combinatie met een USB naar serieel adapter met FTDI chipset. Hier het voorbeeld in Profilab.
PT1
is de potmeter, de waarde van de potmeter gaat via FRM1
naar het display op de frontplaat. In de module FRM1
staat een kleine formule, E0 X 5 + 850
, dit geeft de positie aan van de servo. De waarde van de potmeter gaat ook naar een $CHR1
module, deze zet de waarde van de potmeter om in een string. De string wordt dan verzonden via de $CS1
module, met deze module stuur je de USB-poort aan. De G1
module is een pulsgenerator en verstuurt de waarde met 50 Hz naar de controller via de USB-poort. De waarde wordt dus 50 maal per seconde verzonden door de PC.
Hier hoort nog een bedieningspaneel bij, de frontplaat.
Het enige wat hier opstaat is de potmeter en het display. De potmeter kun je bedienen via je toetsenbord of de muis. Via het toetsenbord gaat het met de page-up of page-down toets en via de muis kun je de potmeter bedienen met het scroll-wieltje.
Het programma van de controller is iets aangepast.
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 Hserial_Baud 9600 ; Set baudrate op 9600
Declare Hserial_RCSTA %10010000 ; Register instelling
Declare Hserial_TXSTA %10100110 ; Register instelling
Declare Hserial_Clear = On ; Reset buffer bij een overflow
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 SUPER-SERVO
;----------------------------
RUN:
Print At 1,1,"SERVO"
Print At 2,1,"POSITIE:",Dec4 POSITIE
HSerIn [DATA_IN]
DelayMS 1
POSITIE = 850 + (DATA_IN*5)
Servo SERVO_MOT,POSITIE
DelayMS 10
GoTo RUN
End
Het stukje van de analoge ingang is weg, het stukje HSerIn
is daarvoor in de plaats gekomen. Het Print
commando is ook iets aangepast, voor de rest is er niets veranderd. Op deze manier kun je de data serieel ontvangen van de pc en de servo bedienen.