Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Revisione Circuito Basato su Atmega328p

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[51] Re: Revisione Circuito Basato su Atmega328p

Messaggioda Foto Utenteultrasound91 » 31 dic 2014, 18:08

xx è il motorino che non è partito in quella sequenza.
Avatar utente
Foto Utenteultrasound91
318 2 4 6
Disattivato su sua richiesta
 
Messaggi: 700
Iscritto il: 26 ago 2014, 21:02

0
voti

[52] Re: Revisione Circuito Basato su Atmega328p

Messaggioda Foto UtenteAlbertoBianchi » 31 dic 2014, 20:49

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.
Avatar utente
Foto UtenteAlbertoBianchi
2.009 3 5
Master
Master
 
Messaggi: 836
Iscritto il: 4 dic 2014, 18:30
Località: Lastra a Signa (FI)

0
voti

[53] Re: Revisione Circuito Basato su Atmega328p

Messaggioda Foto Utenteultrasound91 » 31 dic 2014, 21:13

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:

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;
  }
}

Avatar utente
Foto Utenteultrasound91
318 2 4 6
Disattivato su sua richiesta
 
Messaggi: 700
Iscritto il: 26 ago 2014, 21:02

0
voti

[54] Re: Revisione Circuito Basato su Atmega328p

Messaggioda Foto Utenteultrasound91 » 2 gen 2015, 18:18

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

0
voti

[55] Re: Revisione Circuito Basato su Atmega328p

Messaggioda Foto UtenteAlbertoBianchi » 2 gen 2015, 18:28

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.
Avatar utente
Foto UtenteAlbertoBianchi
2.009 3 5
Master
Master
 
Messaggi: 836
Iscritto il: 4 dic 2014, 18:30
Località: Lastra a Signa (FI)

0
voti

[56] Re: Revisione Circuito Basato su Atmega328p

Messaggioda Foto Utenteultrasound91 » 2 gen 2015, 18:35

Grazie mille, adesso faccio le prove.
Avatar utente
Foto Utenteultrasound91
318 2 4 6
Disattivato su sua richiesta
 
Messaggi: 700
Iscritto il: 26 ago 2014, 21:02

0
voti

[57] Re: Revisione Circuito Basato su Atmega328p

Messaggioda Foto Utenteultrasound91 » 2 gen 2015, 18:53

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.
Avatar utente
Foto Utenteultrasound91
318 2 4 6
Disattivato su sua richiesta
 
Messaggi: 700
Iscritto il: 26 ago 2014, 21:02

1
voti

[58] Re: Revisione Circuito Basato su Atmega328p

Messaggioda Foto UtenteAlbertoBianchi » 2 gen 2015, 18:58

Ho fatto un errore, scusami, la fase del PWM deve essere invertita
Per il resto dovrebbe andare, ricontrolla bene.
Avatar utente
Foto UtenteAlbertoBianchi
2.009 3 5
Master
Master
 
Messaggi: 836
Iscritto il: 4 dic 2014, 18:30
Località: Lastra a Signa (FI)

0
voti

[59] Re: Revisione Circuito Basato su Atmega328p

Messaggioda Foto Utenteultrasound91 » 2 gen 2015, 19:15

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.
Avatar utente
Foto Utenteultrasound91
318 2 4 6
Disattivato su sua richiesta
 
Messaggi: 700
Iscritto il: 26 ago 2014, 21:02

1
voti

[60] Re: Revisione Circuito Basato su Atmega328p

Messaggioda Foto UtenteAlbertoBianchi » 2 gen 2015, 19:25

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.
Avatar utente
Foto UtenteAlbertoBianchi
2.009 3 5
Master
Master
 
Messaggi: 836
Iscritto il: 4 dic 2014, 18:30
Località: Lastra a Signa (FI)

PrecedenteProssimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti