1. Motor torque scan
For motors ipm_1
Current excitation settings :
- A phase :Im*sin(2*pi*fs*time+th)
- B phase :Im*sin(2*pi*fs*time+th-2*pi/3)
- C phase :Im*sin(2*pi*fs*time+th+2*pi/3)
Initial mechanical angle :
Motor parameters :( First keep init and th All for 0)
A Phase axis position :
N Polar axis :
1.1 Initial mechanical angle
First scan init( The original setting was 52.5deg), Because the motor has two pairs of poles , So the scan range is 0 To 180 degree , interval 5 degree .
Look at the torque diagram :
You can see , Different init There is a significant change in the torque under the load . Let's say init Is the horizontal axis , The average torque is the longitudinal axis , For further observation .
You can see , stay 5~95deg The torque in the interval is positive , The motor works in the electric state , The torque of other sections is negative , The motor works in the state of generating electricity .40deg When the motor torque reaches the maximum value .
stay 35~45deg Further scanning , Here's the picture .
init by 38.5deg when , The torque reaches the maximum , by 4.5956Nm.
1.2 Current angle
Yes th scan .
th by 4.97327(285 degree ) The torque is the maximum when the engine is running , The maximum value is 4.643Nm.
1.3 Summary
You can see , The two pictures above are axisymmetric , Setting the init And set up th It is equivalent. , When th by 285 When the degree of , That is, after 75 It's only at zero , Let the rotor rotate first 38 Degree mechanical angle . slightly smaller than 52.5 degree , And the stator magnetic field is ahead of the rotor magnetic field .
Draw the picture below , Can better illustrate the problem .
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")
You can see , The two almost coincide .
If mechanical transient analysis is turned on , Then you can see the speed fluctuation , But no external circuit is added at this time , So you can't set the control strategy .
2.MTPA
2.1dq Transformation
Now we're going to scan different currents , Before that, let's review Clark and Park Transformation , namely Id and Iq The calculation of .
Before that matlab The model built in :
namely
\[I_d=I_\alpha\cos(th)+I_\beta\sin(th)\\=\frac{2}{3}(I_a-0.5(I_b+I_c))\cos(th)+\frac{2}{3}\frac{\sqrt3}{2}(I_b-I_c)\sin(th)\\=\frac{2}{3}(I_a\cos(th)+I_b\cos(th-\frac{2\pi}{3})+I_c\cos(th+\frac{2\pi}{3}))\]
Empathy
\[I_q=-I_\alpha\sin(th)+I_\beta\cos(th)\\=-\frac{2}{3}(I_a-0.5(I_b+I_c))\sin(th)+\frac{2}{3}\frac{\sqrt3}{2}(I_b-I_c)\cos(th)\\=-\frac{2}{3}(I_a\sin(th)+I_b\sin(th-\frac{2\pi}{3})+I_c\sin(th+\frac{2\pi}{3}))\]
stay maxwell Of Output Variables This can be done in :
2.2MTPA
keep init=52.5deg, namely d Axis and A Alignment of phase axes , scanning Im and th, among th Scan range 0~2*pi, step 0.1745(10deg),Im Scan range 0~7.5A, step 0.5A.
Get the picture below :
Export table
Get the following table :
Take a look at it :
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)
Look for the maximum torque at each current :
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,] }
Get the form :
This is the torque command table at this speed .
2.3 efficiency MAP
The following use maxwell Tool rendering efficiency in map, Compare with the scan above .
stay View Open in menu bar ACT Extensions Tools .
choice Machine Toolkit Get into .
Select the project to be solved , And make corresponding settings .
The number of poles is to determine the relationship between current frequency and motor speed .
Set the resolution .
Further settings :( Generally, keep the default )
Click... After setting Finish Start calculating .
After the calculation, we get the following image .
Because only StrandedLoss, So it's very efficient .
ID:
IQ:
Im/1.414=Irms:
The extraction speed is 1800rpm Place the value of the :
And compared with the results obtained by scanning method , Here's the picture :
library(readxl) table2<-read_xlsx("mtpa contrast .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)
It can be seen that the two are very close , In terms of method, it's consistent . in other words , Use scanning method to consider several speed values , And consider both current and voltage limits , You can also draw the efficiency manually map chart .