Doubleur de débattements de servo
Posté : 14 nov. 2017, 19:14
Bonjour
Au club de modélisme ou je suis j'ai vu que certains demandent quelque chose qui pourrait doubler les débattements de leur servo.
En réponse j'ai coupé en deux une nappe de fils graupner, soudé un microcontrôleur atmega328p entre avec le +5V sur le VCC et la masse sur le GND du composant bien-sûr. Le fil de signal PWM venant du récepteur de modélisme entre dans la puce par la broche numéro 2 (PD0) et ressort par la broche 15 (PB1) sous la forme d'un nouveau signal PWM. En entrée un signal pouvant varier de 1000us à 2000us (1000us de débattement) passe de 500us à 2500us (2000us de débattement), le débattement est donc doublé. J'utilise un quartz de 16Mhz pour bénéficier de la meilleure vitesse de calcul, et 2 condensateurs 22pF. Il y a besoin également d'une résistance de tirage au VCC vers la broche 1 (reset) du microcontrôleur, afin que ce dernier soit en fonctionnement.
Le code source est écrit en C++ à l'aide de mon système MODULE, téléchargeable ici: http://www.sylvainmahe.site/
Le fichier main.cpp écrit à l'aide de MODULE:
Un certain nombre de choses pourraient être rajoutées, comme le choix d'un autre neutre que 1500us, ou encore la détection automatique de la fréquence du PWM en entrée (j'ai indiqué ici la sortie en 50Hz).
Si vous avez besoin d'explications sur la classe PwmRead: http://www.sylvainmahe.site/examplePwmRead.html
Ou pour comprendre comment vous servir de la classe PwmWrite: http://www.sylvainmahe.site/examplePwmWrite.html
N'hésitez pas si vous avez des questions sur le fonctionnement
Au club de modélisme ou je suis j'ai vu que certains demandent quelque chose qui pourrait doubler les débattements de leur servo.
En réponse j'ai coupé en deux une nappe de fils graupner, soudé un microcontrôleur atmega328p entre avec le +5V sur le VCC et la masse sur le GND du composant bien-sûr. Le fil de signal PWM venant du récepteur de modélisme entre dans la puce par la broche numéro 2 (PD0) et ressort par la broche 15 (PB1) sous la forme d'un nouveau signal PWM. En entrée un signal pouvant varier de 1000us à 2000us (1000us de débattement) passe de 500us à 2500us (2000us de débattement), le débattement est donc doublé. J'utilise un quartz de 16Mhz pour bénéficier de la meilleure vitesse de calcul, et 2 condensateurs 22pF. Il y a besoin également d'une résistance de tirage au VCC vers la broche 1 (reset) du microcontrôleur, afin que ce dernier soit en fonctionnement.
Le code source est écrit en C++ à l'aide de mon système MODULE, téléchargeable ici: http://www.sylvainmahe.site/
Le fichier main.cpp écrit à l'aide de MODULE:
Code : Tout sélectionner
#include "../module/328p/PwmRead.h"
#include "../module/328p/PwmWrite.h"
#include "../module/328p/Math.h"
int main()
{
PwmRead channel = PwmRead (1, true);
PwmWrite servo = PwmWrite (10);
PwmRead::start (0);
PwmWrite::start (50);
while (true)
{
channel.read();
servo.us (Math::curve (1000, channel.us, 2000, 500, 2500, 0));
}
return 0;
}
Si vous avez besoin d'explications sur la classe PwmRead: http://www.sylvainmahe.site/examplePwmRead.html
Ou pour comprendre comment vous servir de la classe PwmWrite: http://www.sylvainmahe.site/examplePwmWrite.html
N'hésitez pas si vous avez des questions sur le fonctionnement