Vai al contenuto
PLC Forum


Motore Passo Passo Con Pic


stefano_

Messaggi consigliati

Con il seguente programmino faccio riesco a comandare un motore passo passo tramite pic16f84.

Questo prg mi serve solo per prendere un pò di pratica con la programmazione dei pic, per essere il primo prg

funzia discretamente.

Il funzionamento è semplice ho collegato 4 "interruttori" a RA0 RA1 RA2 e RA3.

Se chiudo l'interruttore RA0 ho un ritardo di 250 ms

Se chiudo l'interruttore RA1 ho un ritardo di 100 ms

Se chiudo l'interruttore RA2 ho un ritardo di 50 ms

Se chiudo l'interruttore RA3 ho un ritardo di 5 ms

e quindi riesco a far girare il motore a 4 velocita differenti, il problema è che cambiando lo stato degli ingressi

( e quindi chiudendo l'interruttore RA3 per esempio ) la velocità del motore non cambia subito ma dopo 6 / 8

secondi !!!! Come mai ? Non dovrebbe cambiare immediatamente ??

#include <pic.h>
#include "delay.c"

unsigned char asp;



main(void)    {

  TRISA = 0b11111111;
  TRISB = 0b00000000;
  PORTA = 0b00000000;
    while (1)
    {

    DelayMs(3);    // un po di pausa non fa mai male a nessuno !!

    switch (PORTA)
    {
    case 1:
  asp = 100;
  break;
    case 2:
  asp = 50;
  break;
    case 4:
  asp = 25;
  break;
    case 8:
  asp =5;
  break;
    }

  
    PORTB = 0b00000001;DelayMs(asp);            PORTB = 0b00000010;DelayMs(asp);
    PORTB = 0b00000100;DelayMs(asp);
    PORTB = 0b00001000;DelayMs(asp);
  
}


}

Grazie a tutti !!!!!!!!!

Modificato: da Gabriele Corrieri
Link al commento
Condividi su altri siti


si, ho disabilitato il watch-dog ed ho selezionato XT visto che il tutto è gestito da un quarzo da 4Mhz ma nulla da fare forse sbalio il collegamento ??

Mi spiego inizialmente RA0,1,2, e 3 non sono collegati se voglio mandare il motore alla massima velocita ( RA3 attivo ) prendo un filo e lo collego da un capo a +5 V e l'altro capo al pin RA3 del pic. Faccio bene ?

grazie ancora

Link al commento
Condividi su altri siti

No, non fai tanto bene.

Collega tutti gli ingressi tramite R (10k) all'alimentazione e tramite pulsante o selettore a GND. Quando premi il pulsante o selettore desiderato l'ingresso va a GND mentre gli altri sono a +5V.

Bypassa l'alimentazione con C al tantalio da .1u se no l'oscillazione del quarzo la ritrovi sui pin.

Ciao

Link al commento
Condividi su altri siti

scusa, mi sono dimenticato di dirti che di elettronica ne capisco poco potrsti spegarmi cosa intenti dire con

"bypassa l'alimentazione con C al tantalio da .1u se no l'oscillazione del quarzo la ritrovi sui pin."

e poi

facendo come dici tu quando schiccio il pulsante il relativo pin di ingresso va a livello logico zero !!! e non 1 giusto ?

grazie 1000 ancora.

Link al commento
Condividi su altri siti

Il bypass in oggetto e' un semplice condensatore tra + e - dell'alimentazione il piu' possibile vicino ai relativi pin del pic.

Per il livello logico si, sarebbe invertito.

I pin lasciati scollegati potrebbero essere la spiegazione del malfunzionamento (i livelli letti cambiano aleatoriamente in quanto non fissati a 1 o 0 dall'esterno con una resistenza di pull up o pull down).

Un'altra cosa e' la resistenza su MCLR, questo pin non va mai collegato direttamente a +Vcc senza resistenza, soprattutto in presenza di circuiti elettricamente rumorosi dove vi siano rele', motori ecc...

ciao Claudio F

Modificato: da Claudio F
Link al commento
Condividi su altri siti

Metti una resistenza da 4K7 tra + e MCLR , metti resistenze di pull-up da 10K tra ingressi e + , metti dei pulsanti che collegano i rispettivi ingressi verso massa.

I tuoi problemi li hai al 100% perche' gli ingressi sono fluttuanti.

Ciao B)

Link al commento
Condividi su altri siti

grazie 1000 non so come farei senza di voi !!!

comunque consolatevi ( almeno un pochino ) mi sono comprato il libro imparare l'elettronica partendo da zero,

speriamo bene !!!!

Link al commento
Condividi su altri siti

ciao,

grazie per la tua risposta comunque mi è stato detto che oltre che in base alla corrente che devono sopportare i diodi devono essere veloci cioè devono passare dallo stato di commutazione a quello di non commutazioni in tempi brevissimi, ne sai qualcosa ??

grazie ancora per la tua risopsta

ciao

Link al commento
Condividi su altri siti

Si è vero. Essendo una giunzione pn esiste sempre il problema di scaricare le cariche minoritarie nella regione di carica spaziale. La serie 1N400x sono i i dodi più lenti in assoluto.

Potresti utilizzare un transistore collegato come diodo. Quest'ultimi sono i diodi più veloci.

Non ho molto tempo da dedicarti.....

Ciao

Link al commento
Condividi su altri siti

Va bene qualsiasi diodo fast, ultrafast o shottky, in grado di sopportare la corrente del carico e la tensione di alimentazione. Siccome sono meno diffusi dei diodi normali conviene chiedere al negoziante che tipi ha.

Link al commento
Condividi su altri siti

ciao ragazzi,

come mai se dò come tempo tra un impulso e l'altro 1ms il motore emette un sibilo ma non si muove ??

è il motore che non puo girare con quella frequenza cosi elevata od è più probabile che siano i transistor che sono lenti nel commutare ? ( ho provato con i BC337 e con gli BD135 ).

Grazie a tutti

ciao ciao

Link al commento
Condividi su altri siti

Posta come hai fatto il collegamento. Il motore passo-passo deve rispettare una certa rampa di accelerazione e decelerazione per evitare di metterlo in stallo. I BC337 scordali. Già con un BD135 può fare qualcosa.

Ciao

Link al commento
Condividi su altri siti

vorrei tanto poter postare lo schema ma non so proprio come fare !!

Se clicco sul pulsante IMG mi chiede un URL !!!!!

C'è un modo per selezionare un Jpeg ed inserirlo qui ??

Grazie ancora

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...