使用STM32实现PMSM电机的正弦驱动

发布者:Turquoise最新更新时间:2019-07-30 来源: eefocus关键字:STM32  PMSM电机  正弦驱动 手机看文章 扫描二维码
随时随地手机看文章

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

这里写图片描述

关键字:STM32  PMSM电机  正弦驱动 引用地址:使用STM32实现PMSM电机的正弦驱动

上一篇:stm32 各头文件或C文件功能
下一篇:详细介绍STM32驱动程序库STM32F1xx_DFP中的文件含义及其作用

推荐阅读最新更新时间:2024-11-07 18:31

STM32时钟基础内容和常见问题
RCC,Reset and Clock Control(复位和时钟控制),在绝大部分MCU芯片中都包含复位和时钟控制模块,也是MCU重要的组成部分。 相比于以前51单片机,现在STM32内部集成的时钟模块功能更加丰富,包含时钟选择、倍频、输出、外设总线时钟配置等。 STM32 时钟基础内容 STM32时钟树具有多项功能,可通过分频和倍频配置系统以及外设的时钟频率,不同型号STM32的时钟树有所不同。 1. 时钟源STM32的时钟源分为高速、低速两类时钟,同时也分内部和外部。HSE:High Speed External,高速外部HSI:High Speed Internal,高速内部LSE:Low Speed Extern
[单片机]
<font color='red'>STM32</font>时钟基础内容和常见问题
STM32定时器控制led灯亮灭
SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置 系统时钟 SYSCLK 等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产 生一次中断,以此循环往复。 在使用时,只需要配置前三个寄存器,最后一个校准寄存器不需要使用。 接下来,利用 SysTick 产生 1s 的时基,LED 以 1s 的频率闪烁。 1、设置重装载寄存器的值 2、清除当前数值寄存器的值 3、配置控制与状态寄存器 配置头文件: void PendSV_Handler(void) { }
[单片机]
意法半导体新演示板帮助先进工业和消费电子厂商加快双电机设计
高集成度电机控制器STSPIN32G4依托STM32生态系统加快产品开发周期 2024年5月31日,中国- 意法半导体的EVSPIN32G4-DUAL演示板只用一个高集成度电机驱动器STSPIN32G4就能控制两台电机运转,加快产品开发周期,简化PCB电路板设计,降低物料成本。 EVSPIN32G4-DUAL电路板可以缩短机器人、多轴工厂自动化系统、园林设备、电动工具等先进工业设备和消费产品的研发周期,缩短产品上市时间 。STSPIN32G4电机控制器内置的Arm®Cortex®-M4微控制器(MCU)能够同时控制两个电机,实时执行矢量控制(FOC)等复杂算法。此外,MCU外设还支持有传感器或无传感器的FOC算法,
[工业控制]
意法半导体新演示板帮助先进工业和消费电子厂商加快双<font color='red'>电机</font>设计
stm32专题二十六:互补输出 死区刹车
互补输出+死区刹车 这一部分代码,主要是初始化3个结构体,包括时基结构体、输出比较结构体和死区配置结构体,要对照前一篇博客和中文参考手册中的寄存器说明来仔细看,代码如下: bsp_AdvanceTim.c #include bsp_AdvanceTim.h static void ADVANCE_TIM_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; // 输出比较通道 GPIO 初始化 RCC_APB2PeriphClockCmd(ADVANCE_TIM_CH1_GPIO_CLK, ENABLE); GPIO_InitStructure.G
[单片机]
mbedtls | 01 - 移植mbedtls库到STM32的两种方法
一、mbedtls 开源库 1. mbedtls是什么 Mbed TLS是一个开源、可移植、易于使用、代码可读性高的SSL库。可实现常用的加密/解密算法,X.509证书操作以及TLS/DTLS 协议。它的各个功能模块相对独立、耦合低,可以通过配置宏定义裁剪,非常适合用于嵌入式系统。 mbedtls遵循 Apache 2.0 开源许可协议,目前由 TrustedFirmware 维护(Linaro主持的一个治理开放社区项目),在Github上已收获 2.6k star,目前Github上发布的最新版本为 2.24.0 版本,开源仓库地址为: https://github.com/ARMmbed/mbedtls 2. mb
[单片机]
mbedtls | 01 - 移植mbedtls库到<font color='red'>STM32</font>的两种方法
ACM6252 单相正弦波/方波(BLDC)直流无刷电机驱动IC解决方案
引言 无刷直流电机是在有刷直流电动机的基础上发展来的,具有无极调速、调速范围广、过载能力强、线性度好、寿命长、体积小、重量轻、出力大等优点,解决了有刷电机存在的一系列问题,广泛应用于工业设备、仪器仪表、家用电器、机器人、医疗设备等各个领域。由于无刷电机没有电刷进行自动换向,因此需要使用电子换向器进行换向。无刷直流电机驱动器实现的就是这个电子换向器的功能。 主流的无刷直流电机的控制方式目前主要有三种:方波控制(也称为梯形波控制、120°控制、6步换向控制)和正弦波控制、FOC(又称为矢量变频、磁场矢量定向控制)。 深圳市永阜康科技有限公司 现在大力推广一颗 单相正弦波/方波直流无刷电机驱动IC-ACM62
[电源管理]
ACM6252  单相<font color='red'>正弦</font>波/方波(BLDC)直流无刷<font color='red'>电机</font><font color='red'>驱动</font>IC解决方案
stm32电机开发(从单机版到网络化)
作为单机设备,不管是独自使用,还是和上位机一起配合使用。本质上来说,都是孤立的一套系统。在这个基础上,我们可以思考一下,能不能在单机系统之上构建网络化的系统。通过增加新的变量,站在更高维度来发现和解决问题。这里只是做一个探索和分析。 1、从单机系统搜集数据 传统的单机系统,数据都是孤立的,能不能从每一个单机系统搜集数据,通过集中处理的方法来提前预测故障、防止故障发生。 2、版本OTA升级 这方面目前用的最多的是汽车,对于汽车厂商来说,版本升级可以修复很多的bug,这肯定是好事情。但是需要考虑的是,消费者可以从中得到什么? 3、公有云服务系统 现在很多系统都可以通过网页直接完成。比如说,电路板pcb的绘制,这些以前只能
[单片机]
stm32之DMA中断
AD转换之DMA 1、DMA的配置 //DMA的配置 void DMA_Configuration(void) { /* 允许 DMA1 */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); /* DMA通道1*/ DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr =(u32)( &(ADC1- DR)); //ADC1数据寄存器 DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ADCCov; //获取ADC的数组 DMA_InitStructur
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved