bdring / FluidNC

The next generation of motion control firmware
Other
1.58k stars 382 forks source link

max_rate #383

Closed us6iae closed 2 years ago

us6iae commented 2 years ago

Why doesn't max_rate_mm_per_min: 2000 limit machine speed to 2000mm/min? When running Gcode, the speed is taken from the F.

MitchBradley commented 2 years ago

The target speed in the direction of travel is taken from the F word, and the aggregate speed is limited so that no axis travels faster than the max rate for that axis. When traveling along a diagonal, the aggregate speed can exceed the speed of any individual axis according to trigonometry. If you believe that this is not working correctly, please supply complete details about how to create a test case that violates that per-axis limit.

us6iae commented 2 years ago

And I also found a lot of mistakes. It shouldn't be. You check and then close the question. Sincerely, Alexander.

пт, 15 апр. 2022 г. в 09:51, Mitch Bradley @.***>:

Closed #383 https://github.com/bdring/FluidNC/issues/383.

— Reply to this email directly, view it on GitHub https://github.com/bdring/FluidNC/issues/383#event-6439002857, or unsubscribe https://github.com/notifications/unsubscribe-auth/AYXL6LHYF4ADOSDTLWPXGXLVFEGXDANCNFSM5TPV5VEQ . You are receiving this because you authored the thread.Message ID: @.***>

bdring commented 2 years ago

The F value sets the desired speed for the move in the direction of travel. Each axis has a max speed. If the value of F and the direction of travel would exceed any max speed the actual speed of the move will be limited so no max speed on an axis is exceeded.

Only when you are doing a move that involves only one axis, will F max equal the max_speed of that axis.

Acceleration works similarly. If you have a very high acceleration on one axis the actual acceleration may be limited if the move also involves an axis with a slower acceleration.

If you have an example where an axis was forced to move faster, it its direction of travel, than its max speed, please give it. Be sure to do the maths on the feed rate and angle of motion to determine what the rates on each axis are.

If you have found other mistakes, please share them.

us6iae commented 2 years ago

Good afternoon. It is difficult for me to write to you. My language is Ukrainian/Russian. I am writing through google translator. I have been building CNC for over 20 years. Mknya now has 5 machines under different autonomous controllers. There is something to compare. Tested on different machines. For example - on a machine with a maximum speed of 4700cm / min - X0 X1000F4500 works fine on your controller. And if I run Gcode, it doesn't work. max_rate_mm_per_min: 4000 Speed sometimes increases to 6500cm/min. max_rate_mm_per_min: 3000 doesn't work max_rate_mm_per_min: 2500 doesn't work max_rate_mm_per_min: 2000 - works, but the processing time is almost doubled. I am sending you two files, you can check it on a test board even without motors. Everything works on all my machines with other control units. Sincerely, Alexander.

пт, 15 апр. 2022 г. в 15:52, bdring @.***>:

The F value sets the desired speed for the move in the direction of travel. Each axis has a max speed. If the value of F and the direction of travel would exceed any max speed the actual speed of the move will be limited so no max speed on an axis is exceeded.

Only when you are doing a move that involves only one axis, will F max equal the max_speed of that axis.

Acceleration works similarly. If you have a very high acceleration on one axis the actual acceleration may be limited if the move also involves an axis with a slower acceleration.

If you have an example where an axis was forced to move faster, it its direction of travel, than its max speed, please give it. Be sure to do the maths on the feed rate and angle of motion to determine what the rates on each axis are.

If you have found other mistakes, please share them.

— Reply to this email directly, view it on GitHub https://github.com/bdring/FluidNC/issues/383#issuecomment-1100086823, or unsubscribe https://github.com/notifications/unsubscribe-auth/AYXL6LELF2WPAVWAQGQSFJ3VFFQ7VANCNFSM5TPV5VEQ . You are receiving this because you authored the thread.Message ID: @.***>

MitchBradley commented 2 years ago

Please send the files that you mentioned. Also send the config file (.yaml) for your machine, a picture of your controller, a picture of your machine, and a description of the machine's drive characteristics - type of motors (size, steps/rev), stepper driver and its settings (microsteps), and transmission (ball screws and pitch, pulleys and their number of teeth, or rack and pinion with tooth characteristics).

us6iae commented 2 years ago

вс, 17 апр. 2022 г. в 11:42, Александр Комаров @.***>:

Good afternoon. It is difficult for me to write to you. My language is Ukrainian/Russian. I am writing through google translator. I have been building CNC for over 20 years. Mknya now has 5 machines under different autonomous controllers. There is something to compare. Tested on different machines. For example - on a machine with a maximum speed of 4700cm / min - X0 X1000F4500 works fine on your controller. And if I run Gcode, it doesn't work. max_rate_mm_per_min: 4000 Speed sometimes increases to 6500cm/min. max_rate_mm_per_min: 3000 doesn't work max_rate_mm_per_min: 2500 doesn't work max_rate_mm_per_min: 2000 - works, but the processing time is almost doubled. I am sending you two files, you can check it on a test board even without motors. Everything works on all my machines with other control units. Sincerely, Alexander.

пт, 15 апр. 2022 г. в 15:52, bdring @.***>:

The F value sets the desired speed for the move in the direction of travel. Each axis has a max speed. If the value of F and the direction of travel would exceed any max speed the actual speed of the move will be limited so no max speed on an axis is exceeded.

Only when you are doing a move that involves only one axis, will F max equal the max_speed of that axis.

Acceleration works similarly. If you have a very high acceleration on one axis the actual acceleration may be limited if the move also involves an axis with a slower acceleration.

If you have an example where an axis was forced to move faster, it its direction of travel, than its max speed, please give it. Be sure to do the maths on the feed rate and angle of motion to determine what the rates on each axis are.

If you have found other mistakes, please share them.

— Reply to this email directly, view it on GitHub https://github.com/bdring/FluidNC/issues/383#issuecomment-1100086823, or unsubscribe https://github.com/notifications/unsubscribe-auth/AYXL6LELF2WPAVWAQGQSFJ3VFFQ7VANCNFSM5TPV5VEQ . You are receiving this because you authored the thread.Message ID: @.***>

us6iae commented 2 years ago

I sent you two files for you to check. You don't even want to check. This is your right as an author. I will not insist. On the next error, you write that everything is correct. Write that the project is stopped, and I will no longer write. Sincerely, Alexander.

вс, 17 апр. 2022 г. в 20:22, Александр Комаров @.***>:

вс, 17 апр. 2022 г. в 11:42, Александр Комаров @.***>:

Good afternoon. It is difficult for me to write to you. My language is Ukrainian/Russian. I am writing through google translator. I have been building CNC for over 20 years. Mknya now has 5 machines under different autonomous controllers. There is something to compare. Tested on different machines. For example - on a machine with a maximum speed of 4700cm / min - X0 X1000F4500 works fine on your controller. And if I run Gcode, it doesn't work. max_rate_mm_per_min: 4000 Speed sometimes increases to 6500cm/min. max_rate_mm_per_min: 3000 doesn't work max_rate_mm_per_min: 2500 doesn't work max_rate_mm_per_min: 2000 - works, but the processing time is almost doubled. I am sending you two files, you can check it on a test board even without motors. Everything works on all my machines with other control units. Sincerely, Alexander.

пт, 15 апр. 2022 г. в 15:52, bdring @.***>:

The F value sets the desired speed for the move in the direction of travel. Each axis has a max speed. If the value of F and the direction of travel would exceed any max speed the actual speed of the move will be limited so no max speed on an axis is exceeded.

Only when you are doing a move that involves only one axis, will F max equal the max_speed of that axis.

Acceleration works similarly. If you have a very high acceleration on one axis the actual acceleration may be limited if the move also involves an axis with a slower acceleration.

If you have an example where an axis was forced to move faster, it its direction of travel, than its max speed, please give it. Be sure to do the maths on the feed rate and angle of motion to determine what the rates on each axis are.

If you have found other mistakes, please share them.

— Reply to this email directly, view it on GitHub https://github.com/bdring/FluidNC/issues/383#issuecomment-1100086823, or unsubscribe https://github.com/notifications/unsubscribe-auth/AYXL6LELF2WPAVWAQGQSFJ3VFFQ7VANCNFSM5TPV5VEQ . You are receiving this because you authored the thread.Message ID: @.***>

us6iae commented 2 years ago

вс, 17 апр. 2022 г. в 20:22, Александр Комаров @.***>:

I sent you two files for you to check. You don't even want to check. This is your right as an author. I will not insist. On the next error, you write that everything is correct. Write that the project is stopped, and I will no longer write. Sincerely, Alexander.

вс, 17 апр. 2022 г. в 20:22, Александр Комаров @.***>:

вс, 17 апр. 2022 г. в 11:42, Александр Комаров @.***>:

Good afternoon. It is difficult for me to write to you. My language is Ukrainian/Russian. I am writing through google translator. I have been building CNC for over 20 years. Mknya now has 5 machines under different autonomous controllers. There is something to compare. Tested on different machines. For example - on a machine with a maximum speed of 4700cm / min - X0 X1000F4500 works fine on your controller. And if I run Gcode, it doesn't work. max_rate_mm_per_min: 4000 Speed sometimes increases to 6500cm/min. max_rate_mm_per_min: 3000 doesn't work max_rate_mm_per_min: 2500 doesn't work max_rate_mm_per_min: 2000 - works, but the processing time is almost doubled. I am sending you two files, you can check it on a test board even without motors. Everything works on all my machines with other control units. Sincerely, Alexander.

пт, 15 апр. 2022 г. в 15:52, bdring @.***>:

The F value sets the desired speed for the move in the direction of travel. Each axis has a max speed. If the value of F and the direction of travel would exceed any max speed the actual speed of the move will be limited so no max speed on an axis is exceeded.

Only when you are doing a move that involves only one axis, will F max equal the max_speed of that axis.

Acceleration works similarly. If you have a very high acceleration on one axis the actual acceleration may be limited if the move also involves an axis with a slower acceleration.

If you have an example where an axis was forced to move faster, it its direction of travel, than its max speed, please give it. Be sure to do the maths on the feed rate and angle of motion to determine what the rates on each axis are.

If you have found other mistakes, please share them.

— Reply to this email directly, view it on GitHub https://github.com/bdring/FluidNC/issues/383#issuecomment-1100086823, or unsubscribe https://github.com/notifications/unsubscribe-auth/AYXL6LELF2WPAVWAQGQSFJ3VFFQ7VANCNFSM5TPV5VEQ . You are receiving this because you authored the thread.Message ID: @.***>

MitchBradley commented 2 years ago

I really did look for the files but I did not find them. I do not see any attachments on this ticket. Please tell me how you sent them. One way to show that would be to attach a screenshot illustrating the place where the files appear.

bdring commented 2 years ago

These appear to be email replies rather than sent directly via the Github website.

us6iae commented 2 years ago

Still does not allow two or more connections to connect. One turns on, the other turns off. Maybe it was intended that way, but at the moment of connection, all work stops for 0.5 seconds. And there are skipping steps. This is one of the big mistakes. And the web really interferes with the controller. I can take a vmdeo, but it seems you are not interested. Sincerely, Alexander.

вс, 17 апр. 2022 г. в 20:23, Александр Комаров @.***>:

вс, 17 апр. 2022 г. в 20:22, Александр Комаров @.***>:

I sent you two files for you to check. You don't even want to check. This is your right as an author. I will not insist. On the next error, you write that everything is correct. Write that the project is stopped, and I will no longer write. Sincerely, Alexander.

вс, 17 апр. 2022 г. в 20:22, Александр Комаров @.***>:

вс, 17 апр. 2022 г. в 11:42, Александр Комаров @.***>:

Good afternoon. It is difficult for me to write to you. My language is Ukrainian/Russian. I am writing through google translator. I have been building CNC for over 20 years. Mknya now has 5 machines under different autonomous controllers. There is something to compare. Tested on different machines. For example - on a machine with a maximum speed of 4700cm / min - X0 X1000F4500 works fine on your controller. And if I run Gcode, it doesn't work. max_rate_mm_per_min: 4000 Speed sometimes increases to 6500cm/min. max_rate_mm_per_min: 3000 doesn't work max_rate_mm_per_min: 2500 doesn't work max_rate_mm_per_min: 2000 - works, but the processing time is almost doubled. I am sending you two files, you can check it on a test board even without motors. Everything works on all my machines with other control units. Sincerely, Alexander.

пт, 15 апр. 2022 г. в 15:52, bdring @.***>:

The F value sets the desired speed for the move in the direction of travel. Each axis has a max speed. If the value of F and the direction of travel would exceed any max speed the actual speed of the move will be limited so no max speed on an axis is exceeded.

Only when you are doing a move that involves only one axis, will F max equal the max_speed of that axis.

Acceleration works similarly. If you have a very high acceleration on one axis the actual acceleration may be limited if the move also involves an axis with a slower acceleration.

If you have an example where an axis was forced to move faster, it its direction of travel, than its max speed, please give it. Be sure to do the maths on the feed rate and angle of motion to determine what the rates on each axis are.

If you have found other mistakes, please share them.

— Reply to this email directly, view it on GitHub https://github.com/bdring/FluidNC/issues/383#issuecomment-1100086823, or unsubscribe https://github.com/notifications/unsubscribe-auth/AYXL6LELF2WPAVWAQGQSFJ3VFFQ7VANCNFSM5TPV5VEQ . You are receiving this because you authored the thread.Message ID: @.***>

us6iae commented 2 years ago

I was replying to the mail because you closed the issue. Sincerely, Alexander.

вс, 17 апр. 2022 г. в 20:30, Александр Комаров @.***>:

Still does not allow two or more connections to connect. One turns on, the other turns off. Maybe it was intended that way, but at the moment of connection, all work stops for 0.5 seconds. And there are skipping steps. This is one of the big mistakes. And the web really interferes with the controller. I can take a vmdeo, but it seems you are not interested. Sincerely, Alexander.

вс, 17 апр. 2022 г. в 20:23, Александр Комаров @.***>:

вс, 17 апр. 2022 г. в 20:22, Александр Комаров @.***>:

I sent you two files for you to check. You don't even want to check. This is your right as an author. I will not insist. On the next error, you write that everything is correct. Write that the project is stopped, and I will no longer write. Sincerely, Alexander.

вс, 17 апр. 2022 г. в 20:22, Александр Комаров @.***>:

вс, 17 апр. 2022 г. в 11:42, Александр Комаров @.***>:

Good afternoon. It is difficult for me to write to you. My language is Ukrainian/Russian. I am writing through google translator. I have been building CNC for over 20 years. Mknya now has 5 machines under different autonomous controllers. There is something to compare. Tested on different machines. For example - on a machine with a maximum speed of 4700cm / min - X0 X1000F4500 works fine on your controller. And if I run Gcode, it doesn't work. max_rate_mm_per_min: 4000 Speed sometimes increases to 6500cm/min. max_rate_mm_per_min: 3000 doesn't work max_rate_mm_per_min: 2500 doesn't work max_rate_mm_per_min: 2000 - works, but the processing time is almost doubled. I am sending you two files, you can check it on a test board even without motors. Everything works on all my machines with other control units. Sincerely, Alexander.

пт, 15 апр. 2022 г. в 15:52, bdring @.***>:

The F value sets the desired speed for the move in the direction of travel. Each axis has a max speed. If the value of F and the direction of travel would exceed any max speed the actual speed of the move will be limited so no max speed on an axis is exceeded.

Only when you are doing a move that involves only one axis, will F max equal the max_speed of that axis.

Acceleration works similarly. If you have a very high acceleration on one axis the actual acceleration may be limited if the move also involves an axis with a slower acceleration.

If you have an example where an axis was forced to move faster, it its direction of travel, than its max speed, please give it. Be sure to do the maths on the feed rate and angle of motion to determine what the rates on each axis are.

If you have found other mistakes, please share them.

— Reply to this email directly, view it on GitHub https://github.com/bdring/FluidNC/issues/383#issuecomment-1100086823, or unsubscribe https://github.com/notifications/unsubscribe-auth/AYXL6LELF2WPAVWAQGQSFJ3VFFQ7VANCNFSM5TPV5VEQ . You are receiving this because you authored the thread.Message ID: @.***>

MitchBradley commented 2 years ago

I closed the issue because I thought that the problem was solved. It is very common for people to be confused by the fact that, on diagonal moves, the speed along the hypotenuse of the triangle exceeds the speed of either axis, so the reported speed during a diagonal move can be faster than the max speed configured for an axis. Your original question was so brief that I thought that was the problem and that we had answered it, as we have already done many times.

Bart, if you have the emailed files, please send them to me or attach them here. If I received them, they are buried somewhere.

MitchBradley commented 2 years ago

I reopened the issue. Neither Bart nor I can find the files that you cited, neither here nor in emails. Please attach them directly to a comment on this issue - via GitHub, not via email - and also supply the machine information that I cited above. Please do not repeat the previous conversation in your comments.

us6iae commented 2 years ago

4axis_v1.zip [Uploading kub58mm.zip…]()

us6iae commented 2 years ago

kub58mm.zip

MitchBradley commented 2 years ago

Do you have external drivers? The pulse_us value 2 is faster than some external drivers can handle. Try increasing it to 4 or 6.

us6iae commented 2 years ago

I tried both 3 and 4 and 5. The drivers are good, external. There are converters 3v - 5v.

MitchBradley commented 2 years ago

What kind of converters? Bidirectional converters do not work for this purpose.

us6iae commented 2 years ago

Why are there bidirectional ones? I am very good at circuit engineering. Снимок экрана от 2022-04-15 11-50-11 max_rate_mm_per_min: 2000

MitchBradley commented 2 years ago

Some people have tried to use bidirectional level translators that are intended for interfacing between CMOS chips for the purpose of interfacing to optocoupled external drivers. That does not work. I had no way of knowing that you have circuit design skill before you told me, so I cited a common problem.

MitchBradley commented 2 years ago

Is the problem that the display shows 2624 mm/min, while the X, Y, and Z axis max rates are 2000 mm/min?

MitchBradley commented 2 years ago

The max rate values are per-axis. When moving both axes simultaneously along a diagonal, the vector speed will exceed the speed in the direction of either axis. The formula, from basic geometry is vector_speed = sqrt(x_speedx_speed + y_speedy_speed). In the case where the direction of motion is 45 degrees and thus x_speed = y_speed, the vector speed is 1.414=sqrt(2) times either individual speed. It is obvious from the visualizer display that the tool is moving on a diagonal, so it is to be expected that the vector speed is greater than the per-axis limit. image image

MitchBradley commented 2 years ago

Still does not allow two or more connections to connect. One turns on, the other turns off.

That is intentional. The ESP32 chip is not fast enough, and does not have enough memory, to easily manage more than one web connection while also doing motion control at speed. With a great deal of effort it might be possible to make multiple web connections work, but most of our users prefer that we use our limited development time on other features that fit more easily within the ESP32's constraints.

Maybe it was intended that way, but at the moment of connection, all work stops for 0.5 seconds. And there are skipping steps.

The reason why work stops when you make a connection is because the ESP32 is sending the web page data to the browser during that time. The web page data is stored in the ESP32's FLASH memory. That same memory is used for fetching the CPU instructions. During the time that the ESP32 is accessing the web page data to send to the browser, it must pause its execution of CPU instructions - except for the limited set of instructions that are stored in the small amount of special IRAM memory.

One way to work around that problem would be to store the web page in some other location, such as on SD card or somewhere on the computer that is running the browser. Each of those workarounds has other problems, like ease of use and difficulty of administration. The web interface was developed by another person as a separate project. His design uses the ESP32's internal FLASH for the web page storage. We might someday choose to store the web page somewhere else, but it will require substantial coding work on code that is not ours.

So these things that you call "mistakes" are mostly inherent limitations of a microprocessor that costs $4. It has a lot of capabilities for that price, but its resources are finite and we must be careful how we allocate them.

us6iae commented 2 years ago

Look closely at the code and show me the movement of the two axes diagonally in the code. There are no such movements. At the end of processing there is a little processing on the circumference, but then the speed does not increase. Sincerely, Alexander.

MitchBradley commented 2 years ago

Lines 4961 and 4962:

X37.166Y33.254Z-6.851
X36.825Y33.856Z-6.845

Delta X is -0.341, delta Y is 0.602. That is a diagonal move with simultaneous motion in both X and Y. That is not the only such move; they are all over the place. Furthermore, with moves that are this short, the planner is likely to coalesce segments that are almost collinear.

The reason that I chose that particular one is because it is very close to the coordinates of the picture above.

MitchBradley commented 2 years ago

There are 4 places in every loop of the circular pattern where the motion is close to a 45 degree angle, and thus delta X and delta Y have nearly the same magnitude. For example: Line 33316:

X9.750Y50.470
X8.925Y49.702

Delta X is 0.795 and delta Y is 0.8. At such points the instantaneous speed will reach sqrt(2) * per_axis_max, or 2818 - but it is unlikely that you will see that number on the display unless the reporting sample happens to be take at just the right time.

The way you are using GCode and controller max rates is not ideal. Your GCode has the feed rate set to 10000 and the controller then limits the per axis rates to a lower speed. That will result in different surface speeds at different points in the circle. The conventional way is to set the GCode feed rate to a speed lower than any per-axis maximum. That will result in a consistent surface speed regardless of the direction of cut. The controller will not have to enforce a limit during a cutting motion. The limits would apply only to rapid motion and would provide some safeguards against mistakes.

us6iae commented 2 years ago

You forgot to add acceleration in the formula. And if you think that a stepper motor is capable of reaching a speed of 2818cm / min, then I built a spaceship. And every time this moment hits the screen. And I have a file with codes that is universal for different machines. Close the question. We spent too much time discussing. There are still issues that need to be addressed.

Sincerely, Alexander.

MitchBradley commented 2 years ago

This is the way that GRBL has worked since forever.