Back to Mechanical

Bellcrank Geometry Optimization

Problem

For many years, our formula electric team has bestowed one new suspension team member the task of optimizing the geometry of the bellcranks. While the project initially sounds fun, it is actually an incredibly tedious, time-consuming and monotonous task. I can say this because I was tasked with this project during my first year on the team. Now the reason why this takes forever is because the strategy that has been passed on year after year is to simply brute force as many geometry combinations as possible, run through a 14 position sweep on the parametric models in SolidWorks, and note down each value one by one. Surely we would have found a faster way to do it by now! You're wrong. I spent ten hours and pulled an all-nighter just to run through eleven geometries. I knew after that I had to find some way to automate this process. I thought it would be a fun challenge and would teach me some new SolidWorks skills, and hopefully save some of the future suspension members some precious time. I mean just look at this:

Bellcrank interference problem 2 Bellcrank interference problem 1

Automation Solution

Remember when I said it took me ten hours to run through eleven geometries? This script I wrote can now run through 920 geometries per bellcrank in only five hours. It also found a better geometry than I did.

Baseline Test

This test is done on the current bellcrank geometry, and it’s mainly to check that the macro is working and rebuilding properly. It runs the single geometry once through the entire 14 suspension positions in 5mm increments from 30 to 95mm of wheel travel (in CAD).

Stage 1: Global Halton Screening

In the first stage, 480 different geometries are tested. For each geometry, the macro runs through 7 suspension positions (30, 40, 50, 60, 70, 80, 95) to get a broad idea of its motion ratio. It looks through the entire search space, using Halton sampling to select a wide range of geometries to test. I wrote down how these 480 geometries are chosen below.

Stage 1 global Halton screening explanation

Stage 2: Regional Screening

In this stage, the script will rank geometries from stage 1 that were successful. It uses the following motion ratio error term to determine the best geometries.

Motion ratio error calculation

It also separately considers the size of the bellcrank, which we also want to minimize to reduce cost. I included how this is calculated below. I decided to consider the motion ratio score and size score independently because I didn’t want the algorithm to prefer a smaller bellcrank with a bad motion ratio. I made it so that we only consider the size for the bellcranks that have optimal motion ratio scores.

Bellcrank size calculation

Based on these scores, stage 2 chooses the top 12 geometries. Since I still wanted to cover a broad range with this stage, I calculated the normalized distance between each pair of geometries just to make sure that they are far enough apart from each other (d ≥ 0.1) and we’re not concentrating our efforts on a single area of the graph just because the best 12 from stage 1 happen to be in the same place. This is how I did the normalization:

Normalized geometry distance calculation

At each anchor, the search looks through a small area around it. Here’s an example of what I mean:

Stage 2 anchor search region

Overall, stage 2 went through 320 total geometries and each one was checked at all 14 suspension positions (30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95).

Stage 3: Fine Refinement

This is pretty much the same as step 2, except it chooses 8 anchors from stage 2 with a much smaller normalized distance requirement (d ≥ 0.04). It looks at a total of 120 geometries and goes through the full 14 position sweep with each one. The search space around each anchor is smaller in stage 3:

Stage 3 anchor search region

Below is a 14-second video rendition of the entire five hour process I described above. I made this on MATLAB using actual data from the solidworks optimization. The main takeaway is that the algorithm covers a wide range of geometries before narrowing the search toward the best one.

Below I have included INTERACTIVE 3D plots of the search process. I would highly encourage you to INTERACT with it; I spent a long time trying to make it work. You can click the different stages in the legend to filter the data points, which can provide a better idea of how my code went through the design space and converged on a final optimized geometry. You can also click individual points to see their geometries and motion ratios.

Click a stage to show / hide it
Click any point to inspect its geometry
L₁
L₂
α
β
Average MR
Click a stage to show / hide it
Click any point to inspect its geometry
L₁
L₂
α
β
Average MR

For every geometry candidate, the macro wrote these values into the driver model, then rebuilt the assembly and moved the suspension through either 7 or 14 wheel-travel positions, then recorded the motion ratio data. If the geometry is unable to rebuild or has invalid kinematics (e.g. it violates a mate, etc.) then it would automatically reject it. The same optimization process happens for both the front and rear suspension models. The only thing that is different between front and rear are the ranges of geometries tested, which is determined by the available space we have in our car and past geometries. Here’s my code for the front optimization, just remember to make changes that suit your vehicle’s geometry and target motion ratio if you’re planning on using it.

Download Front_Bellcrank_Optimizer.swp
Loading macro...

These videos show the macro in action. It selects the geometry, applies it to the driver file, then rebuilds the dynamic suspension parametric model and runs through the different positions. Seeing this automatically do the same work I had previously spent ages doing by hand nearly brought tears to my eyes.

In total, 1840 geometries were tested (920 for the front and 920 for the rear). Each successful geometry was mainly ranked based on how closely their motion ratio curves followed the target value throughout the entire wheel travel. I considered both RMS error and the total motion ratio range to prevent a curve from getting a good ranking if it had a good average but big fluctuations. We needed the MR curve to be almost linear. The size of the bellcrank was also considered but only for geometries that had good MR behavior, and I used L1 + L2 as the measurement for overall size. Below are the top ten geometries found using my algorithm for the front and rear:

Front Top Candidates
Rank L1 (mm) L2 (mm) Alpha (deg) Beta (deg) Optimization Score Mean MR MR Range RMS Error
1 58 67 106 79 0.003601 0.831186 0.013203 0.003287
2 64 74 99 84 0.004203 0.828790 0.015633 0.005508
3 62.5 72.5 100 82.5 0.005943 0.831577 0.019528 0.006808
4 59 67 112 74 0.006561 0.829400 0.022235 0.005819
5 56 65 106 76 0.006842 0.831133 0.024435 0.009382
6 59 67 112 75 0.008332 0.831025 0.034014 0.008761
7 65 75 96 85 0.008792 0.826872 0.028245 0.009786
8 56 65 110 72 0.009938 0.834180 0.028210 0.010990
9 56 64 108 78 0.010039 0.823868 0.026771 0.008683
10 55 63 108 75 0.010155 0.822122 0.016177 0.009918
Rear Top Candidates
Rank L1 (mm) L2 (mm) Alpha (deg) Beta (deg) Optimization Score Mean MR MR Range RMS Error
1 60 65 110 80 0.009873 0.849931 0.040000 0.010082
2 53 58 111 73 0.010734 0.843877 0.035012 0.013765
3 64 71 95 88 0.011401 0.848872 0.036529 0.012302
4 62 67 108 83 0.013315 0.844416 0.051707 0.013864
5 58 64 106 77 0.014721 0.852212 0.047305 0.017935
6 65 72 101 88 0.015916 0.850612 0.047442 0.014226
7 63 70 92 88 0.016816 0.850945 0.054414 0.017780
8 63 71 98 89 0.018551 0.856718 0.051106 0.017078
9 47.5 52.5 112.5 77.5 0.018667 0.848064 0.088380 0.021745
10 57 60 114 76 0.019601 0.832202 0.045444 0.018282

When I plotted the motion ratio curve for the highest ranking geometries in the front and rear, you can see that they are both pretty linear. The rear one does deviate slightly near the wheel travel limits, but its overall error is low and the damper is not expected to reach full compression or extension, which makes these extreme positions less significant when evaluating performance. I would consider these curves to demonstrate very good behavior.

Front bellcrank motion ratio graph Rear bellcrank motion ratio graph

The optimization script measured kinematic performance, but I still needed to verify that the physical bellcrank would be able to go through the entire 57mm of wheel travel without hitting a rod end or the damper. I applied the top geometries to our kinematic model and set it at both limits of wheel travel, making sure there was clearance on each side. I’m including this step because while scripts can automate a lot of the design process, forgetting to check whether something can physically work will be a pain later on if you just start manufacturing based on the geometry given to you by the script.

Front bellcrank clearance check
Front bellcrank secondary clearance check
Rear bellcrank clearance check
Rear bellcrank secondary clearance check

Force Calculations

After finalizing the geometry, I calculated the forces needed to do a structural analysis. The next four images show you the dimensions I took from both the max compression case and the transformed case. The first two images show the front and rear assemblies at max compression, where I used the lever arm lengths and force angles at this position to calculate the pushrod force using a moment equilibrium around the bellcrank pivot.

Front bellcrank CAD measurements Rear bellcrank CAD measurements

The next two images show the bellcranks rotated back to ride height. Since the force calculations were done when the suspension was at max compression, I had to use a rotation matrix to transform the force vectors back into the coordinate systems that would be used by ANSYS.

Normalized front bellcrank CAD measurements Normalized rear bellcrank CAD measurements Bellcrank force calculation one Bellcrank force calculation two Bellcrank force calculation three Bellcrank force calculation four

ANSYS FEA and Topology Optimization

I first analyzed fully solid bellcranks to see how the stress distribution looks and identify the primary load paths between the pushrod, shock, central bearing and ARB connections. From this, I found that the central regions of the plate were receiving relatively little stress. After confirming this through topology optimization, I removed the excess material and conducted another structural analysis on the revised designs. For the front bellcrank, the ARB case had a maximum stress of 271.47 MPa and a safety factor (SF) of 1.70. The no-ARB case reached 231.94 MPa and had a SF of 1.99. For the rear, the no-ARB case reached 238.78 MPa with a SF of 1.93, while the ARB case reached 235.98 MPa with a SF of 1.96. All cases had a safety factor at or above 1.70, which showed that removing the material could reduce the plate’s mass while keeping its strength.

Front blank bellcrank FEA Rear blank bellcrank FEA Front blank bellcrank topology optimization Rear blank bellcrank topology optimization Front cut bellcrank FEA Rear cut bellcrank FEA Front cut bellcrank topology optimization Rear cut bellcrank topology optimization
Bellcrank Case Max von Mises Stress Safety Factor
Front No ARB 231.94 MPa 1.99
Front ARB 271.47 MPa 1.70
Rear No ARB 238.78 MPa 1.93
Rear ARB 235.98 MPa 1.96

Final Design

Bellcrank engineering drawings

Front bellcrank engineering drawing

Manufacturing

The final bellcrank was manufactured from 3.18mm thick 7075-T6 aluminum using a waterjet cutter.

Bellcranks installed on the car
Bellcranks installed on the car with the left bellcrank highlighted
Back to Top