Before looking into normalization, have you tried removing playerSpeed from the addMovementInput call? I think that may cause weird results since your velocity will be 0 when the character is idling.
Here’s a link to another forum post on normalizing.
Normalize vector
Clamping might be worth looking into as well.
Clamp