BLDC基本公式

公式一:

n=\tfrac{60f}{P}       

n:电机转速(单位:转/分)

f:电机运行频率

P:极对数

举例:电机的额定转速为450RPM(450转/分钟),磁极对数为23对,则电机的运行频率为:f=\tfrac{450*23}{60}=172.5Hz

公式二:

F1*\Delta A=F2*AC

F1:FOC执行频率(PWM周期频率,单位:Hz)

\Delta A:一个PWM周期内霍尔角度变化量

F2:电机运行频率(单位:Hz)

AC:一个电角度周期的角度变化范围

举例:F1为16000Hz,F2可以由公式一计算得出n=\tfrac{60f}{P},AC固定为360°,65536。所以可以得到\Delta A=\frac{65536*n*P}{60*F1}

公式三

\omega _{dpp} = \tfrac{CKTIM*65536}{3*SAMPLINGFREQ*CapturedValue*PrescalerValue}

\omega _{dpp}:速度在一个PWM周期内随电角度的变化

CKTIM:用于捕获霍尔传感器的TIM定时器的输入时钟

SAMPLINGFREQ:FOC算法的采样频率

CapturedValue:霍尔传感器的捕获值

PrescalerValue:用于霍尔传感器捕获的时钟的分频系数

计算过程解析:

CapturedValue*PrescalerValue:捕获的CKTIM时钟数

CapturedValue*PrescalerValue*\tfrac{1}{CKTIM}:输入捕获的霍尔传感器的脉冲周期

\tfrac{CKTIM}{CapturedValue*PrescalerValue}:输入捕获的霍尔传感器的脉冲频率

\tfrac{CKTIM}{3*CapturedValue*PrescalerValue}:电气频率(电机电周期的倒数),为什么是3,而不是6?因为STM32F1系列单片机输入捕获没有双边沿触发,程序中使用下降沿捕获,虽然霍尔有6种状态,但是当前只有下降沿触发,这样一来就只有3种状态了。

\tfrac{CKTIM}{3*SAMPLINGFREQ*CapturedValue*PrescalerValue}:换算到每个采样频率对应多少个2Π角度

\tfrac{CKTIM*65536}{3*SAMPLINGFREQ*CapturedValue*PrescalerValue}:将2Π电角度对应为65536,此时得到的即每采样周期对应的电角度(2Π对应为65536)

项目程序中,霍尔转过360°以后,

hRotorAddAngle = (s16)((u16)(PSEUDO_FREQ_CONV/hSensorCapture));

#define PSEUDO_FREQ_CONV    ((u32)PSEUDO_FREQ_UDIV*0x10000uL)

#define PSEUDO_FREQ_UDIV    (u32)(ROTOR_SPEED_FACTOR/SAMPLING_FREQ)

#define    ROTOR_SPEED_FACTOR  (u32)(CKTIM/8)

#define CKTIM                ((u32)72000000uL)

#define SAMPLING_FREQ       ((u16)PWM_FREQ/((REP_RATE+1)/2))

#define PWM_FREQ         ((u16)16000)

#define REP_RATE (1)

得出:hRotorAddAngle = \tfrac{CKTIM*65536}{8*SAMPLINGFREQ*hSensorCapture}

SensorPeriod:在程序中为霍尔旋转360°时定时器的捕获值。

你可能感兴趣的:(BLDC,stm32)