I think you misunderstand what "controlling by voltage or current" means.
The motor, as a matter of fact, is always controlled by voltage, a bit like a car is controlled by fuel injection. In the case of a BLDC, we usually talk of a modulated voltage generated by a voltage source (let's say 24V).
And although it is true that voltage is associated to speed, voltage induces current, and current relates to torque. What you usually need to control at your lowest level is current (or almost directly torque).
Controlling current "directly" may mean to switch the voltage measuring current and comparing it to a setpoint. Have a look at keywords such as DTC (direct torque control). This method is harder to master, and more complex to understand and implement, but it usually results in better performance.
A simpler, more intuitive way of controlling the motor is by making use of a standard PI controller, employing the Direct-quadrature transformations to transform 3-phases (I assume) currents into quasi-linear currents Iq and Id, where controlling Iq has a direct influence on torque, while Id should be kept at 0 as it's associated to energy losses.
Back-emf should be compensated for a good torque control.
Frequency goes up with velocity... Careful, because with it, also disturbances get more nasty.
Friend I have seen your schematic , I found that there is no separate switching paths for your MOSFET..since your gate resistor helps in regulating load current but it also comes in series to drain to gate capacitance which leads to slow turn off of MOSFET. Try to keep a diode across resistor of gate which provides quick turn off,leads to less heating of MOSFET. I hope it may work.
Best Answer
TLDR: Both control schemes will work to drive a motor.
The First image is a very simple way to drive a motor and allows you to not have to worry about "shoot through" on your half bridge. "shoot through" is when both the high side and the low side of a half bridge are on shorting your supply to GND. this will usually blow up the FETs or the supply. The problem with this simplicity is that when the high side is being PWMed the motor will want to pull current when the high side FET is off because of the motor acting as an inductor. The motor will pull this current through the diode on the low side FET. this will cause energy to be lost in the low side FET diode. This causes inefficiency and heats up the low side FET.
The second image is how most motors are driven because it is more efficient. the image shows that you are not just PWMing the high side FET but applying the opposite of the PWM signal to the low side FET. This means that the when the high side FET is off the low side FET is on meaning that the reverse current does not have to go through the diode and waste energy. One of the problems with this control scheme is that you must add a delay between the high side FET being one and the low side FET being on to prevent "shoot through".this delay is called "dead time". It is usually a very small amount of time 100's of ns though. most motor driver IC's will introduce this dead time for you.