From 278138303927a6487a63184140ec32f77c847206 Mon Sep 17 00:00:00 2001 From: Pierre-antoine Comby Date: Tue, 5 Mar 2019 11:43:26 +0100 Subject: [PATCH] flow diagram ! --- 414-Energie_Renouvelable/Cours/chap1.tex | 106 ++++++++- 414-Energie_Renouvelable/Cours/main.tex | 5 +- 414-Energie_Renouvelable/Cours/sankey.tex | 252 ++++++++++++++++++++++ 3 files changed, 352 insertions(+), 11 deletions(-) create mode 100644 414-Energie_Renouvelable/Cours/sankey.tex diff --git a/414-Energie_Renouvelable/Cours/chap1.tex b/414-Energie_Renouvelable/Cours/chap1.tex index 2ac3a02..bbba83f 100644 --- a/414-Energie_Renouvelable/Cours/chap1.tex +++ b/414-Energie_Renouvelable/Cours/chap1.tex @@ -302,7 +302,7 @@ Chaque phase du stator possède un couplage magnétique avec les autres phases d On a les équations suivantes pour le stator: \begin{align*} v_{as} &= R_s i_{as}(t)+\deriv[\Phi_{as}(t)]{t}\\ - \Phi_{as}(t) &= L_{s} i_{as} + M_s(i_{bs}+i_{bs}) \\&\quad+M_0 (\cos(\theta)i_{ar}(t)+\cos(\theta+\frac{2\pi}{3})i_{br}(t)+\cos(\theta+\frac{2\pi}{3})i_{br}(t)+\cos(\theta-\frac{2\pi}{3})i_{cr}(t))\\ + \Phi_{as}(t) &= L_{s} i_{as} + M_s(i_{bs}+i_{bs}) +M_0 (\cos(\theta)i_{ar}(t)+\cos(\theta+\frac{2\pi}{3})i_{br}(t)+\cos(\theta-\frac{2\pi}{3})i_{cr}(t))\\ \Phi_{as}(t) &= (L_s-M_s) i_{as}(t)+\frac{3M_0I_r}{\sqrt{2}}\cos(\theta+\omega_rt+\phi_r+\theta_0) \\ \Phi_{as}(t) &= (L_s-M_s) i_{as}(t)+\frac{3M_0I_r}{\sqrt{2}}\cos(\omega_st+\phi_s) \end{align*} @@ -318,7 +318,7 @@ On fais les mêmes calculs pour le rotor : \begin{align*} v_{ar}(t) &= R_ri_{ar}(t) + \deriv[\Phi]{t}\\ - \Phi_{ar}(t) &= (L_{r}-M_r) i_{ar} +M_0( \cos(\theta)i_{as}(t)+\cos(\theta+\frac{2\pi}{3})i_{br}(t)+\cos(\theta+\frac{2\pi}{3})i_{br}(t)+\cos(\theta-\frac{2\pi}{3})i_{cr}(t))\\ + \Phi_{ar}(t) &= (L_{r}-M_r) i_{ar} +M_0( \cos(\theta)i_{as}(t)+\cos(\theta+\frac{2\pi}{3})i_{br}(t)+\cos(\theta-\frac{2\pi}{3})i_{cr}(t))\\ \Phi_{ar}(t) &= (L_{r}-M_r) i_{ar} +\frac{3M_0I_s}{\sqrt{2}} \cos(\Omega t-\omega_st+\theta_0-\phi_s) \\ \Phi_{ar}(t) &= L_{rc} i_{ar} +\frac{3M_0I_s}{\sqrt{2}} \cos(\omega_rt +\phi_s') \end{align*} @@ -418,7 +418,7 @@ Avec: \end{circuitikz} \caption{Modèle au synchronisme} \end{figure} - On mesurre la puissance active $P_0$ et la puissance réactive $Q_0$ et les courants $I_{s0}$ et $V_{s0}$ on obtient les équations: + On mesure la puissance active $P_0$ et la puissance réactive $Q_0$ et les courants $I_{s0}$ et $V_{s0}$ on obtient les équations: \[ \begin{cases} @@ -459,6 +459,94 @@ Dans le modèle équivalent on est a $\omega_s$. Or dans le rotor les courants s \[ g =\frac{\omega_s-\omega}{\omega_s} \] + + + +\begin{figure}[H] + \centering +\begin{tikzpicture}[x=1pt,y=1pt] + + \begin{sankeydiagram}[ + sankey tot length=90pt,% + sankey tot quantity=6,% + sankey min radius=15pt,% + sankey fill/.style={ + draw,line width=0pt, + %fill, + white, + }, + sankey draw/.style={ + draw=black, + line width=1pt, + line cap=round, + line join=round, + }, + ] + \sankeynodestart{6}{0}{Pa}{0,100}; + \node[left] at (Pa) {$P_a=3UI\cos{\phi}$}; + \sankeyadvance{Pa}{50pt} + + \sankeyfork{Pa}{5/Pa2,1/Pjs} + \sankeyturn{Pjs}{-90} + \sankeyadvance{Pjs}{15pt} + \sankeynodeend{1}{-90}{Pjs}{Pjs} + \node[below=1em] at (Pjs) {$p_{js}=3R_sI_s^2$}; + + \sankeyadvance{Pa2}{60pt} + \sankeyfork{Pa2}{4/Ptr,1/Pfs} + \sankeyturn{Pfs}{-90} + \sankeyadvance{Pfs}{30pt} + \sankeynodeend{1}{-90}{Pfs}{Pfs} + \node[below=1em] at (Pfs) {$p_{fs}$}; + \sankeyadvance{Ptr}{60pt} + \sankeynodeend{4}{0}{Ptr}{Ptr} + \node[left] at (Ptr) {$P_{tr}=C_{em}\omega_s$}; + + \sankeyadvance{Ptr}{30pt} + \sankeyfork{Ptr}{3/Pr,1/Pjr} + \sankeyturn{Pjr}{-90} + \sankeyadvance{Pjr}{30pt} + \sankeynodeend{1}{-90}{Pjr}{Pjr} + \node[below=1em] at (Pjr) {$p_{jr}=gP_{tr}$}; + \sankeyadvance{Pr}{70pt} + \sankeynodeend{3}{0}{Pr}{Pr} + \node[left] at (Pr) {$P_r=C_{em}p\Omega$}; + \sankeyadvance{Pr}{30pt} + \sankeyfork{Pr}{2/Pu,1/Pmec} + \sankeyturn{Pmec}{-90} + \sankeyadvance{Pmec}{30pt} + \sankeynodeend{1}{-90}{Pmec}{Pmec} + \node[below=1em] at (Pmec) {$p_{mec}$}; + \sankeyadvance{Pu}{60pt} + \sankeynodeend{2}{0}{Pu}{Pu} + \node[right=1em] at (Pu) {$P_{u}$}; + \draw [ + very thick, + decoration={ + brace, + mirror, + raise=0.5cm + }, + decorate + ] (-20,0) -- ++ (180,0) node[midway, below=1.5em]{Stator}; + \draw [ + very thick, + decoration={ + brace, + mirror, + raise=0.5cm + }, + decorate + ] (170,0) -- ++ (190,0) node[midway, below=1.5em]{Rotor}; + + + + \end{sankeydiagram} +\end{tikzpicture} + \caption{Bilan de puissance} +\end{figure} + + \begin{exemple} Pour une machine asynchrone , 400V/690V ,1.5kW ,1425 tr/min : \begin{enumerate} @@ -494,7 +582,7 @@ P_e = 3 \frac{R_r'}{g}I_r^2 = C_e \Omega On en déduit alors le couple électromagnétique. \emph{en négligeant la resistance du stator}: \begin{align*} C_{em} &= 3 p \frac{V_s^2}{\omega_s} \frac{\frac{R_r'}{g}}{\left(\frac{R_r'}{g}\right)^2+(l_{fuites}\omega_s)^2}\\ - &= 3 p \frac{V_s^2}{\omega_s} \frac{1}{\left(\frac{g(l_f\omega_s)^2}{R_r'}\right) + \frac{R_r'}{g}}\\ + &= 3 p \frac{V_s^2}{\omega_s} \frac{1}{\left(\frac{g(l_f\omega_s)^2}{R_r'}\right) + \frac{R_r'}{g(l_f\omega_s)^2}}\\ &= \frac{3p}{l_f}\frac{V_s^2}{\omega_s^2}\frac{1}{\left(\frac{g(l_f\omega_s)^2}{R_r'}\right)+\left(\frac{R_r'}{g(l_f\omega_s)^2}\right)}\\ \Aboxed{&= 2C_{max}\frac{1}{\left(\frac{g}{g_{max}}\right)+\left(\frac{g_{max}}{g}\right)}} \end{align*} @@ -536,7 +624,7 @@ Avec la relation glissement vitesse on a: \includegraphics[width=0.7\textwidth]{Domaines_fonctionnement_MAs.png} \caption{Mode de fonctionnement de la MAS} \end{figure} - +--- \subsection{Alimentation par un onduleur} \emph{merci wikipédia} @@ -556,7 +644,7 @@ Pour cela, la machine asynchrone est alimentée par un onduleur délivrant une t On reprend l'équation générale du couple : -:\[ T_{em}= \frac{3 p}{\mathcal{N}_r} \cdot \frac{V_S^2}{ \omega_S^2} \cdot \frac{1}{\left(\frac{g \mathcal{N}_r \omega_S}{R_r^*}\right)+ \left(\frac{R_r^* }{g \mathcal{N}_r \omega_S }\right)} \,\] +:\[ C_{em}= \frac{3 p}{\mathcal{N}_r} \cdot \frac{V_S^2}{ \omega_S^2} \cdot \frac{1}{\left(\frac{g \mathcal{N}_r \omega_S}{R_r^*}\right)+ \left(\frac{R_r^* }{g \mathcal{N}_r \omega_S }\right)} \,\] On note $ C_{max} $le couple maximal. @@ -572,11 +660,11 @@ On note $ \Phi_s$ la valeur efficace du flux nominal. Si on garde le rapport $\frac{V_S}{ \omega_S}$ constant, il est donc possible de déplacer la vitesse à laquelle $ C_{max}$ est disponible. L'expression du couple devient : -\[T_{em}= \frac{2 C_{max}}{\left(\frac{g \mathcal{N}_r \omega_S}{R_r^*}\right)+ \left(\frac{R_r^* }{g \mathcal{N}_r \omega_S }\right)}\] +\[C_{em}= \frac{2 C_{max}}{\left(\frac{g \mathcal{N}_r \omega_S}{R_r^*}\right)+ \left(\frac{R_r^* }{g \mathcal{N}_r \omega_S }\right)}\] -Après un \emph{développement limité} au premier ordre de $T_{em}$ lorsque $g$ tend vers 0, on obtient : +Après un \emph{développement limité} au premier ordre de $C_{em}$ lorsque $g$ tend vers 0, on obtient : -\[T_{em}= Cte \cdot g \cdot \omega_S = Cte \cdot (\omega_S - \omega) = Cte \cdot (n_S - n) \,\] +\[C_{em}= Cte \cdot g \cdot \omega_S = Cte \cdot (\omega_S - \omega) = Cte \cdot (n_S - n) \,\] diff --git a/414-Energie_Renouvelable/Cours/main.tex b/414-Energie_Renouvelable/Cours/main.tex index 827b920..4d06e51 100644 --- a/414-Energie_Renouvelable/Cours/main.tex +++ b/414-Energie_Renouvelable/Cours/main.tex @@ -1,4 +1,4 @@ -\documentclass{../../cours} +\documentclass[openany]{../../cours} \usepackage{../../raccourcis} % Mise en page @@ -7,6 +7,7 @@ \teacher{Anthony Juton \& Olivier Villain \& Emmanuel Hoang} \module{414\\ Production d'électricité\\à partir d'énergie renouvelables} \renewcommand{\vec}{\overrightarrow} +\input{sankey.tex} \begin{document} \maketitle @@ -20,7 +21,7 @@ \subfile{chap3.tex} \chapter{Physique de la conversion électrovoltaïque}\label{chap:photov} \subfile{chap6.tex} -\chapter{Électronique de puissance pour les parcs éoliens connectés au réseau} +%\chapter{Électronique de puissance pour les parcs éoliens connectés au réseau} diff --git a/414-Energie_Renouvelable/Cours/sankey.tex b/414-Energie_Renouvelable/Cours/sankey.tex new file mode 100644 index 0000000..24970d9 --- /dev/null +++ b/414-Energie_Renouvelable/Cours/sankey.tex @@ -0,0 +1,252 @@ + +\usetikzlibrary{calc} +\usepackage{etoolbox} + +\pgfdeclarelayer{background} +\pgfdeclarelayer{foreground} +\pgfdeclarelayer{sankeydebug} +\pgfsetlayers{background,main,foreground,sankeydebug} + +\newif\ifsankeydebug + +\newenvironment{sankeydiagram}[1][]{ + + \def\sankeyflow##1##2{% sn, en + \path[sankey fill] + let + \p1=(##1.north east),\p2=(##1.south east), + \n1={atan2(\y1-\y2,\x1-\x2)-90}, + \p3=(##2.north west),\p4=(##2.south west), + \n2={atan2(\y3-\y4,\x3-\x4)+90} + in + (\p1) to[out=\n1,in=\n2] (\p3) -- + (\p4) to[in=\n1,out=\n2] (\p2) -- cycle; + \draw[sankey draw] + let + \p1=(##1.north east),\p2=(##1.south east), + \n1={atan2(\y1-\y2,\x1-\x2)-90}, + \p3=(##2.north west),\p4=(##2.south west), + \n2={atan2(\y3-\y4,\x3-\x4)+90} + in + (\p1) to[out=\n1,in=\n2] (\p3) + (\p4) to[in=\n1,out=\n2] (\p2); + } + + + \tikzset{ + sankey tot length/.store in=\sankeytotallen, + sankey tot quantity/.store in=\sankeytotalqty, + sankey min radius/.store in=\sankeyminradius, + sankey arrow length/.store in=\sankeyarrowlen, + sankey debug/.is if=sankeydebug, + sankey debug=false, + sankey flow/.style={ + to path={ + \pgfextra{ + \pgfinterruptpath + \edef\sankeystart{\tikztostart} + \edef\sankeytarget{\tikztotarget} + \sankeyflow{\sankeystart}{\sankeytarget} + \endpgfinterruptpath + } + }, + }, + sankey node/.style={ + inner sep=0,minimum height={sankeyqtytolen(##1)}, + minimum width=0,draw=none,line width=0pt, + }, + % sankey angle + sankey angle/.store in=\sankeyangle, + % sankey default styles + sankey fill/.style={line width=0pt,fill,white}, + sankey draw/.style={draw=black,line width=.4pt}, + } + + \newcommand\sankeynode[4]{%prop,orientation,name,pos + \node[sankey node=##1,rotate=##2] (##3) at (##4) {}; + \ifsankeydebug + \begin{pgfonlayer}{sankeydebug} + \draw[red,|-|] (##3.north west) -- (##3.south west); + \pgfmathsetmacro{\len}{sankeyqtytolen(##1)/3} + \draw[red] (##3.west) + -- ($(##3.west)!\len pt!90:(##3.south west)$) + node[font=\tiny,text=black] {##3}; + \end{pgfonlayer} + \fi + } + + \newcommand\sankeynodestart[4]{%prop,orientation,name,pos + \sankeynode{##1}{##2}{##3}{##4} + \begin{scope}[shift={(##3)},rotate=##2] + \path[sankey fill] + (##3.north west) -- ++(-\sankeyarrowlen,0) + -- ([xshift=-\sankeyarrowlen/6]##3.west) + -- ([xshift=-\sankeyarrowlen]##3.south west) + -- (##3.south west) -- cycle; + \path[sankey draw] + (##3.north west) -- ++(-\sankeyarrowlen,0) + -- ([xshift=-\sankeyarrowlen/6]##3.west) + -- ([xshift=-\sankeyarrowlen]##3.south west) + -- (##3.south west); + \end{scope} + } + + \newcommand\sankeynodeend[4]{%prop,orientation,name,pos + \sankeynode{##1}{##2}{##3}{##4} + \begin{scope}[shift={(##3)},rotate=##2] + \path[sankey fill] + (##3.north east) + -- ([xshift=\sankeyarrowlen]##3.east) + -- (##3.south west) -- cycle; + \path[sankey draw] + (##3.north east) + -- ([xshift=\sankeyarrowlen]##3.east) + -- (##3.south west); + \end{scope} + } + + \newcommand\sankeyadvance[3][]{%newname,name,distance + \edef\name{##2} + \ifstrempty{##1}{ + \def\newname{##2} + \edef\name{##2-old} + \path [late options={name=##2,alias=\name}]; + }{ + \def\newname{##1} + } + \path + let + % sankey node angle + \p1=(##2.north east), + \p2=(##2.south east), + \n1={atan2(\y1-\y2,\x1-\x2)-90}, + % sankey prop + \p3=($(\p1)-(\p2)$), + \n2={sankeylentoqty(veclen(\x3,\y3))}, + % next position + \p4=($(##2.east)!##3!-90:(##2.north east)$) + in + \pgfextra{ + \pgfmathsetmacro{\prop}{\n2} + \pgfinterruptpath + \sankeynode{\prop}{\n1}{\newname}{\p4} + \path (\name) to[sankey flow] (\newname); + \endpgfinterruptpath + }; + } + + \newcommand\sankeyturn[3][]{%newname,name,angle + \edef\name{##2} + \ifstrempty{##1}{ + \def\newname{##2} + \edef\name{##2-old} + \path [late options={name=##2,alias=\name}]; + }{ + \def\newname{##1} + } + \ifnumgreater{##3}{0}{ + \typeout{turn acw: ##3} + \path + let + % sankey node angle + \p1=(##2.north east), + \p2=(##2.south east), + \p3=($(\p1)!-\sankeyminradius!(\p2)$), + \n1={atan2(\y1-\y2,\x1-\x2)-90}, + % sankey prop + \p4=($(\p1)-(\p2)$), + \n2={sankeylentoqty(veclen(\x4,\y4))}, + \p5=(##2.east), + \p6=($(\p3)!1!##3:(\p5)$) + in + \pgfextra{ + \pgfmathsetmacro{\prop}{\n2} + \pgfinterruptpath + % \fill[red] (\p3) circle (2pt); + % \fill[blue](\p6) circle (2pt); + \sankeynode{\prop}{\n1+##3}{\newname}{\p6} + \path (\name) to[sankey flow] (\newname); + \endpgfinterruptpath + }; + }{ + \typeout{turn acw: ##3} + \path + let + % sankey node angle + \p1=(##2.south east), + \p2=(##2.north east), + \p3=($(\p1)!-\sankeyminradius!(\p2)$), + \n1={atan2(\y1-\y2,\x1-\x2)+90}, + % sankey prop + \p4=($(\p1)-(\p2)$), + \n2={sankeylentoqty(veclen(\x4,\y4))}, + \p5=(##2.east), + \p6=($(\p3)!1!##3:(\p5)$) + in + \pgfextra{ + \pgfmathsetmacro{\prop}{\n2} + \pgfinterruptpath + % \fill[red] (\p3) circle (2pt); + % \fill[blue](\p6) circle (2pt); + \sankeynode{\prop}{\n1+##3}{\newname}{\p6} + \path (\name) to[sankey flow] (\newname); + \endpgfinterruptpath + }; + } + } + + \newcommand\sankeyfork[2]{%name,list of forks + \def\name{##1} + \def\listofforks{##2} + \xdef\sankeytot{0} + \path + let + % sankey node angle + \p1=(\name.north east), + \p2=(\name.south east), + \n1={atan2(\y1-\y2,\x1-\x2)-90}, + % sankey prop + \p4=($(\p1)-(\p2)$), + \n2={sankeylentoqty(veclen(\x4,\y4))} + in + \pgfextra{ + \pgfmathsetmacro{\iprop}{\n2} + } + \foreach \prop/\name[count=\c] in \listofforks { + let + \p{start \name}=($(\p1)!\sankeytot/\iprop!(\p2)$), + \n{nexttot}={\sankeytot+\prop}, + \p{end \name}=($(\p1)!\n{nexttot}/\iprop!(\p2)$), + \p{mid \name}=($(\p{start \name})!.5!(\p{end \name})$) + in + \pgfextra{ + \xdef\sankeytot{\n{nexttot}} + \pgfinterruptpath + \sankeynode{\prop}{\n1}{\name}{\p{mid \name}} + \endpgfinterruptpath + } + } + \pgfextra{ + \pgfmathsetmacro{\diff}{abs(\iprop-\sankeytot)} + \pgfmathtruncatemacro{\finish}{\diff<0.01?1:0} + \ifnumequal{\finish}{1}{}{ + \message{*** Warning: bad sankey fork (maybe)...} + \message{\iprop-\sankeytot} + } + }; + } + + \tikzset{ + % default values, + declare function={ + sankeyqtytolen(\qty)=\qty/\sankeytotalqty*\sankeytotallen; + sankeylentoqty(\len)=\len/\sankeytotallen*\sankeytotalqty; + }, + sankey tot length=100pt, + sankey tot quantity=100, + sankey min radius=30pt,% + sankey arrow length=10pt,% + % user values + #1} +}{ +}