Hey guys, Candas1 made some progress on sensorless commutation, https://community.simplefoc.com/t/a-thread-for-finally-figuring-out-sensorless-drive-strategies/3444/19
The central challenge is to take the voltage waveform, and the current waveform, and determine the relative position of the rotor vs the magnetic field produced by the coils in the stator.
This magnetic field can basically be assumed to be determined by the currents in the coils (I guess the magnetic properties of the coils do not insert significant distortions).
So we can use the clarke transform on the current of any 2 phases, at any given instant, to determine the magnetic field produced by the coils, thatās in the bag.
The problem is the rotor. Obviously most systems use a sensor for that.
I read most of the document linked to there, some of itās not relevant to us.
Got a b-g431-b-esc1 board, got my fan.
I can go ahead and try to see if I can get useful data out of that code that Candas1 posted, but I hesitate to get into all that because I have never really found a solid explanation for exactly whatās going on. One question is what units the flux linkage is in. Also the formulas on line 101 etc SimpleFOC_b-g431b-esc1/src/main.cpp at 9746903f9b0f821a232fcdbcf89330e251f2f376 Ā· Candas1/SimpleFOC_b-g431b-esc1 Ā· GitHub I donāt really understand, and in my experience thatās always cruising for a bruising, and I canāt find any explanations anywhere.
Also am concerned about the mutual inductance between the coils messing things up, this is discussed in the PDF linked to but not really addressed.
Iām thinking if everything is just sine waves (Iāve got a surface magnet type motor and back emf appears to be a nice sine wave on a scope), and the theory is that the current waveform changes phase with respect to the driving voltage waveform (both of which we know), do we really need these calculations to determine what the phase angle between them is?
Why not just track the zero crossings of the two waveforms?
Would this give a measure that stayed constant for a given rotor vs coil-produced magnetic field angle (motor timing), as voltage and RPM changed, do you think? I think it would?
That code is written in platform IO and I donāt know if Iāll be able to get it working under arduino⦠in other words, a lot of questions. This zero crossing thing seems like it needs to know basically nothing about the motor, which is a problem I always run into. My measurements of the motor characteristics are always off. Also there is a thing called salience which most motors exhibit, where the inductance of the coils changes with the rotor position, that would mess this up.
I think the zero crossing approach would not have this problem?
I know it sounds kind of dumb, but simplify, simplify, right. I mean that paper is great but it always gets incredibly laborious when I try to bake something like that. There is still a lot of stuff thatās pretty uncertain and it would take quite a while to clear it all up and get the actual code hammered out. And then itās useful basically only for me and almost no one else, these SM type motors are not that common, most motors are plate type, which exhibit significant saliency.