And this is how I load&connect my custom component in my HAL file: loadrt home_index_switch > newinst second_home_switch home-sw2 pincount=2 > ## micrometric&super accurate "second" home switch > net home-sw2-x <= bb_gpio.p8.in-12 > ## Max limit switch use as "first" home switch > net limit-x-max <= bb_gpio.p8.in-08 > ## connect signals between my custom component and Machinekit regular > signals > net limit-x-max => home-sw2.0.home-sw1-in > net home-sw2-x => home-sw2.0.home-sw2-in > net home-sw-x home-sw2.0.home-sw-out => axis.0.home-sw-in > net home-state-x home-sw2.0.home-state <= axis.0.home-state
... ## I also have similar config for another axis (*home-sw2.1...*) but there > is no really added value to show it here... On Monday, 24 February 2020 11:55:39 UTC+1, Damien Dando wrote: > > Hi John, > > It seems that in order to avoid a custom build of MachineKit, that I need >> a way to either trigger immediate homing or the ability to detect that a >> user initiated immediate homing from within HAL. Any ideas? > > You can write a custom ".icomp" component to handle your homing logic: > http://www.machinekit.io/docs/hal/instcomp_writing_a_component/ > I did something similar because I wanted to handle 2 home switches. In my > case, it goes "high" speed to touch the first home switch (with low > accuracy) and "low" speed to the second home switch (the expensive switch > with micrometer accuracy). > This allow you to make custom homing sequence without doing any custom > build of machinekit. > > Here is the component I did: > Filename "*second_home_switch.icomp*": > >> component second_home_switch "use a second home switch for homing"; >> pin in s32 #.home-state[pincount] "connect to the home-state of the join"; >> pin in bit #.home-sw1-in[pincount] "connect to the first home switch >> input pin"; >> pin in bit #.home-sw2-in[pincount] "connect to the second home switch >> input pin"; >> pin out bit #.home-sw-out[pincount] "connect to the home switch input of >> the join"; >> instanceparam int pincount = 4; >> option MAXCOUNT 16; >> function _; >> license "GPL"; >> author "Damien Dando"; >> ;; >> FUNCTION(_) { >> hal_s32_t n; >> for (n = 0; n < local_pincount; n++) { >> /* >> * 12 corresponds to the HOME_RISE_SEARCH_WAIT state of the homing sequence >> * where the home switch is detected with lower speed (HOME_LATCH_VEL) for >> a second time. >> */ >> if (_home_state(n) == 12) { >> _home_sw_out(n) = _home_sw2_in(n); >> } else { >> _home_sw_out(n) = _home_sw1_in(n); >> } >> } >> return 0; >> } > > > The code basically select between one of the 2 home switches depending of > the internal state in the homing sequence. (For your case it would be > obviously different code&signals). > > To detect the state of the homing sequence (or to know if there is a > homing sequence going on at all), I have used the signal > "axis.*N*.home-state". > This signal has a different value depending of the current state in the > homing sequence (see home_state_t enum in motion.h > <https://github.com/machinekit/machinekit/blob/master/src/emc/motion/motion.h#L417-L444> > and > do_homing() in homing.c > <https://github.com/machinekit/machinekit/blob/master/src/emc/motion/homing.c#L193>). > > If you don't feel digging into the source code you can also use the hal > meter and directly look at the values "axis.*N*.home-state" go through > during the homing sequence. > Note: Even if it might be unlikely, it is not guarantee that the signal > "axis.*N*.home-state" will keep same value in the homing sequence in > future versions of Machinekit so you should keep that in mind if your > homing stuff stop working after upgrading your Machinekit. > > > On Sunday, 23 February 2020 18:31:42 UTC+1, John Allwine wrote: >> >> The main reason why I’m not able to get it working out of the box is the >> Teknic motor stops being in homing mode if the machine is jogged at all >> after the enable pin is asserted. So I would like the enable pin to be a >> part of the homing sequence itself, to avoid any issues arising from that. >> >> I left out that I’ll need a homing sequence for a continuous rotary axis, >> as well. The Teknic motors can also very accurately home to a specific >> angle when enabled. We’ll have a 50:1 reducer on the motor, so it could >> feasibly home to 50 different locations without first moving to a limit >> switch. Because of that the motor must be enabled twice during the sequence >> (the first in order to command it until the limit switch is found, the >> second to accurately home to an angle once found). I plan on starting with >> the linear axes to see if I can learn anything helpful prior to starting on >> this more involved routine. >> >> It seems that in order to avoid a custom build of MachineKit, that I need >> a way to either trigger immediate homing or the ability to detect that a >> user initiated immediate homing from within HAL. Any ideas? >> >> John Allwine >> Owner of Allwine Designs >> https://www.allwinedesigns.com >> >> On Feb 22, 2020, at 11:25 AM, Bas de Bruijn <b...@basdebruijn.com> wrote: >> >> >> The google group fell off the reply. >> For completeness done manually :) >> >> On 22 Feb 2020, at 17:44, Bas de Bruijn <b...@basdebruijn.com> wrote: >> >> >> >> >> On 22 Feb 2020, at 15:25, John Allwine <jo...@allwinedesigns.com> wrote: >> >> Hi Bas, >> >> Thanks for your suggestion! I’ll definitely look into writing a custom >> component rather than a custom MachineKit build. >> >> I’m afraid, though, that I don’t completely follow the rest of your >> suggestion. Could you please expand a little? I have used immediate mode >> before. Let’s say a user clicks a home button in the Axis GUI. How could I >> tie into that event to start the process? Alternatively, if I created my >> own button to trigger something in Hal, how would I trigger immediate >> homing? How would you recommend setting the position on the rising edge? >> >> >> You might not have to do anything. I’m not an expert on the cnc stack. >> If you have wired the enable pin of the motor physically and in HAL to >> the enable pin of the motion component, then pressing the home button in >> the GUI should start homing. Thus moving towards the end of your >> guide/motor. >> Make sure you wire the smart pin to the home Hal pin. >> Would that not work out of the box? >> Does the special pin stay high after homing? >> >> >> I believe I have a good grasp on how Hal works, but my knowledge of the >> built in components is limited. >> >> Thanks again for the help! >> >> John Allwine >> Owner of Allwine Designs >> https://www.allwinedesigns.com >> >> On Feb 22, 2020, at 1:04 AM, Bas de Bruijn <b...@basdebruijn.com> wrote: >> >> >> >> >> On 21 Feb 2020, at 23:30, John Allwine <jo...@allwinedesigns.com> wrote: >> >> >> I'm looking into using Teknic SDSK servo motors with MachineKit. The SDSK >> models accept step and direction pulses like a stepper motor, so using >> hal_pru_generic's stepgen is straight forward. The major issue I see is >> attempting to use Teknic's precision homing routines, as it doesn't fit >> into MachineKit's limit switch routines. I'd really like to use their >> homing routine because it is accurate to less than 1/10,000 of an inch in >> my setup, which could be difficult to achieve using my own limit switch >> setup. It seems to me that in order to do so would require either a custom >> homing routine implemented in C++ (so a custom build of MachineKit). Any >> thoughts on this would be appreciated! >> >> The Teknic motors have 3 control pins and 1 feedback pin: >> >> Control Pins: >> Enable - Used to enable/disable the motor and plays a part in initiating >> the precision homing (see below). >> Step - Same as for a stepper motor >> Direction - Same as for a stepper motor >> >> Feedback - They refer to this as the HLFB (high level feedback) pin. Can >> be set to a number of different options, but the relevant one for homing >> would be ASG (all systems go) Position, which is high when the motor is in >> the commanded position, low while moving. >> >> The precision homing sequence is initiated as follows: >> >> 1) Put the motor into homing mode by toggling the enable pin on (if it's >> already on, then turn it off, then back on). >> 2) Command the motor with step and direction to move the joint to a hard >> stop. >> 3) The motor will detect the hard stop and stop accepting step pulses >> until it is commanded to go the opposite direction. >> 4) After the hard stop is detected the motor will back off to a precise >> location a configured number of internal encoder counts away. >> 5) After a configured number of milliseconds (default is 10), the HLFB >> pin asserts indicating that homing is complete. >> >> The hard stop detection and precision homing is fantastic. After the >> first homing sequence, the motor will return to a very precise location as >> long as the hard stop stays within ~2mm. I can physically put a shim (less >> than 2mm thick) in front of the hard stop and it still goes to a precise >> location that properly ignores the shim (so wearing on the hard stop over >> time doesn't affect the precision of the homing sequence). >> >> So, does anyone have recommendations for how to perform this sequence >> properly in MachineKit? Preferably, I'd avoid needing a custom build of >> MachineKit, but if it's required to make homing a simple click of a button >> then I'll have to go that route. >> >> >> Hi John, >> >> So if I understand correctly your homing sequence is started on the >> rising edge of the enable pin. >> >> Then you need to move to your chosen homing side. >> Your homing is done when the special pin rises. >> >> Maybe all parts are already there. >> Have you tried configuring as ‘immediate’ homing? So rising special pin >> sets the position? >> http://www.machinekit.io/docs/config/ini_homing/ >> >> Even if you decide you need a special component, you do not have to >> rebuild MK, just write the comp in C and install with instcomp. >> >> http://www.machinekit.io/docs/hal/instcomp/ >> >> Best, >> Bas >> >> >> -- >> website: http://www.machinekit.io blog: http://blog.machinekit.io >> github: https://github.com/machinekit >> --- >> You received this message because you are subscribed to the Google Groups >> "Machinekit" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to machi...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/machinekit/6b01a405-251f-4633-af72-abbcd6c78ab0%40googlegroups.com >> >> <https://groups.google.com/d/msgid/machinekit/6b01a405-251f-4633-af72-abbcd6c78ab0%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> >> -- >> website: http://www.machinekit.io blog: http://blog.machinekit.io >> github: https://github.com/machinekit >> --- >> You received this message because you are subscribed to the Google Groups >> "Machinekit" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to machi...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/machinekit/7E019B91-0888-4BE4-8F65-1F22B40EC7C6%40allwinedesigns.com >> >> <https://groups.google.com/d/msgid/machinekit/7E019B91-0888-4BE4-8F65-1F22B40EC7C6%40allwinedesigns.com?utm_medium=email&utm_source=footer> >> . >> >> -- website: http://www.machinekit.io blog: http://blog.machinekit.io github: https://github.com/machinekit --- You received this message because you are subscribed to the Google Groups "Machinekit" group. To unsubscribe from this group and stop receiving emails from it, send an email to machinekit+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/machinekit/b1eeaaa8-3f3f-4716-9dd7-b375acc1b342%40googlegroups.com.