summaryrefslogtreecommitdiff
path: root/2004/n/fpga
diff options
context:
space:
mode:
authorgafan2004-04-09 08:34:32 +0000
committergafan2004-04-09 08:34:32 +0000
commit726dc3354d5274982f7e37d9ca82d354e07f65e8 (patch)
tree3775a82f23b9eb7e56fe8a7c49b127584d6f9ab2 /2004/n/fpga
parent7a472c613b1d6e6645107c095153d3b31f177bc6 (diff)
*** empty log message ***
Diffstat (limited to '2004/n/fpga')
-rw-r--r--2004/n/fpga/doc/dcd/pwm/pwm.tex241
1 files changed, 241 insertions, 0 deletions
diff --git a/2004/n/fpga/doc/dcd/pwm/pwm.tex b/2004/n/fpga/doc/dcd/pwm/pwm.tex
new file mode 100644
index 0000000..c87d8a2
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/pwm/pwm.tex
@@ -0,0 +1,241 @@
+\subsection{Cahier des charges}
+
+L'objectif de cette section est de présenter le module générant le signal de
+commande des servomoteurs du robot-EFREI participant à la coupe de France de
+robotique E=M6.
+
+\paragraph{Commande des Servo-moteurs}%gras sans saut de ligne
+Un servomoteur est un dispositif utilisé pour commander en position l'axe
+de rotation de sortie d'un moteur.
+Il est utilisé par exemple, pour gérer le sens de rotation du rouleau
+bi-rotatif d'entrée du robot. La position des roues est également donnée par
+un servomoteur.
+
+Un servomoteur est un dispositif utilisé pour commander en position l'axe de
+rotation de sortie d'un moteur. Il est utilisé par exemple, pour gérer le sens
+de rotation du rouleau bi-rotatif d'entrée du robot. La position des roues est
+également donnée par un servomoteur.
+
+Il est commandé par une série de signaux modulés en amplitude - Pulse Width
+Modulation : PWM - dont les rapports cycliques représentent chacun un angle
+auquel l'axe de rotation du moteur doit se maintenir.
+
+%image exemple de signal pwm
+\begin{figure}[htbp]
+\caption{Exemple de Signal PWM}
+\begin{center}
+\scalebox{0.6}{
+\includegraphics {./pwm/images/im_signalpwm.pdf}
+}
+\end{center}
+\end{figure}
+
+La valeur T2/T1 est le rapport cycle du PWM. A chaque rapport cyclique
+correspond un et un seul angle de rotation de l'axe de sortie du moteur.
+
+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
+
+\paragraph{Caractéristiques du servo-moteur codé}%tiret
+
+Comme nous n'avons pas encore acheté le servo-moteur,
+nous veillerons à avoir un code répondant aux caractéristiques
+définies ci-après et aisément modifiable par la suite.
+
+\begin{description}
+\item []
+\begin{center}
+ \begin{tabular}{|l|l|l|}
+ \hline
+ Fréquence d'horloge du système & 32 MHz
+ \\ \hline
+ Période enveloppe de la PWM:T1 & 20 ms
+ \\ \hline
+ Taille des données entrantes:rapport cyclique & 1 octet
+ \\ \hline
+ Rapport cyclique minimum:données=00000000 & 2.5\%
+ \\ \hline
+ Rapport cyclique maximum:données=11111111 & 7.5\%
+ \\ \hline
+ \end{tabular}
+\end{center}
+\end{description}
+
+%image:résumé général des entrées et sorties du module
+\begin{figure}[htbp]
+\caption{Synoptis des entrées et sorties du module de commande du servo-moteur}
+\begin{center}
+\scalebox{0.6}{
+\includegraphics {./pwm/images/im_inoutgeneral.pdf}
+}
+\end{center}
+\end{figure}
+
+\pagebreak
+\subsection{Principe de fonctionnement:Description des modules}
+
+%***
+\subsubsection{Regdata3}
+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}
+
+\begin{itemize}
+\item{Il convertit cet angle en valeur entière}%tiret
+\end{itemize}
+
+\begin{itemize}
+\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/%.
+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.
+
+\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.
+
+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
+Q=0,5ms/1us=505.
+*Si DATACOMPT=255,on veut que T2 vale 1,5ms donc on initialise Q à la valeur
+Q=1,5ms/1us=1515.
+*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.
+
+\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}
+\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}
+
+\begin{itemize}
+\item{L'état 2 correspond à celui du chargement de Comptvalue3 grâce au passage à 1 du signal enload pendant une période d'horloge}%tiret
+\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
+\end{itemize}
+
+Le passage d'un état au suivant est conditionné essentiellement par un niveau haut du signal CLK1US.
+
+%-- insérer le réseau de pétri
+\begin{figure}[htbp]
+\caption{Réseau de Pétri du module de commande du servo-moteur}
+\begin{center}
+\scalebox{0.6}{
+\includegraphics {./pwm/images/petri.pdf}
+}
+\end{center}
+\end{figure}
+
+\pagebreak
+\subsection{Représentation structurelle adoptée}
+L'architecture ci-dessous correspond aux fonctions identifiées.
+
+\begin{itemize}
+\item{Ses entrées sont}%tiret
+\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
+
+\begin{itemize}
+\item{Sa sortie est}%tiret
+\end{itemize}
+
+outpwm : le signal de commande du servomoteur
+
+
+%image:architecture générale
+\begin{figure}[htbp]
+\caption{Architecture du module de commande du servo-moteur}
+\begin{center}
+\scalebox{0.6}{%0.6
+\includegraphics {./pwm/images/im_archigeneral.pdf}
+}
+\end{center}
+\end{figure}
+
+\pagebreak
+
+\subsection{Résultats de la simulation}
+
+Les données entrées sont les suivantes :
+
+RST 1,0 after(CLK_PERIOD/6).
+clk not clk after (CLK_PERIOD/2).
+data 00000011, 00011000 after 17 ms
+ 00000000 after 38 ms
+ 11111111 after 58 ms
+ 01111111 after 78 ms.
+
+avec CLK_PERIOD=32ns.
+
+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.
+
+%image:Résultat de la simulation
+\begin{figure}[htbp]
+\caption{Signaux de commande du servo-moteur}
+\begin{center}
+\scalebox{0.6}{%0.6
+\includegraphics {./pwm/images/outpwm.pdf}
+}
+\end{center}
+\end{figure}
+
+
+\pagebreak
+
+\subsection{Synthèse}
+
+Voici les résultats de la synthèse.
+