BLDC motor isn't reading back the correct velocity
Posted: Wed Sep 30, 2020 8:18 am
Hello!
I'm working on a project with a number of phidgets that requires some PID control on a BLDC motor.
Firstly, on the motor controller page on the phidgets website, it states that there is PID control built in to the controller for position control, but doesn't mention if this is also available for velocity control in the hardware? It doesn't seem like this is working as the motor isn't matching the velocity that I set it to or attempt to speed up when it is physically restricted. (I'm measuring with a laser tachometer)
As the motor isn't running at the intended speed, I'm adding PID control through LabVIEW itself. To do this, I need to be able to read in the velocity of the motor which I'm doing with the BLDCMotorGetVelocity VI. However, when I read the value from this VI it's not in line with the tachometer. Additionally, if I restrict the movement of the motor by increasing the load on the motor I can see the motor speed lower significantly both by eye and with the tachometer but the value I read back from BLDCMotorGetVelocity does not change at all. Why is this value not changing when the motor speed changes?
To confirm that my code is not at fault, I have added BLDCMotorGetVelocity to the BLDC Motor Example VI within the while loop and have the same issue when I restrict the motor speed; the read back value does not change. I also tried the BLDCMotor VelocityChangeEvent Example VI which uses events to try and measure the motor speed but this also shows exactly the same problem.
Therefore, I have two problems:
1. When I set the motor velocity and restrict the motors movement it does not attempt to increase its power to get back to the correct speed, so the built-in PID control of the phidgets is not working.
2. When I restrict the movement of the motor I can see it become slower, but both methods of reading the motors velocity do not reflect the lower velocity.
Does anyone have some insight into what I'm missing here?
Thanks ever so much for your time,
Jack
I'm working on a project with a number of phidgets that requires some PID control on a BLDC motor.
Firstly, on the motor controller page on the phidgets website, it states that there is PID control built in to the controller for position control, but doesn't mention if this is also available for velocity control in the hardware? It doesn't seem like this is working as the motor isn't matching the velocity that I set it to or attempt to speed up when it is physically restricted. (I'm measuring with a laser tachometer)
As the motor isn't running at the intended speed, I'm adding PID control through LabVIEW itself. To do this, I need to be able to read in the velocity of the motor which I'm doing with the BLDCMotorGetVelocity VI. However, when I read the value from this VI it's not in line with the tachometer. Additionally, if I restrict the movement of the motor by increasing the load on the motor I can see the motor speed lower significantly both by eye and with the tachometer but the value I read back from BLDCMotorGetVelocity does not change at all. Why is this value not changing when the motor speed changes?
To confirm that my code is not at fault, I have added BLDCMotorGetVelocity to the BLDC Motor Example VI within the while loop and have the same issue when I restrict the motor speed; the read back value does not change. I also tried the BLDCMotor VelocityChangeEvent Example VI which uses events to try and measure the motor speed but this also shows exactly the same problem.
Therefore, I have two problems:
1. When I set the motor velocity and restrict the motors movement it does not attempt to increase its power to get back to the correct speed, so the built-in PID control of the phidgets is not working.
2. When I restrict the movement of the motor I can see it become slower, but both methods of reading the motors velocity do not reflect the lower velocity.
Does anyone have some insight into what I'm missing here?
Thanks ever so much for your time,
Jack