I'm trying to put a spring on my character body but It keeps rotating farther than I wanted.

How would I put a limit on the rotation?

--This is the Spring Module
-- Constants
 
local ITERATIONS    = 8
 
-- Module
 
local SPRING    = {}
 
-- Functions
 
function SPRING.create(self, mass, force, damping, speed)
    local spring    = {
        Target      = Vector3.new();
        Position    = Vector3.new();
        Velocity    = Vector3.new();
       
        Mass        = mass or 5;
        Force       = force or 50;
        Damping     = damping or 4;
        Speed       = speed  or 4;
    }
   
    function spring.shove(self, force)
        local x, y, z   = force.X, force.Y, force.Z
        if x ~= x or x == math.huge or x == -math.huge then
            x   = 0
        end
        if y ~= y or y == math.huge or y == -math.huge then
            y   = 0
        end
        if z ~= z or z == math.huge or z == -math.huge then
            z   = 0
        end
        self.Velocity   = self.Velocity + Vector3.new(x, y, z)
    end
   
    function spring.update(self, dt)
        local scaledDeltaTime = math.min(dt,1) * self.Speed / ITERATIONS
       
        for i = 1, ITERATIONS do
            local force         = self.Target - self.Position
            local acceleration  = (force * self.Force) / self.Mass
           
            acceleration        = acceleration - self.Velocity * self.Damping
           
            self.Velocity   = self.Velocity + acceleration * scaledDeltaTime
            self.Position   = self.Position + self.Velocity * scaledDeltaTime
        end
       
        return self.Position
    end
   
    return spring
end
 
-- Return
 
return SPRING
-- This is a localscript inside the character scripts

local Player = game.Players.LocalPlayer
local Character = Player.Character
local spring = require(game.ReplicatedStorage.spring)
local mySpring = spring.create()
local Mouse = Player:GetMouse()
local TurnLimit = 20
local random = Random.new()


game:GetService("RunService").RenderStepped:Connect(function(deltaTime)
	local mouseDelta = game:GetService("UserInputService"):GetMouseDelta()

	print(Character.UpperTorso.Waist.C0.ToAxisAngle(Character.UpperTorso.Waist.C0))

	mySpring:shove(Vector3.new(mouseDelta.x / 500,mouseDelta.y / 200, 0))

	local movement = mySpring:update(deltaTime)

	Character.UpperTorso.Waist.C0 = Character.UpperTorso.Waist.C0 * CFrame.Angles(0,-movement.x,0)
end)