Ok, this is a question about motors themselves, rather than the simpleFOC library.
I’ve been doing some testing of FOC concepts with drone-style motors in the approximately 1000kV class.
I’ve noticed that a hall latch sensor (AH3772-SA-7 or TLE49 or similar) placed beside the spinning outrunner rotor will detect the magnets sweeping past for one of the motors I’ve worked with, but not for another.
The motor I can sense the magnetic fields for is like this:
https://www.amazon.co.uk/Brushless-Outrunner-Multi-Copter-Quadcopter-Accessories/dp/B08QZ5BXLW/
with a black corrugated casing (non-conductive when putting ohm meter probes at two points on it).
The one I can’t detect fields for is like:
https://www.amazon.co.uk/Yessetry-Brushless-Outrunner-Quadcopter-Multicopter/dp/B0BTCQXSXM/
with a shiny, and conductive by multimeter probing, metal casing.
I’m trying to develop a principle for crude position sensing which can work for a wide variety of similar, normally sensorless, motors, so I’m concerned that for some it doesn’t work.
Is this a backiron effect causing the lack of a detectable magnetic field on the outside of the silvery motor?
But in that case, I always thought having backiron was a sign of a “better” motor, whereas I’ve found the cheaper motor seems to have it and the fancier one lacks it?
For future motors I may buy, of other kinds, should I then be assuming that the magnetic fields from the rotor’s magnets will or won’t be detectable from outside?
Is there a reliable way to tell from images of the motor or specifications provided (unfortunately most sellers of these kind of drone-style BLDCs don’t really give proper specs in the descriptions anyway, and what they do give is often nonsense, confusing milliohms with megohms…) whether a motor will be of the kind which has detectable magnetic fields external to the rotor?
Thanks
P.S. just to double check my understanding, FOC is in principle all about changing the overall magnitude of the current to keep the rotor tracking 90 electrical degress behind the stator’s field? I’ve seen the really basc descriptions, and looked at details of code to do FOC, but haven’t had a “middle level” picture. Does the most basic logic possible to underpin FOC look like:
if(rotor is behind where we want it){
increase multiplier (although not in excess of some practically set limit);
}else if(rotor is ahead of where we want it){
decrease multiplier;
}else if(rotor is at 90 lag){
leave multiplier unchanged;
}
Phase1pwm = multiplier*1.14*(sin((float)angle*PI/180.0)*127.5+25.5*sin((float)3*angle*PI/180.0))+127.5;
Phase2pwm = multiplier*1.14*(sin((float)(angle+120)*PI/180.0)*127.5+25.5*sin((float)3*(angle+120)*PI/180.0))+127.5;
Phase3pwm = multiplier*1.14*(sin((float)(angle+240)*PI/180.0)*127.5+25.5*sin((float)3*(angle+240)*PI/180.0))+127.5;
That is to say, we provide sinusoidal driving (with a triple frequency SVM component to maximise the voltage difference) to control the position and speed of the motor, and we vary the current so that we are having the minimum current necessary to keep the motor going at this speed (or held at this position) against whatever opposing torques it is encountering. It is the magnitude of the phase currents (the multiplier) we vary to do this, while keeping the angle (and rate of change of angle) controlled solely by the position-time curve we want the motor to actually follow?
Thanks on this clarification also