1.电机转矩扫描
电机用的ipm_1
电流激励设置:
- A相:Im*sin(2*pi*fs*time+th)
- B相:Im*sin(2*pi*fs*time+th-2*pi/3)
- C相:Im*sin(2*pi*fs*time+th+2*pi/3)
初始机械角度:
电机参数:(先保持init和th都为0)
A相轴线位置:
N极轴线:
1.1初始机械角度
首先扫描init(原始设置是52.5deg),由于电机有两对极,所以扫描范围是0到180度,间隔5度。
观察转矩图:
可以看到,不同init下转矩有明显变化。下面以init为横轴,平均转矩为纵轴,进行进一步观察。
可以看到,在5~95deg区间内转矩为正,电机工作在电动状态,其他区间转矩为负,电机工作在发电状态。40deg时电机转矩达到最大值。
在35~45deg进行进一步扫描,如下图。
init为38.5deg时,转矩达到最大,为4.5956Nm。
1.2电流角
对th进行扫描。
th为4.97327(285度)时转矩最大,最大值为4.643Nm。
1.3小结
可以看到,上面的两幅图有轴对称关系,即设置init和设置th是等价的,当th为285度时,即再经过75度电角度才到达零点,也可以说成让转子先转约38度机械角度。略小于52.5度,及定子磁场超前于转子磁场。
画出下图,能更好地说明这一问题。
1 2 3 4 5 | data1<- read.csv ( 'Torque Plot 1.csv' ) #init
data2<- read.csv ( 'Torque Plot 2.csv' ) #th
plot (data1$init..deg.,data1$avg.Moving1.Torque...deg.,type= 'l' ,col= 'red' )
par (new= TRUE )
plot ((2* pi -data2$th...)/ pi *90,data2$avg.Moving1.Torque....,type= 'l' ,col= 'blue' )
|
可以看到,二者几乎完全重合。
如果开启机械瞬态分析,则可以看到转速的波动,但此时没有添加外电路,所以不能设定控制策略。
2.MTPA
2.1dq变换
下面对不同的电流进行扫描,在此之前先回顾一下Clark和Park变换,即Id和Iq的计算。
之前在matlab中搭建的模型:
即
Id=Iαcos(pos)+Iβsin(pos)=23(Ia−0.5(Ib+Ic))cos(pos)+233–√2(Ib−Ic)sin(pos)=23(Iacos(pos)+Ibcos(pos−2π3)+Iccos(pos+2π3))
同理
Iq=−Iαsin(pos)+Iβcos(pos)=−23(Ia−0.5(Ib+Ic))sin(pos)+233–√2(Ib−Ic)cos(pos)=−23(Iasin(pos)+Ibsin(pos−2π3)+Icsin(pos+2π3))
在maxwell的Output Variables中可以进行这样的设置:
2.2MTPA
保持init=52.5deg,即d轴和A相轴线对齐,扫描Im和th,其中th扫描范围0~2*pi,步长0.1745(10deg),Im扫描范围0~7.5A,步长0.5A。
得到下图:
导出表格
得到下表:
绘图观察一下:
1 2 3 4 5 6 | data<- read.csv ( 'Table 1.csv' )
data<-data[, c (1,2,5,7,9)]
library (ggplot2)
ggplot (data, aes (th...,avg.Moving1.Torque....,col= factor (Im..A.)))+ geom_line ()
ggplot (data, aes (th...,avg.Moving1.Torque....,col= factor (Im..A.)))+ geom_line ()+
xlim (0,1.7)+ ylim (-1000,7000)
|
寻找每个电流下的最大转矩:
1 2 3 4 5 6 7 8 9 | I<- unique (data$Im..A.)
n<- length (I)
temp<- rep (0,n)
table<- data.frame (Im=temp,th=temp,Tor=temp,Id=temp,Iq=temp)
for (i in 1:n){
dataI<-data[data$Im..A.==I[i],]
index<- which.max (dataI$avg.Moving1.Torque....)
table[i,]<-dataI[index,]
}
|
得到表格:
这就是这一转速下的转矩指令表。
2.3效率MAP
下面利用maxwell中的工具绘制效率map,与上面的扫描结果进行对比。
在View菜单栏中打开ACT Extensions工具。
选择Machine Toolkit进入。
选择待求解的工程,并进行相应设置。
其中极数是为了确定电流频率和电机转速的关系。
设置求解精度。
进一步设置:(一般保持默认即可)
完成设置后点击Finish开始计算。
计算完成后得到下列图像。
因为损耗中只考虑了StrandedLoss,所以效率很高。
ID:
IQ:
Im/1.414=Irms:
提取转速为1800rpm处的值:
并与扫描法得到的结果对比,如下图:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | library (readxl)
table2<- read_xlsx ( 'mtpa对比.xlsx' )
layout ( matrix ( c (1,1,2,3), 2, 2, byrow = FALSE ),
widths= c (1, 1), heights= c (1, 1))
plot (table$Tor,table$Im,type= 'l' ,col= 'red' ,xlim= c (0,7000),ylim= c (0,8),xlab= 'Torque/mNm' ,ylab= 'Im/A' )
par (new= TRUE )
plot (1000*table2$Torque,table2$Im,type= 'l' ,col= 'blue' ,xlim= c (0,7000),ylim= c (0,8),xlab= '' ,ylab= '' )
legend ( 'topleft' ,legend= c ( 'sweep' , 'toolkit' ),
col= c ( 'red' , 'blue' ),lty=1,lwd=2)
plot (table$Tor,-table$Id,type= 'l' ,col= 'red' ,xlim= c (0,7000),ylim= c (-5000,0),xlab= 'Torque/mNm' ,ylab= 'Id/mA' )
par (new= TRUE )
plot (1000*table2$Torque,1000*table2$Id,type= 'l' ,col= 'blue' ,xlim= c (0,7000),ylim= c (-5000,0),xlab= '' ,ylab= '' )
legend ( 'bottomleft' ,legend= c ( 'sweep' , 'toolkit' ),
col= c ( 'red' , 'blue' ),lty=1,lwd=2)
plot (table$Tor,table$Iq,type= 'l' ,col= 'red' ,xlim= c (0,7000),ylim= c (0,6000),xlab= 'Torque/mNm' ,ylab= 'Iq/mA' )
par (new= TRUE )
plot (1000*table2$Torque,1000*table2$Iq,type= 'l' ,col= 'blue' ,xlim= c (0,7000),ylim= c (0,6000),xlab= '' ,ylab= '' )
legend ( 'topleft' ,legend= c ( 'sweep' , 'toolkit' ),
col= c ( 'red' , 'blue' ),lty=1,lwd=2)
|
可见二者非常接近,从方法上说是一致的。也就是说,使用扫描法多考虑几个转速取值,并兼顾电流和电压限制,同样可以手动绘出效率map图。
|