\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} 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} %\includegraphics[width=\textwidth]{./interrupt/images/entity.pdf} } \end{center} %\label{im_signalpwm} \end{figure} La valeur T2/T1 représente 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 a une période constante et T2 varie en fonction du rapport cyclique que l'on souhaite obtenir. \begin{itemize} \item{Caractéristiques du servo-moteur codé} \end{itemize} Nous n'avons pas encore acheté le servo-moteur. Nous veillerons donc à 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} \begin{itemize} \item{Variables à modifier en fonction des caractéristiques du servo-moteur réel} \end{itemize} CLK1_FREQ la fréquence d'horloge de la carte de développement tcmax le nombre maximum de cycles d'horloge de la carte correspondant à 20ms tcmax=20ms * CLK1_FREQ=600E3. q nombre de cycles d'horloge pendant lesquels la sortie du module doit être au niveau haut. Il varie en fonction de la donnée entrée. Si la donnée est nulle, q = (0.5E-3*CLK1_FREQ)=15E3 car 15E3 fois la période de base (1/ CLK1_FREQ ) donnent une durée T2 de 0.5ms. Si la donnée vaut 255 (11111111), q=(1.5E-3*CLK1_FREQ=45E3) pour avoir une période T2 de 1.5ms. Si la donnée n'est ni nulle, ni égale à 255 # si on travaille avec des valeurs par excès, on prend x=118 sinon x=117.