Librairie qui permet de controller le module Keyes L298 prennant en paramètre une valeur d'acceleration de -1 à 1
Dependents: asservissement_robot2
L298.cpp@0:e6ed3d459a99, 2019-03-20 (annotated)
- 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?
User | Revision | Line number | New 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 | }*/ |