Motor current driver for haptics

A usual way to create a simple force-feedback knob is to control the current in an ironless DC motor, since the motor torque is proportional to the motor current. For the device to be stable in simulating a virtual wall, the servo loop [measure position, compute output current, set motor current] must have low latency, ideally less than 1 ms. So, the current driver should have a bandwidth of 2 kHz at least.

The old-school, accurate way is to use linear current amplifier. A commercial one is the LCAM from Quanser. One drawback is their inefficiency(heating), so the bulk due to their heat sink. Another one is the high price of commercial products such as that of Quanser (around $ 1000).

Like in audio field with class-D amplifiers, the modern school is to apply a PWM signal to a H-bridge. Among several manufacturers such as Maxon Motor, Accelus, Faulhaber, or Ingenia, the most inexpensive current-regulated motor driver I have found is the ESCON 50/5 module from Maxon, sold at $ 191 from Switzerland (price before Customs duties…).

My question is, has anyone tried and managed to make a such a 2 kHz-bandwidth current driver for an ironless DC motor by combining an integrated H-bridge such as the VNH5019 Motor Driver Carrier with a good current sensor such as the ACS714 Current Sensor Carrier?

I am not 100% on with what you are suggested. I think I have implemented however what you are describing for a not-iron-less DC brushed motor.

I used the MC33926 motor driver with current output, and characterized a few values of my motor, so that I could determine the voltage applied, current drawn, and determine the reasonably-accurate RPM of the output. A little bit of calibration can allow you to even account for some of the losses (i.e, discount the current that you expect to draw at no-load because of losses)

I dont really know about ironless motors…I know they have less inductance, and that reminds me of when I switched my above-described setup to using a very low inductance Maxxon DC motor. For my system to remain accurate enough I had to add choke inductors sadly to smooth things out. But even the EV maxxon driver (which I didnt use) had choke inductors.

I am not certain if my answer is on the right track, but I thought it might be. I should read up on coreless brushed motors, they sound interesting…I wonder how they develop enough electromagnetic force without a core. Probs I don’t quite get them (the first diagram I saw on a quick search looked just like a DC brushed motor…just without the iron stator.)

Thanks for your feedback.

Ironless DC motors are used in haptics for their absence of cogging torque (you can find clear information on Maxon info website, in particular about ironless motors). I think that ironless winding is not important in my question, it just changes the setting of the PI corrector of the current controller and may require an additional choke.

Motor-current controllers usually slave the motor current with a PI corrector, whose P and I parameters depends on the motor’s resistance and inductance. It is that on the Quanser LCAM: an analog PI corrector made of op-amps, resistors, and a capacitor, slaves the motor current, which is measured with a small resistor next to the power op-amp. However, it seems more complex to do that on a switching amplifier because of dead times required by a H-bridge. During dead time, the motor current is not read. At least it is that with the L6207N from STMicroelectronics which a full bridge driver with PWM current controller; that driver seemed to be ideal for my application (evaluation board at $37), but I couldn’t achieve low values of current due to the minimum ON time.

So, it seems what you are describing is what I was doing.

I used the MC–something driver on Pololu’s site, used the current feedback pin with software smoothing and a small cap, and 20khz-30kHz (i forget) PWM integrated to a basic PID algorithm to control the current to a max limit, or to control the speed (see below.)

I had two functionalities: 1 was to control speed. Speed can be controlled roughly by knowing the parameters of your motor, and the combination of the current flowing through the motor + the voltage applied to the motor.
function 2 enacted if I reached over my current threshold, in which case I changed my software to control for a current limit (since my load was unknown, sometimes it would be higher than my limit.)

I found a similar problem to what you mention with dead-time, at low speeds. The solution in part for me was to add inductance to my system via large choke inductors. I ended up using 2X what a maxxon eval driver with twice the PWM speed was using (because I was running at half the PWM frequency.) This problem manifested itself when I had switched from a pololu motor to the much lower inductance maxxon motor.

So what are you trying to figure out at this point? Am I completely off track? If so I will stop derailing your thread :). My system was very satisfactorily effective, but it was not a “precision” solution since a few signals were averaged and the impulse load on my motors was not too fast or erratic.


Hi, Timon.

I do not know of any other examples of someone using our driver for that kind of control that I could point you to, but I suspect that you would be able to achieve that kind of control with the VNH5019 and an external current sensor. The VNH5019 has a maximum PWM frequency of 20kHz, so if your control loop ran at 2kHz, you would be able to update the duty cycle value once in every ten PWM cycles. Also, unlike the L6207N driver, the VNH5019 does not have a minimum ON time, so I don’t expect you would have trouble achieving low currents.