历史上的今天
返回首页

历史上的今天

今天是: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 时的电流波形如下:

这里写图片描述

推荐阅读

史海拾趣

Digital Equipment Corp公司的发展小趣事

随着业务的不断扩展和产品的不断创新,DEC在1966年决定公开上市。这次上市不仅为DEC带来了大量的资金,还提升了其在业界的知名度。借助资本市场的力量,DEC能够进一步扩大生产规模,加强研发能力,并推出更多具有竞争力的产品。在上市后的几年里,DEC的销售收入快速增长,成为计算机行业的重要参与者。

amcc [applied micro circuits corp]公司的发展小趣事

2001年,惠普公司与康柏公司宣布合并,DEC作为康柏的一部分也随之并入惠普。这次合并进一步扩大了DEC的业务范围和市场影响力。在合并后,DEC的计算机产品和技术被整合到惠普的产品线中,同时DEC的品牌也逐渐淡出市场。然而,DEC在计算机行业中的贡献和影响力仍然被广泛认可,其技术遗产和创新精神在惠普及其他科技公司中得到了传承和发展。

昆泰芯微电子(CONNTEK)公司的发展小趣事

随着物联网技术的快速发展,昆泰芯微电子紧跟时代步伐,深度布局物联网应用领域。公司专注于面向物联网应用的传感器芯片研发、生产和销售,致力于成为传感器信号链及物联网芯片的行业领导者。在消费电子、智能制造、智能交通、智能家居以及新能源汽车等多个领域,昆泰芯微电子的产品得到了广泛应用,为这些领域的发展提供了强有力的技术支持。

CONTRINEX公司的发展小趣事

除了上述重要事件外,Contrinex还一直致力于产品创新和技术研发。多年来,公司不断推出新型传感器产品,如防磁防焊型电感式传感器、扩展型纤细型安全光幕等,以满足不同客户的需求。同时,Contrinex还积极与OEM和系统集成商合作,共同开发定制化解决方案,为客户提供更加全面和专业的服务。

这些故事只是Contrinex在电子行业发展历程中的一部分。作为一个不断追求卓越和创新的企业,Contrinex将继续致力于为客户提供高品质、高精度的传感器产品和解决方案,推动电子行业的持续发展。

Aerovox Corporation公司的发展小趣事

自1972年在瑞士成立以来,Contrinex便踏上了成为全球传感器行业领军企业的征程。起初,公司专注于开发工业用的位置判定传感器,凭借其卓越的技术和精准的性能,很快便在市场上崭露头角。随着技术的不断进步和市场的不断扩大,Contrinex逐渐将业务拓展至全球60多个国家,旗下拥有500多名优秀员工,成为一家真正的国际化企业。

力芯微(ETEK)公司的发展小趣事

力芯微公司在数字信号处理器领域拥有丰富的经验和深厚的技术积累,是行业内领先的企业之一。公司拥有一支高素质的研发团队,不断推进技术创新和产品升级。通过持续的研发投入和技术创新,力芯微在数字信号处理器领域保持了领先地位,并赢得了客户的广泛认可。

问答坊 | AI 解惑

Marvell Yukon系列网卡驱动10.66.4.3版

这款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中CString转char*的问题

在wince中讲CString(包含汉字)转换成char*用GetBuffer的方法转换行不通,请问应该如何转换…

查看全部问答>

ADC0809

哪位告诉我在ADC0809中disbuf[10,10,10,10,10,10,0,0]是做什么用的?转换来转换去实在是不知道他在干什么?…

查看全部问答>

WinCE系统中如何实现对基于I2C总线的EEPROM存储器(24C16)的文件读写及复制

刚接触WinCE不久,需要在EVC中写一个程序,实现对基于I2C总线的EEPROM存储器(24C16)的文件复制,具体说就是能通过IIC总线把一个文件复制到EEPROM中,或者从EEPROM中把文件拷贝出来,硬件系统是自己开发的,主要是Intel Xscale PXA255,EEPROM是FM2 ...…

查看全部问答>

谁讲讲‘句柄’这个东西应该怎么理解。。。

呵呵,不懂PC编程,看着吃力。。。怎么看着像个指针?…

查看全部问答>

dsp2407a的cmd文件

我正在做dsp2407a的设计,遇到一个问题,请大家帮忙看看 程序可以编译,但是链接时候出现问题 _CAPCONA 说这个没有定义。 在头文件中已经定义过,但是我在.map文件中看到_CAPCONA 确实没有定义;怀疑是cmd文件定义出现问题,但是本人刚开始学习 ...…

查看全部问答>

iphone电子秤

威龙科技半导体是方案公司,提供IPHONE IPAD 电子秤方案,IPAD电子秤是高技术的电子秤,工厂只需解决一个承重平台,将信息传递给IPAD就可以了.…

查看全部问答>

【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 ...…

查看全部问答>

DS1302&LCD1602显示时间程序中出现部分问题求解

#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 ...…

查看全部问答>