Cascaded current control
You should split the loop in two. Lock the rotor and then tune the inner PI controller (current controller). You should get a neat response. Then connect both controllers and then tune the speed controller.

The inner is a slave controller, it takes the setpoint value from outer controller. Usually the inner has to be faster, usually the current loop is executed with higher frequency than velocity loop, but it does not matter. 

This is a speed controller:


You can notice the lowpass filter on the begining. It's purpose is to delay the action in order to wait that current loop corrects the error before the speed loop takes an action. Makes sense that it takes time for the controller to correct the error, so you have to wait for a while in the outer loop. Notice also the units: 


speed: radians
dynamic torque (M_dinam): Nm - ommit it for now
friction torque (M_frikcije): Nm - forget about it
dead weight (M_teze) - forget it
speed controller: Kp - Nms/rad
the output is torque setpoint Nm 


Let's go further to the pre-current loop:



It's a set of limitators, power, torque, current. But then a very important thing, a current constant. The torque setpoint becomes a current setpoint by multiplying ki. The other boxes are notch filters and low pass filter to elimenate the system self-resonance, but skip this. 

Finnaly, the current loop:



Note the units of Kp: V/A. It means that output is voltage setpoint, that can be translated to PWM duty cycle.

What you should change in your model:

Add a low pass filter on speed loop. You have seen that you can't switch on/off the current loop unless you multiply the output of the speed loop with some constant. Which turns that your approach to simply turn off/on changes also the total loop gain and you should have two parameter sets.