Addendum, regarding that question at the end: • stepperControlAddendum... Atmel doc: ww1.microchip.com/downloads/en... Sketches: www.iforce2d.net/sketches
Пікірлер: 563
@alizghoster Жыл бұрын
most insane video ever! I tried to understand it when I was 18, 4 years ago, but I failed. So I came back today, and I have to say that you did an excellent job.
@rthally946 жыл бұрын
Fantastic work! It's rare to see anyone create an alternative to the Accelstepper library, which does multiple steppers with either acceleration or coordination, but not both. I'd be very interested to see this migrate to a separate library.
@johannesbrahms27182 ай бұрын
You are like a magician! I had incredibly hard time with these steppers! Thank you!
@MaximilianBeck6 жыл бұрын
Almost every time I'm working on an electronics related project I find a video of you covering exactly what I was looking for! :D
@msimila6 жыл бұрын
One of the best videos I've seen in a long time! Well narrated, interesting subject, examples well presented and explained. Really, really good job!
@randunik776 жыл бұрын
I'm so glad that youtube suggested this video to me. Very nice, super interesting and well explained (from my point of view). Thank you. And finally I saw an real life application of a series and of a series sum (because on my math classes they teach me a lot of these series, but I never understood why should I know about them and what they are good foor). Very good video. Definitely I'll what your other videos ;)
@adrianrawlings24703 жыл бұрын
Hallaluha, someone actually showing and explaining in detail. I'll certainly be watching this again.
@conraddiaz22745 жыл бұрын
AWESOME demonstration and tutorial! Exactly what I was looking for. Although I've loved DIY-type stuff for over 30 years, professionally, I'm an automated product and system design engineer (and design engineering instructor). I have tons of invention ideas that I want to bring to life, and some of those involve motion control. You've taken a professional approach to achieve the kind of motion control (and experience) you were after, combining several skills, and sharing your journey with us. THANK YOU SO MUCH! Also, you cracked me up when you asked if you just heard one of us yawn!!! That was actually the part where I was excitedly thinking "this is EXACTLY what I was looking for, and this guy thinks and explains things they way I do". Far from yawning!! Ha ha! Thank you again, and we'll be in touch!
@jmarkhan92353 жыл бұрын
I want to control 4 stepper motors in a sequence 1,2,3,4 , with 0 to 180 degrees of movement like half circle with reverse and forward motion. Please help me out.
@vincentpernicano32772 жыл бұрын
Yeah that was a great tutorial im picking up everything that guy just put down and I feel confident I can complete my project now!
@ZeedijkMike6 жыл бұрын
I just love the sound of stepper motors "singing" together. Nice video - and no yawning from me at all. Small tip though: When I have a lot of setup stuff, I put it in a separate .h (header file) fx. pinSetup.h for all your pin assignments. This keeps the "tedious" or "non chsnging" stuff separate and your main program easier to maintain.
@franztrinidad34544 жыл бұрын
I think this is my 5th time watching this video. every watch, It's making more sense for me! Im new to arduino and steppers btw 😅
@MattMcConaha3 жыл бұрын
I'm riding that same boat right now
@maciejmajewski40332 жыл бұрын
Thanks for the video, answering your question(if it is still valid), the series sum can be calculated from the following formula float calcAccelDuration = step_delay * sqrt( (float)accel_lim + 1) ; variable names from the ATmel document. Greetings from Poland.
@mikebiermans42736 жыл бұрын
Thank you for this video, I have learned allot from it, as I do from most of your videos. Tyvm for making these videos. Grtz Mike
@exnihilo415 Жыл бұрын
Just in case this helps out any other rookie programmers here, I finally figured out why the final sketch wasn't working when more than 8 motors were added in the same manner in the code. It's because the left and right bitshift operators (>) would break the byte type for remainingSteppersFlag and nextStepperFlag. Just find "byte" and replace with "word" in the sketch and all is well. All you experts can tell me how obvious this was but it took me all day. I was sure something in the interrupts or timing needed to be adjusted given the extra overhead, but no. Live and learn!
@web1bastler6 жыл бұрын
That's awesome! Btw. the most important use case of coordinated motors is on robotic arms. Since CNC machines often have to move axis-by-axis except for interpolated movements like you showed with the diagonal path. I love coordinated motors!
@MrSantiagoDELO3 жыл бұрын
great video! I'm just now developing a cable robot for a uni project and I've looked at your sketches and the Atmel doc, and I've managed to add my take on this, in short, I'm giving a fixed time target for all motors to complete their task (just a constant acceleration between two positions). With that, you can set a base start delay and acceleration proportional to the Steps/Time request.
@Siamect6 жыл бұрын
Actually linear acceleration is not always what you want... I made a position controller in the late 80-ies and we had problems when we used it for portal conveyors. The structure was shaking. The reason is that linear acc - constant speed - linear deceleration contains a lot of higher harmonics. Ideally you should try to move things in a way that does not have any higher frequency components. Sine-square acceleration does this and I used a table to calculate this. I also had dedicated hardware to generate the pulses... The portal conveyors were not shaking any more but we could notice that the structure bent very slightly during the acceleration and deceleration. It was amazing...
@JyrkiKoivisto6 жыл бұрын
For starters I think it's good idea to start with linear acceleration/deceleration. Other acceleration profiles can be added at a later time if coded such. Jerk controlled acceleration I think is the most desired (control the acceleration of acceleration to produce velocity profile and over time it gives the position) There's couple of mainstream ways to implement that. Make the Jerk to Jerk or Jerk the Jerk with sinusoidal profile. Jerk is just the acceleration of acceleration. Or how fast the acceleration changes.
@Siamect6 жыл бұрын
Sure you have to start with what is usable and simple to implement. I think the smoothieware is using jerk and maybe the TinyG/G2 and gbrl too...
@wrobel76 жыл бұрын
Siamect interesting insight. Do you have any DIY blog/vlog? Would be nice to learn from someone more experienced 😀
@Siamect6 жыл бұрын
No real blog, I have posted some clips of flying fpv on youtube lately and I have my website siamect.com and if you look at the upper part of it there are a few links to technical stuff but it is really old and corky...
@jenskapmeyer25796 жыл бұрын
Thanks a lot. I learned much, always wondered how to program interrupts with Arduino. Nicely structured lesson. Assigning this video as "Entertainment" is pure understatement, engineering would be appropriate ...
@YoutubeAdministrator6 жыл бұрын
Thank you for sharing this, i like the indepth explanations and real use case examples provided. seems like many skips these steps when introducing arduino programming.
@pd.dataframe28333 жыл бұрын
This is super super useful man. Thanks a lot for sharing. Use of Taylor series for simplifying acceleration is the most important part to get this running smoothly on arduino.
@stefanoalfredolaspina8471 Жыл бұрын
well done. really dense of concepts and best explained. Thank you. Instead of using already prepped libraries, gone under the hood and see how it's actually working. recommended for everyone who wants to understand more
@TheRealStructurer3 жыл бұрын
Considering to build my own camera slider and this will help a lot 👍🏼 Thanks for sharing to such a detailed level. Got yourself a new subscriber
@letrung91992 жыл бұрын
Thank you so much. I’m looking for this video in quite a long time. This is super valuable for me!
@patrickjdarrow6 жыл бұрын
Insanely insightful video. Huge help for me as a student.
@anthonyj7776 жыл бұрын
I was glued the whole time. Great video.
@loukask.91116 жыл бұрын
u deserve like 10 times more subs, this is insane.
@jonaspeter40303 жыл бұрын
Exactly what I was looking after! Thanks a lot! You did a great job!
@monfalcon35962 ай бұрын
I have learned my stepper motor control in this site long time ago. This is an excellent tutorial!! I hope you update the driver with a new one
@Xraller6 жыл бұрын
Great video! I've been wanting to know just these things for a while. Thanks!
@DNSXH16 жыл бұрын
I want to thank you for your channel, you explain in a very detailed and patient way all the points for each project, besides, your english is very good, i mean, i'm not a native english speaker, so i have problems with some youtubers when they talk fast in technical language that i'm not familiarized with it at all. Thank you and greetins from Chile.
@iforce2d6 жыл бұрын
Thanks for the kind feedback :)
@jims4086 жыл бұрын
Many thanks for a very instructive and practical video... you have a real knack for explaining things well.
@anol45903 жыл бұрын
This is exactly what I needed, thank you so much for sharing with us!
@yurigagarin19873 жыл бұрын
Excellent topic. You have a mastery of coding the program. I need to watch this video 10x to see the total picture. Your programming jump start a newbie like me to a higher level. Your programming is a nice template to master this Arduino, stepper motor & controller in one place. Maybe you teach us to handle another beast called Picollo F28004s LaunchPad of Texas instrument. Thank you very much for sharing your intelligence.
@lazymouse6366 жыл бұрын
I didn't yawn very interesting, thx for sharing! When ramp up delay is calculated with d=d-(2*d)/(4*nr+1) then ramp down is d=d+(2*d)/(4*nr-1) where nr is the step number in ramping up or down (nothing to do with total steps made). Increment nr when ramping up and decrement it when ramping down. nr doesn't change when at constant speed. At constant speed only n changes.
@PiefacePete464 жыл бұрын
Chris, I watched this when you first posted it in 2017. I have watched it a couple of times since, and I just watched it again! (End to end every time.) It is way beyond my abilty to comprehend in detail, but it was never boring. :o) Thanks again.
@iforce2d4 жыл бұрын
Have you seen a doctor about this odd behavior :)
@PiefacePete464 жыл бұрын
@@iforce2d : Yep... he told me to "Keep using the pills and potions"! (And watch more KZbin) :o)
@automateanything5 жыл бұрын
i watched this late at night after whisky- and fell asleep! first thing in the morning i put it on and watched it twice. however your video is done superbly- and a great explanation of what is required. my math skills need polishing obviously -but in my defence im old and school was along time ago! i wanted this sort of code to make a table saw stop measuring scale- its perfect for my needs!
@philbx16 жыл бұрын
Very nicely explained. Thanks much for the obviously great amount of time you put in! Off topic a bit, I'm trying to create an RC LED controller for a mate but ran into trouble using a Digispark module to get the PWM value from the RX. Way too random using the CHANGE interrupt, so now moving to a Nano so at least I can debug using serial. Looks like using registers may be best way to go.
@1_HighDuke6 жыл бұрын
Very interesting exercise. Thanks for taking the time to explain it like you did.
@johnlocke96092 жыл бұрын
I'm using your simpleAccel for a 3 motor polisher, with 3 motors of 2HP, they move with the help of linear rails and servos back and forward to polish metal, is really really cool your video.
@k345616 жыл бұрын
I enjoyed your video and didn't yawn. The standard for coordinated stepper motors is Bresenham's line algorithm. Most famous in graphics. But it was originally developed by Jack Bresenham in 1962 to coordinate the motors for line drawing on a Calcomp plotter. It is the algorithm used in the open source GRBL CNC code. Bresenham's is all integer in the main loop, so very fast. I'm not sure what GRBL does for acceleration. They managed to cram it all into an Arduino Uno with just 2K of RAM. They just went to the Mega in the last year. I'm working on making a CNC glass cutter. The glass cutting head needs to be parallel to the direction of travel. So I'm going to use a fourth stepper motor coordinated with the with the original three. Before I dive down into the rabbit hole of GRBL and Bresenham's it is interesting to see what other people have done. Thanks, Kurt
@profBricks Жыл бұрын
I enjoyed the video a lot, quite followed it until the end, and I'm going to merge your last idea into the existing multistepper library
@KW-ei3pi4 ай бұрын
Thank you SO much for your help in my previous comment. Very kind of you to take the time. I'm going to try and implement your acceleration code, but replace the "highspeed" (at 9:18 in the video) with an AnalogRead of a Potentiometer. I think this will accelerate the Stepper Motor to a maximum speed that I have set on the Potentiometer. Thanks again. Regards.
@davidburt92383 жыл бұрын
As a simulation, you could write a sequence for your six steppers to proceed as an odometer stepping out (tenths , units , 10's ,100s, 1000s, 10000) ! Just a thought. Enjoyed your presentation,.... keep-em coming !
@yucemantar6 жыл бұрын
ADAMSIN KARDEŞ
@blankphoto6 жыл бұрын
It is cool :) Decided I'm going to use a stepper motor for a pet feeder build I'm doing, thanks to your video.
@Bechill3d5 жыл бұрын
Thanks a lot ! Very well explained, exactly what i was looking for :)
@RcCarFan016 жыл бұрын
Very interesting, once i have tried to speed up a stepper motor as fast as possible. My frequenz methode has reached 4092 rpm's with a stepper motor 200Steps/turn. (Video on Channel) Very good explaination and you haven't got me lost until the formula out of the datasheet/pdf. Great Video!! P.S.: I have already worked with Timer Interrups ^^
@numenrider5 жыл бұрын
Thanks a lot because of you i can understand how to assign a function including 3 stepper motors, which will work cordinately😍😍😍
@helixalgorithm31606 жыл бұрын
Cool insight to servo controls. I believe you could use a Gaussian distribution for smooth a/de-cceleration
@jakhongiralimov74813 жыл бұрын
wow. thats what i needed - using steppers in timer interrupts
@k2_robotics6 жыл бұрын
Great explanation, very helpfull for me, as usual. Thank's for the video!
@vkoutsovoulos94256 жыл бұрын
Great approach ! Thanks for sharing
@doanlinhvo17833 жыл бұрын
great explaination! easy to understand. Just want to say thank you so much! :)
@abting45466 жыл бұрын
Thank you so much for your video and clear explanation. i learned so much :)
@brhayanliberatotafur47865 жыл бұрын
Hi iforce2d, congratulations! is a excellent video, it is explained very well how move stepper motors, i want to comment that present problems with the configuration of the ports (#define STEP_HIGH PORTD | = 0b00001000; #define STEP_LOW PORTD & = ~ 0b00001000; ) and i solve it only by assigning the pins the high and low as is normally done, (digitalWrite (STEP_PIN, HIGH); digitalWrite (STEP_PIN, LOW); ) and in this way the code worked correctly. Greetings from Colombia.
@insanet3 Жыл бұрын
its year 2022 and found this video very useful. im impressed the cheap A4988 could move that smooth with that algorithm, i though only the more expensive drivers with proper sinewave output like TMC2009 and similar could move like that.
@PiefacePete466 жыл бұрын
Great video thanks. This is a topic that gets too little coverage... I think it is in most peoples "too hard" basket. It is certainly at a level above my comfort zone, but I could follow the process in general terms thanks to your presentation approach. Cheers.
@iforce2d6 жыл бұрын
It went in and out of my "too hard" basket a couple of times during this process actually. Those interrupt routines can be tricky things to manage sometimes.
@mastermoarman4 жыл бұрын
thank you for making this video. i am taking a class that we use arduino and i want to do basically every thing you put in this video lol. looks like i have more learning to do. i wish you went more in detailed on the video.
@vishalramadoss6683 жыл бұрын
Fantastic work and documentation
@barrinfin3 жыл бұрын
Thank you, great video, it explains so much and easy to follow
@fonecelautorizadatim8825 жыл бұрын
Ótimo trabalho homem. Obrigado por compartilhar esse conhecimento poderoso.
@dulithchinthaka71293 жыл бұрын
Really appreciate your explanation ❤️
@isidoromaich72266 жыл бұрын
Is cool because I recently was watching a lot of videos about running several motors at the same time with arduino, and the ones I saw nobody was caring about sincronization. Hmmm it's seems to me that interesting projects are coming, I promise not yawning and watch every video complete in one pass.
@SirRobinII3 жыл бұрын
Thanks for the guide! Im using micros() in a loop instead of ISR. Those equations for acc/dec work really well, I haven't tested my code for running multiple steppers at once. update: seems like there's no way to do coordinated movements without interrupts, multiplying by the speedscale breaks the fluent motion.
@Adamcz956 жыл бұрын
Ah, I wish I saw this video when I was making my bachelors thesis (DIY camera slider). Very nice.
@VinceSamios4 жыл бұрын
Hey, I'd love a link to this thesis
@prodipkumarmandal14136 жыл бұрын
Very nice teaching sir....Lovely. Become Fan of yours..
@MrMitdac015 жыл бұрын
Thank you so much, your video is so helpful
@user-wb9hc2zh9p Жыл бұрын
Thank you very much sir, you have the best video on youtube to explain this topic
@danielmirandacruz71644 жыл бұрын
Hello! This is a great work! Explained with simple working examples. I would like to know if you can no only stop the motor while running, as you showed, but also change the speed anda acceleration to use it in a PID control loop with position measurements by rotary encoders. I tried other libraries but I could not manage to get it working. The interrupts of the encoders counters are blocking the steps/rev action send to the motor and the behavior of the motor is different when the encoders are added. Can you help me with this problem?
@ManojSharma-ud3ox4 жыл бұрын
Good Work! Thanks for sharing this information.
@alexgonzalez23383 жыл бұрын
This is very impressive engineering knowledge
@lokeshsilwal57326 жыл бұрын
Thank you for this video, it was really helpful, but I do wanted to know how much power are you supplying to the system with multiple servo motors?
@amilcarmalave41152 жыл бұрын
this video deserves millions of likes
@RelentlessHomesteading4 жыл бұрын
Great video -- I'd have gone with a simple table for the speed values. If you have too many points, then you interate between adjacent values. Its a great way to get the curve you want without wasted computations on uCs.
@iforce2d4 жыл бұрын
These mcus only have 2048 bytes of RAM, it disappears pretty fast :) But yes, on most other hardware that would be the way to go.
@Leon-ph9fm4 жыл бұрын
Fantastic tutorial! Thanks a lot!
@johnlocke96092 жыл бұрын
You are a very interesting person, and love the way you explain, when you said: Did I just hear somebody yawing? -- :D I was like: I SWEAR, it wasn't me, I'm very pleased with your lecture, who's yawing, God damn!?? haha!
@mertmert22976 жыл бұрын
Hey this is crazy.Perfect video
@RSC21945 жыл бұрын
Hi, awesome tutorial! I have a question, the simple acceleration at 11:40 sounds like a S curve velocity profile (which is better than trapezoidal) even the curve is similarly, in practice this is not better than trapezoidal profile? another question, in the linear acceleration at 29:40, the curve is not a perfect trapezoid, this is due to aproximation? regards
@MatteoPresot5 жыл бұрын
Hi, to calculate limit of the sum, try with a lookup table and interpulate beetwen breakpoints
@frab886 жыл бұрын
Thanks for this video, I'm really passionate about this stuff. However I'm having some problem using some of your example sketches with my motor drivers (TB67S109AFTG) and a pro-mini-16MHz. In particular, in sketch4_linearSpeedInterupt I think that the step pulses are a little too short (T_ON=125ms in my case). Most stepper drivers are rated for pulse freq less than 100KHz (T_ON > 300ns for my drivers)
@heinrichhelmbold4194 жыл бұрын
This is a late reply but this has been a very informative video!! I am busy getting my head around interrupts - I can see why it took so long. Just a simple question... If your Stepper3_linearSpeed sketch works, should the Stepper4_linearSpeedInterrupt sketch also work without editing? My stepper just makes a slight movement and that's it... the non linear sketches works perfectly.
@yepitsodex6 жыл бұрын
Great video! Thanks for posting I've never been able to get steppers to work without a delay between driving step pin high and driving it low, if i do those commands back to back its just a big fail, as if the driver cant detect the falling edge. In fact I cant get your code to work without some delay before sending that falling edge - maybe differences in drivers, or some emf phenomenon (though its odd I've used various driver boards over the years).
@VinceSamios4 жыл бұрын
I've done a total re-write to come up with a new solution for coordinated steppers with acceleration. My solution includes optional acceleration, optional deceleration, and no delay between routine steps. It retains the speed and acceleration aggression options. I'll post a video on it some time, but essentially all step scaling is pre-processed and the acceleration/deceleration equation is run only once (no need to run between routines) per step.
@jarchdm4 жыл бұрын
I'm just about to program my automatic curtain puller and I would love to see your code. If possible could you post a link to a Google Drive file or something?
@VinceSamios4 жыл бұрын
@@jarchdm Ive got some finishing off to do, but I'll do a video when it's done.
@jarchdm4 жыл бұрын
@@VinceSamios excellent looking forward to it
@germanangeles56483 жыл бұрын
Excellent this video, very good command of kinematics
@andrewmack48304 ай бұрын
Very clever, and well explained. Thank you
@ceptimus6 жыл бұрын
I wanted something similar to control the four (mecanum) wheels of a robot simultaneously. The robot gets its signals via an r/c link so the Arduino has to decode the channels, do some maths to decide how fast and in which direction each wheel should be turning and then drive the four stepper motor wheels. I figured the Atmel 328 didn't really have enough power to do the job, so I used an Arduino Due. The Due processor has lots of independent 16-bit timers that can each trigger a separate interrupt routine so it made the job easier. I suppose I ought to blog or KZbin it - I intend to, but I have too many other projects on the go right now...
@BlakeEdwards3335 жыл бұрын
Great video, thanks!
@DoRC6 жыл бұрын
I think you might get some smoother operation when running slowly by putting the delay between the high and low as well as at the end of the loop. The way it is means it takes 2 steps delays takes 2 steps etc... Maybe it wouldnt make a noticeable difference though.
@mkmyuu2 жыл бұрын
I am currently working on a scenario with three equally angled motors, where one of them needs to be scaled vertically by sqrt(3) to achieve a perfect XY movement. I've been trying to incorporate your fantastic work to help me get going with accel/decel, but I do not get accurate positioning. It is off by an ever so slight margin. Do you have any clues what I could look at? Any help is appreciated! Cheers and thanks for the great content!
@paulrautenbach6 жыл бұрын
Thanks. That was excellent.
@Teach_EM2 жыл бұрын
Thank you for this tutorial. It has been very helpful
@yugendravenkatadurgamruthk77974 жыл бұрын
A wonderful Video. Very useful information. I learned a lot.
@slobaivkovic89105 жыл бұрын
Thank you, this video was realy helpfull.
@ShadowD716 жыл бұрын
Very good video, thank you.
@traceyflanders2 жыл бұрын
Great explanation, appreciate it.
@stevejones86656 жыл бұрын
Great Video mate and vwdone sticking with it👍I watched to the end and didn't yawn once even tho i don't think I will ever have a need to control 6 steppers at once...Was very surprised to see there was no slip i am guessing it's because you used interrupts..which part of down under are you from? I have lived in Christchurch NZ twice but am now stuff back in wet and Cold Liverpool UK now Winter is on the way here and your Summer is just around the corner..Regards Steve
@mohamedmokdad52226 жыл бұрын
First of all, many thanks for this very useful tutorial video in my view. Would it be possible to have the exact reference of the stepper you are using? I have making some checking with an oscilloscope and the behavior in my environment differs a bit from yours. E.g. with the settings as done in your sketch, the 1st pulse is about 2.8 ms and the second one is about 11.6 ms. The rest of the pulses are decreasing are predicted. This seems to be connected to line 12 in your code float c0 = 2000 * sqrt( 2 * angle / accel ) * 0.67703; in sketch Stepper3_linearSpeed. Any advice on that?
@bochozack3 жыл бұрын
Hi, Do you know what code he is using? I use Python, and I am guessing this is C code? Thanks
@a.chrisblythe79915 жыл бұрын
I think I would be right in saying quite a few people would be interested in an add on to explain the interupt and more involved later part of the video, any chance of making an advanced version add-on video? It was very informative and I learned a lot for which my thanks
@antoniopedrajasantiago84155 жыл бұрын
how you conected the motor, Black 1A, Red 1B, Green 2A,, Blue 2B, ? In the modular stepper yurbot. Thanks and congratulations!!!
@niklashalonen92966 жыл бұрын
Amazing job! Now you can create your own cnc firmware ;D