2. 电角度开环旋转
任务目标
本案例通过向FOC控制器输入连续递增的电角度(开环控制),驱动电机匀速旋转,并观察三相电流波形随电角度变化的规律。核心目的是验证电角度与电流矢量之间的对应关系,为后续闭环控制建立直观认知。
实现原理
在FOC中,电角度θ决定电流矢量的方向。开环运行时,我们直接给定θ = ω·t(ω为电角速度),经逆Park变换得到αβ轴电压,再经SVPWM输出到逆变器。由于电机反电动势与电流矢量方向存在相位差,实际电流波形会呈现与给定电角度相关的正弦变化。本案例使用STM32F407 + 定时器生成PWM,通过ADC采样两相电流,在串口或调试器观察波形。
关键代码实现
// 开环电角度旋转 - 核心代码 (STM32F407, 主频168MHz)
#include "main.h"
#include "foc_math.h"
// 全局变量
float electrical_angle = 0.0f; // 当前电角度 (rad)
float electrical_speed = 2.0f * PI * 10.0f; // 电角速度: 10圈/秒
float ia, ib, ic; // 三相电流采样值 (A)
float valpha, vbeta; // αβ轴电压
float vd = 0.5f, vq = 0.3f; // dq轴给定电压 (开环固定值)
// 定时器中断: 10kHz 控制频率
void TIM1_UP_IRQHandler(void) {
if (TIM1->SR & TIM_SR_UIF) {
TIM1->SR = ~TIM_SR_UIF;
// 1. 更新电角度 (匀速递增)
electrical_angle += electrical_speed * 0.0001f; // 100μs周期
if (electrical_angle > 2.0f * PI)
electrical_angle -= 2.0f * PI;
// 2. 逆Park变换: dq -> αβ
float sin_a = sinf(electrical_angle);
float cos_a = cosf(electrical_angle);
valpha = vd * cos_a - vq * sin_a;
vbeta = vd * sin_a + vq * cos_a;
// 3. SVPWM调制 (简化: 直接输出占空比)
// 实际需调用SVPWM函数生成三路PWM
svpwm_set_voltage(valpha, vbeta);
// 4. 采样电流 (需在PWM中心对齐处触发ADC)
ia = adc_get_current(CHANNEL_A);
ib = adc_get_current(CHANNEL_B);
ic = -(ia + ib); // 三相平衡假设
// 5. 通过DAC或串口输出波形 (调试用)
debug_output(ia, ib, ic, electrical_angle);
}
}
// 主函数初始化
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM1_Init(); // PWM输出 + 定时中断
MX_ADC1_Init(); // 电流采样
MX_DAC_Init(); // 波形观察
// 启动PWM和ADC
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
HAL_TIM_Base_Start_IT(&htim1);
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, 2);
while (1) {
// 主循环可调整速度或观察状态
}
}
运行与验证
硬件连接:电机UVW接逆变器输出,直流母线电压24V,电流传感器(如ACS712)串联在U、V相,ADC采样引脚接传感器输出。
编译烧录:使用STM32CubeIDE编译工程,通过ST-Link烧录到开发板。
验证步骤:
- 将
vd设为0.5V,vq设为0.3V,电角速度设为10圈/秒(对应机械转速取决于极对数)。 - 用示波器或DAC输出观察
ia、ib波形,应呈现频率为10Hz的正弦波,相位差120°。 - 用逻辑分析仪或串口打印
electrical_angle,确认其线性递增(0→2π循环)。 - 同时观察
valpha、vbeta波形,应为正交正弦波(相位差90°)。
通过条件:电流波形频率与给定电角速度一致(误差<5%),三相电流幅值基本相等(偏差<10%),且波形无明显畸变。若电机带负载,电流幅值会随负载增大,但波形形状不变。
常见问题
- 电机不转:检查PWM频率是否在16kHz以上(避免 audible noise),确认SVPWM调制比不超过1.0(即母线电压利用率限制)。
- 电流波形畸变:可能是死区时间设置不当或电流采样时刻不在PWM中心,需调整ADC触发点为定时器中心对齐模式。
- 电流幅值不平衡:检查三相绕组阻抗是否对称,或电流传感器零点偏移是否校准。