MICROCHIP AN1078 PMSM电机FOC控制中文
PMSM无传感器FOC的单分流三相电流重构算法01299a_cn.
AN1299 结论本应用笔记阐述了单分流算法的优点、局限性和限制条件。
通过使用单分流电阻来检测流经直流母线的电流,单分流算法能够重构流经电机各相的电流。
为了获取蕴含在直流母线电流中的信息,使用了空间矢量调制方法。
SVM 产生一组采样时间窗口,在时间窗口中可以观察流经电机各相的电流。
在分流电阻真值表(表 1)中对这些时间窗口进行了划分和分组。
此真值表表明了分流电阻提供的信息与电子开关状态之间的关系。
但是,在某些 SVM 区域,要从直流母线电流获取期望信息是不可能的。
通过修改 SVM 开关模式可以克服这一局限性。
对这些模式进行修改,使得在每个 SVM 工作状态中从单分流电阻提取期望信息成为可能。
这些实际结果表明:单分流电阻方法提供了足够精确的信息,能够满足磁场定向控制的需求。
对提取的流经直流母线的电流进行重构,根据重构的信息,还可能获取诸如位置、转矩这样的电机信息。
参考文献本应用笔记参考了下列应用笔记,它们可从 Microchip 网站()下载:•AN908 《使用 dsPIC30F 实现交流感应电机的矢量控制》(DS00908A_CN)• AN955 “VF Control of 3-Phase Induction Motor (DS00955) Using Space Vector Modulation” • AN1017 《使用 dsPIC30F DSC 实现 PMSM 电机的正弦驱动》(DS01017A_CN)• AN1078 《PMSM 电机的无传感器磁场定向控制》(DS01078A_CN) 2009 Microchip Technology Inc. DS01299A_CN 第 21 页AN1299 注: DS01299A_CN 第 22 页 2009 Microchip Technology Inc.请注意以下有关 Microchip 器件代码保护功能的要点:• • • Microchip 的产品均达到 Microchip 数据手册中所述的技术指标。
PFC基础知识及FOC工作原理
无传感器 FOC 法采用相电流 Ia 和 Ib 作为反馈信号。而 第三相电流 Ic 是通过进行数字化计算得到的。这三相电 流在用 Park 变换转化为转子系下两相电流之前,先用 Clarke 变换转化为定子系下的两相电流。这种转换得到 了两个计算电流分量:Id 和 Iq。磁链是电流 Id 的函数, 而转子转矩是电流 Iq 的函数。 位置估计器用于估计转子位置和速度信息。电机模型使 用电压和电流来估算位置。电机模型主要使用位置观测 器来间接获得转子位置信息。PMSM 模型是基于直流电 机模型。
2Φ 转子系统
Θ
Iq
Iα
α−β
Id
至 d-q
Iβ
2Φ 定子系统
无传感器磁场定向控制(FOC)系统
Ia
a, b, c
至
Ib
α−β
3Φ 定子系统
本页已使用福昕阅读器进行编辑。
AN1208 福昕软件(C)2005-2010,版权所有,
仅供试用。
DS01208A_CN 第 3 页
AN1208
数字化的功率因数校正
本集成应用是在以下两种 dsPIC® DSC 器件上实现的:
• dsPIC30F
• dsPIC33F
低成本、高性能的 DSC,与模数转换器 (ADC)和脉 冲宽度调制器 (PWM)等各类电力电子外设的结合使 用,使得这样一个复杂应用的数字化设计和实现变得更 加简单方便。
数字化的 PFC 与电机控制
大多数电机控制系统通常将 PFC 作为系统的第一级。由 于逆变器中开关器件的存在,若没有 PFC 输入级,那么 所产生的电流中将会含有显著的谐波分量。此外,由于 电机负载的高度感性,输入电流将会给输入系统引入大 量无功功率,从而降低整个系统的效率。PFC 级作为电 机控制应用中的一个前端转换器,能够较好地调节输出 电压以及降低输入电流中的谐波含量。在这些应用中, 按照平均电流模式控制的标准升压转换器拓扑是实现数 字化 PFC 的首选方法。
电助力自行车的FOC控制技术
电助力自行车的FOC控制技术
随着人们生活水平的提高和环保意识的增强,电助力自行车的市场需求不断扩大,越
来越多的人选择使用电动自行车来代替传统的车辆出行。
而FOC(Field-Oriented Control)控制技术,则是电助力自行车上的一种常用控制技术。
本文将介绍FOC控制技术的原理和
应用。
FOC控制技术是一种闭环控制技术,它主要通过电机控制器来控制电机的电流、速度、位置等参数。
FOC控制技术最初是应用于交流电机控制领域,之后逐渐应用于直流电机控
制领域。
通过FOC控制技术,可以实现对电机控制的高精度和高效率控制。
FOC控制技术的原理是将电机控制分为两个部分,即定子电流控制和转子电流控制。
定子电流控制主要控制电机的磁场强度和方向,保证电机的输出扭矩的稳定性和可靠性。
转子电流控制则可以控制电机的速度和位置,使电机输出的转矩符合要求。
FOC控制技术的优点是可以减少电机的噪音和能耗,提高电机的能量利用率。
另外,FOC控制技术还可以实现对电机输出扭矩的高精度控制,从而提高电机的输出效率和稳定性。
在电助力自行车上,FOC控制技术主要应用于电动机控制器中。
通过FOC控制器的控制,可以实现电动车的正、反转、制动等功能。
同时,FOC控制技术还可以控制电动车的
电源电压和输出功率,从而实现对电动车的高效控制。
总之,FOC控制技术是电助力自行车控制系统中非常重要的技术,可以实现对电机控
制的高精度和高效率控制,从而提高电助力自行车的性能和使用体验。
随着技术的不断进
步和发展,相信这种控制技术会越来越得到广泛的应用。
AN1078电机的无传感器磁场定向控制
为什么使用 FOC 算法?
BLDC 电机的传统控制方法是以一个六步的控制过程来 驱动定子,而这种控制过程会使生成的转矩产生振荡。 在六步控制过程中,给一对绕组通电直到转子达到下一 位置,然后电机换相到下一步。 霍尔传感器用于确定转 子的位置,以采用电子方式给电机换相。 高级的无传感 器算法使用在定子绕组中产生的反电动势来确定转子位 置。 六步控制(也称为梯形控制)的动态响应并不适用于洗 衣机,这是因为在洗涤过程中负载始终处于动态变化 中,并随实际洗涤量和选定的洗涤模式不同而变化。 而 且,对于前开式洗衣机,当负载位于滚筒的顶部时,必 须克服重力对电机负载作功。 只有使用高级的算法如 FOC 才可处理这些动态负载变化。
PWM2H
PWM3H PMSM
PWM2L
PWM3L
故障
<
Ia 电流 限制
Ib
2010 Microchip Technology Inc.
DS01078B_CN 第 5 页
AN1078
磁场定向控制
从不同的角度理解磁场定向控制
理解 FOC (有时称为矢量控制)如何工作的一种方法 是在头脑中设想参考坐标变换过程。如果从定子的角度 来设想交流电机的运行过程,则会看到在定子上施加了 一个正弦输入电流。该时变信号产生了旋转的磁通。转 子的速度是旋转磁通矢量的函数。 从静止的角度来看, 定子电流和旋转磁通矢量看似交流量。 现在,设想在电机内部,转子随着定子电流所产生的旋 转磁通矢量以相同的速度同步旋转。如果从这个角度观 察稳态条件下的电机,那么定子电流看似常量,且旋转 磁通矢量是静止的。 最终,希望控制定子电流来获得期望的转子电流(不可 直接测量得到)。 通过参考坐标变换,可使用标准控制 环,如同控制直流量一样实现对定子电流的控制。
PMSM电机控制
PWM2H
PWM3H PMSM
PWM2L
PWM3L
故障
<
Ia 电流 限制
Ib
2010 Microchip Technology Inc.
DS01078B_CN 第 5 页
AN1078
磁场定向控制
从不同的角度理解磁场定向控制
理解 FOC (有时称为矢量控制)如何工作的一种方法 是在头脑中设想参考坐标变换过程。如果从定子的角度 来设想交流电机的运行过程,则会看到在定子上施加了 一个正弦输入电流。该时变信号产生了旋转的磁通。转 子的速度是旋转磁通矢量的函数。 从静止的角度来看, 定子电流和旋转磁通矢量看似交流量。 现在,设想在电机内部,转子随着定子电流所产生的旋 转磁通矢量以相同的速度同步旋转。如果从这个角度观 察稳态条件下的电机,那么定子电流看似常量,且旋转 磁通矢量是静止的。 最终,希望控制定子电流来获得期望的转子电流(不可 直接测量得到)。 通过参考坐标变换,可使用标准控制 环,如同控制直流量一样实现对定子电流的控制。
已发表了一些基于 dsPIC DSC 电机控制系列的应用笔 记 (见 “参考文献”)。 这些应用笔记可从 Microchip 网站 ()获取。 本应用笔记说明了 dsPIC DSC 如何利用特别适合电机 控制的外设 (电机控制 PWM 和高速 ADC)来执行 PMSM 的无传感器磁场定向控制。 dsPIC DSC 的 DSP 引擎支持必要且快速的数学运算。
ห้องสมุดไป่ตู้
图 4:
系统概述
PWM1H PWM1L PWM2H PWM2L 3相 PMSM 3 相逆变器
dSPIC33FJ32MC204
PWM3H PWM3L
AN0 AN1 RB8
PMSM电机无传感器FOC矢量控制_图文.
说明:下面程序取自IFX 16位机无传感器PMSM电机矢量控制程序。
程序架构是C语言嵌套汇编。
其中坐标系变换是汇编编写。
有插图说明,便于更好的理解。
其中包括坐标系变换,磁链角估算,PI速度环电流环调节。
(单片机XC2236N,Tasking 编译器Cavin整理坐标系变换说明:双电阻采样得到两相电流(ia, ib,由abc120°静止坐标系Clarke 变换到直角坐标系(iα, iβ,由(iα, iβ静止直角坐标系Park变换到直角旋转坐标系(iq, id。
直流id不变,通过PI速度环电流环得到期望直流iq,进行限幅控制。
由旋转坐标系(vq, vd经过Park逆变换到静止坐标系(vα, vβ,然后再经过矢量调制成PWM控制电机。
无传感器角度估算:由Clarke变换得到(iα, iβ和由Park逆变换得到的(vα, vβ,经过低通滤波器PT1,再由直角坐标系变极坐标系得到磁链估算角无传感器开环启动策略:在定子中加入幅值及频率都受控的电流,若PLL收敛,切换到FOC闭环控制。
/******************************************************************* ********************************************************************************* ****//*********************************************************************** ************************************************************************* ********///****************************************************************** ********** // @Function int clarke_trans(int Phase_s, int Phase_t, int *ia;////----------------------------------------------------------------------------// @Description ia = is// ib = 1/sqrt(3*( (2 * it + is////----------------------------------------------------------------------------// @Returnvalue (ib * 16 , "(ia * 16"////----------------------------------------------------------------------------// @Parameters////----------------------------------------------------------------------------// @Date09.01.2005// Condition optimization off / one//****************************************************************** ********** inline int clarke_trans(int Phase_s, int Phase_t, int *ia{int retvalue;__asm(" mov r12,MCW \n"" mov MCW,#0200h ; set saturation \n"" shl %2,#1 ; ( 2*Phase_t \n"" add %2,%1 ; + Phase_s \n"" mov r13,#37837 \n"" CoMULsu %2,r13 ;* 1/sqrt(3 \n"" CoSHL #4 ; default 2 * 4 \n"" CoSTORE %0,MAS ; ib = result \n"" shl %1,#2 \n"" mov [%3],%1 ; ia = Phase_s * 4 \n"" mov MCW,r12 \n": "=&w"(retvalue /* output registers */: "w"(Phase_s,"w"(Phase_t,"w"(ia /* input registers */ : "r13","r12"/*scratch registers */;return retvalue;}******************************************************************** ********///****************************************************************** ********** // @Function int park_trans(int e_a,int e_b,int phi,int *a_b////----------------------------------------------------------------------------// @Description park transformation////----------------------------------------------------------------------------// @ReturnvalueId_comp , Iq_comp////----------------------------------------------------------------------------// @Parameters////----------------------------------------------------------------------------// @Date 09.01.2005// Condition optimization off / oneinline int park_trans(int i_a,int i_b,int phi,int *o_q{int retvalue;__asm( "\n"" mov r13,MCW \n"" mov MCW,#0600h \n"" shr %3,#6 \n"" shl %3,#1 \n"" EXTS #SEG (_sincostab,#2 \n"" mov r11,[%3 + #SOF(_sincostab+512] \n"" mov r12,[%3 + #SOF(_sincostab] \n"" CoMUL %2,r12 \n"" CoMAC %1,r11 \n"" CoSTORE %0,MAS \n"" CoMUL %2,r11 \n"" CoMAC- %1,r12 \n"" CoSTORE [%4],MAS \n"" mov MCW,r13 \n""\n": "=&w"(retvalue /* output registers */: "w"(i_a,"w"(i_b,"w"(phi,"w"(o_q /* input registers */: "r13","r12","r11"/*scratch registers */;return retvalue;}/******************************************************************* ***************************************************************************** ********///********************************************************************** ****** // @Function int inv_park_trans(int e_a,int e_b,int phi,int *a_b////----------------------------------------------------------------------------// @Description inverse park transformation////----------------------------------------------------------------------------// @ReturnvalueI_alpha , I_beta////----------------------------------------------------------------------------// @Parameters////----------------------------------------------------------------------------// @Date09.01.2005// Condition optimization off / one//****************************************************************** ********** inline int inv_park_trans(int i_d,int i_q,int phi,int *o_b{int retvalue;__asm( "\n"" mov r13,MCW \n"" mov MCW,#0600h \n"" shr %3,#6 \n"" shl %3,#1 \n"" EXTS #SEG (_sincostab,#2 \n"" mov r12,[%3 + #SOF(_sincostab+512] \n"" mov r11,[%3 + #SOF(_sincostab] \n"" CoMUL %1,r12 \n"" CoMAC- %2,r11 \n"" CoASHR #2 \n"" CoSTORE %0,MAS \n"" CoMUL %1,r11 \n"" CoMAC %2,r12 \n"" CoASHR #2 \n"" CoSTORE [%4],MAS \n"" mov MCW,r13 \n""\n": "=&w"(retvalue /* output registers */: "w"(i_d,"w"(i_q,"w"(phi,"w"(o_b /* input registers */ : "r13","r12","r11"/*scratch registers */;return retvalue;}//****************************************************************** ********** // @Function int cart_polar_conv(int x,int y, int *angle;////----------------------------------------------------------------------------// @Description////----------------------------------------------------------------------------// @Returnvalue////----------------------------------------------------------------------------// @Parameters////----------------------------------------------------------------------------// @Date09.01.2005// Condition optimization off / one//****************************************************************** ********** unsigned int cart_polar_conv(int x,int y, int *angle{unsigned int retvalue;__asm( "\n"" mov MCW,#0200h ; enable saturation to +/-0x7fff \n"" mov r13,%1 ; r13 = x \n"" jmpr cc_nn,kpw1co ; if (x >= 0 goto kpw1co \n"" neg r13 ; else r13 = -r13 \n""kpw1co: ; r13 = |x| \n"" mov r12,%2 ; r12 = y \n"" jmpr cc_nn,kpw2co ; if (y >= 0 goto kpw2co \n"" neg r12 ; r12 = -r12 \n""kpw2co: ; r12 = |y| \n"" mov r9,#1024 \n"" cmp r13,r12 \n"" jmpr cc_c,kpw3co ; if( x < y goto kpw3co \n"" mulu r12,r9 ; MD = y * 1024 \n"" divlu r13 ; MDL = MD / x \n"" mov r9,MDL ; r9 = MDL = (y/x * 1024 \n"" shl r9,#1 ; prepare for word address \n"" EXTS #SEG (_betab,#1 \n"" mov r10,[r9+#SOF(_betab] ; r10 = sqrt( 1 + (r9^2 \n" " CoMULu r13,r10 ; CoACC = x * sqrt( 1 + (y/x^2 \n" " CoSHL #1 ; unsigned -> signed \n"" CoSTORE %0,MAS ; %0 = CoACC \n" "\n"" EXTS #SEG (_phitab,#1 \n"" mov r10,[r9+#SOF(_phitab] ; r10 = arctan( y/x \n" " cmp %1,#0 ; \n"" jmpr cc_n,kpw4co ; if ( x < 0 goto kpw4co \n" " cmp %2,#0 \n"" jmpr cc_n,kpw5co ; if ( y < 0 goto kpw5co \n" " mov [%3],r10 ; angle = arctan( y/x \n" " jmpr cc_uc, endco \n""\n""kpw5co: ; x > 0 and y < 0 \n"" neg r10 \n"" mov [%3],r10 ; angle = -arctan( y/x \n"" jmpr cc_uc, endco \n""\n""kpw4co: ; x < 0 \n"" cmp %2,#0 ; \n"" jmpr cc_n,kpw6co ; if ( y < 0 goto kpw6co \n" " mov r9,#8000h \n" " sub r9,r10 \n"" mov [%3],r9 ; angle = 180�- arctan( y/x \n" " jmpr cc_uc, endco \n" "\n""kpw6co: ; x < 0 and y < 0 \n"" add r10,#8000h \n"" mov [%3],r10 ; angle = -180�+ arctan( y/x \n" " jmpr cc_uc, endco \n" "\n""kpw3co: ; |x| < |y| \n"" mulu r13,r9 ; MD = |x| * 1024 \n"" divlu r12 ; MDL = MD / |y| \n"" mov r9,MDL ; r9 = MDL = (y/x * 1024 \n"" shl r9,#1 ; prepare for word address \n"" \n"" EXTS #SEG (_betab,#1 \n"" mov r10,[r9+#SOF(_betab] ; r10 = sqrt( 1 + (r9^2 \n"" CoMULu r12,r10 ; CoACC = x * sqrt( 1 + (y/x^2 \n"" CoSHL #1 ; unsigned -> signed \n"" CoSTORE %0,MAS ; %0 = CoACC \n"" \n"" EXTS #SEG (_phitab,#1 \n"" mov r10,[r9+#SOF(_phitab] ; r10 = arctan( y/x \n"" cmp %1,#0 \n"" jmpr cc_n,kpw7co ; if ( x < 0 goto kpw7co \n"" cmp %2,#0 \n"" jmpr cc_n,kpw8co ; if ( y < 0 goto kpw8co \n"" mov r9,#4000h \n"" sub r9,r10 \n"" mov [%3],r9 ; angle = 90�- arctan( x/y = 90�- arccot( y/x = arctan( y/x \n" " jmpr cc_uc, endco \n""\n""kpw8co: ; x > 0 and y < 0 \n"" add r10,#0C000h \n"" mov [%3],r10 ; angle = -90�+ arctan( x/y = -(90�- arccot( y/x = -arctan( y/x \n"" jmpr cc_uc, endco \n""\n""kpw7co: \n"" cmp %2,#0 ; x < 0 \n"" jmpr cc_n,kpw9co ; if ( y < 0 goto kpw9co \n"" add r10,#4000h \n"" mov [%3],r10 ; angle = 90�+ arctan( x/y = 180�- (90�- arccot( y/x = 180�- arctan( y/x \n" " jmpr cc_uc, endco \n"" \n""kpw9co: ; x < 0 and y < 0 \n"" mov r9,#0C000h \n"" sub r9,r10 ; angle = -90�- arctan( x/y = -180�+ (90�- arccot( y/x = -180�+ arctan( y/x \n"" mov [%3],r9 \n""\n""endco: \n": "=&w"(retvalue /* output registers */: "w"(x,"w"(y,"w"(angle /* input registers */: "r13","r12","r11","r10","r9"/*scratch registers */ ;return retvalue;}//****************************************************************** ********** // @Function: a low pass filter 2012-9-13 17:58:43// C calling format://// int inline int pt1_controller32( int *pt1_parameter, int X////----------------------------------------------------------------------------// @Description//// PT1-Controller// derived from transfer function//// Y_(k = Y_(k-1 + Z1_(k * X_(k - Z2_(k * Y_(k-1//----------------------------------------------------------------------------// Computing time 42 CPU-cycle////----------------------------------------------------------------------------// @Returnvalue//// int "@3" Output of pt1_controller//----------------------------------------------------------------------------// @Parameters//----------------------------------------------------------------------------// Condition optimization off / one//****************************************************************** **********inline int pt1_controller32( PT1_array *pt1_parameter, int X//inline int pt1_controller32( int *pt1_parameter, int X{int retvalue;__asm( "\n"" mov r10,MCW ;Save MCW register \n"" mov MCW,#0400h ;Set shift left \n"" mov %0,[%1+] \n"" CoLOAD %0,[%1] ;Load Y(k-1 in accumulator \n"" mov r13,%1 ;Save parameters addres in %1 \n"" add r13,#2 \n"" mov r12,[r13+] ;Load Z1 in R5 \n"" mov r11,[r13+] ;Load Z2 in R6 \n"" CoMAC r12,%2 ;CoACC = Y(k-1 + Z1 * X \n"" CoMAC- r11,[%1] ;CoACC = Y(k-1 + Z1 * X - Z2 * Y(k-1 \n" "\n""\n"" mov r11,[r13+] ;Load ynmax (limit value max \n"" mov r12,[r13+] ;Load ynmin (limit value min \n"" mov %0,ZEROS ;Load zero in %0 \n"" CoMIN %0,r11 ;Limit max yn \n"" CoMAX %0,r12 ;Limit min yn \n"" CoSTORE %0,MAS ;Store Y(k-high in R4 \n"" CoSTORE r13,MAL ;Store Y(k-low in R3 \n"" mov [%1],%0 ;Store in Y buffer(High \n"" mov [-%1],r13 ;Store in Y buffer(Low \n""\n"" mov MCW,r10 ;Restore MCW register \n""\n": "=&w"(retvalue /* output registers */: "w"(pt1_parameter,"w"(X /* input registers */: "r13","r12","r11","r10"/*scratch registers */;return retvalue;}//****************************************************************** **********// @Function void ADC0_vStartSeq0ReqChNum(ubyte ubExtTrg, ubyte// ubEnIntr, ubyte ubRFill, ubyte ubChannelNum////----------------------------------------------------------------------------// @Description This function starts the conversion of the requested// channel.// NOTE -// Before passing ubEnIntr argument as 1,make sure that Seq 0// source interrupt is enabled.// External Trigger -> 0,Indicates software trigger// (Conversion starts once this function is executed////---------------------------------------------------------------------------- // @Returnvalue None////---------------------------------------------------------------------------- // @Parameters ubExtTrg:// External Trigger : defines external trigger.// @Parameters ubEnIntr:// Enable Source Interrupt : defines source interrupt// @Parameters ubRFill:// Refill : defines the refill// @Parameters ubChannelNum:// Channel number : Name of the Request Channel Number (0 - // 15- see macros defined in the header file////----------------------------------------------------------------------------// @Date 14.05.2010////****************************************************************** **********void ADC0_vStartSeq0ReqChNum(ubyte ubExtTrg, ubyte ubEnIntr, ubyte ubRFill, ubyte ubChannelNum {uword uwVal = 0;if (ubExtTrg == 1{uwVal = 0x0080;}if (ubEnIntr == 1{uwVal = uwVal + 0x0040;}if (ubRFill == 1{uwVal = uwVal + 0x0020;}uwVal = uwVal + (ubChannelNum & 0x001f;ADC0_QINR0 = uwVal; // requested channel} // End of function ADC0_vStartSeq0ReqChNum//****************************************************************** ********** // @Function void ADC0_viSRN0(void////----------------------------------------------------------------------------// @Description This is the interrupt service routine for the Service// Request Node 0 of the ADC0 module.////----------------------------------------------------------------------------// @Returnvalue None////----------------------------------------------------------------------------// @Parameters None////----------------------------------------------------------------------------// @Date14.05.2010////****************************************************************** ********** // USER CODE BEGIN (ADC0_viSRN0,0// USER CODE END_interrupt(ADC0_SRN0INT void ADC0_viSRN0(void{if((ADC0_EVINFR & 0x0100 == 0x0100 //Result0 event interrupt{ADC0_EVINCR = 0x0100; // Clear Result0 event interrupt// USER CODE BEGIN (ADC0_viSRN0,20if( CCU60_TCTR0 & 0x0040 // check count direction of T12.ADC0_CHCTR8 |= 0x1000; // 1: T12 counts down -> assign ADC-CH8 to RESREG1 elseADC0_CHCTR8 &= 0xefff; // 0: T12 counts up -> assign ADC-CH8 to RESREG0if( !(svm0.Sector & 0x0001CCU60_T13PR = svm0.T2Store/2 + svm0.ADCDELAY; // set T13 Period valueelseCCU60_T13PR = svm0.T1Store/2 + svm0.ADCDELAY; // set T13 Period valueCCU60_vEnableShadowTransfer(CCU60_TIMER_13; // enable shadow transfer// USER CODE END}} // End of function ADC0_viSRN0//****************************************************************** ********** // @Function void ADC0_viSRN1(void////----------------------------------------------------------------------------// @Description This is the interrupt service routine for the Service// Request Node 1 of the ADC0 module.////----------------------------------------------------------------------------// @Returnvalue None////----------------------------------------------------------------------------// @Parameters None////----------------------------------------------------------------------------// @Date 14.05.2010////****************************************************************** **********// USER CODE BEGIN (ADC0_viSRN1,0// USER CODE END_interrupt(ADC0_SRN1INT void ADC0_viSRN1(void{if((ADC0_EVINFR & 0x0200 == 0x0200 //Result1 event interrupt{ADC0_EVINCR = 0x0200; // Clear Result1 event interrupt// USER CODE BEGIN (ADC0_viSRN1,21ADC0_CHCTR8 &= 0xefff; // assign ADC-CH8 to RESREG0 if( !(svm0.Sector & 0x0001CCU60_T13PR = svm0.T1Store/2 + svm0.ADCDELAY; // set T13 Period value elseCCU60_T13PR = svm0.T2Store/2 + svm0.ADCDELAY; // set T13 Period value CCU60_vEnableShadowTransfer(CCU60_TIMER_13; // enable shadow transfer// calculate Ialpha and Ibeta from single shunt measurementswitch( svm0.SectorStore{case 0:svm0.IphaseA = (ADC0_RESR0 & 0x0fff - svm0.ADCOFFSET;svm0.IphaseB = (ADC0_RESR1 & 0x0fff - (ADC0_RESR0 & 0x0fff;break;case 1:svm0.IphaseA = (ADC0_RESR1 & 0x0fff - (ADC0_RESR0 & 0x0fff;svm0.IphaseB = (ADC0_RESR0 & 0x0fff - svm0.ADCOFFSET;break;case 2:svm0.IphaseA = -(ADC0_RESR1 & 0x0fff + svm0.ADCOFFSET;svm0.IphaseB = (ADC0_RESR0 & 0x0fff - svm0.ADCOFFSET;break;case 3:svm0.IphaseA = -(ADC0_RESR1 & 0x0fff + svm0.ADCOFFSET;svm0.IphaseB = (ADC0_RESR1 & 0x0fff - (ADC0_RESR0 & 0x0fff; break;case 4:svm0.IphaseA = (ADC0_RESR1 & 0x0fff - (ADC0_RESR0 & 0x0fff; svm0.IphaseB = -(ADC0_RESR1 & 0x0fff + svm0.ADCOFFSET; break;case 5:svm0.IphaseA = (ADC0_RESR0 & 0x0fff - svm0.ADCOFFSET;svm0.IphaseB = -(ADC0_RESR1 & 0x0fff + svm0.ADCOFFSET; break;default:break;}// Calculate currents Id and Iqfoc0.Id = park_trans( foc0.Ialpha, foc0.Ibeta, foc0.AngleStore, &foc0.Iq ; // USER CODE END}} // End of function ADC0_viSRN1//****************************************************************** ********** // @Function void CCU60_viNodeI0(void////----------------------------------------------------------------------------// @Description This is the interrupt service routine for the CCU60 node// I0. If the content of the corresponding compare timer// (configurable equals the content of the capture/compare// register or if a capture event occurs at the associated// port pin, the interrupt request flag is set and an// interrupt is triggered (only if enabled.// Please note that you have to add application specific code// to this function.////----------------------------------------------------------------------------// @Returnvalue None////----------------------------------------------------------------------------// @Parameters None////----------------------------------------------------------------------------// @Date14.05.2010////****************************************************************** ********** // USER CODE BEGIN (NodeI0,1// USER CODE END_interrupt(CCU60_NodeI0_INT void CCU60_viNodeI0(void{// USER CODE BEGIN (NodeI0,2// USER CODE ENDif(CCU60_IS & 0x0040 // if CCU60_IS_T12OM{// Timer T12 one match detection// USER CODE BEGIN (NodeI0,20CCU60_vEnableShadowTransfer(CCU60_TIMER_12;// USER CODE ENDCCU60_ISR |= 0x0040; // clear flag CCU60_IS_T12OM}if(CCU60_IS & 0x0080 // if CCU60_IS_T12PM{// Timer T12 period match detection// USER CODE BEGIN (NodeI0,19CCU60_TCTR2 = t13_trigger[svm0.Sector];svm0.SectorStore = svm0.Sector;svm0.T1Store = svm0.T1;svm0.T2Store = svm0.T2;foc0.AngleStore = foc0.Angle;// Flux Estimator//****************************************************************** **********************DSP_MAC(foc0.Ialpha, foc0.STATOR_R, foc0.Valpha;DSP_MAC(foc0.Ibeta, foc0.STATOR_R, foc0.Vbeta;foc0.FluxAmplitude = cart_polar_conv(foc0.Fluxalpha, foc0.Fluxbeta,&foc0.FluxAngle;//****************************************************************** **********************if( status0.control == 0{foc0.Vd = 0;if( foc0.AngleSpeed > 0foc0.Vq = vf_control(foc0.Vf_offset, foc0.Vf_slew, foc0.AngleSpeed;elsefoc0.Vq = vf_control(-foc0.Vf_offset, foc0.Vf_slew, foc0.AngleSpeed;}else{control0.ReferenceIq = pi_controller32(&control0.Speed, control0.ReferenceSpeed, control0.ActualSpeed;foc0.Vd = pi_controller32(&control0.Id, control0.ReferenceId, foc0.Id;foc0.Vq = pi_controller32(&control0.Iq, control0.ReferenceIq, foc0.Iq;}foc0.Valpha = inv_park_trans( foc0.Vd, foc0.Vq, foc0.Angle, &foc0.Vbeta ;// Modulatorsvm( &svm0 ;// USER CODE ENDCCU60_ISR |= 0x0080; // clear flag CCU60_IS_T12PM }} // End of function CCU60_viNodeI0//****************************************************************** ********** // @Prototypes Of Local Functions//****************************************************************** ********** unsigned int V_TA, V_TB;void svm( tSVM *svm{unsigned char gamma;unsigned int tmp, T1_2;tmp = (((unsigned intsvm->Angle >> 4 * 6;gamma = (unsigned char (tmp>>4;svm->Sector = tmp >> 12;svm->T1 = DSP_minMUL( svm->Amplitude, Sinus60_tab[(unsigned char~gamma], svm->SVMTMIN ; svm->T2 = DSP_minMUL( svm->Amplitude,Sinus60_tab[(unsigned char gamma], svm->SVMTMIN ;T1_2 = (svm->T1 + svm->T2/2;V_TA = svm->T12PERIODE/2 + T1_2;V_TB = svm->T12PERIODE/2 - T1_2;switch( svm->Sector{case 0:*((unsigned int volatile*(svm->CCU6_BASEADDR + CC60SR = V_TB;*((unsigned int volatile*(svm->CCU6_BASEADDR + CC61SR = V_TB + svm->T1; // V_TC;*((unsigned int volatile*(svm->CCU6_BASEADDR + CC62SR = V_TA;break;case 1:*((unsigned int volatile*(svm->CCU6_BASEADDR + CC60SR = V_TB + svm->T2; // V_TC;*((unsigned int volatile*(svm->CCU6_BASEADDR + CC61SR = V_TB;*((unsigned int volatile*(svm->CCU6_BASEADDR + CC62SR = V_TA;break;case 2:*((unsigned int volatile*(svm->CCU6_BASEADDR + CC60SR = V_TA;*((unsigned int volatile*(svm->CCU6_BASEADDR + CC61SR = V_TB;*((unsigned int volatile*(svm->CCU6_BASEADDR + CC62SR = V_TB + svm->T1; // V_TC;break;case 3:*((unsigned int volatile*(svm->CCU6_BASEADDR + CC60SR = V_TA;*((unsigned int volatile*(svm->CCU6_BASEADDR + CC61SR = V_TB + svm->T2; // V_TC;*((unsigned int volatile*(svm->CCU6_BASEADDR + CC62SR = V_TB;break;case 4:*((unsigned int volatile*(svm->CCU6_BASEADDR + CC60SR = V_TB + svm->T1; // V_TC;*((unsigned int volatile*(svm->CCU6_BASEADDR + CC61SR = V_TA;*((unsigned int volatile*(svm->CCU6_BASEADDR + CC62SR = V_TB;break;case 5:*((unsigned int volatile*(svm->CCU6_BASEADDR + CC60SR = V_TB;*((unsigned int volatile*(svm->CCU6_BASEADDR + CC61SR = V_TA;*((unsigned int volatile*(svm->CCU6_BASEADDR + CC62SR = V_TB + svm->T2; // V_TC;break;default:break;}}。
西子孚信永磁同步pm変频门机中文调试文件
文件编号 M07-17SM 部分编号 页 码: 第 3 / 26 页
日 期: 2007-06-12 版 本: 第 A 版 修 改: 第 0 次
DC24V 0V
SGS2
SGS1
光眼
SP3
图 3-2 接线图
b) 与 LCB2 控制系统配合使用时,接线方式见图 3-3。
SGS1
SGS2
SP3
光眼
编码器转一周 的脉冲数 运行模式
参数设置值 (以 FORWARD 电机
为例)
1
00(开到位和关到位 都为常开)
01(开到位常闭,关 到位常开)
02(开到位常开,关 到位常闭)
03(开到位和关到位 都为常闭)
512
0(定位、自学习时此 参数都要设置为 0)
备注
手动时电机正反转的 设置(0 或 1)
用于输入信号常开常 闭的选择(出厂时磁开 关信号是固定的,但初 调时最好再用万用表
4.3.1 自学习之前,进入菜单 3311 中修改 run comd source 为 0,进入菜单 3312,修改“man speed” (一般为 2.0Hz 保证手动时门速不至于过快)。
4.3.2 把门拉到中间位置,进入菜单 311,按 Enter,手动运行一下电机,再按 CLEAR 键,确认 电机是否向开门方向运行,如果方向相反,则进入菜单 3311,改变
永磁同步门机
调试文件
文件编号 M07-17SM 部分编号 页 码: 第 6 / 26 页
日 期: 2007-06-12 版 本: 第 A 版 修 改: 第 0 次
编码器
图 3-8 永磁变频器配 LCB2 时的后门接线图
4 调试说明
永磁同步门机
PMSM 无传感器FOC 的单分流三相电流重构算法
表 1:
IH ON OFF OFF OFF ON ON
分流电阻真值表
2H OFF ON OFF ON OFF ON 3H OFF OFF ON ON ON OFF 1L OFF ON ON ON OFF OFF 2L ON OFF ON OFF ON OFF 3L ON ON OFF OFF OFF ON IBUS +IA +IB +IC –IA –IB –IC
电流测量流经电机线圈的电流中所蕴含的信息使得电机控制算法能够把电机控制在产生最大转矩的区间或者控制电机使之呈现某种性能甚至能够近似或估计诸如位置这样的内部电机变量
AN1299
PMSM 无传感器 FOC 的单分流三相电流重构算法
作者:
Daniel Torres and Jorge Zambada Microchip Technology Inc. 这些应用是无传感器方法的完美目标应用,在无传感器 方法中,可以使用流经电机线圈的电流提供的信息,对 电机位置进行估计。实现该传感技术可采用以下两种途 径:双分流电阻和单分流电阻。 为了估计电机位置,双分流电阻技术利用的是流过两个 电机线圈的电流所蕴含的信息。单分流电阻技术仅利用 流经直流母线的电流所蕴含的信息,进而重构三相电 流,然后估计电机位置。 本应用笔记将讨论单分流方法。至于双分流电阻方法的 信息,请参阅应用笔记 AN1078, 《PMSM 电机的无传 感器磁场定向控制》 。
图 15: 相似占空比的采样时间窗口
PWM1L PWM2L PWM3L T0 T1 T3 T2 = 0 T1 T0
2009 Microchip Technology Inc.
DS01299A_CN 第 7 页
AN1299
低调制指数期间占空比的相似性
PMSM电机矢量控制之电流采样原理分析
PMSM 电机矢量控制之电流采样原理分析摘要:本文分析了PMSM 电机磁场定向控制(FOC)器的电流采集硬件电路,包括母线电流采样和相线电流采样的电路分析。
以下电路是业界常用、稳定、经典的不二之选,工作之余,在此与同僚分享一下。
15621R Uop Up R Up V cc -=-----------------------------------------(1-1)158N 157N O R U R U U =--------------------------------------------------(1-2)P N U U =-----------------------------------------------------------(1-3)整理后,代入数值得:230U 220V 10U OP CC P +=-----------------------------------------(1-4)O N U 11.21.2U =----------------------------------------------------(1-5)P N U U =-----------------------------------------------------------(1-6)最终,推出:OP O U 8.93V 1.34U +=-----------------------------------------(1-7)一、当MOS 管IRFB3607处于正向导通状态时,电流在一定范围内会使二极管D13处于不导通状态(Up-Un<,但是电流超过阈值后,便会使二极管D13导通,并将电压嵌制在。
当MOS 管IRFB3607处于反向导通状态时,其体二极管也起到电压嵌制作用,电路工作原理相似。
5692BM P 93P CC R R U U R U V +-=----------------------------------------------------------------------(2-1)132OP N 140N O R U U R U U -=----------------------------------------------------------------------(2-2)P N U U =---------------------------------------------------------------------------------------(2-3)令15692R R R =+,代入上式(2-1),整理得:931BM 93CC 1P R R U R V R U ++=----------------------------------------------------------------------(2-4)140132OP 140O 132N R R U R U R U ++=--------------------------------------------------------------------(2-5)P N U U =----------------------------------------------------------------------------------------(2-6)整理以上各式可得:OP 931132931140BM 93113214013293CC 9311321401321O U )R (R R )R (R R U )R (R R )R (R R V )R (R R )R (R R U ++-+++++=------(2-7)分析(2-7)式可知,第一项应该是基准电压,必须有CC CC 9311321401321V 21V )R (R R )R (R R =++,第二项和第三项的系数应该相等,即)R (R R )R (R R )R (R R )R (R R 93113293114093113214013293++=++,以此获取下桥臂MOS 管的管压降值。
一种基于无感FOC算法的PMSM电机开环切换闭环控制方法
(19)中华人民共和国国家知识产权局
(12)发明专利申请
(10)申请公布号
CN111193442A
(43)申请公布日 2020.05.22(21)申请号CN202010271566.3
(22)申请日2020.04.09
(71)申请人南京美均电子科技有限公司
地址210000 江苏省南京市江宁区清水亭东路1318号12号楼
(72)发明人周志华;袁剑恩;徐波
(74)专利代理机构常州佰业腾飞专利代理事务所(普通合伙)
代理人姜晓钰
(51)Int.CI
权利要求说明书说明书幅图
(54)发明名称
一种基于无感FOC算法的PMSM电机开环切换闭环控制方法
(57)摘要
本发明公开了一种基于无感FOC算法的
PMSM电机开环切换闭环控制方法,涉及PMSM电
机控制技术领域,包括在PMSM电机的FOC控制的
开环切换闭环系统中,在达到开环最大速度后,
保持一定时间,在此时间内让电压幅值递减,在
此过程中,当
法律状态
法律状态公告日法律状态信息法律状态
法律状态公告日法律状态信息法律状态2020-05-22公开公开
2020-05-22公开公开
2020-06-16实质审查的生效实质审查的生效
权利要求说明书
一种基于无感FOC算法的PMSM电机开环切换闭环控制方法的权利要求说明书内容是....请下载后查看
说明书
一种基于无感FOC算法的PMSM电机开环切换闭环控制方法的说明书内容是....请下载后查看。
PMSM电机矢量控制之电流采样原理分析
PMSM 电机矢量控制之电流采样原理分析摘要:本文分析了PMSM 电机磁场定向控制(FOC)器的电流采集硬件电路,包括母线电流采样和相线电流采样的电路分析。
以下电路是业界常用、稳定、经典的不二之选,工作之余,在此与同僚分享一下。
15621R Uop Up R Up V cc -=-----------------------------------------(1-1) 158N 157N O R U R U U =--------------------------------------------------(1-2) P N U U =-----------------------------------------------------------(1-3)整理后,代入数值得:230U 220V 10U OP CC P +=-----------------------------------------(1-4) O N U 11.21.2U =----------------------------------------------------(1-5) P N U U =-----------------------------------------------------------(1-6)最终,推出:OP O U 8.93V 1.34U +=-----------------------------------------(1-7)一、当MOS 管IRFB3607处于正向导通状态时,电流在一定范围内会使二极管D13处于不导通状态(Up-Un<0.7V),但是电流超过阈值后,便会使二极管D13导通,并将电压嵌制在0.7V 。
当MOS 管IRFB3607处于反向导通状态时,其体二极管也起到电压嵌制作用,电路工作原理相似。
5692BM P 93P CC R R U U R U V +-=----------------------------------------------------------------------(2-1) 132OP N 140N O R U U R U U -=----------------------------------------------------------------------(2-2) P N U U =---------------------------------------------------------------------------------------(2-3) 令15692R R R =+,代入上式(2-1),整理得:931BM 93CC 1P R R U R V R U ++=----------------------------------------------------------------------(2-4) 140132OP 140O 132N R R U R U R U ++=--------------------------------------------------------------------(2-5) P N U U =----------------------------------------------------------------------------------------(2-6) 整理以上各式可得:OP 931132931140BM 93113214013293CC 9311321401321O U )R (R R )R (R R U )R (R R )R (R R V )R (R R )R (R R U ++-+++++=------(2-7) 分析(2-7)式可知,第一项应该是基准电压,必须有CC CC 9311321401321V 21V )R (R R )R (R R =++,第二项和第三项的系数应该相等,即)R (R R )R (R R )R (R R )R (R R 93113293114093113214013293++=++,以此获取下桥臂MOS 管的管压降值。
电器设计中的电机控制趋势
CEM I专题报道I Feature Report电器设计中的电机控制趋势I Microchip公司||Patrick Heath许多家用电器都包括一个或多个对其功能至关重要的电机。
在不断提高市场份额的斗争中,新产品设计力求使其产品在竞争中脱颖而出。
本文将探讨五个主要趋势,这些趋势塑造了电器电机控制的未来,电器电机控制适用于从HVAC系统到食品加工的所有领域。
能效最大限度地降低电机和压缩机的功耗仍然是电器设计的大趋势之一。
在很大程度上,美国环境保护局(EPA)家用电器能源之星计划推动着这一进程。
这项计划会对产品进行评级并提供相应的标签,显示运行该设备所需的全年电量(kWh)。
更高效的产品将获得能源之星评级,而这是许多消费者眼中的必备家电属性。
许多其他国家/地区的政府提供类似的评级系统。
低端设备通常使用交流感应电机(ACIM)。
使用变频驱动器(VFD)可以相对简单地控制这些电机。
在这种技术中,三相正弦波形为电动机的绕组供电。
电机的控制通过改变脉宽调制(PWM)占空比来实现,PWM占空比通过其变化率来设置电压和频率。
对于VFD,只要负载不变,即可通过使电压与频率之比保持恒定来提供恒定的转矩。
遗憾的是,装备有VFD的ACIM对变化的负载或速度请求的反应缓慢,这降低了它的效率。
例如,洗衣机通常使用ACIM,并且ACIM对可变负载的变化反应不佳。
当湿衣服在滚筒内翻转,或者在搅拌期间滚筒旋转发生变化时,就会发生这种情况。
提高效率的最直接方法是改变运行设备的电机类型。
高端设备已经开始采用一种新型电机.称为永磁同步电机(PMSM)。
由于设计原因,这种电机提供了更好的控制,但制造成本也更高。
PMSM的效率更高,因为它们在转子中使用永磁体,而感应电机转子使用的绕线线圈需要额外的能量来维持磁场。
PMSM设计的优点是可以使用一种称为磁场定向控制(FOC)的改进控制算法,这种算法可以在更宽的负载或速度范围内非常精确地控制电机使用的能量。
FOC控制永磁同步电机(PMSM)接线方法
PV_H 方
18
PV_L
波 驱
19
PW_H 动
正弦波(SVPWM)驱动信号
PA9 PB14 PA10
20
PW_L 信
号
22
SD
ShutDown引脚,停机,高电平有效
PB15
与GND连接或者悬空
引脚顺序定义:
21 23 24
GND 5V
电源 线
开发板和驱动板至少需要连接一根 GND线。
5V电源这里没有用到。
其他引脚在本工程中没有使用到。
GND
GND 5V
左上角为1 右上角为2 左下角为23 右下角为24
触摸按键 SEL KEY1 KEY2 UP
DOWN LEFT RIGHT
功能说明
这三个按键功能完全相同,用于电机 旋转启动和停止
参数值向上或者增加 参数值向下或者减少 界面参数选择左移 界面参数选择右移
NC
13 PZ-
Z-
14
PB-
编码器
B-
15 PA-
A-
42永磁同步电机(PMSM)参数
供电电压 额定功率 额定力矩 峰值力矩 额定转速 额定电枢电流 力矩系数 反电势系数
磁极 编码器
24 V 63W 0.2 N.M 0.6 N.M 3000 RPM 3.13 A 0.057 N.M/A 4.13 V/KRPM 8(4对极) 1000线
模块引脚
功能说明
开发板引脚
1
A
编
3
B
码
5
Z
器
编码器接口
PC6 PC7 不接
PMSM电机传感器 专用接口
8
U
线
PC1
电助力自行车的FOC控制技术
电助力自行车的FOC控制技术电助力自行车的FOC控制技术随着环保意识的不断增强和城市交通的拥堵,电动自行车成为了越来越多人出行的选择。
而在电动自行车中,电助力自行车则拥有着更高的普及度和市场份额。
那么,在电助力自行车中,FOC控制技术又是什么呢?FOC控制技术是电动车较为常见的一种控制技术,它是一种用于转子感应电机(PMSM)和无刷直流电机(BLDC)的电机控制技术。
FOC控制技术的主要目标是使电机运转时,转子位置和电流的波形尽可能接近正弦波,以达到最高效率。
这种技术可以提高电动自行车的动力性能、降低能耗、延长电机寿命等。
FOC控制技术在电助力自行车中的应用,可以带来以下几个显著的优点:1. 提高动力性能:通过FOC控制技术,可以增强电机的输出功率、提高转矩和启动度,从而使车辆更加快速和平稳地起步,加速和爬坡。
2. 降低能耗:FOC控制技术可以使电机在低转速下达到最高效率,从而最大限度地利用电池电量,降低能源消耗。
3. 延长电机寿命:在FOC控制技术的控制下,电动自行车的电机运行更加平稳,噪声更小,从而减少电机的磨损程度,延长电机寿命,降低维护成本。
4. 提高骑行舒适性:FOC控制技术可以使电动自行车的骑行更加平稳,减少颠簸和震动,提高骑行的舒适性。
虽然FOC控制技术带来的优点是显著的,但是它也存在一些挑战需要解决。
例如,采用FOC技术需要在硬件上增加一些传感器和处理器,增加了成本和复杂度;另外,FOC控制技术的精度要求比较高,需要采用高性能的控制算法和传感器。
总的来说,FOC控制技术在电助力自行车中的应用,可以提高车辆的动力性能、降低能耗、延长电机寿命等。
虽然它存在一些挑战,但是随着技术的不断成熟和降低成本,FOC控制技术将成为电动自行车控制技术的重要发展方向。
二轮电动车foc电机控制策略
二轮电动车foc电机控制策略下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by the editor. I hope that after you download them, they can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!In addition, our shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!二轮电动车foc电机控制策略一、引言随着环保意识的增强和能源危机的出现,电动车成为了普遍受到关注的交通工具之一。
电助力自行车的FOC控制技术
工业技术科技创新导报 Science and Technology Innovation Herald88①作者简介:郝玉峰(1986,3—),男,汉族,江苏徐州人,硕士,工程师,研究方向:PMSM无传感器控制。
DOI:10.16660/ki.1674-098X.2020.03.088电助力自行车的FOC控制技术①郝玉峰(芜湖飞龙汽车电子技术研究院有限公司 安徽芜湖 241000)摘 要:电助力自行车是自行车的一种,通常以锂电池作为动力源,并装有电机及其控制系统。
文章介绍了电助力自行车(E-Bike )及其驱动方式,分析了目前E-Bike的控制方法及其优劣,并结合扭矩传感器的反馈信号,分析了在E-Bike上的FOC控制算法。
最后对控制结果进行分析,并对未来电助力自行车的控制算法发展方向进行展望。
关键词:E-Bike FOC 扭矩传感器 PMSM 中图分类号:TM351 文献标识码:A 文章编号:1674-098X(2020)01(c)-0088-021 电助力自行车(E-Bike )及其驱动电机电助力自行车是自行车的一种,通常以锂电池作为动力源,并装有电机及其控制系统。
与电动自行车的区别就是,电助力自行车不是通过转把来实现骑行控制,而是通过人骑行时踩踏脚踏板的力矩大小来输出不同力矩与转速,实现助力骑行功能。
由于这种动力方式并不完全依赖于电池动力输出,而是人电动力混合的输出方式,因此,电助力自行车的骑行续航能力比一般电动自行车要远很多。
电助力自行车的电机一般为永磁同步电动机(PMSM),电机的安装方式主要有中置(Mid-Motor )和后置(Rear-Motor )两种。
其外形如图1所示。
中置电机安装在车架的中间部分,两侧安装脚踏板,通过链条将动力传递到后轮。
在没有动力源的情况下,骑行阻力与非助力自行车相差不大。
后置电机安装在后轮轮毂处,直接驱动后轮提供助力。
电助力自行车的助力感应传感器除了力矩传感器外还有后轴勾爪传感器、扭簧传感器和转速传感器等[1],但从控制效果来看,最好的还是力矩传感器,因为它可以及时准确的感知骑行者的意图,实时调节输出力矩与转速的大小,这是其他传感器无法做到的。
MICROCHIP AN1078 PMSM电机FOC控制中文
矢量控制综述
间接矢量控制的过程总结如下: 1. 测量 3 相定子电流。 这些测量可得到 ia 和 ib 的 值。 可通过以下公式计算出 Ic : ia + ib + ic = 0。 将 3 相电流变换至 2 轴系统。该变换将得到变量 它们是由测得的 ia 和 ib 以及计算出的 ic 值 iα 和 iβ, 变换而来。从定子角度来看,iα 和 iβ 是相互正交 的时变电流值。 按照控制环上一次迭代计算出的变换角,来旋转 2 轴系统使之与转子磁通对齐。 iα 和 iβ 变量经过 该变换可得到 Id 和 Iq。Id 和 Iq 为变换到旋转坐标 系下的正交电流。在稳态条件下, Id 和 Iq是常量。 误差信号由 Id、 Iq 的实际值和各自的参考值进行 比较而获得。 • Id 的参考值控制转子磁通 • Iq 的参考值控制电机的转矩输出 • 误差信号是到 PI 控制器的输入 • 控制器的输出为 Vd 和 Vq,即要施加到电机 上的电压矢量 估算出新的变换角,其中 vα、 vβ、 iα 和 iβ 是输 入参数。 新的角度可告知 FOC 算法下一个电压 矢量在何处。 通过使用新的角度,可将 PI 控制器的 Vd 和 Vq 输出值逆变到静止参考坐标系。该计算将产生下 一个正交电压值 vα 和 vβ。 vα 和 vβ 值经过逆变换得到 3 相值 va、vb 和 vc。 该 3 相电压值可用来计算新的 PWM 占空比值, 以生成所期望的电压矢量。图 6 显示了变换、PI 迭代、逆变换以及产生 PWM 的整个过程。
无传感器PSMS马达FOC控制算法详解
1258 FOC
Slide 9
PMSM结构
O PMSM具有与BLDC类似的结构, 但是,PMSM反电势信号为正弦 的,而BLDC PMSM梯形波
O 数学模型不同
O PMSM采用正弦电流驱动 O 与三相ACIM类似,但气隙磁通由转
子上安装的磁钢产生
© 2008 Microchip Technology Incorporated. All Rights Reserved.
1258 FOC
Slide 14
PMSM特性
转矩
去磁限制 VSI电流限制
短时运行 T0
VSI 电压曲线
连续运行 0
© 2008 Microchip Technology Incorporated. All Rights Reserved.
ωr
1258 FOC
转速
Slide 15
PMSM运行
PMSM电气模型
1258 FOC
Slide 18
PMSM运行
O 定子磁场可分解为与转子磁场平行 和正交两个分量
O 只有正交(交轴)磁场分量产生转 矩
O 平行(直轴)磁场分量产生作用于 轴承的压力
O 相电流产生定子磁场且可被测量
© 2008 Microchip Technology Incorporated. All Rights Reserved.
1258 FOC
Slide 5
PMSM 应用
O 空调机和冰箱(AC)压缩机 O 直接驱动洗衣机 O 高精度机床工具 O 汽车电动转向 O 牵引控制 O 数据储存
© 2008 Microchip Technology Incorporated. All Rights Reserved.
PMSM的FOC控制模型
基于FOC的PMSM速度控制系统的研究根据磁场定向控制理论以及永磁同步电动机调速控制系统的控制方案建立仿真模型,并对永磁同步电动机的调速过程进行仿真。
仿真结果较好地反映了永磁同步电动机的调速运行过程,对进一步开发永磁同步电动机速度控制系统具有重要意义。
l近年来,随着控制理论、永磁材料和电力电子技术的发展,基于磁场定向控制的永磁同步电动机(PMSM)以其优良的控制性能、高功率密度和高效率,广泛应用于各种高性能伺服系统及其他领域。
本文对永磁同步电动机的磁场定向控制(FOC)系统进行了理论研究与分析,并运用Matlab/Simulink对其调速系统进行建模与仿真。
2永磁同步伺服电动机的模型是一个多变量、非线性、强耦合系统。
为了实现动态过程的矢量控制,首先要实现解耦。
转子磁场定向控制是一种常用的解耦控制方法。
转子磁场定向控制实际上是将Odq同步旋转坐标系放在转子上,随转子同步旋转。
其d轴(直轴)与转子的磁场方向重台(定向),q轴(交轴)逆时针超前d轴90°电角度,如图1所示。
图l(图中转子的磁极对数为1)表示转子磁场定向后,定子三相不动坐标系A、B、c与转子同步旋转坐标系Odq的位置关系。
定子电流矢量is在Odq坐标系上的投影id、iq可以通过对iA、iB、iC的Clarke变换(3/2变换)和Park变换(交/直变换)求得,因此id、iq是直流量。
三相永磁同步伺服电动机的转矩方程为:式中,ψd、ψq——定子磁链在d、q轴的分量;ψf——转子磁钢在定子上的耦合磁链,它只在d轴上存在;p——转子的磁极对数;Ld、Lq——永磁同步电动机d、q轴的主电感。
式(1)说明转矩由两项组成,括号中的第一项是由三相旋转磁场和永磁磁场相互作用所产生的电磁转矩;第二项是由凸极效应引起的磁阻转矩。
对于嵌入式转子,Ld<Lq,电磁转矩和磁阻转矩同时存在。
可以灵活有效地利用这个磁阻转矩,通过调整和控制β角,用最小的电流幅值来获得最大的输出转矩。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2010 Microchip Technology Inc.
DS01078B_CN 第 1 页
AN1078
使用数字信号控制器进行电机控制
dsPIC DSC 电机控制系列是针对最常用的电机而设计 的,包括: • • • • 交流感应电机 (AC Induction Motor, ACIM) 直流有刷电机 (Brushed DC Motor, BDC) 直流无刷电机 (Brushless DC Motor, BLDC) 永磁同步电机 (Permanent Magnet Synchronous Motor, PMSM)
2.
3.
4.
5.
6.
7.
本应用笔记的以下部分将详细描述这些步骤。
DS01078B_CN 第 6 页
2010 Microchip Technology Inc.
AN1078
图 6:
ω REF
矢量控制框图
IQREF Vq Vα SVM Vd PI 3 相电桥
PI
PI
d,q
IDREF
α ,β Park 逆变换
数据监视和控制界面
数据 监 视 和 控 制 界 面 (Data Monitor and Control Interface, DMCI) 能够与 MPLAB® IDE 快速动态集成, 可通过这一个界面对 IDE 项目中的范围值、开 / 关状态 或离散值进行变量控制以对应用的运行加以限制。如果 需要,应用反馈可以图形方式来表示。提供电机控制和 音频处理方面的应用示例。 DMCI 可提供: • 9 个滑块和 9 个布尔量 (开 / 关)控制 (见图 1) • 35 路输入控制 (见图 2) • 4 个图 (见图 3) 该界面提供了可识别项目的程序符号 (变量)导航,这 些符号可被动态地分配给滑块控制、直接输入控制或布 尔量控制的任意组合。随后这些控制可交互地用来更改 MPLAB IDE 中的程序变量值。 这些图也可动态地进行 配置以查看程序所生成的数据。 注: DMCI 工具的特性可能会有所变化。 关于 DMCI 工具的说明,以其发布日期为准。
DS01078B_CN 第 4 页
2010 Microchip Technology Inc.
AN1078
系统概述
如图 4 所示,在电机轴上没有安装位置传感器。而使用 低自感系数的分流电阻(逆变器的一部分)来测量电机 上的电流。 三相逆变器被用作功率级来驱动电机绕组。 电源逆变器内置的电流检测和故障生成电路可防止整个 系统受到过电流的损坏。 图 5 说明了如何实现 3 相拓扑以及电流检测和故障生成 电路。 逆变器左边的第一个晶体管用于功率因数校正 (Power Factor Correction, PFC),本应用笔记中不作具体介 绍。 本应用笔记中所涉及的硬件是 dsPICDEM™ MCLV 开发 , 板 (DM330021) (用于电压最高为 50 VDC 的场合) 以及 dsPICDEM™ MCHV 开发板 (DM330023) (用 , 两者均可从 Microchip 于电压最高为 400 VDC 的场合) 网站 ()订购。
图 4:
系统概述
PWM1H PWM1L PWM2H PWM2L 3相 PMSM 3 相逆变器
dSPIC33FJ32MC204
PWM3H PWM3L
AN0 AN1 RB8
Ia Ib 过流
VR1 AN8 RA8 速度给定 启动 / 停止 S2 用户接口
图 5:
3 相拓扑
可选功率因素校正
PWM1H 115/230 VAC PWM1L
AN1078
PMSM 的无传感器磁场定向控制
作者:
Jorge Zambada 和 Debraj Deb Microchip Technology Inc. 本应用笔记着重于适用于电器的基于PMSM的无传感器 FOC 控制, 这是因为该控制技术在电器的电机控制方面 有着无可比拟的成本优势。 无传感器 FOC 技术也克服 了在某些应用上的限制,即由于电机被淹或其线束放置 位置的限制等问题,而无法部署位置或速度传感器。由 于PMSM使用了由转子上的永磁体所产生的恒定转子磁 场,因此它尤其适用于电器产品。此外,其定子磁场是 由正弦分布的绕组产生的。与感应电机相比, PMSM 在 其尺寸上具有无可比拟的优势。 由于使用了无刷技术, 这种电机的电噪音也比直流电机小。
已发表了一些基于 dsPIC DSC 电机控制系列的应用笔 记 (见 “参考文献”)。 这些应用笔记可从 Microchip 网站 ()获取。 本应用笔记说明了 dsPIC DSC 如何利用特别适合电机 控制的外设 (电机控制 PWM 和高速 ADC)来执行 PMSM 的无传感器磁场定向控制。 dsPIC DSC 的 DSP 引擎支持必要且快速的数学运算。
应用重点
本应用笔记的目的在于说明使用 Microchip 数字信号控 制器, 以软件的方式实现 PMSM 的无传感器磁场定向控 制。 该控制软件具有如下特征: • • • • 实现 PMSM 的矢量控制。 位置和速度估算算法可避免使用位置传感器。 测试得到速度范围从 500 到 17000 RPM。 当控制环周期为 50 µs 时,软件需要约 21 个 MIPS 的 CPU 开销 (占 CPU 总体开销的 2/3) 。 • 应用程序需要 450 字节的数据存储空间。包含用 户界面在内一共需要大约 6K 字节的程序存储空 间。根据对存储空间的需求,应用程序应可在 dsPIC33FJ12MC202 上运行,目前为止,此器件 是体积最小且最具成本效益的 dsPIC33F 器件。 • 启用可选的诊断模式以在示波器上对内部程序变量 进行实时观察。该功能可便于对控制环进行调整。
PWM2H
PWM3H PMSM
PWM2L
PWM3L
故障
<
Ia 电流 限制
Ib
2010 Microchip Technology Inc.
DS01078B_CN 第 5 页
Aபைடு நூலகம்1078
磁场定向控制
从不同的角度理解磁场定向控制
理解 FOC (有时称为矢量控制)如何工作的一种方法 是在头脑中设想参考坐标变换过程。如果从定子的角度 来设想交流电机的运行过程,则会看到在定子上施加了 一个正弦输入电流。该时变信号产生了旋转的磁通。转 子的速度是旋转磁通矢量的函数。 从静止的角度来看, 定子电流和旋转磁通矢量看似交流量。 现在,设想在电机内部,转子随着定子电流所产生的旋 转磁通矢量以相同的速度同步旋转。如果从这个角度观 察稳态条件下的电机,那么定子电流看似常量,且旋转 磁通矢量是静止的。 最终,希望控制定子电流来获得期望的转子电流(不可 直接测量得到)。 通过参考坐标变换,可使用标准控制 环,如同控制直流量一样实现对定子电流的控制。
矢量控制综述
间接矢量控制的过程总结如下: 1. 测量 3 相定子电流。 这些测量可得到 ia 和 ib 的 值。 可通过以下公式计算出 Ic : ia + ib + ic = 0。 将 3 相电流变换至 2 轴系统。该变换将得到变量 它们是由测得的 ia 和 ib 以及计算出的 ic 值 iα 和 iβ, 变换而来。从定子角度来看,iα 和 iβ 是相互正交 的时变电流值。 按照控制环上一次迭代计算出的变换角,来旋转 2 轴系统使之与转子磁通对齐。 iα 和 iβ 变量经过 该变换可得到 Id 和 Iq。Id 和 Iq 为变换到旋转坐标 系下的正交电流。在稳态条件下, Id 和 Iq是常量。 误差信号由 Id、 Iq 的实际值和各自的参考值进行 比较而获得。 • Id 的参考值控制转子磁通 • Iq 的参考值控制电机的转矩输出 • 误差信号是到 PI 控制器的输入 • 控制器的输出为 Vd 和 Vq,即要施加到电机 上的电压矢量 估算出新的变换角,其中 vα、 vβ、 iα 和 iβ 是输 入参数。 新的角度可告知 FOC 算法下一个电压 矢量在何处。 通过使用新的角度,可将 PI 控制器的 Vd 和 Vq 输出值逆变到静止参考坐标系。该计算将产生下 一个正交电压值 vα 和 vβ。 vα 和 vβ 值经过逆变换得到 3 相值 va、vb 和 vc。 该 3 相电压值可用来计算新的 PWM 占空比值, 以生成所期望的电压矢量。图 6 显示了变换、PI 迭代、逆变换以及产生 PWM 的整个过程。
Vβ Clarke 逆变换
θ
Iq Id
d,q
iα iβ
α,β
ia ib
α,β Park 变换 位置 速度 (ω )
a,b,c Clarke 变换
位置和速度 估算器
Vα Vβ
电机
2010 Microchip Technology Inc.
DS01078B_CN 第 7 页
AN1078
坐标变换
通过一系列坐标变换,可间接确定不随时间变化的转矩 和磁通值, 并可采用经典的 PI 控制环对其进行控制。控 制过程起始于 3 相电机电流的测量。实际应用中,三个 电流值的瞬时和为零。这样仅测量其中两个电流即可得 到第三个电流值。 因此,可通过去除第三个电流传感器 来降低硬件成本。 使用 dsPIC DSC 也可通过单分流的方式实现 3 相电流 的测量。 更多信息,请与 Microchip 联系。 欲 获 取 单 分 流 算 法的 详 细 说 明,请 参 见 AN1299, 《PMSM 无传感器 FOC 的单分流三相电流重构算法》 (DS01299A_CN)。
为什么使用 FOC 算法?
BLDC 电机的传统控制方法是以一个六步的控制过程来 驱动定子,而这种控制过程会使生成的转矩产生振荡。 在六步控制过程中,给一对绕组通电直到转子达到下一 位置,然后电机换相到下一步。 霍尔传感器用于确定转 子的位置,以采用电子方式给电机换相。 高级的无传感 器算法使用在定子绕组中产生的反电动势来确定转子位 置。 六步控制(也称为梯形控制)的动态响应并不适用于洗 衣机,这是因为在洗涤过程中负载始终处于动态变化 中,并随实际洗涤量和选定的洗涤模式不同而变化。 而 且,对于前开式洗衣机,当负载位于滚筒的顶部时,必 须克服重力对电机负载作功。 只有使用高级的算法如 FOC 才可处理这些动态负载变化。