Librairie qui permet de controller le module Keyes L298 prennant en paramètre une valeur d'acceleration de -1 à 1

Dependents:   asservissement_robot2

Committer:
hamaint
Date:
Wed Mar 20 00:26:19 2019 +0000
Revision:
0:e6ed3d459a99
librairie pour L298 en c++ en mode bg;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hamaint 0:e6ed3d459a99 1 /**
hamaint 0:e6ed3d459a99 2 * @author Thomas Hamain (fait bcp de photes)
hamaint 0:e6ed3d459a99 3 *
hamaint 0:e6ed3d459a99 4 * @section DESCRIPTION
hamaint 0:e6ed3d459a99 5 * Librairie pour le double pont H L298 prennant simplement en paramètre une valeur de -1 à 1
hamaint 0:e6ed3d459a99 6 *
hamaint 0:e6ed3d459a99 7 */
hamaint 0:e6ed3d459a99 8
hamaint 0:e6ed3d459a99 9
hamaint 0:e6ed3d459a99 10 /**
hamaint 0:e6ed3d459a99 11 * Includes
hamaint 0:e6ed3d459a99 12 */
hamaint 0:e6ed3d459a99 13 #include "mbed.h"
hamaint 0:e6ed3d459a99 14 #include "L298.h"
hamaint 0:e6ed3d459a99 15
hamaint 0:e6ed3d459a99 16 /**
hamaint 0:e6ed3d459a99 17 * Constructeur.
hamaint 0:e6ed3d459a99 18 * Initialise la STM32 pour être branchée au L298
hamaint 0:e6ed3d459a99 19 *
hamaint 0:e6ed3d459a99 20 * @param ENA mbed pin pour ENA.
hamaint 0:e6ed3d459a99 21 * @param ENB mbed pin pour ENB.
hamaint 0:e6ed3d459a99 22 * @param ENA mbed pin pour IN1.
hamaint 0:e6ed3d459a99 23 * @param ENB mbed pin pour IN2.
hamaint 0:e6ed3d459a99 24 * @param ENA mbed pin pour IN3.
hamaint 0:e6ed3d459a99 25 * @param ENB mbed pin pour IN4.
hamaint 0:e6ed3d459a99 26 * @param freq_pwm la fréquence de la PWM envoyée au pont H (tester avec valeur
hamaint 0:e6ed3d459a99 27 * negative mais je pense que le compilateur insulte!)
hamaint 0:e6ed3d459a99 28 */
hamaint 0:e6ed3d459a99 29 L298::L298(PinName ena,
hamaint 0:e6ed3d459a99 30 PinName enb,
hamaint 0:e6ed3d459a99 31 PinName in1,
hamaint 0:e6ed3d459a99 32 PinName in2,
hamaint 0:e6ed3d459a99 33 PinName in3,
hamaint 0:e6ed3d459a99 34 PinName in4,
hamaint 0:e6ed3d459a99 35 double freq_pwm) : _ena(ena), _enb(enb), _in1(in1), _in2(in2), _in3(in3), _in4(in4), _periode_pwm(1/freq_pwm)
hamaint 0:e6ed3d459a99 36 {
hamaint 0:e6ed3d459a99 37 _ena.period(_periode_pwm);
hamaint 0:e6ed3d459a99 38 _enb.period(_periode_pwm);
hamaint 0:e6ed3d459a99 39 _ena.pulsewidth(0);
hamaint 0:e6ed3d459a99 40 _enb.pulsewidth(0);
hamaint 0:e6ed3d459a99 41 }
hamaint 0:e6ed3d459a99 42
hamaint 0:e6ed3d459a99 43 /**
hamaint 0:e6ed3d459a99 44 * Constructeur par default
hamaint 0:e6ed3d459a99 45 * Initialise par défaut:
hamaint 0:e6ed3d459a99 46 * - D6 : ENA (PWM du moteur A)
hamaint 0:e6ed3d459a99 47 * - D11 : ENB (PWM du moteur B)
hamaint 0:e6ed3d459a99 48 * - D7 : IN1
hamaint 0:e6ed3d459a99 49 * - D8 : IN2
hamaint 0:e6ed3d459a99 50 * - D9 : IN3
hamaint 0:e6ed3d459a99 51 * - D10 : IN4
hamaint 0:e6ed3d459a99 52 *
hamaint 0:e6ed3d459a99 53 * La fréquence de la PWM envoyée aux moteurs est de 1kHz.
hamaint 0:e6ed3d459a99 54 *
hamaint 0:e6ed3d459a99 55 * Pour plus d'information sur les pins INx, se référer au fonctionnement du L298 (et completer la doc de la classe)
hamaint 0:e6ed3d459a99 56 */
hamaint 0:e6ed3d459a99 57
hamaint 0:e6ed3d459a99 58 L298::L298() : _ena(D6), _enb(D11), _in1(D7), _in2(D8), _in3(D9), _in4(D10), _periode_pwm(0.001)
hamaint 0:e6ed3d459a99 59 {
hamaint 0:e6ed3d459a99 60 _ena.period(_periode_pwm);
hamaint 0:e6ed3d459a99 61 _enb.period(_periode_pwm);
hamaint 0:e6ed3d459a99 62 _ena.pulsewidth(0);
hamaint 0:e6ed3d459a99 63 _enb.pulsewidth(0);
hamaint 0:e6ed3d459a99 64 }
hamaint 0:e6ed3d459a99 65
hamaint 0:e6ed3d459a99 66 /**
hamaint 0:e6ed3d459a99 67 * Contrôle du moteur A.
hamaint 0:e6ed3d459a99 68 * Envoie une PWM avec le rapport cyclique allant de -1 à 1. Le signe de la
hamaint 0:e6ed3d459a99 69 * valeur passée en paramètre indique la direction. La valeur de zéro
hamaint 0:e6ed3d459a99 70 * correspond à un arrêt du moteur. La fréquence de la PWM peut être connue
hamaint 0:e6ed3d459a99 71 * ou modifiée grâce à respectivement getPeriodePwm et setPeriodePwm.
hamaint 0:e6ed3d459a99 72 *
hamaint 0:e6ed3d459a99 73 * @param rc rapport cyclique -1 à 1.
hamaint 0:e6ed3d459a99 74 */
hamaint 0:e6ed3d459a99 75 void L298::A(double rc)
hamaint 0:e6ed3d459a99 76 {
hamaint 0:e6ed3d459a99 77 if (rc >= 0) {
hamaint 0:e6ed3d459a99 78 _in1 = 1;
hamaint 0:e6ed3d459a99 79 _in2 = 0;
hamaint 0:e6ed3d459a99 80 } else {
hamaint 0:e6ed3d459a99 81 _in1 = 0;
hamaint 0:e6ed3d459a99 82 _in2 = 1;
hamaint 0:e6ed3d459a99 83 rc = -1 * rc;
hamaint 0:e6ed3d459a99 84 }
hamaint 0:e6ed3d459a99 85 _ena.pulsewidth(rc*_periode_pwm);
hamaint 0:e6ed3d459a99 86 }
hamaint 0:e6ed3d459a99 87
hamaint 0:e6ed3d459a99 88 /**
hamaint 0:e6ed3d459a99 89 * Contrôle du moteur A.
hamaint 0:e6ed3d459a99 90 * Envoie une PWM avec le rapport cyclique allant de -1 à 1. Le signe de la
hamaint 0:e6ed3d459a99 91 * valeur passée en paramètre indique la direction. La valeur de 0
hamaint 0:e6ed3d459a99 92 * correspond à un arrêt du moteur. La fréquence de la PWM peut être connue
hamaint 0:e6ed3d459a99 93 * ou modifiée grâce à respectivement getPeriodePwm et setPeriodePwm.
hamaint 0:e6ed3d459a99 94 *
hamaint 0:e6ed3d459a99 95 * @param rc rapport cyclique -1 à 1.
hamaint 0:e6ed3d459a99 96 */
hamaint 0:e6ed3d459a99 97 void L298::B(double rc)
hamaint 0:e6ed3d459a99 98 {
hamaint 0:e6ed3d459a99 99 if (rc >= 0) {
hamaint 0:e6ed3d459a99 100 _in1 = 1;
hamaint 0:e6ed3d459a99 101 _in2 = 0;
hamaint 0:e6ed3d459a99 102 } else {
hamaint 0:e6ed3d459a99 103 _in1 = 0;
hamaint 0:e6ed3d459a99 104 _in2 = 1;
hamaint 0:e6ed3d459a99 105 rc = -1 * rc;
hamaint 0:e6ed3d459a99 106 }
hamaint 0:e6ed3d459a99 107 _enb.pulsewidth(rc*_periode_pwm);
hamaint 0:e6ed3d459a99 108 }
hamaint 0:e6ed3d459a99 109
hamaint 0:e6ed3d459a99 110
hamaint 0:e6ed3d459a99 111
hamaint 0:e6ed3d459a99 112
hamaint 0:e6ed3d459a99 113
hamaint 0:e6ed3d459a99 114 /*
hamaint 0:e6ed3d459a99 115 PwmOut mypwm_a(D6);
hamaint 0:e6ed3d459a99 116 PwmOut mypwm_b(D11);
hamaint 0:e6ed3d459a99 117
hamaint 0:e6ed3d459a99 118 DigitalOut in1(D7);
hamaint 0:e6ed3d459a99 119 DigitalOut in2(D8);
hamaint 0:e6ed3d459a99 120 DigitalOut in3(D9);
hamaint 0:e6ed3d459a99 121 DigitalOut in4(D10);
hamaint 0:e6ed3d459a99 122
hamaint 0:e6ed3d459a99 123
hamaint 0:e6ed3d459a99 124
hamaint 0:e6ed3d459a99 125 void moteur_init()
hamaint 0:e6ed3d459a99 126 {
hamaint 0:e6ed3d459a99 127 mypwm_a.period(PERIODE_PWM_MOTEUR);
hamaint 0:e6ed3d459a99 128 mypwm_b.period(PERIODE_PWM_MOTEUR);
hamaint 0:e6ed3d459a99 129 mypwm_a.pulsewidth(0);
hamaint 0:e6ed3d459a99 130 mypwm_b.pulsewidth(0);
hamaint 0:e6ed3d459a99 131 }
hamaint 0:e6ed3d459a99 132
hamaint 0:e6ed3d459a99 133 void moteur_a(float percent)
hamaint 0:e6ed3d459a99 134 {
hamaint 0:e6ed3d459a99 135
hamaint 0:e6ed3d459a99 136 if (percent>=0) {
hamaint 0:e6ed3d459a99 137 in1 = 1;
hamaint 0:e6ed3d459a99 138 in2 = 0;
hamaint 0:e6ed3d459a99 139 } else {
hamaint 0:e6ed3d459a99 140 in1 = 0;
hamaint 0:e6ed3d459a99 141 in2 = 1;
hamaint 0:e6ed3d459a99 142 percent = -1 * percent;
hamaint 0:e6ed3d459a99 143 }
hamaint 0:e6ed3d459a99 144 mypwm_a.pulsewidth((float)percent*(float)PERIODE_PWM_MOTEUR);
hamaint 0:e6ed3d459a99 145 }
hamaint 0:e6ed3d459a99 146
hamaint 0:e6ed3d459a99 147 void moteur_b(float percent)
hamaint 0:e6ed3d459a99 148 {
hamaint 0:e6ed3d459a99 149
hamaint 0:e6ed3d459a99 150 if (percent>=0) {
hamaint 0:e6ed3d459a99 151 in4 = 1;
hamaint 0:e6ed3d459a99 152 in3 = 0;
hamaint 0:e6ed3d459a99 153 } else {
hamaint 0:e6ed3d459a99 154 in4 = 0;
hamaint 0:e6ed3d459a99 155 in3 = 1;
hamaint 0:e6ed3d459a99 156 percent = -1 * percent;
hamaint 0:e6ed3d459a99 157 }
hamaint 0:e6ed3d459a99 158
hamaint 0:e6ed3d459a99 159 mypwm_b.pulsewidth((float)percent*(float)PERIODE_PWM_MOTEUR);
hamaint 0:e6ed3d459a99 160 }*/