Motori a spazzole

Brushed motor

 

 

 

Documentazione:

 
 
 

 

Per pilotare motori a spazzole fino a 24 V e 43 A si può fare uso del modulo: BTS7960 IBT-2.

Vedi Video qui

 

 

1️⃣ Collegamenti tra Arduino e BTS7960

 

Pin BTS7960 Collegamento ad Arduino Descrizione
RPWM 3(PWM) Controlla velocità verso destra
LPWM 5 (PWM) Controlla velocità verso sinistra
R_EN 2 (Digital Output) Abilita il senso di rotazione orario (destra)
L_EN 4(Digital Output) Abilita il senso di rotazione antiorario (sinistra)
R_IS GND (o libero) Disattiva il monitor di corrente
L_IS GND (o libero) Disattiva il monitor di corrente
VCC 5V di Arduino Alimentazione del modulo
GND GND di Arduino Massa comune
M+ Motore (polo positivo) Uscita verso il motore
M- Motore (polo negativo) Uscita verso il motore
B+ Batteria (polo positivo) Alimentazione 12 V
B- Batteria (polo negativo) Alimentazione 12 V

 

2️⃣ Collegamenti dell'interruttore

 

Pin Interruttore Collegamento ad Arduino
Centrale GND
Lato sinistro Pin 6
Lato destro Pin 7

 

3️⃣ Collegamenti del potenziometro

 

Pin Potenziometro Collegamento ad Arduino
Sinistro GND
Centrale A0 (Lettura analogica)
Destro 5V

 

Abiliteremo la pull-up interna, che porta il segnale a HIGH (5V) di default e lo mette a LOW (0V) solo quando il contatto è chiuso.

 

Codfice:

const int I_SX = 6;    // Pin collegato al lato sinistro dell'interruttore
const int I_DX = 7;    // Pin collegato al lato destro dell'interruttore
const int Pot = A0;    // Pin del potenziometro

const int R_PWM = 3;   // Controlla velocità verso destra (PWM)
const int L_PWM = 5;   // Controlla velocità verso sinistra (PWM)
const int R_EN = 2;    // Abilita direzione destra
const int L_EN = 4;    // Abilita direzione sinistra

const float coeff = 40.14; // Coefficiente per calcolo RPM

void setup() {
  pinMode(I_SX, INPUT_PULLUP);
  pinMode(I_DX, INPUT_PULLUP);
  pinMode(R_EN, OUTPUT);
  pinMode(L_EN, OUTPUT);
  pinMode(R_PWM , OUTPUT);
  pinMode(L_PWM, OUTPUT);
 
  digitalWrite(R_EN, HIGH);
  digitalWrite(L_EN, HIGH); 

  Serial.begin(115200);
}

void loop() {
  bool sinistra = !digitalRead(I_SX); // Invertiamo perché il pull-up rende HIGH di default
  bool destra = !digitalRead(I_DX);   // Invertiamo perché il pull-up rende HIGH di default
  int potValue = analogRead(Pot);
  int motorSpeed = map(potValue, 0, 1023, 0, 255); // Mappa il valore del potenziometro a un valore PWM
  int rpm = motorSpeed * coeff; // Calcolo degli RPM

  if (sinistra) {
    analogWrite(R_PWM , 0);    // Assicuriamoci che RPWM sia spento
    analogWrite(L_PWM, motorSpeed);
  } 
  else if (destra) {
    analogWrite(L_PWM, 0);    // Assicuriamoci che LPWM sia spento
    analogWrite(R_PWM , motorSpeed);
  } 
  else {
    analogWrite(R_PWM , 0);
    analogWrite(L_PWM, 0);
    rpm = 0; // Se il motore è fermo, gli RPM sono zero
  }

  Serial.print("Sx: "); Serial.print(sinistra);
  Serial.print(" - Dx: "); Serial.print(destra);
  Serial.print(" - Vel: "); Serial.print(motorSpeed);
  Serial.print(" - RPM: "); Serial.println(rpm);
  
  delay(100);
}

Il coefficente di conversione valori del potenziometro in RPM è stato calcolato tramite campionamento con tachimetro laser. La tabella delle corrispondenzerilevate è la seguente:

 

Pot Rpm
0 0
25 970
50 1953
75 2930
100 3954
125 5067
150 6097
175 7195
200 8285
225 9240
255 10340
 

 

  • Calcolo del rapporto (coefficiente) per ciascun punto:

    Il coefficiente è dato dalla formula:

    Ad esempio, per il primo dato:

    E così via per tutti gli altri valori.

  • Coefficiente medio: Il coefficiente medio viene calcolato come la media aritmetica di tutti i coefficienti ottenuti:

  • La media di questi coefficienti è 40.14, che è il valore che puoi utilizzare nel tuo codice per stimare gli RPM.