PJ3007 - Pilotare i motori Passo Passo in sistemi CNC

Valutazione attuale: 3 / 5

Introduzione

La scheda PJ3007 permette il controllo di due motori DC a spazzole o uno stepper bipolare. Sebbene il progetto sia accompagnato da una libreria che permette con poche righe di codice l'ottenimento di semplici applicazioni, realizzare un sistema completo e funzionale può richiedere una programmazione più accurata. In questa applicazione di esempio si è realizzato un sistema ad hoc per il controllo di un motore passo passo per sistemi come le CNC. In particolare il motore è controllato per mezzo dei segnali ENABLE, STEP e DIRECTION. Come vedremo, grazie alla presenza di un microcontrollore è stato possibile inserire caratteristiche interessanti. L'applicazione rappresenta un ottimo esempio di programmazione e organizzazione delle molteplici funzioni di calcolo e controllo necessarie per tali sistemi.
 

Prima di iniziare: i motori passo passo

Sebbene questo articolo non abbia lo scopo di spiegare i motori passo passo, è bene ricordare alcune loro caratteristiche al fine di meglio comprendere il codice scritto.
Il motore passo passo, anche noto come motore stepper,  è un motore elettrico sincrono senza spazzole in corrente continua. Grazie alla mancanza di spazzole è particolarmente robusto e non soffre molto di problemi legati all'usura del tempo. La sua peculiarità è quella di un movimento a scatti, o meglio a passi. Questo permette di ottenere facilmente sistemi di controllo ad anello aperto (ovvero senza feedback) semplificando l'applicazione stessa. Nel mercato sono presenti vari tipologie di motori passo passo, ovvero motori a magnete permanente, motori a riluttanza variabile e motori ibridi. I più  comuni e di facile reperibilità sono quelli ibridi. L'azionamento dei motori stepper viene a dipendere dalla tipologia dello statore ovvero degli avvolgimenti. In particolare si distinguono motori stepper unipolari e motori stepper bipolari. I motori stepper unipolari sono caratterizzati dall'avere 4 fili per comandare le espansioni polari interne (avvolgimenti interni) più un filo comune per Vcc. Le espansioni polari possono essere pilotate direttamente come riportato in Figura 1.
 

Figura 1: Collegamento per pilotare le espansioni polari di un motore stepper unipolare.

Figura 1: Collegamento per pilotare le espansioni polari di un motore stepper unipolare.

Al fine di ottenere la rotazione del motore è necessario applicare una giusta sequenza di attivazione ai MOS. A seconda della sequenza è possibile effettuare un controllo a passo intero, mezzo passo o anche microstepping, qualora sia presente un controllo della corrente. Dal sistema di controllo, si capisce che la corrente, per ogni fase, scorre sempre in un unico verso. Nei motori bipolari, il controllo della corrente è leggermente più complesso visto che ogni fase può essere percorsa da una corrente sia positiva che negativa. Questo viene fatto grazie all'ausilio di ponti H, come riportato in Figura 2.

Figura 2: Collegamento per pilotare le espansioni polari di un motore stepper bipolare.

Figura 2: Collegamento per pilotare le espansioni polari di un motore stepper bipolare.

Il vantaggio di questa configurazione, sebbene più complessa da un punto di vista dell'elettronica, è quello di poter avere un motore passo passo più compatto e leggero a parità di coppia. La scheda PJ3007 possiede due ponti H integrati proprio per il controllo di motori Stepper bipolari. Anche in questo caso il controllo della rotazione avviene applicando la giusta sequenza ai ponti H al fine di  permettere alla corrente di circolare in un verso o nell'altro.

La sequenza di controllo da applicare ai MOS o ponti H, viene generalmente memorizzata all'interno di una Tabella. Applicando i valori memorizzati nella Tabella in maniera sequenziale di ottiene la rotazione in un determinato verso, mentre invertendo la sequenza di estrazione dalla Tabella, si effettua la rotazione nel verso opposto.  

In ultimo si ricorda che sono presenti motori che possiedono fili indipendenti in uscita per ogni espansione polare. Questo permette di utilizzarli sia come motori unipolari che bipolari.

Qualora non si abbia esperienza con i motori stepper, si consiglia di leggere i seguenti articoli:
 

Qualora non l'aveste gia' fatto è anche necessario leggere la documentazione tecnica della scheda di sviluppo PJ3007.

Sistema di controllo per CNC

Sistemi come la CNC richiedono che i motori stepper possano essere comandati per mezzo dei semplici comandi ENABLE, DIRECTION e STEP che permettono rispettivamente di attivare la scheda, selezionare la direzione di rotazione e l'impulso per lo step.

L'applicazione presentata permette, grazie all'utilizzo della scheda PJ3007, di implementare tali funzioni oltre ad altre ritenute importanti. Le caratteristiche principali sono:

  • Comandi: ENABLE, DIRECTION, STEP.
  • Controllo della temperatura ed accensione automatica della ventola.
  • Controllo tensione massima, minima e variazione della stessa.
  • Controllo della corrente massima e di picco.
  • Controllo di perdita passi.
  • Pulsanti di fine corsa.
  • Stop di emergenza.
  • Impostazione della corrente del motore per mezzo di dip-swiches.
  • Impostazione di parametri per mezzo dell'interfaccia RS485

Al fine di poter propriamente utilizzare l'applicazione presentata in questo articolo, è necessario collegare il motore stepper, il pulsante Emergency stop e i pulsanti di fine corsa come riportato in Figura 3. I pulsanti Emergency stop e di fine corsa devono essere del tipo normalmente chiusi. In caso di applicazioni come CNC il pulsante Emergency Stop può essere condiviso con altre schede. Se i pulsanti non sono utilizzati devono essere sostituiti con dei ponticelli.

Figura 3: Schema di collegamento dei pulsanti e del motore passo passo alla scheda PJ3007.

Figura 3: Schema di collegamento dei pulsanti e del motore passo passo alla scheda PJ3007.

L'applicazione è scritta in XC8 per PIC18F4431 facendo uso della libreria di supporto della scheda PJ3007 e armonizzando il tutto per mezzo delle interruzione e uno scheduler per scandire le varie operazioni. Sebbene non si entrerà nel dettaglio del codice verrà mostrata la sua architettura in maniera da poterne facilmente comprendere il dettaglio semplicemente leggendo il codice stesso, scaricabile a fine articolo. Questo ha il vantaggio di non richiedere l'aggiornamento di questa documentazione base ogni qual volta si dovessero apportare delle modifiche.  

Il programma è relativamente semplice, infatti si basa su un codice che si ripete all'infinito all'interno del main, ovvero l'esecuzione di semplici macchine a stati. Lo stato del sistema viene cambiato per mezzo di uno scheduler (che si appoggia al Timer0) che periodicamente aggiorna il sistema e avvia particolari misure. Il cambio di stato avviene in maniera sincrona per mezzo del timer, impostato per lavorare con le interruzioni a basso livello.

Il controllo dei segnali  ENABLE, DIRECTION, STEP avviene in maniera “asincrona” (in realtà il segnale è reso sincrono con il clock della CPU)  per mezzo di interruzioni ad alto livello. Si noti come anche in questo caso, durante l'interrupt service routine (ISR) non vengano svolte molte operazione ma venga soltanto cambiato lo stato di alcune variabili, le quali vengono controllate all'interno del loop infinito eseguito nel main.
Mantenere l'ISR quanto più breve possibile permette di limitare il problema derivante dalla perdita di eventi importanti, o meglio permettere una pronta risposta ad eventi importanti.
Nell'ISR ad alto livello vengono anche controllati gli interruttori di fine corsa, che in questo caso sono programmati al fine da arrestare il motore in caso di pressione degli stessi.
Nell'ISR a basso livello sono presenti rispettivamente le routine per la gestione del flusso dati proveniente dalla porta seriale (ovvero l'interfaccia RS485), la lettura dell'ADC, la gestione del lampeggio dei LED e il controllo dei paramenti di sistema principali. Per mezzo di un “tick” secondario derivante sempre dal Timer0 vengono attivate in sequenza, in maniera più lenta il controllo della tensione, temperatura e del sistema.

Quando il sistema viene avviato ed opera correttamente viene fatto lampeggiare il LED verde HEART. Quando si verificano delle situazioni di Warning viene fatto lampeggiare il LED rosso (ERROR) mentre se avviene un errore, ovvero il raggiungimento di un valore massimo, viene acceso in maniera fissa il LED rosso ERROR. Quando avviene la segnalazione di una Warning, il sistema continua ad operare senza problema, mentre il verificarsi di un errore blocca il sistema ponendolo lo stesso in Emergency Stop. Uno stato di Warning può essere rimosso leggendo il relativo registro via RS485 e resettandolo. Uno stato di errore, sebbene possa essere letto per mezzo dell'interfaccia RS485 richiede un Reset di sistema o un Power cycle al fine di resettare il registro associato allo stato di errore.

Come accennato, gran parte delle operazioni svolte dal sistema girano intorno ad una macchina a stati, in particolare non fa eccezione l'ADC utilizzato per misurare la tensione, temperatura e la corrente delle fasi del motore. Sebbene l'ADC sia relativamente veloce, aspettare per la conversione potrebbe causare la perdita di altre informazioni quali il passo o il cambio della direzione. Ritardi nell'esecuzione di tali operazioni potrebbe risultare in una imprecisione meccanica, che seppur piccola può essere evitata.

La misura della corrente è probabilmente la più importante delle misure svolte dall'ADC visto che l'anello di controllo opera proprio su tale grandezza. Tale misura viene fatta di continuo e solo periodicamente interrotta per misurare la temperatura e la tensione. Il ciclo continuo  per la lettura della corrente  è svolto dalla seguente macchina a stati.

if (ADC_running == ADC_IS_FREE) {

switch (ADC_State) {

case ADC_PHASE_1_TEST:
CNC_state_phase_1_current_read ();
break;
case ADC_PHASE_2_TEST:
CNC_state_phase_2_current_read ();
break;
case ADC_VIN_TEST:
CNC_state_Vin_read ();
break;
case ADC_TEMP_TEST:
CNC_state_temperature_read ();
break;
default:
break;

}

}

In particolare questa viene eseguita se lo stato dell'ADC è FREE ovvero libero. Questo stato indica che l'ADC ha completato la conversione e il suo buffer può essere letto.

Ad ogni stato viene viene richiamata la relativa funzione di lettura della grandezza d'interesse, viene effettuata la media, si imposta lo stato successivo per l'ADC e si avvia una nuova conversione.

La media per la corrente viene effettuata nel seguente modo:

if (phase_1_current_read == CURRENT_AVARAGING_SAMPLES) {

phase_1_current = phase_1_current_sum >> CURRENT_AVARAGING_SHIFT;
phase_1_current_read = 0;
phase_1_current_sum = 0;

CNC_current_control_loop ();

}

per cui impostando le relative costanti è possibile cambiare i parametri del filtro. Una volta effettuata la media viene richiamata la funzione che implementa il controllo della corrente. Si capisce sin da ora che vari algoritmi potrebbero essere implementati semplicemente variando la funzione CNC_current_control_loop ();

Sebbene gli stati delle varie misure possibili siano in successione Corrente fase 1,  Corrente fase 2, Tensione Vin e Temperatura, la macchina a stati effettua in automatico solo la lettura della corrente. Ovvero dopo la lettura della corrente della fase 2 l'ADC viene impostato per leggere nuovamente la fase 1 e cosi via.

Gli stati relativi alla lettura della tensione e temperatura non sono normalmente eseguiti, questi vengono eseguiti solo quando le relative variabili:

  • voltage_tick
  • temperature_tick

dichiarate all'interno dell'ISR a basso livello, raggiungono il valore impostato da:

  • VOLTAGE_TICKS
  • TEMPERATURE_TICKS

Dal momento che la lettura della tensione e temperatura vengono effettuate raramente, se confrontate alle letture della corrente, ogni qual volta vengono attivate, la lettura della corrente in esecuzione viene annullata per dar la precedenza alla lettura “rara” (è lo stesso approccio di priorità utilizzato dai vecchi PC con floppy disk).
 

Impostazioni di sistema

Il sistema ha la caratteristica di poter essere cambiato in molte sue parti semplicemente cambiando delle costanti. Alcuni parametri, come si vedrà a breve, possono essere cambiati direttamente per mezzo dell'interfaccia RS485, mentre altri, richiedono un cambio del codice stesso, il quale dovrà essere ricompilato prima di poter essere caricato all'interno del PIC18F4431.
Le costanti di sistema che possono essere cambiate via RS485 sono anche memorizzate all'interno della EEPROM interna al PIC, in maniera da poter essere riutilizzate in automatico ad un avvio successivo del sistema.

Infatti all'avvio del sistema, oltre ad inizializzare la scheda per mezzo della funzione:

  • board_initialization ();

avviene anche una seconda inizializzazione di più alto livello :

  • CNC_system_initialization ();

Durante la seconda inizializzazione viene controllata la EEPROM per verificare il primo avvio di sistema. Se è la prima volta che si avvia il sistema, la EEPROM viene caricata con i valori di Default:

I valori attualmente memorizzati in EEPROM sono:

  • system_Input_Voltage_Max
  • system_Input_Voltage_Min
  • system_Delta_V_Warning
  • system_Delta_V_Error
  • system_PWM
  • system_Temeperature_Fan
  • system_Temeperature_Warning
  • system_Temeperature_Error

il cui significato è descritto in maggior dettaglio nel paragrafo in cui si spiega il menu per impostare gli stessi. Il nome delle variabili è stato comunque scelto in maniera non “sillabica” e dal nome si dovrebbe già comprendere la loro funzione.

La corrente del motore non è salvata nella EEPROM perché viene impostata per mezzo dei dip-switches i quali vengono letti all'avvio del sistema. Ogni variazione degli stessi richiede pertanto un Reset di sistema o un Power Cycle. La corrente viene impostata all'interno della funzione di inizializzazione per mezzo delle seguenti istruzioni:

  • reference_phase_current = I_peak_current_table[get_dip_switch_value ()];
  • max_phase_current = MAX_PHASE_CURRENT_PEAK;

Si noti che il valore massimo della corrente è una semplice costante e per cambiarla è necessario cambiare il codice e ricompilare. Tale costante, come le altre di sistema, sono definite all'interno del file della libreria della scheda PJ3007, ovvero init.h .
All'interno di questo file sono anche definiti i codici di Errore e Warning (maggiori dettagli saranno dati a breve). Altre costanti importanti relative all'applicazione specifica sono definite all'interno del file:

  • CNC_settings.h

Le costanti definite in questo secondo file sono prevalentemente associate ai filtri interni e campioni da utilizzare per il calcolo della media delle misure. Il cambio di tali variabili richiede la consapevolezza di ciò che sta facendo, ma può essere necessaria se si vuole ottimizzare il sistema al motore utilizzato.  
I valori di default sono tali da permettere il funzionamento corretto con vari motori per cui anche nel caso in cui non dovessero essere ottimizzati il motore girerà senza problemi.     
 

Controllo della corrente

Come abbiamo visto, il sistema, oltre ad armonizzare vari segnali e misure, si occupa del controllo della corrente per mezzo della funzione CNC_current_control_loop (), richiamata ogni qual volta una nuova misura della corrente risulta disponibile.
Sebbene la corrente sia proporzionale alla coppia, controllare la corrente non necessariamente equivale a controllare la coppia. Infatti il motore stepper può essere pilotato in vari modi in particolare full step, Full step con due fasi attive e half step (non si considera il microstepping). L'half step rappresenta la fusione dei primi due metodi. Si ricorda che in full step una sola fase alla volta viene alimentata. Nel caso in cui due fasi vengono alimentate si ha un aumento della coppia di un fattore 1.41 (radice di 2). Si capisce che nella modalità half step controllando la corrente ad un valore costante si ha che in alcuni casi la coppia viene aumentata di un fattore 1.41 rispetto al caso in cui una sola coppia viene alimentata.       
La scheda PJ3007 supporta le tre modalità sopra citate definite dalle seguenti costanti:

  • #define FULL_STEP          1
  • #define FULL_STEP_2_PHASES 2
  • #define HALF_STEP          3

Di default il sistema per il controllo di un motore stepper per applicazioni CNC inizializza il motore in half step. Considerando che molti motori stepper sono da 200 passi per giro, questo equivale ad ottenere una rotazione completa ogni 400 passi. La modalità half step limita inoltre il problema di risonanza legato ai motori stepper, il quale potrebbe portare allo stallo dello stesso.

  • initialize_stepper_motor (HALF_STEP, system_PWM - 1, MAX_PHASE_CURRENT_PEAK);

Se si volesse avere un controllo della coppia sarebbe necessario cambiare leggermente il controllo della corrente e far in modo che quando due fasi vengono attivate la corrente di picco impostata sia ridotta di radice di 2. In maniera più semplice potrebbe bastare anche cambiare la modalità da half step a full step (ma attenti alle frequenze di risonanza).  
Quando si parla di anello di controllo si pensa subito al controllore PID (Proporzionale-Integrale-Derivativo) e spesso si dimentica che esiste il controllore P il controllore PI e il controllore PID. Nel caso specifico, al fine di semplificare il tutto si è usato un semplice controllore P. Volendo implementare altri tipi di controllore non è necessario stravolgere il programma ma semplicemente modificare la funzione CNC_current_control_loop ( ).

Il controllo della corrente avviene per mezzo di un segnale PWM il cui Duty Cycle viene opportunamente variato al fine di mantenere la corrente entro i limiti impostati. Sebbene il sistema di controllo sia sempre attivo questo non significa che la corrente sarà in ogni condizione mantenuta costante al valore impostato. Questo per lo più è legato alle caratteristiche del motore e la tensione operativa. Infatti il motore ha un propria impedenza interna che aumenta all'aumentare della frequenza operativa. In particolare, oltre che alla frequenza del segnale PWM interviene anche la frequenza del passo. Per tale ragione quando l'impedenza del motore è troppo alta per ottenere la corrente impostata (per cui Voperativa/Z è inferiore alla corrente voluta) si può osservare che il Duty Cycle del segnale PWM viene impostato al massimo ma la corrente delle fasi tende a diminuire all'aumentare della frequenza del passo. Aumentando la tensione (sempre nei limiti massimi) è possibile che il sistema di controllo di riprenda la normale operatività.

Con il motore stepper Trinamic QSH5718-51-28-101 a seconda del valore della corrente ho riscontrato operatività dell'anello di controllo in un range da circa 1000 a 3000 step/s.

Tra i vari controlli che effettua il sistema vi è quello della perdita di passi. La perdita di un passo è però controllata non da un punto di vista meccanico ma da un punto di vista software, ovvero se un passo  viene richiesto e il sistema non ha completato le operazioni del passo precedente si ha la perdita di un passo (questo si traduce anche in un passo meccanico). Da misure di laboratorio ho riscontrato la possibilità di poter usare frequenze maggiori di 5000 step/s. Ciononostante, da quanto esposto precedentemente sull'aumento dell'impedenza, la perdita di coppia impone il vincolo maggiore. Molti motori per altro hanno la coppia maggiore per frequenze di passo comprese tra 1000-3000 step/s per cui tali frequenze sono da preferirsi rispetto alla velocità. Qualora non si abbia il datasheet del motore, al fine di ottimizzare le frequenze operative, è bene fare qualche misura in laboratorio. Qualora il motore si dovesse surriscaldare troppo bisogna valutare la riduzione della frequenza del segnale PWM. Un surriscaldamento  è infatti indice del fatto che molta energia viene dissipata internamente alle fasi e non trasformata in energia meccanica.

Impostare il sistema via RS485

Il sistema PJ3007 permette di impostare le applicazioni sviluppate per mezzo dell'interfaccia RS485. A seconda che si faccia uso di un convertitore da USB/RS232 a RS485 optoisolato o meno, è possibile impostare il sistema con il motore in funzione (convertitore optoisolato) o a motore disattivo (convertitore non optoisolato). Un convertitore non optoisolato può essere trovato nel sito di Vincenzo Villa (Convertitore automatico da RS232 a RS485).

Collegando il convertitore USB/RS232 a RS485 è possibile utilizzare “RS232 Terminal”  al fine di programmare la scheda.  RS232 Terminal deve essere impostato come riportato in Figura 4.

Figura 4: Impostazione dei parametri di comunicazione di RS232 Terminal.

Figura 4: Impostazione dei parametri di comunicazione di RS232 Terminal.

In particolare, al fine di avere dei menu visualizzati sempre in maniera corretta è necessario attivare l'opzione “Delete RX Buffer by ASCII code Delete” presente nel Tab Display. Dopo queste semplici impostazioni è possibile avviare la comunicazione e attivare la scheda PJ3007 preventivamente programmata con il codice PJ3007-CNC-Stepper-Controller-Firmware. All'avvio della scheda, se le impostazioni di RS232 Terminal sono state effettuate propriamente, verrà visualizzata la schermata di Figura 5.

Figura 5: Schermata principale all'avvio della scheda PJ3007.

Figura 5: Schermata principale all'avvio della scheda PJ3007.

La schermata di avvio permette di visualizzare i parametri principali con cui si è avviata la scheda. La Figura 5 mostra in realtà una scheda già avviata una volta dopo la programmazione del PIC18F4431. Infatti al primo avvio la EEPROM è vuota e viene caricata con i valori di Default e viene visualizzata la stringa “First Board booting. Default Values will be loaded” invece di  “EEPROM already Initialized”.

La corrente Ipeak viene impostata per mezzo dei dip-switches presenti sulla scheda stessa. I dip-switches vengono letti solo all'avio del sistema (Power Cycle) o dopo un Reset. Si ricorda che JP1 deve essere impostato sul pin 2-3 al fine di far funzionare propriamente il dip-switches.
I dip-switches rappresentano il codice binario che bisogna moltiplicare per il passo di 250mA.
Per esempio la posizione 0000 imposta una corrente di 0mA (motore fermo), 0001 = 250mA, 0010 = 500mA, 0011 = 750mA e via discorrendo (si noti che il bit meno significativo è il dip-switch 1 mentre quello più significativo è il dip-switch 4).

Premendo il tasto 'm' è possibile entrare nel menu interno e cambiare i vari parametri interni (come riportato in Figura 6). Non tutti i parametri supportati dall'applicazione possono essere cambiati, questo limite discende semplicemente dal fatto che integrare un menu richiede molta memoria Flash e con il menu attuale sono rimasti disponibili poche decine di byte.

Figura 6: Menu' principale.

Figura 6: Menu' principale.

Tutti i parametri visualizzati vengono cambiati senza necessitare un riavvio della scheda eccetto il PWM, che richiede un Reset.
Premendo il tasto “1”  è possibile entrare nel menu Voltage Limits come riportato in Figura 7.

Figura 7: Menu' relativo ai limiti della tensione di alimentazione.

Figura 7: Menu' relativo ai limiti della tensione di alimentazione.

Quando viene visualizzato il menu sono scritti i valori attuali e premendo la lettera, a, b, c o d è possibile cambiare il relativo valore. Per mezzo di tale sotto menu è possibile impostare i seguenti valori:

System Vmax
Rappresenta la tensione massima con la quale può operare il sistema. Dovrebbe essere impostata alla tensione dell'alimentatore utilizzato nella propria applicazione più 2-3V (ma sempre nei limiti dei 28V).

System Vmin
Normalmente è impostata a 11V ma può essere elevata ad un valore più prossimo all'alimentazione di sistema meno il valore Delta Vin Error (vedi sotto).  

Delta Vin Warning
La tensione della scheda viene continuamente monitorata al fine di garantire il corretto funzionamento. Come ogni buon sistema viene monitorata Vin max. e Vin min. ma ad ulteriore garanzia che il sistema, ed in particolare l'alimentatore stia funzionando correttamente, viene monitorata la variazione rispetto al valore di avvio. Delta Vin Warning segnala una Warning nel caso in cui si sia verificato un Delta Vin Warning (positivo o negativo) ma non compromette il funzionamento del sistema.

Delta Vin Error
Delta Vin Error è come Delta Vin Warning ma deve essere impostato ad un valore superiore. Il suo raggiungimento crea un errore e blocca il sistema ponendolo in Emergency Stop. Un delta sulla tensione di alimentazione può indicare problemi di alimentazione o essere indice del fatto che l'alimentatore non è idoneo per l'applicazione.

Per uscire dal menu è sufficiente premere il tasto “e”.
Premendo il tasto “2” dal menu principale  è possibile visualizzare i limiti della temperatura, come riportato in Figura 8.

Figura 8: Menu' relativo alle impostazioni della temperatura.

Figura 8: Menu' relativo alle impostazioni della temperatura.

I valori che è possibile impostare sono:

Temperature Fan
Rappresenta la temperatura alla quale viene avviata la ventola (fan). Se si vuole la ventola sempre accesa è possibile scrivere un valore inferiore alla temperatura ambiente (per esempio 10 gradi).

Temperature Warning
Rappresenta la temperatura alla quale viene segnalato lo stato di Warning. Il sistema continua ad operare normalmente.

Temperature Error
Rappresenta la temperatura raggiunta la quale viene segnalato un errore. Il suo raggiungimento crea un errore e blocca il sistema ponendolo in Emergency Stop.

Premendo il tasto “3” dal menu principale è possibile impostare la frequenza del segnale PWM, come riportato in Figura 9. Per mezzo di questo sotto menu  è possibile impostare la frequenza PWM utilizzata nel controllo del motore. Si ricorda che una sua variazione, al fine di essere operativa, richiede il Reset del sistema o il suo riavvio per mezzo di un Power Cycle.

Figura 9: Menu' per impostare la frequenza PWM.

Figura 9: Menu' per impostare la frequenza PWM.

Premendo il tasto “4” dal menu principale è possibile visualizzare gli Errori e Warning di sistema, come riportato in Figura 10.

Figura 10: Menu' di controllo Warning ed Errori.

Figura 10: Menu' di controllo Warning ed Errori.

Tale sotto menu permette di monitorare il sistema relativamente allo stato delle Warning ed Errori generati. Si ricorda che stati di Warning non bloccano il sistema ma fanno semplicemente lampeggiare il LED rosso sulla scheda PJ3007. Uno stato di errore blocca invece i motori, accende il LED rosso e mantiene il sistema in stato di Emergency Stop. Quando il sistema entra in stato Emergency Stop è ancora operativo per quanto riguarda la possibilità si comunicare con il PC via RS485 per cui  è possibile visualizzare Warning ed Errori di sistema.

Nella Figura 10 è riportato il caso in cui  uno stato di Warning è stato generato a causa della temperatura e successivamente si  è verificato l'errore numero 7.
Gli stati di Warning sono in numero ridotto rispetto agli Errori per cui sono visualizzati in maniera “chiara”. Per gli errori viene solo visualizzato il codice che ha generato lo stato di Emergency Stop.

I codici di errore sono riportati nel file init.h, quelli attualmente supportati sono:

//System Error Status
#define ERROR_OVER_VOLTAGE        1

#define ERROR_UNDER_VOLTAGE       2
#define ERROR_OVER_CURRENT_M_1    3
#define ERROR_OVER_CURRENT_M_2    4
#define ERROR_OVER_TEMP           5
#define ERROR_BOUDARY_SW_1        6
#define ERROR_BOUDARY_SW_2        7
#define ERROR_DELTA_VOLTAGE_O     8
#define ERROR_DELTA_VOLTAGE_B     9

Dalla lista si evince che il codice di errore precedente era stato causato dal Boundary Switch 7 (raggiungimento del bordo)

Nota
Ogni parametro il cui valore è inferitore a 10 deve essere scritto scrivendo lo 0, per cui per scrivere 15 si deve premere 1 e 5 mentre per scrivere 9 bisognerà premere 0 e 9 ovvero 09.
Qualora il menu via RS232 Terminal non sia richiesto e si vogliano cambiare i parametri semplicemente cambiando le costanti di sistema, è possibile disattivare il menu commentando la riga

#define CNC_MENU

presente nel file CNC_menu.h. Disattivare il menu permette di liberare circa 3KB di memoria. Questo permette di implementare anche altre funzioni di controllo come per esempio la verifica di stallo o interruzione di una fase.
 

Note di utilizzo

Il sistema è basato sulla nuova libreria 1.1 della scheda PJ3007 la quale supporta il compilatore XC8. Qualora non si voglia compilare il programma per mezzo di MPALB X e XC8 è possibile installare, per mezzo di un programmatore PIC KIT l'applicazione precompilata disponibile  come download.
Al fine di evitare errori di programmazione, durante la programmazione bisogna impostare il Jumper J1 tra il pin 1-2, mentre durante la fase operativa, al fine di far propriamente funzionare i dip-switches è necessario impostarlo tra il pin 2-3.

 

Tipo File Scarica File Versione Descrizione

Formato File zip

Download 1.0 Beta

Progetto MPLAB X - XC8

Pilotare i motori passo passo in sistemi CNC

Formato File zip

Download 1.0 Beta

File HEX per programmatore PIC KIT

Pilotare i motori passo passo in sistemi CNC

Formato File zip

Download 1.1 Libreria scheda PJ3007 necessaria per il progetto

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Registrati