Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 13 of 13

Thread: Dual plane dynamic crankshaft balancer build

  1. #1

    Dual plane dynamic crankshaft balancer build

    2 weeks obsessed yield a quite satisfying outcome.

    I've always wanted to build a balancing rig like this And finally the stars aligned and made thoughts into matter.

    The physical construction is pretty self-explanatory in the images. As for the electronics I'm using a pair of 20 kg load cells that I pulled out of a pair of handheld digital scales I purchased from Amazon for $9 each. Those sensors are tied into an x1000 gain amplifier and fed into a teensy 4.0. I'm also using a magnetic rotary angle position sensor which has a 3.3 volt power input and analog output from 0.3 volt to 2.8 volt over a 360 rotation.

    The teensy has two different operating modes: stream and burst. Streaming mode samples position and load cells and spits that data out through the serial port as quickly as it can crunch. This is mostly used just for making sure the position sensor and load cells are working properly. Burst mode writes out to two separate arrays of 10x360 where load cell data is stored for each degree of rotation. Then the average is taken over those 10 samples for each degree. This process is performed over 150 revolutions and each degree averaged once again. At that point serial data is sent to the PC to cover one full rotation of load cell data.

    The windows UI is written in VB6 and is pretty self-explanatory. At the moment it is at its most basic it can functionally be but I couldn't be happier with the results.

    I've attached a link to a YouTube video I put together today of it as a walkthrough. I have quite a few more code implementations to write up but now having a functional machine has really helped to fuel the motivation. 😏

    https://youtu.be/cknnzavM24E
    Attached Thumbnails Attached Thumbnails Click image for larger version. 

Name:	IMG_20230116_204434_(1080_x_1080_pixel).jpg 
Views:	18 
Size:	127.7 KB 
ID:	30157   Click image for larger version. 

Name:	IMG_20230116_204535_(1080_x_1080_pixel).jpg 
Views:	14 
Size:	155.7 KB 
ID:	30158  

    Click image for larger version. 

Name:	IMG_20230116_204554_(1080_x_1080_pixel).jpg 
Views:	10 
Size:	81.1 KB 
ID:	30159   Click image for larger version. 

Name:	IMG_20230116_204645_(1080_x_1080_pixel).jpg 
Views:	13 
Size:	137.1 KB 
ID:	30160  

    Click image for larger version. 

Name:	IMG_20230116_204627_(1080_x_1080_pixel).jpg 
Views:	9 
Size:	148.3 KB 
ID:	30161  

  2. #2
    Cool and very impressive that you can put together something like this with mechanical, electrical, electronic, and software elements. I'm curious about the position sensor and how you use it to sample load position in degree increments?

  3. #3
    Junior Member
    Join Date
    Jun 2022
    Location
    PA, USA
    Posts
    8
    AshPowers,

    That's incredible! The mechanical build, the physics analysis into software, excellent UI, and usefulness to a real world application - Nice!

    Andy

  4. #4
    Quote Originally Posted by joepasquariello View Post
    Cool and very impressive that you can put together something like this with mechanical, electrical, electronic, and software elements. I'm curious about the position sensor and how you use it to sample load position in degree increments?
    The position sensor only provides the angular position of the crankshaft. The two load cells, one on each pedestal, provide the force data created by the imbalance of the part.

    In burst mode the teensy first begins continuous analog reads from the position sensor until the crankshaft is at 0. This is while the crankshaft is rotating at speed. As soon as the crank is at 0. That kicks off a sub routine which reads the ADC values from the two load cells. This data from the load cells is acquired over seven samples which is averaged. There are two separate arrays, one for each load cell, 10*360. So at this first burst sample cycle here at 0, The value of the load cells is put into position zero, zero in each of the two arrays.

    Then the burst routine waits until the crank rotates to 1 and that kicks off the force measurement routine. That populates the two arrays in positions zero, one.

    It does this over a full 360 rotation and then continues that same process for nine more full rotations. This populates both force arrays.

    That kicks off a simple averaging routine that averages the force data over those 10 rotations for every single degree and puts those average values into another array for storage temporarily.

    On top of the 10 rotation data average I've set the code up to do this 15 times over. This was needed to filter out both mechanical noise affecting the load cells AND the jitter in the teensy's ADC (GRRRR).

    At this point a subroutine kicks off to send 360 load cell data points for the front sensor and 360 load cell data points for the rear sensor, using the serial print function. On the receiving side the windows UI populates two different arrays with load cell data. Because each array begins at 0 position that makes it pretty easy to manage the data and use that for generating the graphical display.

    I've ordered delrin acetal plastic plate to make a set of v-block supports for the crankshaft rather than using rolling element supports. Ball bearings are just inherently mechanically noisy not to mention the kind of precision machine work it took to produce the sleeves the bearings are pressed into and the shafts that are pressed into the bearings such that the interference fit of both of those components properly loaded the ball races to eliminate the ball slop AND that the roller plates were perfectly concentric, square and true to the bearing centerline.

    Delrin v blocks we'll have a very low coefficient of friction on the steel main journals and better yet it will completely eliminate all rolling element mechanical noise and potential mechanical runout.

    Eliminating those heavy bearings and shafts will also be beneficial. The additional mass dampens the effect of imbalance in the rotating part so the lighter you can make the support pedestal the better... Not to mention it also increases the base resonant frequency of the pedestal/part assembly.

    Winded response, most likely redundant to your knowledge, my apologies for that.

  5. #5
    Quote Originally Posted by AshPowers View Post
    The position sensor only provides the angular position of the crankshaft. The two load cells, one on each pedestal, provide the force data created by the imbalance of the part.

    In burst mode the teensy first begins continuous analog reads from the position sensor until the crankshaft is at 0. This is while the crankshaft is rotating at speed. As soon as the crank is at 0. That kicks off a sub routine which reads the ADC values from the two load cells. This data from the load cells is acquired over seven samples which is averaged. There are two separate arrays, one for each load cell, 10*360. So at this first burst sample cycle here at 0, The value of the load cells is put into position zero, zero in each of the two arrays.

    Then the burst routine waits until the crank rotates to 1 and that kicks off the force measurement routine. That populates the two arrays in positions zero, one.
    This is all great info. So, the crank is spinning, and you do a series of measurements at 0 deg, then a series of measurements at 1 deg, etc? Is the output of the position sensor an analog value proportional to position, and you read it continuously and begin your load-cell measurements at the desired angle? Is there also a digital input for 0 deg?

  6. #6
    Quote Originally Posted by joepasquariello View Post
    This is all great info. So, the crank is spinning, and you do a series of measurements at 0 deg, then a series of measurements at 1 deg, etc? Is the output of the position sensor an analog value proportional to position, and you read it continuously and begin your load-cell measurements at the desired angle? Is there also a digital input for 0 deg?
    Over a series of test runs I had to determine how many data samples I could take within 1 degree of crankshaft rotation at a maximum of 1000 RPM or so. So I ended up setting the number of ADC conversions just a hair under the amount of time it takes for one degree to pass. I'm not using interrupts in this project as that seems like it would complicate things a bit. So basically once I've taken as many samples as I know I can take within 1 degree of rotation, just a split second later the angle position sensor kicks off to the next degree and the cycle begins again.

    I have determined what analog voltage step is for one degree of rotation but more practically I've determined how many samples I can take at 1,000 RPM within one degree of rotation.

    Yes there is a load cell measurement taken at 0. In fact that's the first load cell measurement which kicks off the rest of the routine that acquires load cell data for each consecutive degree there after.

  7. #7
    Quote Originally Posted by AshPowers View Post
    Over a series of test runs I had to determine how many data samples I could take within 1 degree of crankshaft rotation at a maximum of 1000 RPM or so. So I ended up setting the number of ADC conversions just a hair under the amount of time it takes for one degree to pass. I'm not using interrupts in this project as that seems like it would complicate things a bit. So basically once I've taken as many samples as I know I can take within 1 degree of rotation, just a split second later the angle position sensor kicks off to the next degree and the cycle begins again.

    I have determined what analog voltage step is for one degree of rotation but more practically I've determined how many samples I can take at 1,000 RPM within one degree of rotation.

    Yes there is a load cell measurement taken at 0. In fact that's the first load cell measurement which kicks off the rest of the routine that acquires load cell data for each consecutive degree there after.
    That's very clever. So, you're taking N measurements from 0-1 and calling that the "0-deg" data, then N measurements from 1-2 deg, etc.? And are you detecting 0 deg by the drop in output voltage of the position sensor?

  8. #8
    Quote Originally Posted by joepasquariello View Post
    That's very clever. So, you're taking N measurements from 0-1 and calling that the "0-deg" data, then N measurements from 1-2 deg, etc.? And are you detecting 0 deg by the drop in output voltage of the position sensor?
    Yes, N samples from 0-1, then 1-2, etc. I am detecting 0 deg not by a falling edge, no, but simply by the moment where the position sensor's output = the known low ADC value. I have kept the T4 code as simple as possible without maths to convert the raw ADC values into units. For the position sensor I have a calibration sub that detects the lower and upper AD values right at the transition. That sub then maths out what the AD value is for one degree of rotation step. Doing it this way, the burst sub waits for the low AD value from the pos sensor, samples the load cells, adds one degree of AD value to the pos sensor and waits for the ADC to see that new pos sensor value.

    I have a few ideas to make things far better though. Instead of having a fixed number of AD samples based on that 1000RPM test speed I will be using the T4 to produce a PWM output to drive a SSR for powering the drive motor - using quasi-PID routine I'll write up for this.

    In the balancing process you need to start out at a lower test RPM. You don't want the imbalance to cause the part to rattle around on the supports or worse, fly off. You also don't want to overload the load cells beyond their mechanical yield point.

    The idea now is to write a routine that starts the test at a low RPM and gradually ramps up that speed while taking reads from the load cells. At the RPM where the load cells are approaching ~80% of their full range the code will then calculate how many load cell ADC samples can be taken in the burst routine per degree at that RPM... then this kicks off the burst routine. Having the system setup like this it will be able to determine the ideal test RPM each time on it's own.. When balancing parts like this you aren't just spinning it up once and shaving/adding weight here and there and then you are done. No, it is a process of spins, shaving/adding, spin again a little faster, shaving/adding, and so on. It usually can be completed in just a few of these iterations to get a good balance but depending on what the part is used for you may need even better balance. Each iteration gets you further into the decimal place of imbalance but it also requires higher test RPM. This creates an issue though of competing variables - higher RPM amplifies imbalance but lowers AD sample time. The reduction in sample time is inversely proportional to the increase in speed however, the increase in imbalance forces are proportional to the square of the speed. Twice as fast, half the sample count but four times the imbalance force... I'm not sure if it would be faster to model the nth order diff eq. of the relationships here or to just mildly "tweak" the mechanics and code to hone in on the best suit of variables.. I love the maths but at a certain point the assumptions land you in Fraggle Rock while the seat-of-pants will put you dead nuts on Sesame Street.....

    Click image for larger version. 

Name:	hb-vs-sb-speed-graph.png 
Views:	1 
Size:	144.9 KB 
ID:	30209

  9. #9
    Quote Originally Posted by AshPowers View Post
    Yes, N samples from 0-1, then 1-2, etc. I am detecting 0 deg not by a falling edge, no, but simply by the moment where the position sensor's output = the known low ADC value.
    Thanks for all the good info. Are you calculating speed by measuring the time between 0-deg events, or do you also have a speed sensor on the motor?

  10. #10
    Yes it is calculating RPM based on the time interval from 0 to 0, covering one full revolution. In the burst mode it is collecting data over 150 rotations so there are 150 values for the RPM which are averaged. In the serial data packet the last data string is the average RPM value for the entire 150 rotation sample.

  11. #11
    I love Amazon! At 6:00 a.m. this morning I ordered a bunch of trick parts for the balancing machine. All of the pieces arrived a couple of hours ago, on a Sunday, on the same day I ordered them! How wonderful of a world we live in today!

    Delrin acetal rod to machine flat bearing pads for the support pedestals.

    24V 50A power supply for the juice to run it all.

    30A PWM DC motor speed controller.

    Adjustable voltage regulators with digital display for 5v and 3.3v source.

    Instrumentation amplifiers for the load cells with adjustable gain and adjustable zero offset.

    Articulating adjustable arm for position sensor mounting.

    Click image for larger version. 

Name:	IMG_20230122_230904_(1080_x_1080_pixel).jpg 
Views:	2 
Size:	97.2 KB 
ID:	30215Click image for larger version. 

Name:	IMG_20230122_230925_(1080_x_1080_pixel).jpg 
Views:	2 
Size:	87.7 KB 
ID:	30216Click image for larger version. 

Name:	IMG_20230122_230935_(1080_x_1080_pixel).jpg 
Views:	2 
Size:	117.9 KB 
ID:	30217Click image for larger version. 

Name:	IMG_20230122_230955_(1080_x_1080_pixel).jpg 
Views:	1 
Size:	121.7 KB 
ID:	30218Click image for larger version. 

Name:	IMG_20230122_231022_(1080_x_1080_pixel).jpg 
Views:	1 
Size:	117.5 KB 
ID:	30219Click image for larger version. 

Name:	IMG_20230122_231011_(1080_x_1080_pixel).jpg 
Views:	1 
Size:	91.2 KB 
ID:	30220Click image for larger version. 

Name:	IMG_20230122_231042_(1080_x_1080_pixel).jpg 
Views:	2 
Size:	136.8 KB 
ID:	30221

  12. #12
    Member
    Join Date
    Jul 2015
    Location
    Ontario, Canada
    Posts
    69
    Are there any thoughts to find the balancing coefficients at different speeds? Or are you confident that you are always far away from resonance?

  13. #13
    Quote Originally Posted by Jake View Post
    Are there any thoughts to find the balancing coefficients at different speeds? Or are you confident that you are always far away from resonance?
    To make sure that I'm operating below resonance I have connected my oscilloscope to the load cells and in a crude but effective method, if you just tap each end at the pedestal without the crank rotating it will cause the pedestal to resonate. With the current plate spring and load cell arrangement and with this crankshaft in place the pedestals are resonating at 35Hz.

    I have changed the pedestals and eliminated the ball bearings and have gone to delrin acetal v-block pad bushings. So now the upper support pedestals are a bit lighter than before so that natural resonance will have gone up. I plan to check that here in the next few hours when I get back on the project.

    I will end up writing into my interface a simple routine that will analyze the load cell signals to determine the resonant frequency of the pedestals without having to use another piece of electronics. I'm also thinking that for heavier items obviously The support hardware will need to be stiffer in order to maintain a decent high enough resonant frequency so I've contemplated either installing springs with adjustable preload or making it so that additional spring plates can be installed.

    If you look in the original pictures of this post at the waveform graph at 1053 RPM you can see how there's a double heavy spot within one rotation. At 1,053 RPM that puts you right at 17.5 Hz rotational frequency which is 1/2 of the pedestal support frequency. The small amount of imbalance in the crank that remained at that point was exciting that natural pedestal frequency being right at 2x the rotation speed.

    Surprisingly enough, at this point in the balancing process I was able to trim the imbalance down to within 1 g at the front end of the crank and 1.7 g at the back end. The entire crank assembly with bob weights has a total mass of 52 lb.. or 23,587g. It's still quite astonishing that I was able to get the imbalance so incredibly low compared to the total mass of the part being balanced. And that was on the first shot with a hardware configuration that created a lot of mechanical noise that had to be filtered. This new arrangement with the solid acetyl bearing pads and going from 20 kg load cells to 5 kg load cells will definitely improve the signal range per mass and get rid of all the noise. I'm thinking the new setup will be able to consistently measure down into the +/- 0.05g accuracy range.

    Now that I've gone to these solid acetyl bearing pads all of the noise induced by the rolling element bearings has been eliminated. As a result I shouldn't have to use as much signal filtering/averaging to clean up the waveforms which ultimately will produce a much greater ability to measure the imbalance. Because of that I also shouldn't have to spin the part as quickly to get enough amplitude to resolve a decent signal. I should have everything up and going here within the next few hours and be able to post back the results with the new upgrades.

    Ultimately though I will produce a calibration rotor with a 2-in diameter shaft and a rotor disc at each end. From there I'll be able to add a known amount of mass to the rotors at a specific radial distance so that I can map out the conversion from the load cells into an actual mass unit.. And then do this over a range of different test speeds to build a map that models the dynamic response of the machine.
    Last edited by AshPowers; 01-25-2023 at 02:06 AM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •