Matlab Pdetool
Lezione 3
Magnetostatica
Ing. Flavio Calvano
• Modello magnetostatica;
• Utilizzo del pdetool in modalità grafica;
• Esercitazione di laboratorio
Calcolo auto-induttanza;
Calcolo mutua-induttanza;
Confronto dati numerici-sperimentali.
Magnetostatica
Equazioni integrali magnetostatica
Formulazione differenziale
 B  0 B    A
  B  0JS      A  0JS
A '  A    B    A '    A

  A  0 gauge di coulomb
Il potenziale vettore A è univocamente
determinato dalla gauge di coulomb
Caso 2d assial-simmetrico
  B(, z)   0 e  J 
 B B z
e  


 z

  0e J 


Caso 2d assial-simmetrico
J
    A   2 A  (  A)
J  J  e  A  A  e
con   A  0
L’incognita nel caso assial-simmetrico
diventa uno scalare
1 

1 

( A  ) 
( A  )   0 J 
  
 z z
Pdetool
Creazione geometria
xmin=0;
xmax=2.2*10^-2;
dh=0.04;
dr=0.0025
pderect([xmax-dr xmax -dh dh],'R1');
pderect([xmin 10*xmax 10*(-dh) 10*dh],'R2');
Condizioni al contorno
pdesetbd(8,...
'dir',...
1,...
'1',...
'0')
pdesetbd(5,...
'dir',...
1,...
'1',...
'0')
pdesetbd(4,...
'dir',...
1,...
'1',...
'0')
pdesetbd(3,...
'dir',...
1,...
'1',...
'0')
Mesh
set(findobj(get(pde_fig,'Children'),'Tag','PDEEval'),'String','R2+R1');
gd=get(findobj(get(pde_fig,'Children'),'flat‘,'Tag','PDEMeshMenu'),'UserData');
dl=decsg(gd);
[p,e,t]=initmesh(dl,'Hmax',5e-1,'init','off');
[p,e,t]=refinemesh(dl,p,e,t,'regular');
h=findobj(get(pde_fig,'Children'),'flat','Tag','PDEBoundMenu');
bl=get(findobj(get(h,'Children'),'flat','Tag','PDEBoundMode'),'UserData');
0.25
R2=box aria ->t(4,:)=1
R1=sonda ->t(4,:)=2
0.2
0.15
0.1
Dall’indice della
quarta riga della
matrice t è possibile
riconoscere i domini
e imporre il termine
noto J
0.05
0
-0.05
-0.1
-0.15
-0.2
-0.25
0
0.05
0.1
0.15
0.2
0.25
Definizione del forzamento
Nspire=500;
dr=0.002;
dh=0.08;
I=1;
J0=Nspire*I/(dh*dr);
%nell’area occupata dalla bobina




(
A  )  (  A  )    0 J 


z
z
Calcolo Soluzione
for n=1:size(t,2)
ni=t(1,n); % indici dei nodi del triangolo n-mo
nj=t(2,n);
nk=t(3,n);
xi=p(1,ni); % coordinate dei vertici del tr. n-mo
xj=p(1,nj);
xk=p(1,nk);
-div∙c(grad(A))+aA=f
Con:
c=rc
f= rc.*(4e-7*pi).*J;
rc(n)=(xi+xj+xk)/3; % baricentro del tr. n-mo
if t(4,n)==1
J(n)=0;
else
J(n)=J0;
end
end
A = assempde(bl,p,e,t,c,'0',f);
J definita solo in R2 (t(4,:)=2)
corrispondente all’area della
bobina, nulla all’esterno
Calcolo del Campo magnetico
Br=-d(Aphi)/dz
Bz=(d(Aphi*r)/dr)/r
r=p(1,:);
z=p(2,:);
u=A.*r';
[g,dAdz]=pdegrad(p,t,A);
Br=-dAdz;
[drAdr,g2]=pdegrad(p,t,u);
Bz=(1./rc).*drAdr;
Plot linee di Campo
figure
pdegplot(dl)
hold on
xm=min(p(1,t)); xma=max(p(1,t));
ym=min(p(2,t)); yma=max(p(2,t));
na=100;
x=linspace(xm,xma,na);
y=linspace(ym,yma,na);
flowdata1=pdeprtni(p,t,Br);
flowdata2=pdeprtni(p,t,Bz);
uu=tri2grid(p,t,flowdata1,x,y);
vv=tri2grid(p,t,flowdata2,x,y);
[msg,x,y]=xyzchk(x,y,uu,vv);
scale=2;
oks=find(~isnan(uu));
quiver(x(oks),y(oks),-uu(oks),-vv(oks),scale,'r-');
Campo Magnetico
0.1
0.05
0
-0.05
-0.1
0
0.005
0.01
0.015
0.02
0.025
Plot linee di flusso
0.08
0.06
0.04
S
0.02
0
-0.02
-0.04
-0.06
-0.08
-0.05


S
S

Φ  B  ndV    A  ndV  Adl  2rA 

0
0.05
0.1
pdecont(p,t,A.*p(1,:)*2*pi,10)
0.15
Esempio 2
xmax=1*10^-2;
dh=0.001;
dr=0.001;
ymax=0.02;
h=0.003;
pderect([xmax-dr xmax ymax-dh ymax],'R1');
pderect([xmax-dr xmax ymax-2*dh-h ymax-1*dh-h],'R2');
pderect([xmax-dr xmax ymax-3*dh-2*h ymax-2*dh-2*h],'R3');
pderect([xmax-dr xmax ymax-4*dh-3*h ymax-3*dh-3*h],'R4');
pderect([xmax-dr xmax ymax-5*dh-4*h ymax-4*dh-4*h],'R5');
pderect([xmax-dr xmax ymax-6*dh-5*h ymax-5*dh-5*h],'R6');
pderect([xmax-dr xmax ymax-7*dh-6*h ymax-6*dh-6*h],'R7');
pderect([xmax-dr xmax ymax-8*dh-7*h ymax-7*dh-7*h],'R8');
pderect([xmax-dr xmax ymax-9*dh-8*h ymax-8*dh-8*h],'R9');
pderect([xmax-dr xmax ymax-10*dh-9*h ymax-9*dh-9*h],'R10');
pderect([0 10*xmax -5*xmax 5*xmax],'R11');
Condizioni al contorno
pdetool('changemode',0)
pdesetbd(5,...
'dir',...
1,...
'1',...
'0')
pdesetbd(6,...
'dir',...
1,...
'1',...
'0')
pdesetbd(3,...
'dir',...
1,...
'1',...
'0')
pdesetbd(2,...
'dir',...
1,...
'1',...
'0')
Assemblaggio termine noto
for n=1:size(t,2)
ni=t(1,n);
% indici dei nodi del triangolo n-mo
nj=t(2,n);
nk=t(3,n);
ni=t(1,n); % indici dei nodi del triangolo n-mo
nj=t(2,n);
nk=t(3,n);
xi=p(1,ni); % coordinate dei vertici del tr. n-mo
xj=p(1,nj);
xk=p(1,nk);
A = assempde(bl,p,e,t,c,'0',f);
Con:
c=rc
f= rc.*(4*pi*1e-7).*J;
rc(n)=(xi+xj+xk)/3; % baricentro del tr. n-mo
I1=1;
if t(4,n)==1
J(n)=0;
else
J(n)=I1/(dh*dr);
end
end
J uguale a zero in R11 (t(4,:)=1)
corrispondente al box aria ,
mentre è diversa da zero negli
avvolgimenti che hanno tutte la
stessa corrente
Campo magnetico e flusso
Campo Magnetico
0.021
0.04
0.03
0.02
0.02
0.019
0.01
0.018
0
-0.01
0.017
-0.02
0.016
-0.03
0.015
-0.04
5
6
7
8
9
10
11
12
13
0
-3
x 10
Campo e Flusso tra le spire
0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09
0.1
Esercitazione laboratorio
Definizione Geometria
xmin=0;
xmax=0.018;
dh=0.044;
dr=0.002;
xmax2=0.025;
pderect([xmax-dr/2 xmax+dr/2 -dh/2 dh/2],'R1');
pderect([xmax2-dr/2 xmax2+dr/2 -dh/2 dh/2],'R2');
t(4,:)=1 t(4,:)=2 t(4,:)=3
pderect([20*xmin 20*xmax 10*(-xmax) 10*xmax],'R3');
set(findobj(get(pde_fig,'Children'),'Tag','PDEEval'),'String',‘R3+R1+R2');
Definizione forzamento
Nspire=500;
I1=0.0021; %dati laboratorio
I2=0.0013;
J1=zeros(1,size(t,2));
J2=zeros(1,size(t,2));
for n=1:size(t,2)
ni=t(1,n);
% indici dei nodi del triangolo n-mo
nj=t(2,n);
nk=t(3,n);
xi=p(1,ni); % coordinate dei vertici del tr. n-mo
xj=p(1,nj);
xk=p(1,nk);
rc(n)=(xi+xj+xk)/3; % baricentro del tr. n-mo
if t(4,n)==2
J1(n)=Nspire*I1/(dh*dr);
elseif t(4,n)==3
J2(n)= Nspire*I2/(dh*dr);
end %endif
end %endfor
A1 = assempde(bl,p,e,t,rc.*(1/(4*pi*1e-7)),'0',rc.*J1,'0');
A2= assempde(bl,p,e,t,rc.*(1/(4*pi*1e-7)),'0',rc.*J2,'0');
Calcolo flusso e induttanza
Wm 
1
2
 J  AdV
Vsol


V
V
1
1
Wm 
A  JdV 
(A1  A 2 )  (J1  J 2 )dV 
2
2

1
(A1J1  A 2 J1  A1J 2  A 2 J 2 )dV 
2
V
1
2

V1
A1J1dV1 
1
2

A 2 J1dV1 
V1
1
1
2
Wm  L1i1  L 2 i 22  i1Mi 2
2
2
1
2

V2
A1J 2 dV2 
1
2
 A J dV.
2 2
V2
Calcolo AUTO-INDUTTANZA
1
2
L1  2  A1J1dV1  2  A1J11d1dz1
i1 V
i1 S
1
1
A1 = assempde(bl,p,e,t,rc.*(1/(4*pi*1e-7)),'0',rc.*J1,'0');
AT1=pdeintrp(p,t,A1);
n1=find(t(4,:)==2);
for n=n1
ni=t(1,n); % indici dei nodi del triangolo n-mo
nj=t(2,n);
nk=t(3,n);
xi=p(1,ni); % coordinate dei vertici del tr. n-mo
xj=p(1,nj);
xk=p(1,nk);
rc(n)=(xi+xj+xk)/3; % baricentro del tr. n-mo
D=[1 z1i z2i; 1 z1j z2j; 1 z1k z2k];
area=det(D)/2;
aa=(J1(n)*AT1(n));
ce(n)=(rc)*(aa)*area;
end
Lenergia=(1/I1^2)*sum(ce)*2*pi
Calcolo MUTUA-INDUTTANZA
M 21 
1
i1i 2
 A J dV
1 2
2
V2

2
i1i 2
 A J  d dz
1 2 2
S2
AT1=pdeintrp(p,t,A1); %A1 calcolato imponendo J1 in assempde
n2=find(t(4,:)==3);% trova i triangoli del dominio della seconda bobina
for n=n2
ni=t(1,n); % indici dei nodi del triangolo n-mo
nj=t(2,n);
nk=t(3,n);
xi=p(1,ni); % coordinate dei vertici del tr. n-mo
xj=p(1,nj);
xk=p(1,nk);
rc(n)=(xi+xj+xk)/3; % baricentro del tr. n-mo
D=[1 z1i z2i; 1 z1j z2j; 1 z1k z2k];
area=det(D)/2;
aa=(J2(n)*AT1(n));
ce(n)=(rc)*(aa)*area;
end
Menergia=(1/(I1*I2))*sum(ce)*2*pi
2
2
Confronto dati numerici-sperimentali
L11energia = 10 .6 mH
L11misurata=10.6 mH
L22energia= 16.4 mH
L22misurata= 16 .0 mH
M12energia = 14.6 mH
M12misurata=14.6 mH
M21energia = 14.6 mH
M21misurata=14.8 mH