index.html
pourquoi les moteurs de machines à laver modernes sifflent...
pour la même raison que le les ultraportables à diodes (voir eeepc900-bruit-ecran.html.
cet extrait de texte présente une tentative de réduire le bruit en l'étalan.


PWM spread spectrum

Prologue

Tout est parti d'un post de Sylvain sur les forums de Planete-sciences, à propos d'un générateur PWM Spread Spectrum pour moteur. Il proposait d'en coder un en VHDL. Seulement voilà, le VHDL, c'est comme croiser les rayons, c'est mal... Alors, en voici un, mais en Verilog !

Plus sérieusement, à quoi sert un modulateur SSPWM ? Les moteurs des robots sont généralement commandés en PWM (modulation de largeur d'impulsion). Pour faire varier la puissance moyenne envoyée au moteur, on les alimente par un créneau de fréquence constante dont on fait varier le rapport cyclique.

La fréquence de commande est choisie :

Le problème est que, si la fréquence choisie est plus petite que 20kHz, elle tombe dans le spectre audible : les moteurs sifflent. Ça peut être attractif et amusant pendant quelques minutes, ça devient vite énervant... La solution ? Utiliser une fréquence variable.

On fait varier rapidement la fréquence du PWM, tout en gardant le même rapport cyclique. Le bruit résultant est alors réparti sur plusieurs fréquences, de puissances plus faibles. Selon la répartition de ces fréquences, le bruit ressemble à un chuintement plus ou moins aigu. En d'autres termes, au lieu d'avoir un spectre sonore avec un grand pic, on a un spectre plus large, plus plat, et plus bas : il est étalé, d'où le nom du système (spread spectrum).


Spectre PWM (bleu) / spread spectrum idéal (rouge)

  Comment fait-on un modulateur PWM spread spectrum (appelé aussi Random PWM) ? Il existe des circuits intégrés ou des cartes toutes faites, généralement utilisés pour le contrôle de moteurs alternatifs puissants. Pour des robots, une solution existe : les FPGA.

Les FPGA

En deux mots, les FPGA sont des circuits programmables contenant des portes logiques en vrac. Lors de la programmation, on décrit la façon dont on va relier ces portes logiques entre elles. On peut ainsi implémenter la fonction logique que l'on souhaite.

La fonction à obtenir peut être décrite sous forme schématique, ou textuelle, à l'aide d'un langage spécialisé (Verilog, VHDL, SystemC, AHDL, Abel, ...). Les FPGA ont un intérêt tout particulier en robotique : ils permettent d'ajouter des fonctionnalités simples et pratiques à moindre frais à un micro-contrôleur :

Ainsi le processeur peut être réservé à des tâches plus complexes (vision, intelligence, ...).  

Cet article montre comment implémenter un modulateur PWM spread spectrum dans un FPGA. Le code est suffisamment générique pour être utilisé tel quel dans tout type de FPGA. Le langage choisi est Verilog. D'abord parce que c'est un langage simple et aussi puissant que VHDL, et surtout parce qu'il existe des simulateurs libres (GPL) de Verilog : Icarus Verilog et Cver. Si on utilise Cver, on fera attention à prendre au moins la version 2.11a. Si vous préférez VHDL, la traduction du code en VHDL est assez simple et directe.

Pour plus de détails sur Verilog et VHDL, on pourra se rapporter au cours en ligne de Verilog, VHDL et SystemC de l'ENST