Revisione Circuito Basato su Atmega328p
Moderatore:
Paolino
0
voti
xx è il motorino che non è partito in quella sequenza.
-

ultrasound91
318 2 4 6 - Disattivato su sua richiesta
- Messaggi: 700
- Iscritto il: 26 ago 2014, 21:02
0
voti
ultrasound91 ha scritto:Nel software, essendo già a conoscenza del discorso dell'inerzia, avevo inserito un breve impulso iniziale di 50 ms a 2,5 volt, per cercare di garantirmi la partenza, poi do un impulso della durata di 1 secondo a 1,25 volt. Forse è troppo corto l'impulso di partenza.
Potrebbe trattarsi di un problema firmware nella routine che carica serialmente il dato (la word) nei registri dei due tpic.
Tra quando presenti il bit al pin 3 (SER IN) del tpic e quando dai il colpo di clock al pin 13 (SRCK) è bene che ci sia un piccolo delay.
Se vuoi pui postare il frammento di codice così verifichiamo.
Sull' argomento dell' impulso iniziale hai fatto bene perché i motori a velocità zero hanno poca coppia e l'avviamento è bene farlo col duty cycle relativamente alto (specialmente questi, che hanno una massa eccentrica). Prova a combiare la durata del primo impulso, forse 50ms sono pochi, prova nell'intervallo 200-500ms. Il secondo impulso non serve, una volta avviato puoi direttamente ridurre il duty al valore di programma.
-

AlbertoBianchi
2.009 3 5 - Master

- Messaggi: 836
- Iscritto il: 4 dic 2014, 18:30
- Località: Lastra a Signa (FI)
0
voti
Se al posto dei motorini collego dei normali led a 5 volt ed alta luminosità, non ho alcun problema, ho osservato l'accensione dei led per diversi minuti e non sbaglia uno.
Mi concentrerei di più su quello che è il pilotaggio corretto del motorino.
Quindi nello stabilire, in riferimento a un singolo motorino:
- tensione di partenza
- durata dell'impulso di partenza
- minima tensione operativa
- frequenza massima supportata (io ho messo 32000 Hz per non sentire suoni, e mi sembra giusto visto che i motorini dei nostri cellulari non emettono suoni, ma solo vibrazioni, però nel datasheet mi sembra di capire che all'aumentare della frequenza aumenta linearmente anche il consumo di corrente)
Pubblico comunque qualche parte di codice rilevante al pilotaggio, non perché voglio una revisione del codice ma giusto per condividere con gli altri utenti:
Mi concentrerei di più su quello che è il pilotaggio corretto del motorino.
Quindi nello stabilire, in riferimento a un singolo motorino:
- tensione di partenza
- durata dell'impulso di partenza
- minima tensione operativa
- frequenza massima supportata (io ho messo 32000 Hz per non sentire suoni, e mi sembra giusto visto che i motorini dei nostri cellulari non emettono suoni, ma solo vibrazioni, però nel datasheet mi sembra di capire che all'aumentare della frequenza aumenta linearmente anche il consumo di corrente)
Pubblico comunque qualche parte di codice rilevante al pilotaggio, non perché voglio una revisione del codice ma giusto per condividere con gli altri utenti:
- Codice: Seleziona tutto
const int clockPin = 5;
const int latchPin = 6;
const int dataPin = 7;
int pwmPin = 11; //PIN CHE ALIMENTA I CARICHI INDUTTIVI MEDIANTE UN SEGNALE PWM
const int periodsNumber = 3;
const int time[periodsNumber] = {50,700,250};
int dutyCycle[periodsNumber] = {0,0,0};
const int registry_number = 2;
int registry[registry_number];
boolean motor2 = false;
void setup() {
pinMode(dataPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(pwmPin, OUTPUT);
}
void loop() {
setPwmFrequency(pwmPin, 1);
.............
.............
.............
//DETERMINAZIONE DEL DUTY CYCLE DEGLI IMPULSI IN BASE AL NUMERO DI MOTORINI COLLEGATI
if (motor2) {
registry[1] += 32; //COLLEGAMENTO DEL SECONDO MOTORINO
dutyCycle[0] = 255;
dutyCycle[1] = 128;
dutyCycle[2] = 0;
}
else {
dutyCycle[0] = 127;
dutyCycle[1] = 64;
dutyCycle[2] = 0;
}
//INVERSIONE POLARITA'
for (int i = 0; i < periodsNumber; i++) {
dutyCycle[i] = 255 - dutyCycle[i];
}
//GENERAZIONE GLI IMPULSI
for (int i = 0; i < periodsNumber; i++) {
analogWrite(pwmPin, dutyCycle[i]);
digitalWrite(latchPin, LOW);
for (int i = registry_number - 1; i >= 0; i--) {
shiftOut(dataPin, clockPin, MSBFIRST, registry[i]);
}
digitalWrite(latchPin, HIGH);
delay(time[i]);
}
}
}
void setPwmFrequency(int pin, int divisor) {
byte mode;
if(pin == 5 || pin == 6 || pin == 9 || pin == 10) {
switch(divisor) {
case 1: mode = 0x01; break;
case 8: mode = 0x02; break;
case 64: mode = 0x03; break;
case 256: mode = 0x04; break;
case 1024: mode = 0x05; break;
default: return;
}
if(pin == 5 || pin == 6) {
TCCR0B = TCCR0B & 0b11111000 | mode;
} else {
TCCR1B = TCCR1B & 0b11111000 | mode;
}
} else if(pin == 3 || pin == 11) {
switch(divisor) {
case 1: mode = 0x01; break;
case 8: mode = 0x02; break;
case 32: mode = 0x03; break;
case 64: mode = 0x04; break;
case 128: mode = 0x05; break;
case 256: mode = 0x06; break;
case 1024: mode = 0x7; break;
default: return;
}
TCCR2B = TCCR2B & 0b11111000 | mode;
}
}
-

ultrasound91
318 2 4 6 - Disattivato su sua richiesta
- Messaggi: 700
- Iscritto il: 26 ago 2014, 21:02
0
voti
Sto migliorando il pilotaggio dei motorini. Se è possibile vorrei sapere come usare il TPI al posto del mosfet.
-

ultrasound91
318 2 4 6 - Disattivato su sua richiesta
- Messaggi: 700
- Iscritto il: 26 ago 2014, 21:02
0
voti
ultrasound91 ha scritto:Sto migliorando il pilotaggio dei motorini. Se è possibile vorrei sapere come usare il TPI al posto del mosfet.
Devi eliminare il BS250 (o cortocircuitare D e S) in modo che tutti i motori siano collegati al +5V
Il Pin 17 del micro lo devi connettere al pin 9 (OUT-ENABLE) di entrambi i tpic.
La fase del PWM non deve essere invertita (come era all' inizio)
Tutto qui.
- frequenza massima supportata (io ho messo 32000 Hz per non sentire suoni, e mi sembra giusto visto che i motorini dei nostri cellulari non emettono suoni, ma solo vibrazioni, però nel datasheet mi sembra di capire che all'aumentare della frequenza aumenta linearmente anche il consumo di corrente)
Credo che stare sui 20kHz potrebbe andar bene lo stesso. Potrebbe effettivamente consumare meno.
-

AlbertoBianchi
2.009 3 5 - Master

- Messaggi: 836
- Iscritto il: 4 dic 2014, 18:30
- Località: Lastra a Signa (FI)
0
voti
Non ha funzionato. Ho tolto la resistenza da 47k, ho tolto il mosfet, ho collegato il pin 17 del micro a entrambi i pin 9 dei TPI e ho collegato il positivo di tutti i motorini a +5 volt.
Risultato: assorbono molta corrente. Inoltre scollegare il pin 17 del micro non crea alcuna differenza, come se il pin 9 del TPI non legga cosa abbia in entrata. Comunque non c'è problema era solo un approfondimento.
Risultato: assorbono molta corrente. Inoltre scollegare il pin 17 del micro non crea alcuna differenza, come se il pin 9 del TPI non legga cosa abbia in entrata. Comunque non c'è problema era solo un approfondimento.
-

ultrasound91
318 2 4 6 - Disattivato su sua richiesta
- Messaggi: 700
- Iscritto il: 26 ago 2014, 21:02
1
voti
Ho fatto un errore, scusami, la fase del PWM deve essere invertita
Per il resto dovrebbe andare, ricontrolla bene.
Per il resto dovrebbe andare, ricontrolla bene.
-

AlbertoBianchi
2.009 3 5 - Master

- Messaggi: 836
- Iscritto il: 4 dic 2014, 18:30
- Località: Lastra a Signa (FI)
0
voti
Con la fase invertita funziona perfettamente. Quindi significa che il pin 9 del TPI agisce come una sorta di mosfet a canale P. Ho però dovuto applicare una modifica: in pratica per alimentare due motorini non c'è più bisogno di raddoppiare il duy cycle.
-

ultrasound91
318 2 4 6 - Disattivato su sua richiesta
- Messaggi: 700
- Iscritto il: 26 ago 2014, 21:02
1
voti
ultrasound91 ha scritto:Con la fase invertita funziona perfettamente. Quindi significa che il pin 9 del TPI agisce come una sorta di mosfet a canale P. Ho però dovuto applicare una modifica: in pratica per alimentare due motorini non c'è più bisogno di raddoppiare il duy cycle.
Se guardi il datasheet del tpic vedrai che internamente ogni uscita corrisponde al drain di un mosfet che chiude verso GND.
Il pin 9 permette di abilitare o disabilitare globalmente tutti i mosfet di uscita, per cui applicare il segnale di PWM a questo pin significa modulare globalmente tutti i mosfet attivi (attivi da registro).
L'effetto risultante è esattamente lo stesso che si ottieneva col BS250
A.
-

AlbertoBianchi
2.009 3 5 - Master

- Messaggi: 836
- Iscritto il: 4 dic 2014, 18:30
- Località: Lastra a Signa (FI)
Torna a Realizzazioni, interfacciamento e nozioni generali.
Chi c’è in linea
Visitano il forum: Nessuno e 9 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)