【STM32电机矢量控制】记录9——状态观测器与锁相环

发布者:MysticalGarden最新更新时间:2018-09-22 来源: eefocus关键字:STM32  电机  矢量控制  状态观测器  锁相环 手机看文章 扫描二维码
随时随地手机看文章

状态观测器:

理论依据:根据控制理论,如果一个系统能够完全通过其检测到的输出值来重构其系统状态,则认为该系统是可观测的。其作用于无传感器转子的位置和速度的检测反馈,再作用到PARK变换和转矩磁链控制上。

Luenberger观测器的离散化:

(其观测器的闭环参数为经验验证值)

引入估测电流( iα,iβ )的反馈值并离散化(T 为采样时间),可得当前的反向电动势 eα 和eβ;

再由反向电动势 eα 和eβ  的计算出转子的位置角。

可以将其定义式相除,可得到转子位置角,但是这方法是开环的,对耦合在反电动势里的干扰非常敏感,它会使反电动势成为非正弦信号)

程序中使用的是锁相环方式,以PI闭环方式调节ωr以保持其输入为0 (电角度领先反电动势一个采样时间。这样算出来的转子电角度比较稳定准确。

(PLL闭环的系数是经过验证的经验结果,没必要修改它们的值)

起动策略:

设定启动的电流幅值、频率变化阈值,而起动是否成功在于在设定起动的时间内观测器和PLL是否收敛,即转子的转速的最大变化率是否大于限定值(方差的计算)、起动的转速是否高于最小速度值

软件结构:

【STM32电机FOC】记录9——状态观测器与锁相环锁相环PLL:

1. 时钟与振荡电路

在芯片中,最重要的就是时钟,时钟就像是心脏的脉冲,如果心脏停止了跳动,那人也就死亡了,对于芯片也一样。了解了时钟的重要性,那时钟是怎么来的呢?时钟可以看成周期性的0与1信号变化,而这种周期性的变化可以看成振荡。因此,振荡电路成为了时钟的来源。

振荡电路的形成可以分两类:

1.      石英晶体的压电效应:电导致晶片的机械变形,而晶片两侧施加机械压力又会产生电,形成振荡。它的谐振频率与晶片的切割方式、几何形状、尺寸有关,可以做得精确,因此其振荡电路可以获得很高的频率稳定度。

2.      电容Capacity的充电放电:能够存储电能,而充放电的电流方向是反的,形成振荡。可通过电压等控制振荡电路的频率。

2. PLL与倍频

由上面可以知道,晶振由于其频率的稳定性,一般作为系统的外部时钟源。但是晶振的频率虽然稳定,但是频率无法做到很高(成本与工艺限制),因此芯片中高频时钟就需要一种叫做压控振荡器(Voltage Controlled Oscillator)的东西生成了(顾名思义,VCO就是根据电压来调整输出频率的不同)。可压控振荡器也有问题,其频率不够稳定,而且变化时很难快速稳定频率。哇偶,看到这种现象是不是很熟悉?嘿嘿,这就是标准开环系统所出现的问题,解决办法就是接入反馈,使开环系统变成闭环系统,并且加入稳定的基准信号,与反馈比较,以便生成正确的控制。

【STM32电机FOC】记录9——状态观测器与锁相环

因此,为了将频率锁定在一个固定的期望值,锁相环PLL出现了!一个锁相环PLL电路通常由以下模块组成:

 

  • 鉴相鉴频器PFD(Phase Frequency Detector):对输入的基准信号(来自频率稳定的晶振)和反馈回路的信号进行频率的比较,输出一个代表两者差异的信号

  • 低通滤波器LPF(Low-Pass Filter):将PFD中生成的差异信号的高频成分滤除,保留直流部分

  • 压控振荡器VCO(Voltage Controlled Oscillator):根据输入电压,输出对应频率的周期信号。利用变容二极管(偏置电压的变化会改变耗尽层的厚度,从而影响电容大小)与电感构成的LC谐振电路构成,提高变容二极管的逆向偏压,二极管内耗尽层变大,电容变小,LC电路的谐振频率提高,反之,降低逆向偏压时,二极管内电容变大,频率降低

  •  反馈回路FL(Feedback Loop):通常由一个分频器(DIV)实现。将VCO的输出降低到与基准信号相同级别的频率才能在PFD中比较

PLL工作的基本原理就是将压控振荡器的输出经过分频后与基准信号输入PFD,PFD通过比较这两个信号的频率差,输出一个代表两者差异的信号,再经过低通滤波器转变成一个直流脉冲电压去控制VCO使它的频率改变。这样经过一个很短的时间,VCO的输出就会稳定下来。所以:

PLL并不是直接对晶振进行倍频,而是将频率稳定的晶振作为基准信号,与PLL内部振荡电路生成的信号分频后进行比较,使PLL输出的信号频率稳定

最后,根据原理,理解一下锁相环(Phase Locked Loop)的名称

 

  1. 为了对基准信号与反馈信号进行频率比较,二者的相位必须相同且锁住,任何时间都不能改变,这样才能方便的比较频率,所以叫锁相(Phase Locked)

  2. 为了快速稳定输出系统,整个系统加入反馈成为闭环,所以叫环(Loop)

在FOC控制中的锁相环:

【STM32电机FOC】记录9——状态观测器与锁相环

 

eα、eβ为反向电动势,ωr为转子角速度,θr 为转子位置角。

PLL 闭环系数计算:

经过验证,Kp及Ki定义为:

【STM32电机FOC】记录9——状态观测器与锁相环

没有必要去修改它们的值,但是如果确实有必要修改,则必须注意:

为了增加带宽(此时,对速度变化有更好的动态响应,但ωr干扰增大),应比例地增大Kp及Ki。

主要完成任务:

1、对状态观测器算法进行学习

 

2、根据PMSM FOC 2.0 用户手册,对程序的各个函数进行梳理注释,理解其编程配置步骤


关键字:STM32  电机  矢量控制  状态观测器  锁相环 引用地址:【STM32电机矢量控制】记录9——状态观测器与锁相环

上一篇:【STM32电机矢量控制】记录11——DMA传输
下一篇:【STM32电机矢量控制】记录8——ADC三电阻采样

推荐阅读最新更新时间:2024-03-16 16:14

stm32串口中断接收发送实验
int main() { u32 i = 0; /*芯片配置初始化----------------------------------------------------------*/ RCC_Configuration(); //复位和时钟控制配置 NVIC_Configuration(); //嵌套中断向量控制器配置 GPIO_Configuration(); //I/O配置 USART_Configuration(); //串口配置 /*指示灯初始化------------
[单片机]
STM32中断向量表偏移量0x200详解
ST公司重定位向量表的库函数: void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset) { assert_param(IS_NVIC_VECTTAB(NVIC_VectTab)); assert_param(IS_NVIC_OFFSET(Offset)); SCB- VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80); } 其中NVIC_VectTab要么是FLASH要么是RAM的起始位置,Offset: Vector Table base offset field.
[单片机]
按键输入-GPIO输入
一,硬件连接    如图,有4个按键,分两组  第一组:WK_UP连接VCC  第二组:KEY0,KEY1,KEY2连接GND 确定IO口工作模式:  当IO口按下时我们需要捕捉到IO口的电平变化  所以WK_UP按下后为高地平,需设置按下前为低电平,应设置为下拉输入  同理KEY0,KEY1,KEY2按下后为低电平,应设置为上拉输入 二,读取IO输入的相关函数: 1,库函数 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 2,寄存器 GPIO端口输入寄存器:GPIOx_IDR 3,位操作 PE
[单片机]
按键输入-GPIO输入
Atmel推出面向无刷DC电机应用的驱动芯片
爱特梅尔公司 ( Atmel® Corporation ) 宣布推出面向 无刷 DC 电机应用 的 高集成度驱动芯片 ATA6833 和 ATA6834 , 这些 应用 包括 都是 连续运行 的 燃油泵、涡轮增压器或废气再循环等 , 因而需要最 高 的可靠性。新推出的 无刷 DC 电机驱动芯片具有低噪声, 可用于豪华车辆的舒适性电子装置,如电动车窗或电动座椅。这两款器件 都 采用爱特梅尔的 0.8 um 高压 BCD-on-SOI 技术,可使用体积 很 小 及 成本较低的 7 mm x 7 mm QFN 封装。 ATA6833/34 是业界首个将驱动器、看门狗监视器、电压调节器及 LIN 接
[工业控制]
Atmel推出面向无刷DC<font color='red'>电机</font>应用的驱动芯片
关于STM32的D M A问题集锦
1、求教DMA存取AD9235的数据问题 问:AD9235输出12位数据(D11-D0),将(D11-D0)分别接到13个I/O口上,用stm32的DMA将数据存进stm32内部? 答:可以,也可以通过实时的去读取IO口的状态。 2、是否可以直接使用DMA将高速的SPI数据传输并写到内部FLASH?这样是否存在溢出问题? 问:使用DMA将SPI的数据传输并写到内部FLASH时,如果SPI速度较高,是否会存在溢出问题,通常是如何解决的呢? 答:任何接受数据处理的时候都会遇到溢出的问题,只要产生中断,马上把数据读取走就不会溢出。而在处理的过程中,建议使用缓冲区功能,将数据放入缓冲区,然后再放入到FLASH中。
[单片机]
STM32中,关于中断函数调用全局变量的问题
首先是问题的描述:硬件单片机型号,STM32F103VET6,IDE:keil 5。想通过它实现的一个功能是,通过两个按键控制一个RGB灯的闪烁开始和停止。两个按键通过外部中断上升沿检测,贴一下最开始的代码。 void KEY1_IRQHandler(void) { //确保是否产生了EXTI Line中断 if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET) { run_flag=0x01; EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE); } } void KEY2_IRQHandler
[单片机]
【32位MCU】9G-STM32 简易BOOT及XMODEM串口IAP移植过程简介
9G-STM32 简易BOOT及XMODEM串口IAP移植过程简介 一,准备EWARM + AN2557软件包 1,在http://www.mcu123.com/news/Soft/embsof/arm/201001/514.html 上 下载 IAR Embedded Workbench for ARM version 5.41 (2010.1.5更新) 软件 CD-EWARM-5411-1760_mcu123.zip http://esoft.mcu123.com/MCU123_temp_20100103@/ARM/CD-EWARM-5411-1760_mcu123.zip 相关文件 IAR_EWARM5.4和谐文
[单片机]
STM32再学习――启动流程分析
  我们写嵌入式程序,基本上采用C语言来编写,以main( )作为程序的入口。但实际上,mian()并不是最先要执行的,在这之前需要做一些基本的工作,如堆、栈的定义;main函数的复位连接等,这些工作就需要一个专门的启动程序来完成,由于需要做的工作内容不多,并且需要更直接的管理内存,一般采用汇编编写。   无论是STM32、ARM系列的单片机,还是简单的如51,PIC等,都以为上述原因,需要启动程序,只不过51,PIC等单片机的启动程序已经在相应的IDE编译、链接的时候隐含的编译了,故在写单片机程序的时候无需考虑。而STM32的启动有相应的启动文件,本文将采用KEIL MDK自带的启动文件STM32F10x.s进行分析。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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