w.b. if then else etc.
copy uit mijn johnnycode:
Repeat
GoSub ping 'metingen tijdens rijden
Print At 1, 1, "afstand is:"
Print At 1, 13, DEC3 afstand 'zet waarde op lcd
If afstand < 30 Then 'als de waarde van afstand nu kleiner is dan 30:
Print At 2,1, " Obstakel " 'tekst op het scherm zetten.
GoSub stoppen 'stoppen en servo inschakelen om een vrije doorgang te vinden
GoSub servo_aan
ElseIf afstand > 50 Then 'als de waarde van afstand nu Groter is dan 50:
Print At 2,1, "vrije doorgang" 'tekst op het scherm zetten.
EndIf
Until toets1 = hoog xor toets5 = hoog xor toets7 = hoog xor toets9 = hoog Stuur je bij het opstarten wel meer dan 1 pulsje naar de servo?
(in je code van 18 juli zie ik nog helemaal geen servosturing bij het opstarten...
ik heb echt alle mogelijkheden geprobeerd.
zowel de voorbeelden van Frits, alswel de voorbeelden uit proton.
b.v.
Servo servo1, 1500
DelayMS 20Of zelfs de motoren direct uit de accu voeden en alleen de uC via een regelaar.
Deze mogelijkheid ben ik ook al ergens tegengekomen.
Zeker een oplossing, daar ik straks met meerdere servos ga werken.
W.b. die nieuwe motoren....
het is geen echt probleem, alleen een hoop extra werk wat ik liever ergens anders aan besteedde.
De 2de proefrit red ik komend weekend niet meer.
Nieuwe pcb etsen en bestukken, motordriver nog op een koelblok monteren, en nog een paar lopende klusjes afwerken.
Volgende weekend vakantie, dus tijd genoeg over 
Weer de code getest, resultaat: hetzelfde 
Even op een rijtje
1) programma in pic
2) programmer loskoppelen, pic start gelijk op en servo centreert
3) US mode aan, bij detect, servo gaat draaien
4) na 2 cycli geeft hij 850 (cm) aan
5) na 3 sec draait hij een stukje naar rechts (hier zou de vrije doorgang moeten zijn)
4) en 5) blijft hij consequent doen, ook al draai ik de servo een kwartslag en zet ik er obstakels bij.
Als grootste afstand blijft hij 850 aangeven.
als ik de spanning er even af gooi, en ik start opnieuw op, 2) dan draait de servo gelijk een kwartslag naar links (850)i.p.v. naar 1500
het lijkt wel of die 850 ergens blijft hangen waardoor de servoposdoorgang dan ook 850 is.
Nog te snappen?
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Eerst die servo bij het opstarten maar 's:
Staat bor (Brown Out Reset) aan? Pic reset zichzelf dan bij lage voedingspanning. Als dat aanstaat voorkomt het dat 'ie raar gaat doen op het moment dat de voeding opkomt of afvalt.
Verder: stuur 's meerdere pulsjes naar die servo. Dus bij het opstarten niet
Servo servo1, 1500
DelayMS 20
maar bijvoorbeeld
for i = 0 to 50
Servo servo1, 1500
DelayMS 20
next
voor 50 pulsjes.
Ben benieuwd of dat wat uitmaakt, denk/hoop het eigenlijk wel. Als de pulsjes wegvallen weet die servo niet naar welke positie 'ie moet, en in de tijd van 1 pulsje kan 'ie toch niet die hele afstand afleggen? 't zal ook van het type servo afhangen denk ik, of 1 pulsje werkt of niet. Mijn el-cheapo servotjes (HXT900, is een TowerPro, stickertje zit aan de binnekant.) heb ik aangepast voor continue ronddraaien, dus ik kan niet meer testen...
Wat betreft dat meten: Kijk of je kan volgen wat de variabelen doen tijdens het proces. Misschien maar 8 metingen doen op 8 vaste punten. Servo naar 1e positie (stilzetten), meting doen, kijken welke afstand, kijken wat die "grootste afstand zoeken" routine ermee doet. Volgende servopositie zelfde verhaal.
In dat ene voorbeeld staat de sensor ook stil voor ze 'n meting doen. Ik weet niet of het wat uitmaakt, maar misschien.
Elke keer 850 is heel raar... Dat is niet eens een afstand...
Gaat 't wel goed bij het printen? Overschrijf je niet slechts een deel van wat er al stond?
print at 1,1, "1092"
delayms 1500
print at 1,1, "2" 'en nu staat er dus 2092
for i = 0 to 5
Servo servo1, 1500
DelayMS 20
next
dit werkt nu prima
BOR_ON wordt niet herkend door proton
Print At 1,1, "doorgang op"
Print At 1,12, DEC4 afstand 'hier geeft hij de vrije doorgang aan
DelayMS 3000
Servo servo1, servoposdoorgang 'hier zou hij naar de vrije doorgang moeten gaan maar hij gaat naar een andere willekeurige positie
DelayMS 3000
Servo servo1, 1500
DelayMS 20
Return print DEC4 "servoposdoorgang" veranderd in "afstand"
hij printte eerst de servostand op het lcd (overheen gekeken)
maar nu is wel duidelijk dat hij ten alle tijden de servoposdoorgang op 850 gevonden heeft
Ook laat hij nu de actuele afstand zien i.p.v. de grootste afstand.
vreemd....
hieronder de actuele code
servo_aan:
For teller = 1 To 2
For positie = 1500 To 2250 Step 20 'Omhoog tellen met stapjes van 10uSec vanuit de middenpositie
GoSub ping 'bij elke stap even meten
Print At 1, 12, DEC4 afstand 'zet waarde op lcd
Servo servo1, positie 'Stuur 'Positie' pulsjes naar PORTE.1
If afstand > afstand_oud Then
afstand_oud = afstand
servoposdoorgang = positie
EndIf
' DelayMS 18 'pauze van 18 Msec. voor de servo
Next
For positie = 2250 To 850 Step -20 'Terug tellen met stapjes 20uSec
GoSub ping 'bij elke stap even meten
Print At 1, 12, DEC4 afstand 'zet waarde op lcd
Servo servo1, positie 'Stuur 'Positie' pulsjes naar PORTE.1
If afstand > afstand_oud Then
afstand_oud = afstand
servoposdoorgang = positie
EndIf
'DelayMS 18 'pauze van 18 Msec. voor de servo
Next
For positie = 850 To 1500 Step 20 'en weer terug naar de middenpositie
GoSub ping 'bij elke stap even meten
Print At 1, 12, DEC4 afstand 'zet waarde op lcd
Servo servo1, positie 'Stuur 'Positie' pulsjes naar PORTE.1
If afstand > afstand_oud Then
afstand_oud = afstand
servoposdoorgang = positie
EndIf
'DelayMS 18 'pauze van 18 Msec. voor de servo
Next
Next
Print At 1,1, "doorgang op"
Print At 1,12, DEC4 afstand 'hier geeft hij de vrije doorgang aan
DelayMS 3000
Servo servo1, servoposdoorgang 'hier zou hij naar de vrije doorgang moeten gaan maar hij gaat naar een andere willekeurige positie
DelayMS 3000
Servo servo1, 1500
DelayMS 20
Return [Bericht gewijzigd door Kareltje op (56%)]
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
vast voor de fuses (bor): Heb je de fuse configurator al? Dat is een plugin waarmee de fuses makkelijker in te stellen zijn. Je selecteert een device, geeft per fuse aan wat het moet zijn, en de configurator maakt de config regel die je kunt copy-pasten.
Je code ga ik (morgen?) op kauwen.
Ik ben een stukje basic pro aan het bestuderen
dit komt van http://www.rentron.com/Micro-Bot/Sonar.htm
en het gaat mij hierom:
' Declare a few local variables
Index VAR BYTE ' Counter for turns & array index pointer
Position VAR WORD[5] ' Array for 5 sonar readings
Direction VAR BYTE ' Best direction to advance towards
Mapping: ' Back up a little first
FOR X = 0 TO 24 ' Change to increase or decrease backwards movement
PULSOUT Left_Servo,ReverseLeft
PULSOUT Right_Servo,ReverseRight
PAUSE 20
NEXT X ' Finished backing up, now start mapping a path
FOR Index = 0 TO 4 ' Loop 5 times + index 5 array elements
FOR X=0 TO 4 ' Increase X here to expand sonar sweep turn radius
PULSOUT Left_Servo,ForwardLeft ' Forward left servo
PULSOUT Right_Servo,ReverseRight ' Reverse right servo
PAUSE 20
NEXT
PAUSE 500 ' Allow to settle after turning
GOSUB Ping ' Take sonar reading in new direction
Position[Index]=Distance ' Log converted measurements into array
NEXT Index
' Here we find the direction with the clearest path from
' the sonar sweep.
Direction = 4 ' Point to 5th array element position
FOR Index = 0 TO 4 ' Index position array elements 0 to 4
IF Position[Index] > Position[Direction] THEN
Direction = Index ' Direction = array element # with longest distance reading
ENDIF
NEXT Index
IF Direction = 4 THEN Begin ' No turn required? Move forward again
Direction = 4 - Direction ' Find # of turns to clearest pathHeb je hier misschien iets aan?
p.s. ik ga zaterdag die rb-35's uit Johnny halen
stuur mij maar een PM met jou adres.
je hebt ze w.m.b. (toch) wel verdiend
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Die code had ik al 's naar gekeken. Hier gebruiken ze servo's om de hele robot aan te drijven. Als 'ie een obstakel tegenkomt draaien ze 'm naar 5 vaste posities, nemen op elke positie een meting, en kiezen daarna de beste. Draaien vervolgens naar die positie, en gaan weer rechtdoor tot ze hetvolgende obstakel tegenkomen. Ze gebruiken pulsout om de servo's te sturen, reverseleft etc. zijn constanten, pulsbreedtes die horen bij een bepaalde servostand. Of in dit geval: draaisnelheid en richting, want het zijn "gehackte" servo's (aangepast zodat ze 360 graden kunnen draaien en als motor gebruikt kunnen worden. Komt neer op het wegbreken van een nokje en het vervangen van de posititiepotmeter door een spanningsdeler met vaste weerstanden).
Het basic dialect is iets anders dan proton+ picbasic, maar valt wel te vertalen.
Index var byte -> dim index as byte.
pause -> delayms
pulsout -> servo (al is er ook een pulsout in Proton+, servo is echt bedoeld voor servo's).
Anyway, voor je code. Er valt me nu iets op:
De servo draaide bij het opstarten toch ook naar de verkeerde positie, totdat je meerdere pulsjes stuurde?
Even het eind van je code:
Next
Print At 1,1, "doorgang op"
Print At 1,12, DEC4 afstand 'hier geeft hij de vrije doorgang aan
DelayMS 3000
Servo servo1, servoposdoorgang 'hier zou hij naar de vrije doorgang moeten gaan maar hij gaat naar een andere willekeurige positie
DelayMS 3000
Servo servo1, 1500
DelayMS 20
Return
Hier stuur je dus ook maar 1 pulsje... (En daar keek ik overheen).
Als je hier nu ook meerdere pulsten stuurt::
Next
Print At 1,1, "doorgang op"
Print At 1,12, DEC4 afstand 'hier geeft hij de vrije doorgang aan
DelayMS 3000
for tellertje = 0 to 50
Servo servo1, servoposdoorgang
delayms 20
next
DelayMS 3000
Servo servo1, 1500
DelayMS 20
Return
Dan is er alleen nog het probleem dat de sensor niet stilstaat tijdens de meting. (Nouja, wel tijdens de meting, maar vlak ervoor beweegt 'ie. In de andere code zetten ze 'm eerst 'n halve seconde stil. Ik weet niet of dat echt nodig is, maar het valt te proberen, mocht het niet werken met bewegende sensor. Meet dan ook maar op een paar vaste plekken anders duurt dat scannen erg lang...)
Hopelijk krijgen we de boel (toch
) aan de praat.
(mail met adres is onderweg)
Engelengeduld wordt beloond.
Luke......HET WERKT!!!!
Ik zal proberen uit te leggen wat ik allemaal bedacht, en ondervonden heb.
Eerst de (zwaar verminkte) code:
servo_aan:
afstand_oud = 0
For positie = 800 To 2300 Step 50 'Omhoog tellen met stapjes van 10uSec vanuit de middenpositie
Servo servo1, positie 'Stuur 'Positie' pulsjes naar PORTE.1
DelayMS 25
GoSub ping 'bij elke stap even meten
'DelayMS 200
Print At 1, 13, DEC3 afstand 'zet waarde op lcd
If afstand > afstand_oud Then
afstand_oud = afstand
servoposdoorgang = positie
EndIf
Next
For positie = 2300 To 800 Step -50 'Terug tellen met stapjes 20uSec
Servo servo1, positie 'Stuur 'Positie' pulsjes naar PORTE.1
DelayMS 25
GoSub ping 'bij elke stap even meten
'DelayMS 200
Print At 1, 13, DEC3 afstand 'zet waarde op lcd
If afstand > afstand_oud Then
afstand_oud = afstand
servoposdoorgang = positie
EndIf
'Next
' For positie = 1000 To 1500 Step 150 'en weer terug naar de middenpositie
' Servo servo1, positie 'Stuur 'Positie' pulsjes naar PORTE.1
' DelayMS 200
'GoSub ping
' DelayMS 200
' Print At 1, 13, DEC3 afstand 'zet waarde op lcd
' If afstand > afstand_oud Then
' afstand_oud = afstand
' servoposdoorgang = positie
' EndIf
'Next
Print At 1,1, "doorgang op:"
Print At 1,13, DEC3 afstand_oud 'hier geeft hij de vrije doorgang aan
Next
DelayMS 3000
For i = 1 To 5
Servo servo1, servoposdoorgang 'hier zou hij naar de vrije doorgang moeten gaan maar hij gaat naar een andere willekeurige positie
Next
DelayMS 3000
Servo servo1, 1500
Return 'hierna zou de robot naar die vrije doorgang moeten draaien.
1)die for/next lusjes voor de servo toegevoegd = servo centreerd nu
2)servocommando + delay vóór de ping en in begin na de ping
eerst 2x 200 ms, nu kon ik mooi alles beter bekijken.
3)for/next lus t.b.v 2x scannen weg gehaald = hij scant immers 2x (heen en terug)
4)afstand_oud = 0 toegevoegd (is een bekende hè?)
5)scannen vanuit de middenpositie weg gehaald, en toen begon het te
werken
6)print "servoposdoorgang" veranderd in print "afstand_oud"
hij gaf namelijk de servopositie weer.
7) delay's aangepast om alles een beetje sneller te laten werken
Het bleek ook dat ik de delaytime, net na de ping, niet lager mag zetten dan 25ms, anders werkt het niet.
1 vraag: door die delays loopt mijn servo niet echt mooi soepel meer
zou het werken, als ik een elko over de servo zet? om het een beetje smoother te laten lopen.
Nu is het wachten op de proefrit om de draaisnelheid te kunnen meten, om Johnny met de juiste snelheid naar de goede richting te laten draaien.
Wat de motoren betreft...na een operatie van +/- 6 uur is Johnny van een paar sterke motoren voorzien.
Het was echt milimeterwerk om alles passend te krijgen, en nu moet ik nog een uitsparing in de accubak maken om alles weer gemonteerd te krijgen.
Ook heb ik het rugschild (koelplaat) verder afgewerkt en gemonteerd.
Hierop komen straks de H-bridge en de 7805's op gemonteerd.
Al met al, een produktieve dag geweest.
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Hey, mooi te horen dat het werkt!. Heel mooi. Enige is dan nog een beetje de code uitlijnen enzo, maar dat veranderd niks aan de functionaliteit. (netjes inspringen bij lusjes enzo). Ook leuk om te zien wat je nu precies gedaan hebt (dat lijstje). Mooi werk.
Servo smoother maken met een elco... Als het aan de voeding ligt, ja. Als het echt die delays is: Je zou om elk servocommando zo'n lusje kunnen zetten dat er 5 pulsjes van maakt gescheiden door de juiste delay. Nog handiger is dan misschien een subroutine die dat doet:
[code=picabsic]
doeservo:
for i = 0 to 5
servo servo1, positie
delayms 20
next
return
[/code]
En dan dus gewoon "gosub doeservo", overal waar nu "servo servo1, positie" staat (of waar al zo'n lusje staat).
Zou die 35ms vs 20ms echt zo veel uitmaken?
anyway: heel mooi dat het werkt. Ben benieuwd naar de filmpjes van hoe die rondrijd. Als 'ie af is moet je echt even een goeie camera regelen (geen telefooncamera), want dat verdiend een mooie robot als dit. (en ik wil 'm natuurlijk ook in volle glorie zien
).
Tuurlijk moet ik die code nog wat verfraaien, ik had hem bewust zo gelaten, zodat je kon zien, wat ik er allemaal in gerommeld heb.
Ik had met een elko willen bereiken, dat de servo iets langzamer uit zou lopen, tussen de pulsjes.
doeservo:
for i = 0 to 5
servo servo1, positie
delayms 20
next
return
Dit is een goed idee, maar dit zal dan alleen werken bij het centreren?
Zou die 35ms vs 20ms echt zo veel uitmaken?
Blijkbaar wel.
Ik gebruik nl. deze digitale servodie een iets hogere insteltijd hebben.
Waarschijnlijk is dit de reden
Ik ben bij punt 7) van mijn vorige post die delay steed korter gaan zetten, resp. 200, 150, 75, 50, 20, 35.
bij 20ms kreeg ik die rare ongecontroleerde draai.
Als 'ie af is moet je echt even een goeie camera regelen (geen telefooncamera), want dat verdiend een mooie robot als dit.
Ik geb een goeie vriend met een professionele camera, die trommel ik dan wel op.
voorlopig de 2de testrit nog met de nokia 
En het zal nog wel een tijdje duren voor hij in "volle glorie" te zien is (afwerking, polijstwerk, spuiten, etc.)
Hij moet er wel op zijn best utzien 
Tijdens de vakantieperiode ga ik aan het hoofd beginnen.
Dan wordt het pas echt leuk.
Ook moeten er nog 'oren' op (mic's) zodat hij ook nog op geluid gaat reageren.
Nu de 'vrije doorgang vinden' werkt, ben ik inmiddels met het 'bijsturen' bezig.
Ik heb eerst het hele bereik (850-2200)verdeeld in 8 vakken, zoals hieronder:
Het stukje code hiervoor:
'hier zou een for/next lus moeten komen om in stapjes van bv 20 ms naar de middenpositie te draaien.
'maar gezien de variabele stand van de servo weet ik niet hoe
If positie < 1025 Then
GoSub linksaf
DelayMS bijdraaitijd *4
GoSub rechtdoor
ElseIf positie < 1200 > 1025 Then
GoSub linksaf
DelayMS bijdraaitijd *3
GoSub rechtdoor
ElseIf positie < 1375 > 1200 Then
GoSub linksaf
DelayMS bijdraaitijd *2
GoSub rechtdoor
ElseIf positie < 1500 > 1375 Then
GoSub linksaf
DelayMS bijdraaitijd
GoSub rechtdoor
ElseIf positie > 2025 Then
GoSub rechtsaf
DelayMS bijdraaitijd *4
GoSub rechtdoor
ElseIf positie > 1850 < 2025 Then
GoSub rechtsaf
DelayMS bijdraaitijd *3
GoSub rechtdoor
ElseIf positie > 1675 < 1850 Then
GoSub rechtsaf
DelayMS bijdraaitijd *2
GoSub rechtdoor
ElseIf positie > 1500 < 1675 Then
GoSub rechtsaf
DelayMS bijdraaitijd
GoSub rechtdoor
EndIf
'tijdens die for/next lus moet de servo tijdens het draaien van Johnny naar de middenpositie draaien
Return symbol bijdraaitijd = 50
Dit getal moet uiteraard nog uitgetest worden.
Mij lijkt dit een vrij simpele oplossing voor het bijsturen van Johnny.
Tenzij..... er nog iets beters is.
Ik hou me aanbevolen 
Proton geeft hier wel 2 foutmeldingen aan, waar ik geen raad mee weet.
Daar de Then, if en elseif overal hetzelfde zijn, geeft hij maar op 2 regels de volgende foutmeldingen:
THEN directive missing frome ELSEIF command.
Misplaced or incorrect ELSEIF, also check its correspondending IF Command.
Waarom dan niet op al die andere gelijke regels?
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Hmm, zoiets? Stukje minder elsifs:
Op 18 juli 2010 15:32:33 schreef Lucky luke:
(on-affe) code:
if servoposdoorgang > 1500 then 'Links? Rechts? Ik gok nu links gosub linksaf 'hoe lang? Dat hangt af van de servopositie delayms (servoposdoorgang - 1500 * factor) 'weet niet of er een formule achter 'delayms mag als waarde... 'zonee dan: ' bijdraaitijd = (servopos - 1500) * factor ' delayms bijdraaitijd 'factor is een constante die experimenteel vast te stellen is ' en dan maar hopen dat een variabele achter delayms wel mag, anders een ' for-next met delayms 1 erin elseif servoposdoorgang < 1500 then 'nu dus de andere kant op draaien gosub rechtsaf delayms (1500 - servoposdoorgang) * factor end ifNatuurlijk moet ook de servo weer terugdraaien naar het midden anders blijft Johny opzij kijken terwijl 'ie rechtdoor rijdt. Dat ziet er waarschijnlijk een beetje maf uit...
Dat terugdraaien is natuurlijk het mooist als de servo terugdraait terwijl de robot heendraait, en liefst nog even snel ook. Maar het is makkelijker om de servo gewoon terug te laten draaien vlak voordat de robot gaat draaien en hopen dat 'ie er even over doet. Dus: motoren van robot aanzetten in de juiste richting, servo naar nieuwe positie sturen, wachten tot robot juist staat, en ondertussen draait die servo ook nog bij. Zoiets. Dat heb ik nog niet in die on-affe code gezet.
Verder: BOR heet BODEN bij PIC. (BOR is avr. Het heeft toch ook nadelen om met allebij te werken)
En ik weet niet wat ik met "positie < 1200 > 1025" moet. Ik denk dat de compiler het ook niet weet... ("positie < 1200 AND positie > 1025" lust 'ie misschien beter. Of "positie > 1025 AND positie < 1200").
komt mij weer bekend voor, die code van 18 Juli...
Dat is inderdaad een simpeler manier, en een variabele achter een delayms is geen probleem.
Dat heb ik nog van picbasic.nl.
Het voordeel hiervan is, dat je maar op 1 plaats bij hoeft te stellen.
w.b. die foutmeldingen... je hebt weer gelijk.
Hoewel ik "and" er in de eerste instantie al in had staan kreeg ik nog meer foutmeldingen.
nu heb ik alles aangepast, en foutvrij.
Die servo bijdraaien doet hij nu eigenlijk al tijdens het testen van die doorgang vinden, alleen moet ik zijn snelheid aanpassen aan het bijdraaien van Johnny, en het liefst gelijk op.
Boden staat idd bij mij aan.
Vorderingen Johnny 6
Vandaag mijn nieuwe PCB bestukt.
Het is eigenlijk een upgrade van de vorige versie, maar hier is de oude L293D eraf gehaald en vervangen door headers waaraan de nieuwe, zwaardere H-bridge aangesloten word.
Die wordt samen met de 7805 op een grote koelplaat gemonteerd.
Foto's :

De componentenzijde

en de achterzijde.
Dat kleine onbestukte hoekje is een accumeter, hiervan heb ik nog niet alles, maar dat is van latere zorg.
Die dikke banen rechtsonder is eigenlijk bedoeld voor een aftakking van de 12V naar de H-brug, maar ik denk toch dat ik die toch beter rechtstreeks vanaf de accu moet bekabelen.
Komende (vakantie)week hoop ik Johnny rijdende te hebben, hetzij alleen met de IR-sensors.
Uiteraard hiervan een filmpje.
Tijdens mijn vakantie hoop ik ook het hoofd klaar te hebben, en dan begint het pas echt leuk te worden.
(wordt vervolgd)
Kan iemand mij helpen een probleem op te lossen met een VNH3SP30 motor driver
Ik heb alles aangesloten volgens het bijgeleverde foto en schema, maar helaas...
De kleine ledjes gaan wel branden als ik de ingangen en enables aktiveer, maar ik krijg geen spanning op de uitgangen.
Als ik meet met 1 pen op de gnd en de andere op de uitgangen, meet ik op A en B 11.97 V
Meet ik op A + B van een uitgang dan krijg ik maar 20 mV
ik heb de PWM ingangen niet aangesloten, en ook niet de CS aansluitingen. CS = current sensor carrier
Moet ik die ingangen aan de GND hangen, of is dit het probleem niet?
Op pen 3 van jp2 heb ik 5V aangesloten zoals op de foto van het printje.
Maar bij de beschrijving staat dat vcc min. 5.5V moet zijn.
Kan ik ongestraft hier een verbinding maken naar mijn 12V ?
Weet er iemand raad?
edit: een vraag en schema toegevoegd
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Als ik even heel snel over die pagina kijk waar je naar linkt:
VCC op pin3 van jp2 is die connector aan de smalle kant. Daar mag geen 12V op. Dat moet aan de andere kant (met schroefklemmen) worden aangesloten en noemen ze in het schema vbat. VCC moet dus gewoon aan de 5V blijven hangen. de 12V gaat dan aan de andere kant op de print bij de printkroonstenen. Evt. kun je dan wel weer bij de smalle connector 12V afnemen, zei het niet meer dan enkele amperes.
In a typical application, the power connections are made on one end of the board, and the control connections are made on the other end. +5 volts must be supplied to the board through the smaller 0.1"-spaced pins; the input voltage is available at those pins as well, but the connection is not intended for currents exceeding a few amps.
CS is een uitgang, waar een spanning op komt te staan. Meer spanning naarmate de motoren meer stroom trekken.
For the VNH2SP30 version, the current sense (CS) pins will output approximately 0.13 volts per amp of output current.
De 3s is me niet helemaal duidelijk of die die functie wel heeft... Anyway, die pin kun je open laten.
PWM bestuurt de snelheid van je motoren. Het lijkt me persoonlijk het handigst als constant hoog de hoogste snelheid geeft en een lager percentage hoog een lagere snelheid. Dat zou betekenen dat je deze pin aan de 5V moet hangen. (Of, beter, aan een PWM uitgang van je microcontroller, dan kun je de snelheid regelen. Kijk 's naar HPWM (de 16F877 heeft dacht ik 2 PWM kanalen).). Als ze toevallig constant laag voor de hoogste snelheid hebben gekozen zou je 'm aan de grond moeten hangen. Proberen kan geen kwaad, zolang je niet meer dan 5V op die pin zet.
Ik heb een IR distance sensor in bestelling voor KLM5
En een Ding (Of dent). Dus ik krijg nog een 2e sensor, maar geen idee wat voor een en wat er defect aan is
(idd, die is out of stock, ik had een van de laatste 8)
Het rare aan dit schema is, dat ze vbat en vcc door elkaar halen.
vcc op de chip gaat naar vbat.
Wat ik ook raar vind, zijn die interne pull-ups van de enable.
Het is toch niet zo, dat ik die juist LAAG moet maken om ze te aktiveren?
Ik kan dat in die beschrijving en de datasheet er niet goed op uit maken.
[offtopic] @ Luke: de adaptertjes voor jou rb-35's zijn onderweg [/offtopic]
Jochem
If you want to succeed, double your failure rate.
Op 3 augustus 2010 22:57:08 schreef Kareltje:
Het rare aan dit schema is, dat ze vbat en vcc door elkaar halen.
vcc op de chip gaat naar vbat.
Dit lijkt me een doel hebben, er wordt een verschil gemaakt tussen vaste spanning en batterijspanning. Ik zie niet direct waar dit schema vandaan komt? Heb ook niet het hele topic gelezen hoor.
En excuses dat ik even tussen jullie discussie door kom 
Arjan Swets
cnc filmpjes op Http://www.arjan-swets.com
beetje rare manier van bouwen....
bouw eerst een hele robot van 20 kilo, en dan kunnen er bijna geen motor's meer in....
normaal begin je toch met eerst de motor's zoeken? uit te rekenen hoe sterk deze zijn(en of dat genoeg is voor de robot die je ongeveer wil gaan bouwen), wat voor stroom ze gebruiken, daar je electronica op berekenen....
Kareltje doet alles andersom..... 
Waarom excuses? dit is toch een open forum, en iedereen die meedenkt is van harte welkom.
Het schema komt van Polulu, hier is ook alle verdere info over deze motordriver te vinden.
Het probleem bij mij is, dat ik geen (goede) uitgangsspanning op de motoren krijg.
Edit: @ Arjan
Ik was er erg van overtuigd, dat die motoren sterk genoeg waren, en mocht het grote problemen opgeleverd hebben, dan had ik nieuwe zijplaten getekend en uit laten snijden.
De motoren die ik nu heb zijn een factor 10 sterker.
Ik heb best wel veel huiswerk gemaakt, maar hier had ik helaas niet op gerekend.
Ook was het de bedoeling geweest om die hele robot van aluminium te maken, maar daar hing een enorm prijskaartje aan.
Nog een edit:
De motoren draaien!!!!
Lucky Luke had de oplossing: De PWM ingangen aan de +5V hangen.
Helaas moet ik teveel printbanen doorslijpen en omleggen om de PWM van de uC te gebruiken (Later voor pcb V 1.3)
Morgen de motoren eronder hangen, en rijden met Johnny!! 
[Bericht gewijzigd door Kareltje op (16%)]
Jochem
If you want to succeed, double your failure rate.
Op 4 augustus 2010 14:19:50 schreef Kareltje:
Waarom excuses? dit is toch een open forum, en iedereen die meedenkt is van harte welkom.
Dat was uiteraard een grapje, omdat LL en jij al pagina's lang een één-tweetje aan het doen zijn.
Ik heb er even beter naar gekeken. Die driver-chips kun je voeden tot aan iets van 40V (iig de spanning die jij voor je motoren wilt gebruiken), hier dus aangeduid met VBAT. De VCC in het schema hangen de pull-ups aan, die zul je dus willen hebben op het niveau waar je uC op gevoed wordt (in jouw geval denk ik 5V, heb niet alle paginas gelezen).
Ik ben er inmiddels helemaal uit, Jochem.
Toch leuk dat jij er ook over meedenkt.
Over die motordriver is erg weinig op internet te vinden, en ook ben ik ze nergens in andere robots tegen gekomen.
Ik had nu, zoals LL al eerder aangaf de PWM's op +5V aangesloten, en nu lopen ze als een zonnetje.
Maar met die bypasses en ook nogeens en een paar verbrande printsporen (blunder
)heb ik toch maar besloten om een nieuwe pcb te etsen, en nu maar meteen op basis van PWM besturing.
Tevens heb ik meteen wat kleine onvolkomenheden weg kunnen werken.
Morgen staat een proefrit met de oude print op het programma.
Nu hopelijk zonder rookwolken 
Hopelijk kan ik dan ook een filmpje op youtube zetten.
Jochem
If you want to succeed, double your failure rate.
Op 8 augustus 2010 22:05:20 schreef Kareltje:
Over die motordriver is erg weinig op internet te vinden, en ook ben ik ze nergens in andere robots tegen gekomen.
Sommige drivers zijn populair omdat ze ooit ergens door iemand in een voorbeeldschema op internet zijn gebruikt. Men gaat zoeken, copy-pasten, en voila: een populaire driver voor robots.
Dat betekent echter niet dat deze, of een andere, driver minder geschikt is voor je robot. Er is gewoon zoveel keuze in dat spul, dat je ergens een knoop moet doorhakken. En dat er weinig op internet te vinden is... ach, een datasheet is genoeg 
Vandaag de 2de testrit gemaakt met Johnny6.!!
Hieruit blijkt, dat ik nog veel werk te doen heb.
Zowel hardware, software alsmede de mechanica.
Ik had de 12V voor de motoren van de print afgetakt, en hoewel ik hiervoor best wel brede banen op de print heb gezet, bleken deze niet te voldoen.
Vooral bij het draaien trekken deze motoren erg veel stroom.
Dus.... weer rook 
Ik ga hiervoor een rechtstreekse voeding vanaf de accu aanleggen.
Wat de motoren, en de driver betreft, die zijn meer dan sterk genoeg.
Dat ding kruipt overal overheen, en een helling van +/- 20% neemt hij met gemak.
PWM is nu echt noodzakelijk geworden, doordat Johnny te snel optrekt, en te snel is voor zijn gewicht word z'n lange lijf telkens naar achteren gedrukt.
Ik ga de software zo aanpassen, dat hij langzaam optrekt en ongeveer op 75% duty loopt met de mogelijkheid van volgas.
Tenslotte een kort filmpje van deze testrit.
Wederom excuses voor de slechte kwaliteit, ik kwam handen tekort
Jochem
If you want to succeed, double your failure rate.
Het beste die stroom voor de motoren vanaf je accu met kabels naar de driverprint en daarna meteen weer met kabels naar je motoren.
Maar op de print kun je prima de banen verzwaren door er koperdraad (gestript VD ofzo) op te solderen.