Board Reference

    Flight Controller
    Field Oriented Controller

    Motor Drive

    PMSM

    Motion Control

    Attitude Control

    Tutorial

    Mathematics
    Classical Control
    State Estimation
    Feedforward Control
    Disturbance Observer
    Motion Control

Flux Observer

System model

The governing equation of a salient-pole permanent magnet synchronous motor is expressed as
vdq=Ridq+ddtϕi+ωreJϕi+ωreJϕmωm=P1ωreτm=P(Φiq+(LdLq)idiq),\begin{align} \bm{v}_{\rm dq}&=\bm{R}\bm{i}_{\rm dq}+\frac{d}{dt}\bm{\phi}_{\rm i}+\omega_{\rm re}\bm{J}\bm{\phi}_{\rm i}+\omega_{\rm re}\bm{J}\bm{\phi}_{\rm m}\\ \omega_{\rm m}&=P^{-1}\omega_{\rm re}\\ \tau_{\rm m}&=P\left(\Phi i_{\rm q}+ (L_{\rm d}-L_{\rm q })i_{\rm d}i_{\rm q}\right), \end{align}
where R\bm{R}, Ldq\bm{L}_{\rm dq}, vdq\bm{v}_{\rm dq}, idq\bm{i}_{\rm dq}, ϕi\bm{\phi}_{\rm i}, ϕm\bm{\phi}_{\rm m}, ωre\omega_{\rm re}, ωm\omega_{\rm m}, τm\tau_{\rm m}, and PP stand for an armature resistance, inductance on the dq-axis, voltage and current on dq-axis, armature reaction flux, rotor flux, electric and mechanical angular speed of a motor, motor torque, and the number of motor poles, expressed as
R=RI, Ldq=diag(Ld, Lq),vdq=[vdvq], idq=[idiq], ϕi=Ldqidq, ϕm=[Φ0].\begin{align} \bm{R}&=R\bm{I},\ \bm{L}_{\rm dq}={\rm diag}(L_{\rm d},\ L_{\rm q}), \notag\\ \bm{v}_{\rm dq}&=\begin{bmatrix} v_{\rm d} \\ v_{\rm q} \end{bmatrix},\ \bm{i}_{\rm dq}=\begin{bmatrix} i_{\rm d} \\ i_{\rm q} \end{bmatrix},\ \bm{\phi}_{\rm i}=\bm{L}_{\rm dq}\bm{i}_{\rm dq},\ \bm{\phi}_{\rm m}=\begin{bmatrix} \Phi \\ 0\end{bmatrix}. \notag \end{align}
A magnetic flux Φ\Phi is generated by a permanent magnet and gets constant value. The matrices I\bm{I} and J\bm{J} denote an identity matrix and rotation operator expressed as
J=[0110].\begin{align} \bm{J}&=\begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix}. \end{align}

Flux observer

Now, let us consider a plant model on the γδ\gamma\delta-axis
vγδ=Riγδ+(sI+ωγJ)ϕiγδ+(sI+ωγJ)ϕmγδ=Riγδ+(sI+ωγJ)ϕiγδ+ωreJϕmγδ,\begin{align} \bm{v}_{\gamma\delta}&=\bm{R}\bm{i}_{\gamma\delta}+(s\bm{I}+\omega_{\gamma}\bm{J})\bm{\phi}_{\rm i\gamma\delta}+(s\bm{I}+\omega_{\gamma}\bm{J})\bm{\phi}_{\rm m\gamma\delta}\\ &=\bm{R}\bm{i}_{\gamma\delta}+(s\bm{I}+\omega_{\gamma}\bm{J})\bm{\phi}_{\rm i\gamma\delta}+\omega_{\rm re}\bm{J}\bm{\phi}_{\rm m\gamma\delta}, \end{align}
where vγδ\bm{v}_{\gamma\delta}, iγδ\bm{i}_{\gamma\delta}, and ωγ\omega_{\gamma} stand for an voltage and current on dq-axis and angular velocity of γδ\gamma\delta-axis. Assuming that the γδ\gamma\delta-axis closes to the dq-axis, ϕiγδ=LγδiγδLdqiγδ\bm{\phi}_{\rm i\gamma\delta}=\bm{L}_{\gamma\delta}\bm{i}_{\gamma\delta}\approx \bm{L}_{\rm dq}\bm{i}_{\gamma\delta} holds. It means that an armature reaction flux is indirectly observable. Then, we introduces a model that is expressed as
ddt[ϕmγδϕiγδ]=[(ωreωγ)J0ωreJRLdq1ωγJ][ϕmγδϕiγδ]+[0I]vγδ.\begin{align} \frac{d}{dt} \begin{bmatrix} \bm{\phi}_{\rm m\gamma\delta} \\ \bm{\phi}_{\rm i\gamma\delta} \end{bmatrix} = \begin{bmatrix} (\omega_{\rm re} - \omega_{\gamma})\bm{J} & \bm{0} \\ \omega_{\rm re}\bm{J} & -\bm{R}\bm{L}_{\rm dq}^{-1} - \omega_{\gamma}\bm{J} \end{bmatrix} \begin{bmatrix} \bm{\phi}_{\rm m\gamma\delta} \\ \bm{\phi}_{\rm i\gamma\delta} \end{bmatrix} + \begin{bmatrix} \bm{0} \\ \bm{I} \end{bmatrix} \bm{v}_{\gamma\delta}. \end{align}
By constructing a minimal-order state observer, a rotor flux can be estimated as
ϕ^mγδ=(sIωreJ+ωγJ+ωreKJ)1(Kvγδ[K(sI+ωγJ)+KRLdq1]ϕiγδ),\begin{align} \hat{\bm{\phi}}_{\rm m\gamma\delta}=&(s\bm{I}-\omega_{\rm re}\bm{J}+\omega_{\gamma}\bm{J}+\omega_{\rm re}\bm{K}\bm{J})^{-1} \notag \\ &\cdot(\bm{K}\bm{v}_{\gamma\delta} - [\bm{K}(s\bm{I}+\omega_{\gamma}\bm{J})+\bm{K}\bm{R}\bm{L}_{\rm dq}^{-1}]\bm{\phi}_{\rm i\gamma\delta}), \end{align}
where K\bm{K} denotes the observer gain. In the paper, we pick the following gain:
K=Isgn(ωre)J.\begin{align} \bm{K} &= \bm{I} - {\rm sgn}(\omega_{\rm re})\bm{J}. \end{align}
Then, we get the following observation equation:
ϕ^mγδ=(sI+ωγJ+ωreI)1K(vγδRiγδ(sI+ωγJ)ϕiγδ).\begin{align} \hat{\bm{\phi}}_{\rm m\gamma\delta} =&(s\bm{I}+\omega_{\gamma}\bm{J}+|\omega_{\rm re}|\bm{I})^{-1} \notag\\ &\cdot\bm{K}(\bm{v}_{\gamma\delta} -\bm{R}\bm{i}_{\gamma\delta} - (s\bm{I}+\omega_{\gamma}\bm{J})\bm{\phi}_{\rm i\gamma\delta}). \end{align}

Electric angle estimation

This estimated value provides an angle error as
θ^γ=tan1(ϕ^mδ/ϕ^mγ),\begin{align} \hat{\theta}_{\gamma} = \tan^{-1}\left(\hat{\phi}_{{\rm m}\delta}/\hat{\phi}_{{\rm m}\gamma}\right), \end{align}
where θ^γ\hat{\theta}_{\gamma} represents an argument of d-axis and γ\gamma-axis. Then, we can estimate a rotor angle and velocity as
ω^re=(ωθ+0.25s1ωθ2)θ^γθ^re=s1ω^re,\begin{align} \hat{\omega}_{\rm re} &= \left(\omega_{\theta} + 0.25s^{-1}\omega_{\theta}^2\right)\hat{\theta}_{\gamma}\\ \hat{\theta}_{\rm re} &= s^{-1}\hat{\omega}_{\rm re}, \end{align}
where ωθ\omega_{\theta} stands for the gain of a phase lock loop.

© DigitalServo