Sensorless Motor parameter identification


Lately I’ve been playing a bit with TI’s InstaSpin’s FAST motor parameter identification and tuning. I must admit I’m amazed as how good it is. You can throw it any motor and it will estimate phase resistance, inductance, flux while tuning current and speed PID’s parameters. all that in less than a minute. The phase resistance estimate where whithin 5% of ground truth, inductance whithin 10%.

Without an encoder, without hall sensors

This morning, I’ve been searching litterature to figure out how they could acheive this.
The closest I’ve found yet is this

If anyone has knowledge/links on the topic, please share.

If fact I’d be interested in sensored parameter identification too if you have it

TI’s encoderless (I will not use the word sensorless) algorithm is proprietary and there are no implementation references. It is implemented directly in the silicon ROM and relies on a variation of BEMF sensing. Also the FOC algorithm they implement is not a PID but ADRC (iirc).

Reverse engineering the InstaSpin algorithm, implementing ADRC FOC and designing an open PCB implementation to run this algorithm would be a fantastic project.

Edit: This is probably a good starting point

Edit2: Another good one, however this one requires angular resolver, which needs to be estimated by BEMF for encoderless cases

Edit3: And another one but no PDF, needs subscription

Thanks a lot,
Just skimmed through the papers. So ADRC is an alternative to PID, that is an interesting topic. Although, right now, I’m more interested with the state estimation and system identification part of instaspin’s FAST algo. basically, you feed in Va, Vb, Vc, Ia, Ib, Ic (in time) and you can estimate all on this figure:

I think the papers you cited (the 3rd is on scihub, btw) covera part of it. I’m sure there are paper that more directly target what I’m looking for.

Still, thanks a lot!

Lol… yeah. Not going down that rabbit hole.

Right, you need reasonably fast current and voltage telemetry, something like a standard current and voltage sensor, and the black-box transformation on that picture. Then, I am sure you can commutate using PID FOC. The secret sauce is in the transformation function that could be derived from the papers. Once you get the angle, torque and angular speed (I am not sure why you need the flux btw I feel like they put it there only to spell F.A.S.T.) you can commutate the next cycle using any algorithm you want.

This will require a specialized PCB however.

This will require a specialized PCB however.

I’m into DRV8305 and DRV8316 right now. you only need shunt resistance on the 05, so, no special pcb I think?
I guess you want to carefully route the ADC traces…

What about the voltage ? You need both I and V to get the EMF. Perhaps you could add external voltage dividers to UVW and get the voltage.

Just looked at what TI did on their evm board. They did add an ESD chip to protect the ADC (?), but yah, there is a voltage divider here


Very interesging. The TI’s piccolo MCU runs at 60 mhz so current and voltage sense can be processed by any average st32 mcu running the adrc algo. But you need another 3 opamps for voltage, and use the driver bidirectional amps for current sense. Or find a clever way to scale and normaize the voltage down to 3.3v? My PCB design knowledge is rather limited.

I am answering my own question but looking at the TI EVM schematics for DRV8316EVM the voltage divider already does that, and is scaling the [0,45] to [0,3.3] volts. So you can directly feed the VSEN A,B,C to the MCU analog inputs. No opamps needed. I guess on that EVM you already have everything to develop an ADRC algorithm.

Funny thing, I have TI’s BOOSTXL-DRV8323RS evaluation board in my drawer which I wanted to use to develop something similar way back. It has individual DC bus and phase voltage sense as well as individual low-side current shunt amplifiers. Everything you need for the encoderless ADRC algorithm. I’ll be damned. Is this a sign? May be the time has come.

Don’t let it rot :slight_smile:

One thing though, there is some effort needed to time your sampling right. Right now I’m using a SAMD21/51 with a rather complex EVSYS-DMA scheme, but maybe it’s easier on other MCUs.

Never done this. One of my weakest points is my embedded coding skills as applied to specific MCU hardware.

Well, let’s see what I have in stock:


For the last two, I’d have to start pretty much from scratch but it’s on my (mid-term) todo list. You can order an arduino-compatible samd21 breakout for as little as 7$ ship incl on aliexpress.

If I decide to do anything it would be any STM32 MCU. One exception is MIMXRT1062 (Teensy 4.x). Need to find the time though.