summaryrefslogtreecommitdiff
path: root/2004/n/fpga/doc/dcd
diff options
context:
space:
mode:
authorgafan2004-04-09 14:20:28 +0000
committergafan2004-04-09 14:20:28 +0000
commit60d4b77fb9fbde61f369c908a033041d8a50903e (patch)
tree16dc4a73c0a60498641e4a55b9625466b809511b /2004/n/fpga/doc/dcd
parenta118b65d74cb5430545c81ed1e63472a0c672424 (diff)
*** empty log message ***
Diffstat (limited to '2004/n/fpga/doc/dcd')
-rw-r--r--2004/n/fpga/doc/dcd/pwm/pwm.tex125
1 files changed, 72 insertions, 53 deletions
diff --git a/2004/n/fpga/doc/dcd/pwm/pwm.tex b/2004/n/fpga/doc/dcd/pwm/pwm.tex
index efafc1a..9e60f6a 100644
--- a/2004/n/fpga/doc/dcd/pwm/pwm.tex
+++ b/2004/n/fpga/doc/dcd/pwm/pwm.tex
@@ -37,7 +37,7 @@ Ainsi, le servo-moteur est commandé par une succession de signaux PWM tels que
T1 est une période constante et T2 varie en fonction du rapport cyclique
que l'on souhaite avoir.
-\pagebreak
+\pagebreak[4]
\paragraph{Caractéristiques du servo-moteur codé}%tiret
@@ -74,12 +74,13 @@ définies ci-après et aisément modifiable par la suite.
\end{center}
\end{figure}
-\pagebreak
+\pagebreak[4]
\subsection{Principe de fonctionnement:Description des modules}
-%***
\subsubsection{Regdata3}
-Ce registre a 3 rôles principaux :
+
+Ce registre a 3 rôles principaux :\\*
+
\begin{itemize}
\item{Il conserve la valeur courante, en octet, de l'angle que l'on souhaite atteindre en sortie de l'axe de rotation du moteur}%tiret
\end{itemize}
@@ -92,63 +93,80 @@ Ce registre a 3 rôles principaux :
\item{Il met cette donnée entière à la disposition du générateur de PWM(comptvalue3) à chaque fois que ce dernier en a besoin.}%tiret
\end{itemize}
-La valeur d'initialisation (RESET=1)est telle que le rapport cyclique
- est de 2.5/%.
+L'angle d'initialisation du module(à RESET=1)est tel que le rapport cyclique
+ est de 2.5\%.
C'est à dire (1us/(1/CLK))=31.
\subsubsection{Clk1us}
-Ce module sert à générer un front montant toutes les 1us. On divise ainsi la fréquence de travail-initialement de 32MHz-par 1000 environ.
+Ce module sert à générer un niveau haut toutes les 1us.Et chaque niveau haut dure une période d'horloge.
+On divise ainsi la fréquence de travail-initialement de 32MHz-par 1000 environ.
\subsubsection{Comptvalue3}
Le module comptvalue3 représente le coeur du système.
Tous les calculs nécéssaires à la génération des signaux de commande du servo-moteur sont effectués par lui.
-Vous trouverez ci-dessous explicité son algorithme.
+\mbox{\emph{Vous trouverez ci-dessous explicité son algorithme.}}
-Les entrées du module sont :
-\\
-RST qui est le RESET asynchrone du module
-CLK est l'horloge
-LOADCOMPT est un signal sur un bit.
+Les entrées du module sont :
+\\*RST qui est le RESET asynchrone du module
+\\*CLK est l'horloge
+\\*LOADCOMPT est un signal sur un bit.
Au niveau haut, il donne l'autorisation de charger le compteur.
-DATACOMPT est l'entier représentant la donnée fournie par les capteurs par exemple pour indiquer la position à laquelle on désire maintenir le servomoteur.
-\\
-TCCOMPT est le compteur du nombre de cycles d'horloge de CLK1US permettant d'avoir une période enveloppe des signaux PWM de 20ms. Il est décrémenté à partir de sa valeur maximale : Tcmax=20ms/1us=20161cycles.
-Q est également un compteur décrémenté. Il correspond au nombre de cycles d'horloge de CLK1US permettant d'avoir une certaine durée T2 de la PWM. Sa valeur initiale dépend de la donnée DATACOMPT.
-\\
-*Si DATACOMPT=0,on veut que T2 vale 0,5ms donc on initialise Q à la valeur
+\\*DATACOMPT est l'entier représentant la donnée fournie par les capteurs par exemple pour indiquer la position à laquelle on désire maintenir le servomoteur.
+\\*TCCOMPT est le compteur du nombre de cycles d'horloge de CLK1US permettant d'avoir une période enveloppe des signaux PWM de 20ms. Il est décrémenté à partir de sa valeur maximale : Tcmax=20ms/1us=20161cycles.
+\\*Q est également un compteur décrémenté. Il correspond au nombre de cycles d'horloge de CLK1US permettant d'avoir une certaine durée T2 de la PWM. Sa valeur initiale dépend de la donnée DATACOMPT.
+
+\pagebreak[3]
+
+Si DATACOMPT=0,on veut que T2 vale 0,5ms donc on initialise Q à la valeur
+\\*\begin{math}
Q=0,5ms/1us=505.
-*Si DATACOMPT=255,on veut que T2 vale 1,5ms donc on initialise Q à la valeur
+\end{math}
+\\*Si DATACOMPT=255,on veut que T2 vale 1,5ms donc on initialise Q à la valeur
+\\*\begin{math}
Q=1,5ms/1us=1515.
-*Pour toute autre valeur de DATACOMPT comprise entre les deux précédentes et
+\end{math}
+\\*Pour toute autre valeur de DATACOMPT comprise entre les deux précédentes et
différentes de ces dernières,
-on initialise Q avec Q=(0,5ms/1us)+(DATACOMPT*min[((1,5ms-0,5ms)/1us)/(255-1)]
-\\
-A chaque calcul de Q, sa valeur courante est chargée dans le signal de sortie du module:VALUECOMPT.
-\\
-
-Le processus est enclenché pour toute transition de rst, clk et loadcompt.
-Si (rst = '1')
-On initialise tccompt,q et Valuecompt avec leurs valeurs initiales.
-Sinon, si CLK1US est au niveau haut alors
- Si le module peut être chargé, c'est à dire (loadcompt = '1') alors
- mettre tccompt à la valeur maximale
- Si le module ne peut être chargé par une nouvelle donnée (loadcompt='0') alors
- Si q est différent de 0 alors
- Décrémenter q
- Et décrémenter le compteur tccompt des 20 ms
- Si q est nul, on a fini de décrémenter la donnée entrée, alors
- q prend 0
- et on continue à décrémenter le compteur des 20 ms jusqu'à 0.
-Affecter le signal q à valuecompt, l'entier de sortie du module à chaque CLK.
+on initialise Q avec
+\\*\begin{math} Q=(0,5ms/1us)+(DATACOMPT*min[((1,5ms-0,5ms)/1us)/(255-1)]
+\end{math}
+\\*A chaque calcul de Q, sa valeur courante est chargée dans le signal de sortie du module:VALUECOMPT.
+
+\begin{verbatim}
+Le processus est enclenché pour toute transition de rst,
+clk et loadcompt.
+
+ Si (rst = '1')
+ On initialise tccompt,q et Valuecompt avec leurs valeurs
+ initiales.
+ Sinon, si CLK1US est au niveau haut alors
+ Si le module peut être chargé,
+ c'est à dire (loadcompt = '1') alors
+ mettre tccompt à la valeur maximale
+ Si le module ne peut être chargé par une nouvelle
+ donnée (loadcompt='0')alors,
+ Si q est différent de 0 alors
+ Décrémenter q
+ Et décrémenter le compteur tccompt des
+ 20 ms
+ Si q est nul, on a fini de décrémenter la
+ donnée entrée, alors
+ q prend 0
+ et on continue à décrémenter le compteur
+ des 20 ms jusqu'à 0.
+
+Affecter le signal q à valuecompt, l'entier de sortie
+ du module à chaque CLK.
+\end{verbatim}
\subsubsection{Affiche}
Ce registre à décalage permet de mettre le signal de sortie du Module générateur des signaux de commande du servo-moteur à 1 tant que le compteur VALUECOMPT n'est pas à 0. Dans le cas contraire, le signal de sortie vaut 0.
\subsubsection{Fsmpwm3}
-Le reseau de Pétri ci-dessous résume le mode de fonctonnement du systeme. On distingue 3 états.
-\begin{itemize}
+Le reseau de Pétri ci-dessous résume le mode de fonctonnement du systeme. On y distingue 3 états.
+\\*\begin{itemize}
\item{L'état 1 est l'initialisation. Un premier chargement du module Comptvalue3 se fait sans que l'on ait besoin d'avoir un niveau haut de enload}%tiret
\end{itemize}
@@ -157,7 +175,7 @@ Le reseau de Pétri ci-dessous résume le mode de fonctonnement du systeme. On dis
\end{itemize}
\begin{itemize}
-\item{Au cours du dernier état, le signal enload repasse à 0. C'est durant cette ase que tous les calculs sont effectués.}%tiret
+\item{Au cours du dernier état, le signal enload repasse à 0. C'est durant cette phase que tous les calculs sont effectués.}%tiret
\end{itemize}
Le passage d'un état au suivant est conditionné essentiellement par un niveau haut du signal CLK1US.
@@ -172,7 +190,9 @@ Le passage d'un état au suivant est conditionné essentiellement par un niveau ha
\end{center}
\end{figure}
-\pagebreak
+
+\pagebreak[4]
+
\subsection{Représentation structurelle adoptée}
L'architecture ci-dessous correspond aux fonctions identifiées.
@@ -181,9 +201,8 @@ L'architecture ci-dessous correspond aux fonctions identifiées.
\end{itemize}
RST : le reset asynchrone
-CLK : l'horloge de 32 MHz
-
-data: la valeur sur 1 octet codant l'angle que l'on souhaite atteindre
+\\*CLK : l'horloge de 32 MHz
+\\*data: la valeur sur 1 octet codant l'angle que l'on souhaite atteindre
\begin{itemize}
\item{Sa sortie est}%tiret
@@ -202,25 +221,25 @@ outpwm : le signal de commande du servomoteur
\end{center}
\end{figure}
-\pagebreak
+\pagebreak[4]
\subsection{Résultats de la simulation}
Les données entrées sont les suivantes :
+\begin{verbatim}
RST:1,0 après (CLKPERIOD/6).
clk:not clk après (CLKPERIOD/2).
data:00000011, 00011000 après 17 ms
00000000 après 38 ms
11111111 après 58 ms
01111111 après 78 ms.
-
avec CLKPERIOD:32ns.
+\end{verbatim}
L'image ci-dessous est celui du signal de commande du servomoteur.
-Chaque PWM a bien une période de 20ms.
-Par ailleurs, rapports cycliques obtenues reflètent les
- valeurs de data entrées.
+\\* Chaque PWM a bien une période de 20ms.
+\\* Par ailleurs, les rapports cycliques obtenues reflètent les valeurs de data entrées.
%image:Résultat de la simulation
\begin{figure}[htbp]
@@ -233,7 +252,7 @@ Par ailleurs, rapports cycliques obtenues reflètent les
\end{figure}
-\pagebreak
+\pagebreak[4]
\subsection{Synthèse}