Re: Teacup and brushless motors. July 11, 2014 06:55PM |
Registered: 10 years ago Posts: 4 |
Re: Teacup and brushless motors. July 11, 2014 09:37PM |
Registered: 14 years ago Posts: 7,616 |
Quote
dronecz
I had page opened half day and few minutes ago decide to write answer, those posts a saw just second I posted my reply.
Quote
dronecz
I saw (I think) in some other thread that you sugested control spindle (which is why I´m bothering you with this) with gcode code for fan (on/off), so I would like to explore this possibility.
Generation 7 Electronics | Teacup Firmware | RepRap DIY |
Re: Teacup and brushless motors. July 12, 2014 04:51PM |
Registered: 10 years ago Posts: 4 |
Quote
Traumflug
Thanks for the explanation, glad to read this. I admit I'm a bit over-sensitive against stuff which looks like coming from people who ask in the hope somebody else does their work.
Quote
Traumflug
This gives you plain PWM and, AFAIK, works for DC motors, only. That said, fans are defined just like heaters, but without the temperature sensor: [reprap.org] config.default.h has an example, too. M106 S1 ... M106 S255 to turn the fan on, M106 S0 to turn it off.
Re: Project: Teacup Firmware July 15, 2014 03:11PM |
Registered: 14 years ago Posts: 7,616 |
Generation 7 Electronics | Teacup Firmware | RepRap DIY |
Re: Project: Teacup Firmware July 21, 2014 08:49AM |
Registered: 11 years ago Posts: 78 |
Teacup Firmware successfully ported to Teensy3 / ARM Cortex-M4 August 13, 2014 04:34PM |
Registered: 14 years ago Posts: 7,616 |
Generation 7 Electronics | Teacup Firmware | RepRap DIY |
Re: Project: Teacup Firmware August 16, 2014 06:57PM |
Registered: 11 years ago Posts: 78 |
Re: Project: Teacup Firmware August 17, 2014 05:47AM |
Registered: 11 years ago Posts: 78 |
Re: Project: Teacup Firmware August 17, 2014 11:28AM |
Registered: 14 years ago Posts: 7,616 |
Quote
RobertKuhlmann
So in my opinion it would make sense to prepocess the GCode, just prior to send it to the microcontroller, leaving the task of complex operations and calculations to the PC
Generation 7 Electronics | Teacup Firmware | RepRap DIY |
Re: Project: Teacup Firmware August 19, 2014 06:32AM |
Registered: 11 years ago Posts: 78 |
Don't get me wrong. I don't want to change to binary communication or even change the syntax of GCode. I just want to place custom GCode-commands into the file.Quote
Traumflug
...
Has been discussed quite a number of times and as you see, host <=> controller communications is still in plain, human-readable ASCII and controllers still fill their movement queue them selfs. :-)
Reasons:
- Binary communications isn't that much faster than ASCII. "X35.678" is 7 bytes, sending the same in binary would be 5 bytes ("X" and four bytes for an integer).
I think Quentin's approach with the Morgan has a big potential and it saves resources. Weak microcontrollers will always be easier to buy and cheaper than state-of-the-art hardware. So I prefer to use "old fashioned" but robust and cheap microcontrollers, instead of waiting for new hardware to become affordable.Quote
Traumflug
- Controllers were fast enough to move cartesian robots so far.
- Things become very tricky when unexpected things happen.
That's exactly what I want to do.Quote
Traumflug
...
Approaches I can think of, not seen tried so far:
- Preprocess at least scara => karthesian conversation, letting the controller think it moves an karthesian bot. Not sure how much computing work this saves, though.
I agree. And it would contradict my very own approach to save resources, if I'd think of a solution that requires "modern" hardware just to be fast enough for more communication.Quote
Traumflug
- Send a readily filled DDA structure over the serial line. All the time consuming stuff when receiving movements is feedrate => timer delay calculations, lookahead, micrometers => steps conversion, and the result of all this is put into a DDA structure (severyl of which make up the movement queue). A filled DDA is some 70 bytes, though, so you loose some time at communications.
I strongly agree. I'm quite old and can remember the time, when character sets of operating systems began to use Bezier-curves to enable scalable characters for high-resolution monitors (I think GEM from Digital Research was the first to support that). M$ Windows needed years to catch up with this development and needed a third party software: from Adobe.Quote
Traumflug
- Get rid of these hundreds of tiny segments in favour of Bezier (curved) movements. With Beziers you can approximate a geometry some 8 to 10 times more accurate at the same data size. Keeping accuracy, this means 10 times fewer movement commands accordingly 10 times fewer lookahead calculations.
I thought this as part of my work on improvements. Wouldn't make any sense to improve something without measuring the results.Quote
Traumflug
- Actually measuring performance of this preprocessing stuff. Not yet done, AFAIK, making any plan to improve it pretty much a speculation :-)
Thanks. It's a pleasure. As you've noticed already I'm not only talking, but really work on things (those I'm able to work on of course).Quote
Traumflug
All this said, any code actually written for trying is much much better than many many pages of just wishing loudly, of course. I found your new code already, looks good!
Re: Project: Teacup Firmware August 19, 2014 01:40PM |
Registered: 10 years ago Posts: 127 |
Re: Project: Teacup Firmware August 19, 2014 02:04PM |
Registered: 14 years ago Posts: 7,616 |
Generation 7 Electronics | Teacup Firmware | RepRap DIY |
Re: Project: Teacup Firmware August 19, 2014 03:36PM |
Registered: 10 years ago Posts: 127 |
Re: Project: Teacup Firmware August 19, 2014 04:21PM |
Registered: 11 years ago Posts: 78 |
Let's see. In general the mathematics for all four variants should be very similar.Quote
theothermike
Ah, OK....Morgan style....
@Robert: Wouldn´t it be useful to directly implement the kinematics for the (3.) Parallel-arm SCARA where the motors are spatially separated ?
When setting the motor displacement to "zero" the coaxial geometry (4.) would be resumed....and one software could serve two different SCARA types.
Re: Project: Teacup Firmware August 20, 2014 04:24AM |
Registered: 14 years ago Posts: 7,616 |
Quote
theothermike
Wouldn´t it be useful to directly implement the kinematics for the (3.) Parallel-arm SCARA where the motors are spatially separated ?
Generation 7 Electronics | Teacup Firmware | RepRap DIY |
Re: Project: Teacup Firmware August 20, 2014 10:02PM |
Registered: 12 years ago Posts: 177 |
Re: Project: Teacup Firmware August 21, 2014 04:59AM |
Registered: 11 years ago Posts: 78 |
Re: Project: Teacup Firmware August 21, 2014 02:25PM |
Registered: 12 years ago Posts: 177 |
Re: Project: Teacup Firmware August 22, 2014 09:14AM |
Registered: 11 years ago Posts: 78 |
Re: Project: Teacup Firmware August 22, 2014 10:29AM |
Registered: 12 years ago Posts: 177 |
Re: Project: Teacup Firmware August 22, 2014 11:43AM |
Registered: 11 years ago Posts: 78 |
QuentinHarley's implementation of "armlevel" is semi-automatic. During print the bed level follows a height-correction-matrix (automatically; 11 x 11 points over the x/y-dimension of the buildingspace). The matrix was entered in an extra calibration-step (manually; commands M370, M371,M372, M373; M375 output matrix). So this approach doesn't even assume a plain bed-surface, nor an exact bed-adjustment. But you will have to calibrate one time to fill the matrix (that takes app. 3-5 minutes; with some routine you can do it 1 Minute).Quote
Evil Monkey
Thank you RobertKuhlmann, that would be extremely helpful. I was thinking that a probe could rotate down in a similar manner to how other auto bed leveling systems work. The arm would then probe in three or four locations and make the necessary adjustments.
I didn't get your point here. You have to take into account that I'm used to RepRap Morgan, not any other scara-type printer out there (esp. polar-printers). The mathematics seem very similar (if not equal), but you need to inform me about the mechanical details you refer to and why.Quote
Evil Monkey
Would it also be possible to add a variable to account for the X and Y steeper motors that are spatially separated. I think spring loading relatively inexpensive geared stepper motors holds a lot of promise. So far, no backlash has been transferred to my prints.
Re: Project: Teacup Firmware August 22, 2014 12:00PM |
Registered: 12 years ago Posts: 177 |
Re: Project: Teacup Firmware August 22, 2014 12:10PM |
Registered: 11 years ago Posts: 78 |
Quote
Evil Monkey
That probe sounds great!
The Morgans arms utilize the same axis of rotation for both the X and Y stepper motors. I was referring to the variable in the Marlin version called Scara_axis_spacing. This takes into account the horizontal separation of the geared stepper motor that move the arms. This current build has the geared stepper motors separated by 85 mm. Is it possible to implement in this Teacup version?
Re: Project: Teacup Firmware August 23, 2014 03:23AM |
Registered: 14 years ago Posts: 7,616 |
Quote
RobertKuhlmann
I'd like to hear Traumflug's opinion if this would make a seperate branch
Generation 7 Electronics | Teacup Firmware | RepRap DIY |
Re: Project: Teacup Firmware August 23, 2014 03:49AM |
Registered: 11 years ago Posts: 78 |
I've read about that and it's a very good idea, since almost nobody makes his own table of measured values, but copies the table in datasheet or (more often) calculates the table with exactly the same values you want to use anyway.Quote
Traumflug
Quote
RobertKuhlmann
I'd like to hear Traumflug's opinion if this would make a seperate branch
Yes, a new branch, please. Like one branch per topic. You can base a branch on top of another to have both topics.
Uh, and I see I have to speed up my branch integration work. All this stuff has to settle in experimental/master one day. Right at the moment I'm working on getting rid of thermistor tables. Just enter R0, T0 and Beta of the thermistor and you'll be set.
Re: Project: Teacup Firmware August 23, 2014 04:14AM |
Registered: 14 years ago Posts: 7,616 |
Generation 7 Electronics | Teacup Firmware | RepRap DIY |
Re: Project: Teacup Firmware August 24, 2014 12:59PM |
Registered: 10 years ago Posts: 127 |
Re: Project: Teacup Firmware August 24, 2014 01:04PM |
Registered: 12 years ago Posts: 177 |
Re: Project: Teacup Firmware August 25, 2014 04:09AM |
Registered: 11 years ago Posts: 78 |
The forward and inverse kinematics (iow: depending on if you need angles from coordinates or vice versa) for scara-systems are well known and documented:Quote
theothermike
...
Perhaps it is useful for someone...? (hopefully there´s no mistake in it!?)
The parallel-arm-SCARA kinetic seems to be easier than the single-arm with respect to calculation effort.
In case of the parallel-arm-SCARA, the math for the second (right) arm is identical with the one for the first (left) arm for d=0.
Unfortunately, I do not have any programming experience.... Could somebody please tell me the filenames which are needed to be modified?
BR,
Mike
Re: Project: Teacup Firmware August 28, 2014 05:52PM |
Registered: 14 years ago Posts: 107 |
Quote
RobertKuhlmann
One general question regarding Scara-printers and printer-firmware:
The actual processing interprets GCode-entries e.g. to fill up a buffer with fundamental microcontroller tasks. If the buffer is full, interpretation stops until enough entries in the buffer were processed and deleted. So for simple GCode-Commands the interpretation is ahead of the execution, but for complex commands it can happen that filling up the buffer is slower than the execution, slowing down the print as a consequence.
This can be observed especially with the Marlin firmware on Scara-printers like the RepRap Morgan. More speed would have to be paid with less accuracy and precision. But while every step in a print that consists of commands, that don't depend on sensor-data (like temp.-settings), is predetermined from the moment the GCode is generated and the printer is known.
void handle_step(struct queued_command *cmd) { do_step(cmd->step_pin); uint32_t newtimer = cmd->pulse_time; if (cmd->pulse_adjust) newtimer += (cmd->pulse_adjust * cmd->elapsed_time) / 65536; cmd->elapsed_time += newtimer; if (cmd->elapsed_time < cmd->end_time) schedule_next_time(newtimer); do_unstep(cmd->step_pin); }