rc servo styrning från PC
rc servo styrning från PC
Hej
Antar att detta hör hemma under mekatroniktråden men är egentligen en pc/programmeringsfråga.
Målet är att reglera en shunt på min panna lite lagom exakt från linux efter att ha tankat ner väderrapporten från nätet.
Jag försöker styra en RCservo (futaba s3003)från seriellporten via python på en PC, det går inte riktigt som jag tänkt mig.
Till detta används en gammal hemmabyggd avrprogrammerare för att få ut 0 eller 5 volt till styrsignalen.
DTR dras hög i antingen 0.5 1.5 eller 2.4 mS och sedan väntas det i 20 ms
Om jag fräser på ett tiotal pulser så kan jag få den att röra sig lite höger och vänster men ofta hackigt och inte särskilt snyggt och jämt.
Tyvärr har jag inget oscilloskop att titta på signalen med, men jag misstänker att den inte är snygg.
Har någon annan lyckats med detta?
Min tanke var att jag skulle slippa skriva c eller asm på PC:n alternativt slippa bygga hårdvara eller köpa en arduino.
Söker man på nätet går alla via någon microcontroller men det vore skönt att slippa detta.
Antar att detta hör hemma under mekatroniktråden men är egentligen en pc/programmeringsfråga.
Målet är att reglera en shunt på min panna lite lagom exakt från linux efter att ha tankat ner väderrapporten från nätet.
Jag försöker styra en RCservo (futaba s3003)från seriellporten via python på en PC, det går inte riktigt som jag tänkt mig.
Till detta används en gammal hemmabyggd avrprogrammerare för att få ut 0 eller 5 volt till styrsignalen.
DTR dras hög i antingen 0.5 1.5 eller 2.4 mS och sedan väntas det i 20 ms
Om jag fräser på ett tiotal pulser så kan jag få den att röra sig lite höger och vänster men ofta hackigt och inte särskilt snyggt och jämt.
Tyvärr har jag inget oscilloskop att titta på signalen med, men jag misstänker att den inte är snygg.
Har någon annan lyckats med detta?
Min tanke var att jag skulle slippa skriva c eller asm på PC:n alternativt slippa bygga hårdvara eller köpa en arduino.
Söker man på nätet går alla via någon microcontroller men det vore skönt att slippa detta.
Re: rc servo styrning från PC
På min hemsida, under "Freebies" finns det ritning & källkod & hex-fil till en PIC-baserat frunka som styr RC-servon. Man styr den med ett seriellt kommando, beskrivning finns i källkoden.
Re: rc servo styrning från PC
tack för länken, men en pic har jag nog inte använt på tio år så det tar nog ett tag att komma igång med den.
Jag börjar misstänka min egen hårdvara och testar att göra om samma sak med parallellporten istället då har jag 5 volt på signalpinnen.
Det finns ju i2c interface som är byggda på bitbanging så det borde ju fungera.
Tänk den som hade ett osciloskop......
Jag börjar misstänka min egen hårdvara och testar att göra om samma sak med parallellporten istället då har jag 5 volt på signalpinnen.
Det finns ju i2c interface som är byggda på bitbanging så det borde ju fungera.
Tänk den som hade ett osciloskop......
Re: rc servo styrning från PC
Pulserna ska komma ett antal gångar efter varandra med runt 20ms mellan för att servon ska kunde köra på plats. Minst ett 20-30 tal om du kör stopp till stopp.
Re: rc servo styrning från PC
Det var min ruttna seriellports konstruktion som var problemet.
Efter att ha hakat på en pinne på parallellporten så fungerade det "utmärkt"
Precisionen på en servo för 150 spänn är sådär, mittläget är ganska ofta på samma ställe
Först måste man i linux köra rmmod lp för att få access till porten sen är det bara att köra.
Efter att ha hakat på en pinne på parallellporten så fungerade det "utmärkt"
Precisionen på en servo för 150 spänn är sådär, mittläget är ganska ofta på samma ställe
Först måste man i linux köra rmmod lp för att få access till porten sen är det bara att köra.
Kod: Markera allt
import parallel
import time
p = parallel.Parallel()
tics=5
pulses=[0.0015,0.0005,0.0015,0.0025,0.0015,0.0025,0.0025,0.0015]
for pulse in pulses:
print pulse
counter=-1
while (counter < tics):
counter=counter+1
p.setData(0)
time.sleep(0.020-pulse)
p.setData(4)
time.sleep(pulse)
p.setData(0)
time.sleep(5)
Re: rc servo styrning från PC
Nja det gick ju sådär.
Servon orkar inte riktigt dra i ratten som ibland går riktigt tungt när den ska vända med mitt slarvigt byggda stag.
Eventuellt så är mitt stativ för svagt.
I värsta fall får jag sätta en utväxling mellan ratt och servo. Vet någon vart man kan köpa lämpliga kugghjul i stockholmstrakten?
Eller så köper jag en större servo.
Men styrelektroniken verkar fungera.
Servon orkar inte riktigt dra i ratten som ibland går riktigt tungt när den ska vända med mitt slarvigt byggda stag.
Eventuellt så är mitt stativ för svagt.
I värsta fall får jag sätta en utväxling mellan ratt och servo. Vet någon vart man kan köpa lämpliga kugghjul i stockholmstrakten?
Eller så köper jag en större servo.
Men styrelektroniken verkar fungera.
Re: rc servo styrning från PC
Köp ett FUTABA S3306 istället eller liknande, har 24kg/cm istället för S3003 4.1kg/cm. hobbex har t.ex.
Linux är nog inte helt lyckat att styra en servo, rtlinux hade nog i så fall varit bättre.
Fast hårdvara hade varit bäst tror jag, vill du inte programmera så finns SSC-32 servo controller på electrokit t.ex.
Linux är nog inte helt lyckat att styra en servo, rtlinux hade nog i så fall varit bättre.
Fast hårdvara hade varit bäst tror jag, vill du inte programmera så finns SSC-32 servo controller på electrokit t.ex.
Re: rc servo styrning från PC
Nu fungerar det bättre.
Jag byggde om konstruktionen så att axeln från servon driver ratten direkt utan något stag mellan och stabiliserade upp det rejält.
Servon ger 180 graders aktionsradie vilket är perfekt.
Efter att ha mätt pulsernas precision med datorns interna timers så var felmarginalen som mest 0.09 ms vilket eventuellt täcker upp för tiden som det tar i python att fråga vad klockan exakt är och köra en loop.
Detta räcker väl för att styra en servo, dock har jag inte provat att lasta datorn maximalt på alla kärnor och därmed riskera att swappa ut mitt program ur interninnet om jag inte sätter väldigt hög nicelevel på det.
Förmodligen swappas det inte ut mitt i en loop, men någon som kan vet kanske mer.
Det enda tidskritiska är styrpulsen, för att dra i fördelningsventilen på pannan räcker det nog med en timmes precision.
Servon går ibland lite olika tungt så fem pulser kan ibland ge fem grader och ibland 25 så jag behöver förmodligen lite mer feedback eller så får jag kalibrera mot mittpositionen.
Om jag köper en starkare servo och höjer spänningen lite löser det förmodligen också problemet.
Priserna på dealextreme gör att jag kommer undan under en hundring. http://www.dealextreme.com/details.dx/sku.35765
Att slippa ändlägesbrytare var en stark anledning till att välja rc-servon från början.
Jag har också sett lösningar med servos med i2c som har mycket högre precision. Men detta projekt får väl mest betrektas som ett bevis för mig själv att det fungerar och att jag förhoppningsvis inte behöver ränna upp och ner ur pannrummet när temperaturen hoppar tio grader upp och ner under dagen.
Tack för all hjälp alla inblandade.
Jag byggde om konstruktionen så att axeln från servon driver ratten direkt utan något stag mellan och stabiliserade upp det rejält.
Servon ger 180 graders aktionsradie vilket är perfekt.
Efter att ha mätt pulsernas precision med datorns interna timers så var felmarginalen som mest 0.09 ms vilket eventuellt täcker upp för tiden som det tar i python att fråga vad klockan exakt är och köra en loop.
Detta räcker väl för att styra en servo, dock har jag inte provat att lasta datorn maximalt på alla kärnor och därmed riskera att swappa ut mitt program ur interninnet om jag inte sätter väldigt hög nicelevel på det.
Förmodligen swappas det inte ut mitt i en loop, men någon som kan vet kanske mer.
Det enda tidskritiska är styrpulsen, för att dra i fördelningsventilen på pannan räcker det nog med en timmes precision.
Servon går ibland lite olika tungt så fem pulser kan ibland ge fem grader och ibland 25 så jag behöver förmodligen lite mer feedback eller så får jag kalibrera mot mittpositionen.
Om jag köper en starkare servo och höjer spänningen lite löser det förmodligen också problemet.
Priserna på dealextreme gör att jag kommer undan under en hundring. http://www.dealextreme.com/details.dx/sku.35765
Att slippa ändlägesbrytare var en stark anledning till att välja rc-servon från början.
Jag har också sett lösningar med servos med i2c som har mycket högre precision. Men detta projekt får väl mest betrektas som ett bevis för mig själv att det fungerar och att jag förhoppningsvis inte behöver ränna upp och ner ur pannrummet när temperaturen hoppar tio grader upp och ner under dagen.
Tack för all hjälp alla inblandade.