Så.. Tanken poppade upp rätt snabbt att bygga sin egen triacdrivare och varvtalsåterkoppling till LinuxCNC. Sen låta LinuxCNC stå för PID reglering av varvtalet.
Flera fördelar med detta:
* Man kan känna av att spindeln verkligen är påslagen innan man börjar fräsa
* Sätta ett deterministiskt varvtal i CAM berednigen
* Konstant skärhastighet
* Möjligtvis komma ner lite i varvtal på fräsen
* Roligt projekt
Tänkt lösning
* Läsa av spindelvarvtal på något sätt, optiskt eller hall-givare. Möjligtvis använda givaren som redan sitter i fräsmotorn om jag lyckas lurka ut hur den fungerar.
* Inkoppling av varvtalsgivare mot PC via optokopplare
* Inläsning av varvtal mha ENCODER modul i LinuxCNC
* PID regulator i LinuxCNC styr en PWM generator för hastighetsreglering av motorn enl: 555 triac styrning
Förstudier
Mjukvara, LinuxCNC har PWM, encoder samt PID moduler direkt tillgängliga, inga konstigheter. Började kolla så att PWM signalen kan genereras och skickas via optokopplare utan för mycket förvrängning. Inga problem att få iaf 1kHz med bra upplösning. Sätter man "dither-pwm" biten i PWM modulen så får man i princip oändlig teoretisk upplösning. Testade sedan encoder modulen. 30krpm ska min spindel kunna snurra i (Kress800FME), 500Hz, inga problem genom optokopplaren och LinuxCNC läser av korrekt frekvens.
Testrigg
Innan jag bygger en triacmodul tänkte jag att jag behöver testa konceptet lite. Har därför byggt en liten testrigg. En vanlig borstad DC motor styrs via PWM utgången mha en MOSFET. 12V externt labbagg. Magnet limmad på axeln och en hall-givare för att läsa av varvtalet. Slabbar ihop kretskorten och skriver ut ett fäste till motorn på 3D-skrivaren: Testar PWM'en och motorn snurrar igång. Läser av encoder velocity och verifierar att rätt varvtal avläses med oscilloskopet.
PID koppling
Dags att koppla ihop loopen. Lägger på en SCALE på encoder.velocity för att få RPM och inte Hz på varvtalet. Utgången från scale in på feedback på PID. Kopplar PID output till PWM in. Har inte kopplat PID börvärde till någon spindle speed signal ännu, utan kör den manuellt för uttestning av PID värdena. Såhär ser min .hal fil ut med de berörda delarna än så länge.
Kod: Markera allt
# PWM OUTPUT ----------------------------------------------------------------------------------
loadrt pwmgen output_type=0
addf pwmgen.make-pulses base-thread
addf pwmgen.update servo-thread
setp pwmgen.0.dither-pwm 1
setp pwmgen.0.value 0
setp pwmgen.0.enable 1
net spindle_pwm pwmgen.0.pwm parport.0.pin-01-out
# ---------------------------------------------------------------------------------------------
# ENCODER INPUT -------------------------------------------------------------------------------
loadrt scale count=1
addf scale.0 servo-thread
setp scale.0.gain 60
loadrt encoder num_chan=1
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread
setp encoder.0.counter-mode 1
setp encoder.0.index-enable 0
setp encoder.0.position-scale 1
net spindle_encoder parport.0.pin-13-in => encoder.0.phase-A
net spindle_scale encoder.0.velocity => scale.0.in
# ---------------------------------------------------------------------------------------------
# SPINDLE PID ---------------------------------------------------------------------------------
loadrt pid num_chan=1
addf pid.0.do-pid-calcs servo-thread
setp pid.0.maxoutput 1
setp pid.0.Pgain 0.0004
setp pid.0.Igain 0.003
setp pid.0.Dgain 0
setp pid.0.index-enable 0
setp pid.0.enable 1
net spindle_feedback scale.0.out => pid.0.feedback
net spindle_pid pid.0.output => pwmgen.0.value
# ---------------------------------------------------------------------------------------------
Att mäta är att veta! Därför finns det ett inbyggt "oscilloskop" i LinuxCNC, HALSCOPE, med detta kan man kolla på alla parametrar och signaler som finns i systemet. Plottar varvtalets BÖR och ÄR värde, PID.output(PWM signalen) och PID.saturated. Saturated indikerar om PID regulatorn har nått sitt maxvärde (inställd till 1, 100% PWM duty).
Stegsvar 0-10000rpm: Stegsvar 0-20000rpm: Stegsvar 0-30000rpm: Stegsvar 0-10000-20000rpm: Stegsvar 20000-10000rpm: Här varierar jag inspänningen till motorn, man ser iaf att regulatorn jobbar: Lägger inte ner mycket mer tid på att justera konstanterna nu, riggen är ju bara för test. Helt olastad och liten massa i motorn, inte så realistiska förhållanden för ändamålet. Men fungerar så långt gör det, vilket känns riktigt roligt. Nästa steg blir nog att göra en test med 555 och triacstyrning.
Tankar eller tips såhär långt mottages gärna
