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.
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.
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?
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.
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
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.
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
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 ).
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!