Index
- BMSBattery S series
- BMSBattery S06S
- S06ST (torque sensor version)
- S06S-BL (Bluetooth version)
- PWM signals
- Phase B current signal
- Throttle
- BMSBattery S06SC
- BMSBattery S12S
- BMSBattery bottle battery controller
- LCD control panel
- Kunteng mobile app
- Bluetooh
- How to open the controller and solder the programming header
- Hardware mods
- Other controllers
- BMSBattery S06P
- Kunteng 18 mosfets motor controller
- Lishui motor controllers
- JinHui motor controllers
- GreenEBikeKit
- Torque speed
- Motor control scheme of S06S controller
- BLDC 6 steps
- PWM schemes
- So, Which PWM Technique is Best? (Part 1)
- So, Which PWM Technique is Best? (Part 2)
- So, Which PWM Technique is Best? (Part 3)
- So, Which PWM Technique is Best? (Part 4)
- So, Which PWM Technique is Best? (Part 5)
- So, Which PWM Technique is Best? (Part 6)
- So, Which PWM Technique is Best? (Part 7)
- PWM control and Dead Time Insertion
- Low inductance motors
- Throttle Control Modes
- Phase angle FOC
- PWM frequency VS motor eRPM
- Sinusoidal Control of BLDCM with Hall Sensors Based
- Self-Learn Hall Sensor Calibration Mode
- STM8S105 Alternatives
- PID algorithm - negative output values
- Regeneration
- FOC
Datasheets and application notes
- STM8S105C6T6
- Endless-sphere.com forum messages
- 2017.04.25 - Initial forum message
- 2017.05.08 - First flash and debug on a dev board
- 2017.05.18 - First code flashing and running
- 2017.05.20 - more new information
- 2017.08.23 - SxxP versus SxxS versus LSW-675
- 2017.09.01 - Trying to figure out an algorithm to automatically adjust ui8_position_correction_value
- 2017.09.02 - How to do FOC on the BMSBattery S06S/Kunteng STM8 motor controllers
- 2017.09.03 - more ideas about zero crossing for FOC
- 2017.09.05 - measuring IQ current and manually adjusting position_correction_value
- 2017.09.15 - our OpenSource firmware efficiency compared to Lishui 12 FET FOC
- 2017.09.19 - measuring motor current
- 2017.10.23 - FOC and no FOC comparison
- 2018.01.10 - How to measure FOC_READ_ID_CURRENT_ANGLE_ADJUST
- 2018.02.20 - Reading motor phase current from the DC link current (shunt)
2017.09.05 - measuring IQ current and manually adjusting position_correction_value
I did the code to read the IQ current, is simple and seems to be working. I tested with my slow eRPM motor, with low, medium and max speeds (with power supply at 24V) and the motor was most efficient when IQ value was near zero - the motor was quieter and the power supply did show the lowest current value. I also verified that measured IQ value was near the rate increased value I saw on my lad power supply, when I moved the position_correction_value to wrong values.
At lowest speed (like just after startup the motor when angle interpolation is not running yet) the measurement of IQ current also seems to work ok as also the effect of changing position_correction_value.
I also verified that at higher speeds, a small change of position_correction_value have a high impact on IQ current/motor efficiency.
Code used to measure the ADC IQ current value and do a low pass filter:
switch (hall_sensors)
{
case 3:
(...)
if (ui8_adc_read_throttle_busy == 0)
{
ui16_ADC_iq_current = ADC1_GetConversionValue ();
ui16_ADC_iq_current_accumulated -= ui16_ADC_iq_current_accumulated >> 3;
ui16_ADC_iq_current_accumulated += ui16_ADC_iq_current;
ui16_ADC_iq_current_filtered = ui16_ADC_iq_current_accumulated >> 3;
}
And then the filtered value was printing with this code:
// Phase current: max of +-15.5 amps
// 512 --> 15.5 amps
// 1 ADC increment --> 0.030A
// RMS value --> max value * 0.707
#define ADC_PHASE_B_CURRENT_FACTOR_MA 21 // 0,030273437 * 1000 * 0.707
ui16_temp = (ui16_ADC_iq_current_filtered - 511) * ADC_PHASE_B_CURRENT_FACTOR_MA;
printf("%d, %d, %d\n", ui16_motor_speed_erps, ui16_temp, ui8_position_correction_value);
On the next images, you can see how the motor speed eRPM changes (speed can increase a bit, equivalent of field-weakening?) and IQ current change while I was manually incrementing/decrementing the position_correction_value. The motor was most efficient when IQ value was near zero, as expected.
Conclusion
• the low resolution FOC algorithm need to look at IQ current and increment/decrement position_correction_value until IQ current is near zero.
eRPM: 29
eRPM: 48
eRPM: 60 (max speed)