Bonjour chers tous. J'ai un projet de suiveur solaire en cours et je voudrais avoir quelques éclaircissements. J'utilise pour mon tracking un moteur pas à pas avec les caractéristiques suivantes: U=2,8V;I=1,68A; 1,8°/pas et un réducteur de 1:27. le moteur fait tourner un tige filetée de 2,5mm de pas de filetage. pour etre assez précis, je souhaiterai faire une commande au 1/16 ème de tour voir 1/32 ème de tour de ma tige filetée. 1) Comment déterminer le nombre de pas qu'il faut pour cette commande sachant que je souhaite avoir une phase d'accélération et une de décélération. 2) Voici un code qui me permet de commander le moteur pour faire un quart de tour de ma tige je souhaiterai le comprendre.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 | #Commande pour 1/4 de tours int ENA=2; //Connecté sur votre Arduino, Pin 2 int IN1=3; //Connecté sur votre Arduino, Pin 3 int IN2=4; //Connecté sur votre Arduino, Pin 4 int ENB=5; //Connecté sur votre Arduino, Pin 5 int IN3=6; //Connecté sur votre Arduino, Pin 6 int IN4=7; //Connecté sur votre Arduino, Pin 7 void setup() { pinMode(ENA,OUTPUT); pinMode(ENB,OUTPUT); pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT); } void loop(){ accelere(1); continu(1); deccelere(1); delay (3000);} int accelere(byte sens){ digitalWrite(ENA,HIGH); digitalWrite(ENB,HIGH); if (sens == 1){ for (int dlay = 10000; dlay > 2000; dlay-=120){ digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); delayMicroseconds(dlay-30); digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); delayMicroseconds(dlay-60); digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); delayMicroseconds(dlay-90); digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); delayMicroseconds(dlay-120); }} else{ for (int dlay = 10000; dlay > 2000; dlay-=120){ digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); delayMicroseconds(dlay-30); digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); delayMicroseconds(dlay-60); digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); delayMicroseconds(dlay-90); digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); delayMicroseconds(dlay-120); }}} int continu(byte sens){ digitalWrite(ENA,HIGH); digitalWrite(ENB,HIGH); if (sens == 1){ for (int i = 0; i < 203; i++){ digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); delayMicroseconds(2080); digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); delayMicroseconds(2080); digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); delayMicroseconds(2080); digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); delayMicroseconds(2080); }} else{ for (int i = 0; i < 203; i++){ digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); delayMicroseconds(2080); digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); delayMicroseconds(2080); digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); delayMicroseconds(2080); digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); delayMicroseconds(2080); }}} int deccelere(byte sens){ digitalWrite(ENA,HIGH);// Activer moteur A digitalWrite(ENB,HIGH);// Activer moteur B if (sens == 1){ for (int dlay = 2000; dlay < 10000; dlay+=120){ digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); delayMicroseconds(dlay+30); digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); delayMicroseconds(dlay+60); digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); delayMicroseconds(dlay+90); digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); delayMicroseconds(dlay+120); }} else{ for (int dlay = 2000; dlay < 10000; dlay+=120){ digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); delayMicroseconds(dlay+30); digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); delayMicroseconds(dlay+60); digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); delayMicroseconds(dlay+90); digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); delayMicroseconds(dlay+120); }} digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); digitalWrite(ENA,LOW); digitalWrite(ENB,LOW);} # |
Merci.
+0
-0