15 mars 2019

Écran Sphérique - Étude - Modulation Binaire


Une autre méthode que le PWM (vue dans la précédente publication), rarement vue (hormis de par la personne qui me l'a enseigné que je salue au passage) et pourtant bien plus performante, la Modulation Binaire - Binary Modulation. Elle se révèle vraiment efficace surtout lorsqu’il s’agit de contrôler un grand nombre de sorties avec un fort échantillonnage (résolution).


À chaque cycles, on compare le nombre de cycles enregistrés dans la variable "Cycle" à la constante "CycleMax" dépendant à l'échantillonnage désiré. Pour n = 4 bits, nous aurons CycleMax = n = 4. Si "Cycle" est supérieur ou égal, on le réinitialise à 0. Puis on applique, à la sortie "Out", l’état du bit de la variable "Value" indexé par le compteur "Cycle".


La variable "Period", correspondant à la période du prochain cycle,  est le résultat de "IntialPeriod" multiplié par 2 à la puissance "Cycle". Enfin, on incrémente le compteur "Cycle".

Si vous avez bien suivi l'algorithme, vous aurez compris que la constante "InitialPeriod" doit être initialisée avec la plus petite période, correspondant au temps entre Cycle = 0 et Cycle = 1.

Notre rapport cyclique "Rcy" est bien modulé en conséquence par la variable "Value".
Avec cet algorithme nous avons besoin de beaucoup moins de cycles que celui du PWM et son traitement est quasiment similaire. Le tableau ci-contre résume le nombre nécessaire suivant l’échantillonnage et la méthode utilisée.

La Modulation Binaire permet un gain (traitement global et/ou énergie) non négligeable que ce soit sur un microcontrôleur ou un FPGA.
Cycles
Échantillonnage
n (bit)
PWM
Modulation Binaire
4
15
4
5
31
5
6
63
6
7
127
7
8
255
8
9
511
9
10
1023
10
11
2047
11
12
4095
12
13
8191
13
14
16383
14
15
32767
15
16
65535
16

Remarque : Pourquoi partir du bit de poids faible plutôt que celui de poids fort ?

Car en partant du bit de poids faible, nous passons par la multiplication (décalage des bits vers la gauche) plutôt que la division. Et nous nous abstenons, ainsi, d'une éventuelle division par 2 d'un nombre impaire (Si le calcul de "InitialPeriod" était mauvais).

Cependant, si le nombre de sorties est vraiment conséquent et l'échantillonnage élevé, afin de mieux répartir la charge globale sur le temps, nous pouvons diviser  équitablement  les sorties en deux listes. Chacune partant du bit de poids opposé. Ainsi, on évite la charge "brusque" demandée lors des cycles à faible période.