L05: Lower Shell of a Game Controller

Lower shell of a game controller: shells, beams and couplings

We model the lower shell of a game controller and check what happens when a player squeezes the grips. Like the Steam Controller in Figure 1, the case is a thin plastic shell stiffened by bosses and ribs, so we mesh it with shells for the walls and beams for the ribs.

Inside the lower case of the Steam Controller, with its screw bosses and ribs. CAD from Valve's open Steam Controller release (CC BY-NC-SA 4.0).
Material \(E\) (MPa) \(\nu\) \(\sigma_y\) (MPa)
ABS 2200 0.38 ≈ 40
Table 1: Material of the controller. Units are mm, N and MPa.

🧩 Geometry and mesh

The STEP file (shell_controller_lower.STEP) holds only surfaces. The part is symmetric about \(x = 0\), so we model half of it.

Floor (red), walls (blue) and bosses (orange). (a) Surfaces from the STEP. (b) Shell thickness rendered.
Floor (red), walls (blue) and bosses (orange). (a) Surfaces from the STEP. (b) Shell thickness rendered.
Region Section Thickness (mm) Offset
Floor bottom_shell 2.1 Top surface
Outer walls outer_walls 1.9 Top surface
Bosses supports 1.25 Top surface
Table 2: Shell sections.

The surfaces are the inside faces of the part and all normals point into the controller. With the Top surface offset the thickness then grows outwards. Check it with Render shell thickness.

The ribs (1 × 3 mm) are wires on the floor meshed with B31 beams. Use a TRAPEZOID profile with its origin on the bottom edge, so the rib stands on the floor, and check the orientation with Render beam profiles.

The shells are meshed with S4R at a 1.5 mm seed. Floor, walls and bosses share nodes, so no ties are needed.

(a) S4R mesh, 1.5 mm seed. (b) Close-up of a boss.
(a) S4R mesh, 1.5 mm seed. (b) Close-up of a boss.

🏋️ Case A step by step

The centre line is held and the grip is pushed down by 12 N at the snap-fit rim.

Set-up of case A. Symmetry and held centre line at $x = 0$, and RP-1 coupled to the rim (yellow).
Set-up of case A. Symmetry and held centre line at \(x = 0\), and RP-1 coupled to the rim (yellow).
  1. Create a Static, General step.
  2. Apply XSYMM on all edges at \(x = 0\), \(U_3 = 0\) on the floor centre line and \(U_2 = 0\) at one node.
  3. Create a reference point at the rim centroid \((54.7, 11.4, 6)\) and a Distributing coupling to the rim edges.
  4. Apply \(CF_3 = -12\) N on the RP.
  5. Run and plot Mises as an envelope over the section points.
Case A, Mises envelope, deformation ×10. Peak 13.0 MPa at the waist of the back wall.
Case A, Mises envelope, deformation ×10. Peak 13.0 MPa at the waist of the back wall.

The peak is 13.0 MPa and the RP moves down 1.17 mm. The peak sits on a sharp kink, so compare cases at the same mesh rather than trusting the number.

⚠️Two common mistakes

RP off the rim centroid. With the RP 14.8 mm away from the centroid, the force also twists the grip and the peak rises to 17.6 MPa (Figure 6). Put the RP on the line of action of the load.

Nothing holds \(U_2\). The part can slide in \(y\) and Abaqus warns about zero pivots. Hold \(U_2\) at one node and always read the .msg file.

Same 12 N load. (a) RP off the centroid, 17.6 MPa. (b) RP at the centroid, 13.0 MPa.
Same 12 N load. (a) RP off the centroid, 17.6 MPa. (b) RP at the centroid, 13.0 MPa.

🎛️ Cases B–D

These are already set up in class_example_cases.cae.

Case Prescribed Symmetry Result Peak Mises
A 12 N down at the rim RP XSYMM RP −1.17 mm 13.0 MPa
B 1 mm down at the rim RP XSYMM 10.3 N 11.2 MPa
C Grip turned 1° about \(y\) XSYMM 0.13 N m 4.3 MPa
D Grip turned 1° about \(x\) XASYMM 0.08 N m 2.6 MPa
Table 3: Load cases of the half model.

Twisting (D) is antisymmetric, so the half model needs XASYMM and must be mirrored antisymmetrically to show the full part. The Visualization mirror is always symmetric, so mirror_odb.py writes the copy.

Case D mirrored antisymmetrically. (a) Full lower shell. (b) The two grips turn in opposite directions.
Case D mirrored antisymmetrically. (a) Full lower shell. (b) The two grips turn in opposite directions.

🚧 Limits