# Maxwell motor torque scanning and drawing efficiency map using MTPA strategy

2021-01-23 23:48:56

# 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
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 .

https://chowdera.com/2021/01/20210123234817943U.html