打印
[应用相关]

[经验] 使用STM32实现PMSM电机的正弦驱动

[复制链接]
300|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

microchip 的应用笔记 AN1017 讲述了一种使用空间矢量调制(Space Vector Modulation,SVM)方法产生用于驱动 PMSM 电机各相的正弦电流,以此驱动具有霍尔位置传感器的永磁同步电机(Permanent Magnet Synchronous Motor,PMSM)的控制算法,其配套的开源算法采用 dsPIC® 数字信号控制器实现,此前在淘宝购入了一块基于 STM32 的无刷直流电机开发板,于是试着将该开源代码移植至手上这块开发板上。开发板如下图所示:

  • 中断服务程序一览表

    中断
    何时调用
    执行操作

    TIM1
    20kHz
    根据当前位置使用 SVM 产生正弦波

    TIM2
    1kHz
    电机堵转保护,执行 PID 控制

    TIM3
    霍尔信号跳变
    计算转子位置,确定转子机械方向,实现正弦波指针与转子位置的同步

    DMA1
    54.9kHz
    读取来自电位器的新转速给定值

    其中定时器3被配置为“接口定时器”,捕获/比较通道1对每一次霍尔信号的跳变进行捕获,捕获值为电机转过60°电角度的时间,以此计算转速;捕获/比较通道2被配置为对其中一路霍尔反馈信号的下降沿进行捕获,即电机每转过180°电角度判定一次运转方向,避免在霍尔信号跳变的临界区域对运转方向判定带来干扰。

  • PID 算法
    速度环 PID 算法采用 CMSIS DSP Software Library 中提供的 Q15 格式 PID 算法,查阅其资料可知该算法同 AN1017 所述,从常规 PID 形式改进至类滤波器 PID 实现形式,算法如下:

    Algorithm:
    y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]
    A0 = Kp + Ki + Kd
    A1 = (-Kp ) - (2 * Kd )
    A2 = Kd

    在此,对该算法进行推导,由 PID 算法的定义有:
    y[n] = Kp * x[n] + Ki * (x[n] + x[n-1] + … ) + Kd * (x[n] - x[n-1])

    y[n-1] = Kp * x[n-1] + Ki * (x[n-1] + x[n-2] + … ) + Kd * (x[n-1] - x[n-2])

    两式相减:
    y[n] - y[n-1] = Kp * (x[n] - x[n-1]) + Ki * x[n] + Kd * (x[n] - x[n-1] - x[n-1] + x[n-2]

    则原式得证:
    y[n] = y[n-1] + (Kp + Ki + Kd) * x[n] + (-Kp - 2 * Kd) * x[n-1] + Kd * x[n-2]

  • 按键操作说明
    FUN 键作为运行与停止的控制,UP 键作为转速给定方向的切换。

  • 实测波形
    正弦电流的产生依赖于对转子位置的估测,现将程序中变量 Phase 通过 DA 输出,用示波器测量电机运转在1000 RPM 时的波形如下:


    通过霍尔传感器对电机线电流进行观测,电机运转在1000 RPM 时的电流波形如下:

    电机运转在4000 RPM 时的电流波形如下:



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2003

主题

7060

帖子

10

粉丝