基于DSP的永磁同步电机(PMSM)伺服控制系统程序设计

一、系统架构

1. 控制框图

PMSM伺服系统
├── 电流采样 → 电流环(PI) → 逆变器驱动
├── 位置/速度采样 → 速度环(PI) → 电流环给定
└── 位置模式切换 → 位置环(PI)

2. 硬件模块划分

模块 功能描述 关键芯片/器件
主控单元 运行控制算法 TMS320F2808(100MHz)
功率驱动 逆变电路控制 IPM模块(PS212552E)
电流检测 霍尔传感器信号处理 LV28-NP霍尔传感器
位置检测 增量式编码器接口 光电编码器(2500PPR)
保护电路 过压/欠压/过流保护 专用保护IC(如LM5060)

二、软件架构设计

1. 程序流程图

主程序
├── 系统初始化(GPIO、ADC、PWM)
├── 中断服务程序
│   ├── 定时器中断(125μs):电流环控制
│   ├── PWM周期中断(8kHz):PWM生成
│   └── 编码器中断:位置/速度计算
├── 通信模块(SCI/UART)
└── 故障处理模块

2. 核心代码模块

2.1 矢量控制算法
// Park变换(αβ→dq)
void Park_Transform(float ia, float ib, float theta, float *id, float *iq) {
    *id = 0.5*(ia*cosθ + ib*sinθ);
    *iq = 0.5*(-ia*sinθ + ib*cosθ);
}

// 反Park变换(dq→αβ)
void Reverse_Park_Transform(float vd, float vq, float theta, float *valpha, float *vbeta) {
    *valpha = vd*cosθ - vq*sinθ;
    *vbeta = vd*sinθ + vq*cosθ;
}

// SVPWM生成
void SVPWM_Generate(float valpha, float vbeta) {
    // 坐标变换到三相静止坐标系
    float va = valpha;
    float vb = -0.5*valpha + 0.866*vbeta;
    float vc = -0.5*valpha - 0.866*vbeta;
    
    // 应用死区补偿
    Apply_DeadTime(&va, &vb, &vc);
    
    // 输出PWM占空比
    Set_PWM_Duty(PWM_A, va);
    Set_PWM_Duty(PWM_B, vb);
    Set_PWM_Duty(PWM_C, vc);
}
2.2 双闭环控制
// 电流环PI控制器
float Current_PI_Control(float ref, float feedback) {
    static float integral = 0;
    float error = ref - feedback;
    
    integral += error * DT;
    float output = Kp_I * error + Ki_I * integral;
    
    // 防积分饱和
    if(output > MAX_I_OUT) {
        integral -= error * DT;
        output = MAX_I_OUT;
    }
    return output;
}

// 速度环PI控制器
float Speed_PI_Control(float ref, float feedback) {
    static float integral = 0;
    float error = ref - feedback;
    
    integral += error * DT;
    float output = Kp_S * error + Ki_S * integral;
    
    // 防振荡处理(区域3时关闭积分)
    if(fabs(error) < ZONE3_THRESHOLD) {
        integral = 0;
    }
    return output;
}

三、关键算法

1. 无传感器控制(MRAS算法)

// 磁链观测器模型
void MRAS_Observer(float id_ref, float iq_ref, float *id_est, float *iq_est) {
    // 建立参考模型
    float id_model = Ld * (id_ref - Rsi * iq_ref);
    float iq_model = Lq * (iq_ref + Rsi * id_ref) + ωe * Ld * id_ref;
    
    // 调整观测器参数
    *id_est = id_model + Kp_OBS * (id_ref - id_model);
    *iq_est = iq_model + Ki_OBS * (iq_ref - iq_model);
}

2. 防饱和积分算法

// 遇限削弱积分PI
float AntiWindup_PI(float ref, float feedback) {
    static float integral = 0;
    float error = ref - feedback;
    
    if(output >= MAX_OUT) {
        integral -= error * DT;  // 积分项削弱
    } else {
        integral += error * DT;
    }
    
    return Kp * error + Ki * integral;
}

四、中断服务程序

1. 定时采样中断(125μs)

#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer0_ISR() {
    // 电流采样
    Ia = Read_ADC(ADC_CH0);
    Ib = Read_ADC(ADC_CH1);
    
    // Clark变换
    Ialpha = Ia;
    Ibeta = (Ib - Ic) / sqrt(3);
    
    // Park变换
    Park_Transform(Ialpha, Ibeta, θ, &id, &iq);
    
    // 电流环控制
    Vd = Current_PI_Control(id_ref, id);
    Vq = Current_PI_Control(iq_ref, iq);
    
    // 反Park变换
    Reverse_Park_Transform(Vd, Vq, θ, &Valpha, &Vbeta);
    
    // SVPWM生成
    SVPWM_Generate(Valpha, Vbeta);
}

2. PWM周期中断(8kHz)

#pragma vector=EPWM1_TIMER_INT_VECTOR
__interrupt void EPWM1_ISR() {
    // 更新占空比
    EPwm1Regs.CMPA.half.CMPA = dutyA;
    EPwm2Regs.CMPA.half.CMPA = dutyB;
    EPwm3Regs.CMPA.half.CMPA = dutyC;
    
    // 清除中断标志
    EPwm1Regs.TIFR.bit.INT = 1;
}

五、保护机制设计

1. 故障检测流程

void Check_Faults() {
    if(OverCurrentDetected()) {
        Disable_PWM();  // 关闭PWM输出
        Set_FaultFlag(FAULT_OVERCURRENT);
    }
    
    if(UnderVoltageDetected()) {
        Enter_SafeState();  // 进入安全状态
        Set_FaultFlag(FAULT_UVLO);
    }
    
    // 其他故障检测...
}

2. 硬件保护电路

+-------------------+
| 电源输入          |
| +----[LDO]----+   |
| |  3.3V        |   |
| +----[TVS]-----+  |
| 电压监控电路      |
+--------[MCU]------+

六、调试与优化

1. 参数整定流程

  1. 电流环整定:先固定速度环,调整Ki使电流超调<5%
  2. 速度环整定:固定电流环,调整Kp使阶跃响应时间<20ms
  3. 位置环整定:最后调整,确保无超调

2. 实验数据对比

控制模式 超调量 调节时间 稳态误差
开环 40% - ±5%
传统PI 8% 15ms ±0.5%
改进PI 5% 12ms ±0.2%

参考代码 永磁同步电机伺服控制系统程序设计 www.youwenfan.com/contentcnm/73187.html

七、工程实现建议

  1. 代码结构优化

    // 模块化设计示例
    typedef struct {
        float Kp;
        float Ki;
        float integral;
    } PI_Controller;
    
    PI_Controller current_PI = {0.8, 120, 0};
    
  2. 调试工具链 硬件调试:使用CCS开发环境+JTAG仿真器 数据分析:MATLAB/Simulink联合调试 上位机监控:基于LabVIEW的监控界面


八、扩展功能设计

  1. 自适应控制

    // 在线参数辨识
    void Parameter_Identification() {
        // 采用递推最小二乘法(RLS)
        θ_est = θ_prev + K * (y - Φ*θ_prev);
    }
    
  2. 安全模式

    void Safe_State() {
        Disable_PWM();
        Enable_FreeWheelDiode();
        Set_ErrorLED(HIGH);
    }
    
posted @ 2025-12-05 11:01  qy98948221  阅读(8)  评论(0)    收藏  举报