PathPilot MegaMod
- my.cnc.brother
- Topic Author
- Offline
- New Member
- Posts: 12
- Thank you received: 25
In this thread I would like to share with you results of my modifications in PathPilot.
Introduction
Mod is based on PP 2.0.1. Modification was started in 2018 and finished in 2019 thus some data might be outdated (when I am writing this PP 2.6.0 is available). Modified PathPilot is successfully running upgraded Brother TC-225 milling machine.
For those who are using Instagram, you can follow the project here:
instagram.com/my.cnc.brother/
Layout changes
Main obvious change was to put screen to vertical position. I have chosen Iiama FullHD TF2234MC with IPS matrix and capacitive multitouch screen.
My previous machine was driven by Mach3 and I always complain of the size of path preview screen. I always dreamt to have it larger. And there it is... proper size preview screen :
User experience
PathPilot in its glory is missing few handy user experience functions.
First of all path preview screen (aka ‘Gremlin’) does not have touchscreen frinedly controls to change the view (projection planes, zoom in, zoom out, rotate move, linear move and to clean the path).
Buttons were added at the top of the screen to have it right under my fingerprints.
As you can also see I have enlarged G-code preview window as well.
Control section was modified a little bit as well
Starting from left:
I have added a section for MPG wheel control. You can select axis, step size and also port MPG movement to control FEED, RPM and MAX VEL. If you prefer you can also turn off MPG.
Code control section was completed by POWER button (TC225 specific button) and limits override radio button.
Spindle/tool section was completed only by actual spindle speed display and time and date visible all the time.
Position section was modified by adding DTGs, ABS position and Real position (useful for encoder based drives). And… the mod I am most proud of : axis load bars under each axis.
I put there also new useful buttons: Ref All and Ref Spindle button (TC225 specific).
Other Tabs
Only Status tab and ATC tab were changed.
In Status Tab I have implemented some system info (processor speed, RAM usage, etc.) and three counters: system run time, total system run time and total spindle run time. Those values might be useful in regular machine maintenance.
ATC tab mod was most time consuming. It was completely rebuild, according to Brother TC225 ATC (instead of umbrella type in Tormach machines).
Button beep
Due to lack of button press feedback (except visual) I have added button sound beeping. After that operation of the machine is much more convenient.
Cherry on the top
To have machine completed I also changed Linux booting screen and also PathPilot splash screens.
BTW system loading is < 44sec (!):
Attachments:
Please Log in or Create an account to join the conversation.
Please Log in or Create an account to join the conversation.
- tommylight
- Online
- Moderator
- Posts: 19188
- Thank you received: 6430
Please Log in or Create an account to join the conversation.
- snowgoer540
- Offline
- Moderator
- Posts: 2388
- Thank you received: 779
If so, would you mind sharing how you made that happen, and how you got the actual speed to display next to the commanded speed?
I fitted my tormach with an encoder, and I have rigid tapping working with the help of some others here, but the PID and adding to the GUI greatly eludes me.
Please Log in or Create an account to join the conversation.
- my.cnc.brother
- Topic Author
- Offline
- New Member
- Posts: 12
- Thank you received: 25
It has been some time, right? I remember the first time I saw this on instagram. It turned out great, man! I just got my mill out of storage and spent the morning digging through all my code trying to figure out where I left off. Anyhow, congrats!
Yeah it took me a while as I am not Python expert. However I am very satisfied with a results. I wish LinuxCNC could have such beautiful GUI as standard.
With code I have the same - if somebody asks me about details it is difficult to answer.
BTW:
Did you know that your Probe TAB changes were huge inspiration for me? Thanks man!
How did this happen to be included later in official PathPilot release?
Spindle in velocity mode has no LinuxCNC PID. However speed is well maintained by servo drive itself (speed loop in servo drive).Does the spindle operate on a PID loop?
Spindle in positioning mode has LinuxCNC PID, this is used for ATC spindle positioning.
If so, would you mind sharing how you made that happen, and how you got the actual speed to display next to the commanded speed?
Actual speed is a raw value from Mesa registers. In the video above (Status TAB) you can see spindle speed variations: 1000rpm commanded, ~1015rpm actual.
In fact for rigid tapping constant spindle speed is not so relevant. More important is dynamic (acceleration) behaviour during tap reversal. This is why poor spindles, with high inertia do not perform well on rigid tapping. To be specific, those are not keeping depth of a thread very well. Servo spindles are best in this application.
During tapping spindle rotation is acting as "jog" for Z axis. Fun fact is that if you will deenrgise spindle, run G33.1, and rotate spindle encoder manually by hand, then Z axis will follow that moves.
This guy explains spindle synchronisation very well:
(including examples to download)
Following his guide my Brother TC225 is capable for rigid tapping @3000rpm , however I do not use this feature very often as this is to stressful for me.
Please Log in or Create an account to join the conversation.
- snowgoer540
- Offline
- Moderator
- Posts: 2388
- Thank you received: 779
Just to be clear, my spindle is already fitted with an encoder, and does do G33.1 synchronized movements/rigid tapping now.
The next steps for me are:
1. Add actual RPM to the GUI
2. Use actual RPM feedback (PID loop) to drive the spindle closer to the commanded position.
I am aware that Tormach uses a .comp file to run the spindle at certain values based on the commanded RPM. They also have ramp up and ramp down values in there as well (AFAIK).
So I guess my question for you at the moment is, how did you get the actual rpm to display on the GUI?
Please Log in or Create an account to join the conversation.
- my.cnc.brother
- Topic Author
- Offline
- New Member
- Posts: 12
- Thank you received: 25
To read velocity I use below link in my hal file:
net spindle-fb-rps motion.spindle-speed-in <= hm2_7i92.0.encoder.05.velocity => spindle-at-speed.in2
net spindle-fb-rps tormach.actual_rps
self.hal.newpin("actual_rps", hal.HAL_FLOAT, hal.HAL_IN)
#MC **************actual rpm****************
self.actual_rpm_label = self.builder.get_object("actual_rpm_label")
actual_rpm_label_font_description = pango.FontDescription('helvetica ultra-condensed 11')
self.actual_rpm_label.modify_font(actual_rpm_label_font_description)
#***********RPM label****************
self.actual_rpm_label.set_markup('<span foreground="white">%s</span>' % "%1d" % (self.hal['actual_rps']*60))
And that is it!
Please Log in or Create an account to join the conversation.
- snowgoer540
- Offline
- Moderator
- Posts: 2388
- Thank you received: 779
First you have to find your spindle encoder velocity value. In my case spindle encoder in connected to 5th axis in my Mesa 7i77.
To read velocity I use below link in my hal file:Then in my postgui.hal I pin this signal to GUI:net spindle-fb-rps motion.spindle-speed-in <= hm2_7i92.0.encoder.05.velocity => spindle-at-speed.in2Then in your .py gui file you have to initiate hal pin:net spindle-fb-rps tormach.actual_rpsIn my case actual rpm is simple label. Label initialisation:self.hal.newpin("actual_rps", hal.HAL_FLOAT, hal.HAL_IN)Label value update:#MC **************actual rpm**************** self.actual_rpm_label = self.builder.get_object("actual_rpm_label") actual_rpm_label_font_description = pango.FontDescription('helvetica ultra-condensed 11') self.actual_rpm_label.modify_font(actual_rpm_label_font_description)Raw value is rev. per sec. so you have to multiply it by 60 to have value in rpm.#***********RPM label**************** self.actual_rpm_label.set_markup('<span foreground="white">%s</span>' % "%1d" % (self.hal['actual_rps']*60))
And that is it!
This is awesome, Thank you! I cant wait to try it this weekend.
Does the following code also go in the .py gui file?
In my case actual rpm is simple label. Label initialisation:
Label value update:#MC **************actual rpm**************** self.actual_rpm_label = self.builder.get_object("actual_rpm_label") actual_rpm_label_font_description = pango.FontDescription('helvetica ultra-condensed 11') self.actual_rpm_label.modify_font(actual_rpm_label_font_description)#***********RPM label**************** self.actual_rpm_label.set_markup('<span foreground="white">%s</span>' % "%1d" % (self.hal['actual_rps']*60))
Please Log in or Create an account to join the conversation.
( TP
Please Log in or Create an account to join the conversation.
that is all.....
Please Log in or Create an account to join the conversation.