Hade funderingar vilket var nästa steg. Att se till att IO fungerar eller se om man kan få något att röra på sig.
Bestämde mig för att det var dax för rörelse.
Sagt och gjort, börja med läsa dokumentationen om stegmotor drivarna för att ha koll på timings.
Visst oftast kan man få det att "fungera" ändå, men om man inte sätter upp tider rätt kan det bli lite konstigt.
t.ex. om man inte har rätt inställningar på när riktningssignalen får ändras kan det bli så att det "tappas"
ett steg ibland när den byter riktning på en axel. Det kan då t.ex. bli så att LinuxCNC lägger ut en riktningsförändring medan drivern gör ett steg. Vilket håll blev då steget? Anledningen att det kanske bara blir ibland är p.g.a. latency. Att LinuxCNC drivaren inte fick tid exakt när den ville utan lite senare.
Med andra ord får man mycket svårfunna fel. Att kärningar blir mer och mer "fel" ju längre de är.
Det som man också måste kontrollera är om drivaren gör steget vid stigande eller fallande flank på step signalen.
Min drivare är att den gör steget vid fallande signal.
Optokopplaren mellan parallellporten och drivaren inverterar signalen, så på parallellkabeln så görs steget på stigande flank.
LinuxCNC stepgen tycker den skall gå vid stigande, så jag skall inte invertera signalen i parallellports drivern.
Min data ser ut såhär
1. Stegmotor drivare, pulslängd på steg signal 10us
2. Ändring av dir signal. Ej inom 0.5-5us efter steg (fallande flank).
3. max freq. 20kHz
4. Max latency 7.4uS
I "normal" mode så kan LinuxCNC ändra 1 gång per heartbeat (BASE_PERIOD). I mitt fall ger detta att en heartbeat på 10us+7.4us+safety time => 20us.
För att generera 1 steg behövs 2 heartbeat => max step freq 25kHz
25kHz stegfrekvens, 200steg/mm => 125mm/sec
Om denna hastighet inte skulle räcka så ha LinuxCNC möjlighet att köra ett helt steg i ett heartbeat, men det hanteras då delvis av parallellports drivern. Inget jag behöver i denna maskin.
Maskindokumentationen för min maskin specificerar 1500mm/min (25mm/sec). Vilket är antagligen vad stegmotorerna klarar.
Så för att vara på den mycket säkra sidan satte jag BASE_PERIOD till 50us.
Detta ger då max 100us / steg => 10kHz => 50mm/sec => 3000mm/min.
Detta ger möjlighet till dubbelt så snabbt som det gamla. Antagligen går det inte att köra så snabbt.
Anledningen till att välja 50us och inte 20us är flera. Bra marginal på max latency. Även att det lastar datorn mindre, mer tid till annat t.ex. UI. Finns ingen anledning att köra snabbare än man behöver.
Detta är de viktigaste bitarna i min nuvarande konfiguration för att köra med stegmotorer.
ini fil
Kod: Markera allt
[HAL]
BASE_PERIOD = 50000
SERVO_PERIOD = 1000000
[AXIS_0]
MAX_VELOCITY = 40
MAX_ACCELERATION = 200.0
# STEPGEN_MAXACCEL should be 1-10% larger than MAX_ACCELERATION (if backlash comp. is NOT enabled)
STEPGEN_MAXACCEL = 220.0
Hal fil
Kod: Markera allt
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES num_dio=[EMCMOT]NUM_DIO
loadrt probe_parport
loadrt hal_parport cfg="0x378 out"
loadrt stepgen step_type=0,0,0
addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread
addf stepgen.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf stepgen.update-freq servo-thread
net xstep => parport.0.pin-02-out
net xdir => parport.0.pin-03-out
setp parport.0.pin-03-out-invert 1
# X-Axis
setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 20000
setp stepgen.0.stepspace 20000
setp stepgen.0.dirhold 1000
setp stepgen.0.dirsetup 1000
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
net xpos-cmd axis.0.motor-pos-cmd => stepgen.0.position-cmd
net xpos-fb stepgen.0.position-fb => axis.0.motor-pos-fb
net xstep <= stepgen.0.step
net xdir <= stepgen.0.dir
net xenable axis.0.amp-enable-out => stepgen.0.enable
net home-x => axis.0.home-sw-in
Visar bara X-Axis, de andra två är i stort sett lika.
Testkörning visar att det fungerar! Alla axlar rör sig, men x-axeln bara i en riktning.
Första reaktionen. Vad har jag nu gjort för fel i x-axelns dir signal.
Kollar igenom schema och layout. Inga fel så långt.
Fel i dokumentation? Tar ur stegmotor korten och mäter bakplanet mellan controller kortet och stegmotor kortet.
Inga problem, kontakt mellan på rätt sätt. Ingen kortslutning mot jord eller matning heller.
Vad nu då!
Tar och bär ut skåpet och mäter på step och dir. Inga problem.
Tittar noggrannare på stegmotordrivarna. Ett är en SD13, två SD12 d.v.s 3A respektive 2A drivare.
Varför sitter det olika kort i? Det är samma stegmotorer på alla axlar.
Tar en chanstagning och bytar x och y axel korten. Nu fungerar X som det skall, Y går bara åt ett håll.
Fel på kortet alltså.
DSC_0043[1].JPG
Såhär ser kortet ut. Detta med min temporära lagning på. Lite fusk att visa vad som var fel.
Felsökningen gick till såhär.
1. Koppla in kortet på labbänken
2. Koppla signalgeneratorn på step signalen
3. Mät på motorutgångarna
Lite konstigt såg det ut. Alla lindningarna har ena sidan alltid drivna.
Mäter vidare på gaten på utgångstransistorerna. Vissa är alltid drivna.
Följer ledarna bakåt, kommer till en MC1488. En RS232 driver?!?!
Denna används tydligen som nivåskiftare, detta tillsammans med några externa transistorer.
MC1488 utgångarna verkar inte följa ingångarna. Aha, trasig!
Hittar faktiskt en på ett skrotkort man har i sin samling.
Inga förbättringar!
Mäter runt lite till. Hittar då att den saknar den negativa spänningsmatningen.
Varför drog man så förhastade slutsatser att den skulle vara trasig?
Varför kontrollerade jag inte det första man skall kontrollera på ett trasigt kort.
Finns matningspänningarna? Alla?
Efter det var det enkelt att hitta, kortslutning i en elektrolytkondensator.
Inte svullen! Kanske lite för gammal för att ha det problemet. Kortet gjort 1992.
I med kortet igen och nu går alla axlar på båda hållen!
Det måste varit problem med denna maskin tidigare. Sitter som sagt 3st stegmotor kort i den.
Alla tre är olika!
Här är bilder på de andra två
DSC_0045[1].JPG
DSC_0047[1].JPG
Kort 2 är nästan samma som kort 3, men på bara två amp. istället för 3. Lite färre utgångstransistorer bara.
Kort 3 är lite annorlunda. Den har t.ex. inte den kondensator som var problemet.
Lite annorlunda layout i vissa delar t.ex. det som sitter under de stora kondensatorerna.
Finns etiketter på baksidan av korten när de är testade och av vem.
Kort 1 10/9/92
Kort 2 2/4/93
Kort 3 15/4/93
Mitt felaktiga kort lite äldre än de andra, men inte mycket.
De två första korten har samma siffror på de båda kretsarna, det tredje har andra på det ena.
Versioner av PCB
Kort 1 1408.102.02
Kort 2 1408.102.03
Kort 3 1408.102.06
Tyder på Kort 3 är senare version, Kort 1 (det söndriga) det äldsta.
Ändå intressant att det tydligen skett så mycket förändringar på dessa kort under så pass begränsad tid.
Ändå trevligt att ha igång det så här långt. Är alltid en skön känsla när något rör sig för första gången!
Måste nu bara finna ut vad max acceleration och max hastighet kan bli på min maskin.
Helt enkelt testa sig fram och se var det slutar fungera. Börjar med låg acceleration för att finna ut max hastighet. Sedan justera upp accelerationen.
När man funnit max, justera ned mycket så det finns god marginal när man bearbetar också.
Kanske t.o.m. fästa något tungt på bordet när man testar.