Speed control of bldc motor at entered speed using Arduino

I am doing a project on speed control of bldc motor using Arduino. In my project I have give the wanted speed from keypad and the motor has to rotate from that speed. Speed is controlled by duty cycle of pwm pulses. But I cannot get any mathematical relation between speed and duty cycle. So I am unable to code up. Could you please help me

Without any feedback from the motor (e.g. encoder) you can just do approximations.

If you know the Kv (motor velocity constant) of the motor you can approximate RPM based on applied voltage (i.e. PWM.)

Are you controlling the BLDC directly from the Arduino using your own 3-phase electronic commutation with PWM? Or are you using an ESC and servo-type control signals? They're very different.

Steve

It sounds to me like you need feedback and PID.

The actual RPM of the motor will change with various factors. Primarily load and power source voltage, but also temp. Without feedback you have no assurance that any particular speed command will result in a specific motor RPM.

Put a sensor on the motor. Monitor the motor RPM. Use that as input into a PID chunk of code to actively maintain the desired motor RPM.