Banco prova motori tipo mabuchi180 - aiuto software

Bn sera a tutti,
dopo lunga assenza rieccomi qui a rompervi le scatole, mi sono ripresentato, ed adesso spero di postare la mia richiesta di aiuto nella sezione corretta.
Sto cercando di realizzare un banco prova motori elettrici tipo mabuchi180, tenzione massima di funzionamento 15 volts, assorbimento massimo non oltre i 2.2 amp.
Per il rilevamento dei giri uso l'encoder HC-020K, e per leggere la tensione uso un partitore di tensione collegato ad una porta analogica e per leggere l'assorbimento uso uno shunt da 0.1 ohm anche questo con lettura su porta analogica.
La lettura del numero dei giri e della tensione sono corretti, il mio problema nasce con la lettura dell'assorbimento. Ho trovato del codice in rete che sto utilizzando, ma il valore che leggo è completamente sballato, e poi non riesco ad azzerare la variabile dopo la lettura.
Allego il codice e screenshoot dei valori letti.
Grazie in anticipo per il Vs aiuto
Max
lettura banco prova.pdf (11.6 KB)

#define encoder 3
unsigned int rpm; // giri motore
volatile byte pulses; // impulsi volano
unsigned long TIME; // tempo 
unsigned int pulse_per_turn = 20; // nr fori sul volano
float input_volt = 0.0; // tensione rilevata
float input_amp =0.0; // intensita corrente rilevata
float potenza_watt = 0.0; // valore potenza motore in wat
float temp = 0.0; // variabile temporanea
float r1 = 100100.0; // valore resistenza partitore da confermare
float r2 = 9900.0; // valore resistenza partitore da confermare

void count() {
  pulses++;
 } 

void setup() {
  // put your setup code here, to run once:
rpm=0;
pulses=0;
TIME=0;

Serial.begin(9600);
pinMode(encoder, INPUT);
attachInterrupt(digitalPinToInterrupt(encoder), count, FALLING);
}

void loop() {
  // put your main code here, to run repeatedly:
if (millis() - TIME >= 100){
  detachInterrupt(digitalPinToInterrupt(encoder));
  rpm = (60*100/pulse_per_turn) / (millis() - TIME) * pulses;
  TIME = millis();
  pulses = 0;

  int analogvalue = analogRead(A2); //lettura valore tensione
  temp = (analogvalue * 4.96) / 1024.0;
  input_volt = temp / (r2 / (r1+r2));
  if (input_volt < 0.01) {
    input_volt = 0.0;
   } 
int analogvalue1 = analogRead(A1); //lettura valore ampere
    input_amp = analogvalue1 * 0.015;
  if (input_amp < 0.01) {
    input_amp = 0.0;
   } 

   potenza_watt = input_volt * input_amp; //calcolo potenza motore

  Serial.print("RPM");
  Serial.println(rpm);
  Serial.print("Volts");
  Serial.println(input_volt);
  Serial.print("amper");
  Serial.println(input_amp);
  Serial.print("Potenza");
  Serial.println(potenza_watt);
  attachInterrupt(digitalPinToInterrupt(encoder), count, FALLING);
//input_volt = 0;
//input_amp = 0;
  delay (5000);
input_volt = 0;
input_amp = 0;

  }
}

Ciao Libeccio, e benvenuto nel forum di Arduino. (Tra l'altro sei anche mio compaesano e quasi coetaneo!)
Sarebbe meglio se tu pubblicassi anche uno schema elettrico dei collegamenti e una foto della realizzazione. Non è chiaro ad esempio chi e come comanda il motore, se i vari GND sono collegati tra loro (e come lo sono, da qui la necessità della foto).
Comunque per monitorare tensione e corrente io di solito uso un INA219, che nasce appositamente per lo scopo.

Ciao, Ale.

Buona sera Ale,
ma dai parte del Gulli?, ho scaricato fritzing e disegno il circuito e lo pubblico, comunque le masse sono tutte collegate tra loro. Attualmente il motore lo alimentato con una pila da 9 volts.

Slt
Max

Ci partecipavo molti anni fa, all'incirca quando fu fondato.

Non hai un foglio e una matita?? Personalmente lo preferisco alla grande a Fritzing... :roll_eyes:

Ciao, Ale.

allego lo schema elettrico
banco_motore_wiring.pdf (734.8 KB)

Cerca di caricare direttamente l'immagine, è noioso ogni volta dover scaricare il file...
Detto questo, mi pare sbagliato il sistema che usi per misurare la corrente: così come lo hai disegnato non misura niente (il filo è collegato solo al condensatore), se fosse collegato sulla resistenza inviereste sull'ingresso analogico di Arduino la tensione della batteria (che hai detto essere 9V, poi nello schema sono 2 stilo, quindi 3V, qual'è quella giusta?) che non può essere superiore a 5V, pena la distruzione dell'ingresso analogico.
Ancora più misterioso è anche il calcolo che fai della corrente nel programma, su cosa ti sei basato?

Ciao, Ale.

Ale su fritzing non sono riuscito a trovare il pacco batteria da 9 volts, ho usato il simbolo che ho trovato!, il calcolo ed il waiting l'ho trovato su YouTube, ho chiesto spiegazioni perché anche pure io non lo capisco.

Buona sera a tutti, spulciando sul web ho trovato il sensore INA129 che legge sia la tensione che l'amperaggio, sabato mi dovrebbe arrivare quindi lo utilizzerò al posto del circuito che ho sempre trovato in rete. Adesso sto cercando di capire che libreria e che codice che devo implementare.
Il passo successivo del mio progetto e quello di riuscire a fornire al motore da testare una tensione progressiva in un lasso di tempo prestabilito; cioè partire da 0 volts ed arrivare a 12 volts in 30 secondi. Stavo pensando di utilizzare allo scopo un mosfet collegando il gate ad un pin analogico di arduino, incrementando il segnale al gate del mosfet ottengo un'incremento proporzionale della tensione ed al raggiungimento del limite impostato, rilevato dalla lettura del sensore INA129 chiudo la porta di arduino e di consequenza la tensione di alimentazione.
Devo capire che tipo di mosfet devo utilizzare, se PNP o NPN.

Slt
Max

Sei piuttosto confusionario vedo

Ina129 e' un amplificatore per strumentazione

Ina219 non lo hai trovato tu, ti e' stato consigliato

I MOSFET non sono PNP o npn, ma a canale P o a canale N

Comandare in quella maniera che vuoi usare per i MOSFET li trasforma in stufette in pochi minuti

Ma da ultimo la cosa più importante:
I PIN analogici di Arduino non sono uscite

Arduino non ha uscite analogiche

Ti conviene prenderti tempo, fumarti con calma una sigaretta e capire cosa devi studiare prima di cominciare a fare danni

Se hai domande specifiche ti basta chiedere

1 Like

Se fossi studiato non sarei confusionario, se chiedo è per chiedere aiuto ed imparare da chi mi vuole aiutare dandomi spiegazioni invece di postare commenti sarcastici che non mi sono di alcuna utilità. Per quanto concerne lo studio faccio del mio meglio nei ritagli di tempo libero dagli impegni familiari

Nelle mie parole non c'era traccia di sarcasmo

E se tu avessi fatto lo sforzo di capirle ti avrebbero anche aiutato

Invece non mi piace la tua reazione

Io ti stavo aiutando

Non mi è chiara una cosa, se INA219 è un'ampilificatore per strumentazione, quello che ho trovato in questo sito Come misurare corrente/tensione con il sensore INA219 - www.adrirobot.it non va assolutamente bene?, lo stesso articolo è stato pubblicato anche sul sito di emcelettronica e menzionato in altro post su questo forum.

Slt
Max

Tu non riguardi mai quello che scrivi?
E nemmeno ti sforzi per capire quello che leggi

Ina129
Ina219

Capito adesso?

Concentrati di più, la scarsa attenzione fa danni

Il calcolo della corrente è strano

Posto un riferimento analogico a 4.96 volt come hai fatto per la tensione
Devi dividere la lettura per 1024, moltiplicarla per 4.96 e moltiplicarla ancora per 10

Ma comunque ci sono due errori ancora
1 non scarti la prima lettura dopo aver cambiato piedino analogico
2 con una corrente di 2.2 A e uno shunt di un decimo di ohm hai una lettura massima di 220 mV
Un po poco per un riferimento di 4.96 V
Mi aspetto un analogRead costantemente sotto il 50 e forti errori di misura

1 Like

Buon giorno C1P8, grazie per il riscontro.
Per quanto riguarda la lettura della tensione e corrente penso di aver risolto usando la scheda ina219 (sto rispondendo dal cellulare e spero di aver scritto il numero corretto :grin:).
Per favore mi puoi spiegare come fare a scartare la prima lettura?
Altra cosa importante, ed è un mio grave errore di battitura il mabuchi 180 dalle prove che ho fatto al club a vuoto ha un' assorbimento che non supera i 0.5 amp!

Se usi INA219 non serve scartare la prima lettura

Ok grz 1000

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.