Velocity controll loop in closed loop

hello,
i working on Encoder, velocity controll loop in closed loop. it working absolutly fine between range 0-90 on 12V, aslo there is good torque. but when i operate it on 24v there in no torque after 20velocity . if u touch motor by hand its current increse to 10amp. so any suggestion of your will be my time savier. code is here
#include <SimpleFOC.h>
// BLDC motor & driver instance
BLDCMotor motor = BLDCMotor(2);
BLDCDriver3PWM driver = BLDCDriver3PWM(25, 26, 27, 32);
// encoder instance
Encoder encoder = Encoder(15, 4, 1024 );
// Interrupt routine intialisation
// channel A and B callbacks
void doA(){encoder.handleA();}
void doB(){encoder.handleB();}
// velocity set point variable
float target_velocity = 1.2;
// instantiate the commander
Commander command = Commander(Serial);
void doTarget(char* cmd) { command.scalar(&target_velocity, cmd); }
void setup() {
// initialize encoder sensor hardware
encoder.init();
encoder.enableInterrupts(doA, doB);
// link the motor to the sensor
motor.linkSensor(&encoder);
// driver config
// power supply voltage [V]
driver.voltage_power_supply = 20;
driver.init();
// link the motor and the driver
motor.linkDriver(&driver);
// aligning voltage [V]
motor.voltage_sensor_align = 3;

// set motion control loop to be used
motor.controller = MotionControlType::velocity;
// contoller configuration
// default parameters in defaults.h
// velocity PI controller parameters
motor.PID_velocity.P = 0.015f;
motor.PID_velocity.I = 0.5;
motor.PID_velocity.D = 0;
// default voltage_power_supply
motor.voltage_limit = 15;
// jerk control using voltage voltage ramp
// default value is 300 volts per sec ~ 0.3V per millisecond
motor.PID_velocity.output_ramp = 1000;
// velocity low pass filtering time constant
motor.LPF_velocity.Tf = 0.01f;
// use monitoring with serial
Serial.begin(115200);
// comment out if not needed
motor.useMonitoring(Serial);
// initialize motor
motor.init();
// align sensor and start FOC
motor.initFOC();
// add target command T
command.add(‘T’, doTarget, “target velocity”);
Serial.println(F(“Motor ready.”));
Serial.println(F(“Set the target velocity using serial terminal:”));
_delay(1000);
}
void loop()
{
// main FOC algorithm function
// the faster you run this function the better
// Arduino UNO loop ~1kHz
// Bluepill loop ~10kHz
motor.loopFOC();
// Motion control function
// velocity, position or voltage (defined in motor.controller)
// this function can be run at much lower frequency than loopFOC() function
// You can also use motor.move() and set the motor.target in the code
motor.move(target_velocity);
// function intended to be used with serial plotter to monitor motor variables
// significantly slowing the execution down!!!
// motor.monitor();
// user communication
command.run();
}
hardware is esp 32 and jyqc_v6.3e1 driver and 2pole bldc mptor

You have 2 poles (1 pole pair) or 2 pole pairs? The way you initialize the BLDCMotor is for 2 pole pairs…

2 pole pair. (4 pole)

Your encoder PPR is 1024? For encoder you set the PPR value, not the CPR.

Otherwise the code looks ok to me.

You also say it works at 12V, up to 90rad/s? And at 24V it only works to 20rad/s?
This sounds to me like the currents are maybe rising too high…
What kind of driver is it, does it have over-current protection?

You could try to run the motor in torque mode. Does it work well?
You could add the phase resistance to the constructor for BLDCMotor and run the motor with current control. If you also set a current limit this could help…

Yes you are right after 20rad/s curent rising too much high. Yes my PPR is 1024, work good with position control as well as encoder test code.
yes till 12V code go good, but speed is slightly not that good. My driver of this board is IR2184.
It doen’t work for me in Torque control mode.

Normally torque control mode is easier to get working than velocity mode…

If you set motor.voltage_limit to a low value, does torque control mode work then?

I think maybe you are not sufficiently limiting your motor current, and if you add a limit then torque control should work…

In velocity control, the faster you set the velocity, the more current is used, so this is why it only works for certain speed ranges…

I did motor.voltage_limting to just low value as i tried on 4, 6, 12 in torque controll mode but is still not working more the speed for 25rad/s.On 24v.
but for 12v both code working good for Tarque controll mode and Velocity control mode with range 0- 90rasd/s.
as well as code work pretty well with all code of hall sensor motor on 24v. ijust completed all test.