历史上的今天
今天是:2025年07月30日(星期三)
2019年07月30日 | 使用STM32实现PMSM电机的正弦驱动
2019-07-30 来源:eefocus
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°电角度(经评论区lanmanck指正,应为360°)判定一次运转方向,避免在霍尔信号跳变的临界区域对运转方向判定带来干扰。
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 时的电流波形如下:
史海拾趣
|
这款10.66.4.3版驱动是Marvell Yukon系列网卡最新最全的网卡驱动,驱动编译于2008年12月9日,多国语言版,支持Win2000/XP/2003/WinXP-64/2003-64/Vista/Vista-64/2008/2008-64 12/09/2008, 10.66.4.3 支持以下硬件ID: 3Com 3C2000-T Gigabit A ...… 查看全部问答> |
|
各位朋友。。为什么我用手放到电路板晶振电路上空附近。。系统出现混乱 。。数码管乱闪。。系统不正常。。。 肯定不是晶振的问题啊 来自EEWORLD合作群:arm linux fpga 嵌入0(49900581)群主:wangkj… 查看全部问答> |
|
WinCE系统中如何实现对基于I2C总线的EEPROM存储器(24C16)的文件读写及复制 刚接触WinCE不久,需要在EVC中写一个程序,实现对基于I2C总线的EEPROM存储器(24C16)的文件复制,具体说就是能通过IIC总线把一个文件复制到EEPROM中,或者从EEPROM中把文件拷贝出来,硬件系统是自己开发的,主要是Intel Xscale PXA255,EEPROM是FM2 ...… 查看全部问答> |
|
我正在做dsp2407a的设计,遇到一个问题,请大家帮忙看看 程序可以编译,但是链接时候出现问题 _CAPCONA 说这个没有定义。 在头文件中已经定义过,但是我在.map文件中看到_CAPCONA 确实没有定义;怀疑是cmd文件定义出现问题,但是本人刚开始学习 ...… 查看全部问答> |
|
【M4 开发板入门】EKK-LM4F232的spmu272文件的SCH问题 spmu272文件第25页 红色部分:在SCH那里有几处GND漏连接! 兰色部分:不明白为什么这个VDDC不用连接正电源的吗?? VDDC在PDF的解释如下: Positive supply for most of the logic function, including theprocessor core and most peripherals ...… 查看全部问答> |
|
#include #include #define uchar unsigned char #define write_second 0x80 #define read_second 0x81 #define write_minute 0x82 #define read_minute 0x83 #define write_hour 0x84 #define read_hour 0x85 #define write_day 0x86 ...… 查看全部问答> |




