Beste mensen,

Ik heb hier voor mij een modelbouw servo liggen. Deze doet het prima. Via de commando's van picbasic kan ik hem uitstekend links en rechts laten draaien.

Maar nu komt het, via pwm moet die dus ook links of recht kunnen draaien. Linksom blijkt geen probleem te zijn, rechtsom helaas wel. Ik heb hiervoor de volgende code gebruikt.



DEVICE 16F628A                ;We gebruiken een 16F628A type 
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF 
;bij inbranden alleen pwrte aan en instellen op inrc clkout
ALL_DIGITAL TRUE              ;Alle ingangen digitaal 
   
;pinnamen
SYMBOL servo1 = PORTA.1		  ;pin 18/portA.1 is led
SYMBOL S1 = PORTB.0			  ;pin 6/portb.0 is S1
SYMBOL S2 = PORTB.1			  ;pin7/portb.1 is S2


;Algemene constanten
symbol linksom = 51			  ; linksom 1 ms
symbol rechtsom = 102		  ; rechtsom 2 ms
DIm duty as byte

symbol inv_aan = 0			  ;voor schakelaars aan = 0 invert_aan
symbol inv_uit = 1			  ;voor schakelaars uit = 1 invert_uit


PORTB_PULLUPS ON              ;On-chip pull-up weerstanden actief 
CLEAR 		  	 			  ;wist alle variabele


        ;76543210           <<<Een hulpregeltje
PORTA = %00000000
TRISA = %11111100             ;PORTA.1 en PortA.0 zijn uitgangen               
TRISB = %11111111             ;Alle 8 poorten van PORTB zijn ingangen

;Begin
while 1 = 1  

If S1 = inv_aan then
delayms 250
PWM servo1, linksom, 1      ;Stuur 1 pulsen met pulsbreedte 'linksom', naar PORTA.1
Endif

If S2 = inv_aan then
delayms 250
PWM servo1, rechtsom, 1		;stuurt 1 puls met pulsbreedte 'rechtsom' naar porta.1
Endif

wend

end

Nou moet ik er wel bijzeggen dat het potentiometertje in dit geval is losgekoppeld, Hij kan dus oneindig draaien. En dat doet die ook heel mooi, steeds een klein stukje per puls. Maar dan alleen linksom.

ik denk dat je de puls/pauze tijd niet juist hebt of......
je ppotmeterstaat niet goed.

hmm me potmeter heeft in het midden gestaan, maar zelf als draai ik die helemaal naar links of naar rechts dat maakt niet uit. Als ik hem er simpelweg uithaal maakt het ook niet uit.

Verder begrijp ik van meerdere plekken waaronder picbasic.nl dat er 20 ms tussen moet zitten. Nou dat heb ik wel :D

Zo nauwkeurig komt de pauzetijd niet, ergens tussen de 8 en 50ms werkt gewoon.
Check je pulstijden !

Daar is je probleem al volgens mij.

Servo PWM is een variable tussen 1ms en 2ms met 1,5ms als midden positie. ;)

Dus als jij 20ms geeft duikt die 1 hoek in en komt daar niet meer uit.

hmmm. Ik gebruik het interne kristal van de 16f628.

Die pwm't met 200 hz, en het servo zou met 50 hz aangestuurd moeten worden.

Het gegeven singnaal maakt niet uit. als ik een duty heb van 1 en dus 1/255 * 5ms = 0.02 ms

of 100 en dus 100/255 * 5ms = 1.96 ms

Geeft geen verschil.

Picbasic kent meer bruikbare commando's.
Probeer SERVO of HPWM eens.
Om te zien hoe je die moet gebruiken, even in de help van picbasic kijken.

Ja SERVO werkt, maar goed daarmee heb ik de oplossing. Maar ik begrijp nog steeds niet waarom die beter werkt dan.

Misschien omdat ik zonder kristal werkt, is natuurlijk onnauwkeurig.

Ohja ik merk dat het nu wel uitmaakt waar de potmeter opstaat :P.