progetto open L6203+microstep....

Sezione dedicata all'elettronica di controllo cnc.
Rispondi
murof
Junior
Junior
Messaggi: 192
Iscritto il: giovedì 6 marzo 2008, 22:24
Località: prov di ME

progetto open L6203+microstep....

Messaggio da murof » lunedì 29 agosto 2011, 12:15

....allora, mi piacerebbe condividere questo lavoro iniziato qualche anno fa e mai portato a termine per mancanza di tempo e di competenze approfondite in materia....

posto intanto lo schema così si inizia:

portb0 è l'in step-clock chiamatelo come volete
portb1 è il dir

portb2 e b3 sono i comandi per la scrittura e la selezione del canale del DAC che fornisce i 2 valori di vref

portb4-b7 sono le uscite del contatore/traslatore

portc è l'uscita parallela per i valori di vref che vanno al DAC

ed infine portA viene usata in configurazione doppio comparatore per la regolazione della corrente chopper

per il momento mi fermo qua... ditemi già  cosa ne pensate...
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login

Avatar utente
Dag50
God
God
Messaggi: 9293
Iscritto il: lunedì 13 novembre 2006, 18:31
Località: Cernusco S/Naviglio (MI)
Contatta:

Re: progetto open L6203+microstep....

Messaggio da Dag50 » lunedì 29 agosto 2011, 16:57

Ciao Murof, vedo che vuoi utilizzare un pic per realizzare il micropasso con i 6203,
se vuoi vedere c'è sul datasheet dell IMS2000 tutto il sistema di realizzazione del driver
utilizzando MS2000 e L6203, senza bisogno di programmazione, dati forniti 48V 3A
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login
ciao Dario

http://www.cnc-dag50.it/
http://facebook.com/dario.ghezzi

Più si studia e più si sa di non sapere

turbina

Re: progetto open L6203+microstep....

Messaggio da turbina » lunedì 29 agosto 2011, 17:33

il pin wr collegato direttamente al cs del dac potrebbe non funzionare, bisogna verificare, i 2 amp-op puoi tirarli via tanto la Rin del uC è sufficientemente alta, considera che la corrente sui microstep non occorre che sia poi tanto precisa a meno che tu non voglia arrivare a 1/64 o 1/128 di passo, del resto potrebbe funzionare bene se il programma è fatto bene, la protezione in corrente dentro i l6203 evita che nel caso di failure del uC ti saltino i driver, da notare che il dac potrebbe costare come il uC, vedere se conviene usare un micro con Npin maggiore in modo da fare i 2 dac direttamente a 4-5 bit con rete R2R già  pesata. Il programma potrebbe essere fatto tranquillamente in C..ciao

murof
Junior
Junior
Messaggi: 192
Iscritto il: giovedì 6 marzo 2008, 22:24
Località: prov di ME

Re: progetto open L6203+microstep....

Messaggio da murof » lunedì 29 agosto 2011, 17:38

ciao Dag, ti ringrazio... il chippone è davvero interessante ma se devo copiare un driver faccio prima a comprarmelo e sicuramente risparmio pure un po di soldi....

era per il piacere di sviluppare una progetto open..... e la programmazione è proprio la parte divertente.... tralaltro io avrei anche scritto già  tutto il programma e a suo tempo testato al simulatore ma non so se i tempi e le modalità  di tutte le commutazioni e del chopper vanno bene...

avrei potuto semplicemente provarlo, lo avevo anche realizzato ma non ho avuto più tempo....

murof
Junior
Junior
Messaggi: 192
Iscritto il: giovedì 6 marzo 2008, 22:24
Località: prov di ME

Re: progetto open L6203+microstep....

Messaggio da murof » lunedì 29 agosto 2011, 18:00

turbina ha scritto:il pin wr collegato direttamente al cs del dac potrebbe non funzionare, bisogna verificare
il DAC è il tlc7528 ..... sul datasheet mi sembra di aver capito così....
turbina ha scritto: i 2 amp-op puoi tirarli via tanto la Rin del uC è sufficientemente alta
ok... io meno metto e più sono contento :mrgreen:
turbina ha scritto: considera che la corrente sui microstep non occorre che sia poi tanto precisa a meno che tu non voglia arrivare a 1/64 o 1/128 di passo
solo 1/2 1/4 e 1/8
turbina ha scritto: la protezione in corrente dentro i l6203 evita che nel caso di failure del uC ti saltino i driver
scusa ma che protezione in corrente c'è dentro i 6203?
turbina ha scritto:da notare che il dac potrebbe costare come il uC, vedere se conviene usare un micro con Npin maggiore in modo da fare i 2 dac direttamente a 4-5 bit con rete R2R già  pesata.
2.10€ da distrelec
turbina ha scritto: Il programma potrebbe essere fatto tranquillamente in C..ciao
purtroppo solo ASM :( nel prossimo messaggio inizio a postare qualcosa del codice....

turbina

Re: progetto open L6203+microstep....

Messaggio da turbina » lunedì 29 agosto 2011, 18:39

Hai ragione ..i 6203 non hanno la protezione di corrente, solo solo dei bridge..

turbina

Re: progetto open L6203+microstep....

Messaggio da turbina » lunedì 29 agosto 2011, 18:53

se arrivi fino a 1/8 passo puoi usare 3+3 pin di uscita per 2 partitori resistivi composti ognumo da 3+1 resistenze pesate (spero di essermi spiegato), ogni pin di uscita se =1 somma una tensione al partitore, se =0 allora lo imposti come ingresso senza pullup in modo che non carichi il partitore, queste 8 res costano niente e usano solo 6 pin invece di 10, risparmi 4 pin che puoi utilizzare per altre funzioni tipo aggiungere l'ingresso enable del driver e una protezione di temperatura e 2 jumper per impostare 1/2 1/4 1/8.

Ricordati di attivare l'interrupt all'uscita del comparatore di tensione tra vref e vshunt e un'altro interrupt sul pin step, non disabilitare mai questi interrupt.

Senza il 7528 consumi meno corrente e quindi forse è possibile mettere un lineare o un step-down per alimentare il driver mediante la stessa tensione dl ponte

Avatar utente
marcosin
Senior
Senior
Messaggi: 840
Iscritto il: mercoledì 27 giugno 2007, 23:11
Località: Arezzo
Contatta:

Re: progetto open L6203+microstep....

Messaggio da marcosin » lunedì 29 agosto 2011, 19:02

Mi piace l'idea di questo progetto!
Il convertitore R2R funziona bene, lo avevo usato su delle prove per fare un drive microstepper utilizzando un pic + L6506 + Mosfet.
Il 6506 è un buon aiuto per la gestione del chopper, mentre il pilotaggio dei mosfet mi aveva portato alcuni problemi, poi ho lasciato tutto fermo per mancanza di tempo...

turbina

Re: progetto open L6203+microstep....

Messaggio da turbina » lunedì 29 agosto 2011, 19:06

uh...., all'accensione per qualche millisecondo il processore non parte e tutti i pin sono forzati come ingressi a livello alto , questo dà  fastidio ai ponti che per qualche millisecondo vanno in conduzione, durante questo tempo la corrente nei ponti potrebbe salire a livelli insopportabili visto che non funziona il micro ..distruggendo i ponti.... per evitare questo è utile mettere 2 inverter che comandano i 2 pin enable dei ponti oppure mettere 2 comparatori di protezione veloci tipo lm311 che forzano i 2 pin enable a livello 0 quando superano la max corrente sopportabile, questo a livello hardware saltando il controllo del micro

Avatar utente
marcosin
Senior
Senior
Messaggi: 840
Iscritto il: mercoledì 27 giugno 2007, 23:11
Località: Arezzo
Contatta:

Re: progetto open L6203+microstep....

Messaggio da marcosin » lunedì 29 agosto 2011, 19:21

Questo problema non l'avevo riscontrato ma la mia mente fa cilecca ogni tanto, vedo se ritrovo qualcosa, non ricordo...

murof
Junior
Junior
Messaggi: 192
Iscritto il: giovedì 6 marzo 2008, 22:24
Località: prov di ME

Re: progetto open L6203+microstep....

Messaggio da murof » lunedì 29 agosto 2011, 23:23

turbina ha scritto: oppure mettere 2 comparatori di protezione veloci tipo lm311 che forzano i 2 pin enable a livello 0 quando superano la max corrente sopportabile, questo a livello hardware saltando il controllo del micro
a sto punto si mettono anche delle resistenze da 0,1ohm anche sul positivo della tensione motori e si usano queste e le Rsense sia per il problema all'accensione che come protezione overcurrent del normale funzionamento.... naturalmente con i comparatori e delle porte AND per funzionare insieme all'inhibit del chopper....


@marcosin al l6506 ci avevo pensato anche io... in effetti toglie un bel po di lavoro al pic... ma vediamo dove arriviamo così

per quanto riguarda le resistenze al posto del DAC in effetti sarebbe meglio.... ma intanto vi faccio vedere qualcosa del codice....

allora avevo proprio pensato ai due interrupt uno comandato dall' ingresso step e l'altro dall'overflow di un timer che segna la fine del periodo di chopper....


questo è in pratica tutto il codice necessario per il mezzo passo (ho tolto 1/4 e 1/8 per non postare troppa pappardella) manca la configurazione iniziale del micro e la selezione del micropasso

Codice: Seleziona tutto

org 04


interrupt_periodo_chopper
	
	CLRWDT	
	bcf	STATUS,RP1	;controlla che l'interrupt sia stato
	btfss	PIR1,TMR2IF	;dell'overflow del timer del chopper o	
	goto	interrupt_step	;da un impulso di step
	bcf	PIR1,TMR2IF	;se è l'overflow azzera il flag, riattiva 
	bsf	STATUS,RP1	;l'interrupt e torna al chopper
	bsf	INTCON,GIE
	goto	chopper
	

interrupt_step

	clrf	PCLATH		; se l'interrupt è dell'input di step
	movfw	tabella_passi	; salta alla parte relativa al tipo di 
	movwf	PCL		; micropasso selezionato
	


org 16
	btfsc	dir		;parte relativa al 1/2 passo
	goto	$+5		;contatore avanti/indietro da 1 a 8
	decfsz	cont_traslat
	goto	$+8
	bsf	cont_traslat,3
	goto	$+6
	incf	cont_traslat
	movlw	9
	subwf	cont_traslat,w
	skpnz
	bcf	cont_traslat,3
	clrc
	rlf	cont_traslat,w	;moltiplica x 8 il valore del contatore
	movwf	salto_riga	;in modo da poter saltare ai dati 
	rlf	salto_riga,f	;di corrente inhibit ecc del passo
	rlf	salto_riga,w	
	addwf	PCL
	
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop

org 16
	btfsc	dir		;parte relativa al 1/2 passo
	goto	$+5		;contatore avanti/indietro da 1 a 8
	decfsz	cont_traslat
	goto	$+8
	bsf	cont_traslat,3
	goto	$+6
	incf	cont_traslat
	movlw	9
	subwf	cont_traslat,w
	skpnz
	bcf	cont_traslat,3
	clrc
	rlf	cont_traslat,w	;moltiplica x 8 il valore del contatore
	movwf	salto_riga	;in modo da poter saltare ai dati 
	rlf	salto_riga,f	;di corrente inhibit ecc del passo
	rlf	salto_riga,w	
	addwf	PCL
	
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop

	movlw	255	
	movwf	corrente_avvolgimento_1
	movwf	corrente_avvolgimento_2
	bsf	inhibit,1
	bsf	inhibit,2
	movlw	01011100b
	goto	fine_interrupt
	nop

	
	clrf	corrente_avvolgimento_1
	movlw	255
	movwf	corrente_avvolgimento_2
	bcf	inhibit,1
	bsf	inhibit,2
	movlw	00011100b
	goto	fine_interrupt
	nop

	movlw	255
	movwf	corrente_avvolgimento_1
	movwf	corrente_avvolgimento_2
	bsf	inhibit,1
	bsf	inhibit,2
	movlw	10011100b
	goto	fine_interrupt
	nop

	movlw	255
	movwf	corrente_avvolgimento_1
	clrf	corrente_avvolgimento_2
	bsf	inhibit,1
	bcf	inhibit,2
	movlw	10001100b
	goto	fine_interrupt
	nop

	movlw	255
	movwf	corrente_avvolgimento_1
	movwf	corrente_avvolgimento_2
	bsf	inhibit,1
	bsf	inhibit,2
	movlw	10101100b
	goto	fine_interrupt
	nop

	clrf	corrente_avvolgimento_1
	movlw	255
	movwf	corrente_avvolgimento_2
	bcf	inhibit,1
	bsf	inhibit,2
	movlw	00101100b
	goto	fine_interrupt
	nop

	movlw	255
	movwf	corrente_avvolgimento_1
	movwf	corrente_avvolgimento_2
	bsf	inhibit,1
	bsf	inhibit,2
	movlw	01101100b
	goto	fine_interrupt
	nop

	movlw	255
	movwf	corrente_avvolgimento_1
	clrf	corrente_avvolgimento_2
	bsf	inhibit,1
	bcf	inhibit,2
	movlw	01001100b
	goto	fine_interrupt

fine_interrupt

	bsf	STATUS,RP1
	bcf	CM1CON0,C1ON		;spegne i comparatori 
	bcf	CM2CON0,C2ON
	bcf	STATUS,RP1
	movwf	PORTB			;manda al PORTB il comando per le fasi
	movfw	corrente_avvolgimento_1	;manda i 2 valori di corrente al DAC 
	movwf	PORTC
	bsf	canale_dac
	bcf	write_dac
	bsf	write_dac
	movfw	corrente_avvolgimento_2
	movwf	PORTC
	bcf	canale_dac
	bcf	write_dac
	bsf	write_dac
	
	clrf	TMR2			;ripulisce l'impulso di chopper
	bcf	PIR1,TMR2IF
	bcf	INTCON,INTF	

	
	bsf	STATUS,RP1		;riattiva l'interrupt e ripassa al ciclo di chopper
	bsf	INTCON,GIE	
	

;********************************************************

chopper

	
	btfsc	inhibit,1                    ;vengono attivati i comparatori
	bsf	CM1CON0,C1ON
	btfsc	inhibit,2
	bsf	CM2CON0,C2ON
	
	btfsc	CM1CON0,C1OUT       ; se la tensione di sense supera la vref i comparatori
	bcf	CM1CON0,C1ON         ; vengono spenti fino all'arrivo dell'overflow del periodo
	btfsc	CM2CON0,C1OUT       ; di chopper
	bcf	CM2CON0,C2ON
	goto	$-4

turbina

Re: progetto open L6203+microstep....

Messaggio da turbina » martedì 30 agosto 2011, 0:46

ho visto che hai pensato ad un periodo di chopper kostante generato da un timer, , a quanto pensavi? un 10usec circa? comunque va bene, io darei sempre priorità  in irq al chopper rispetto allo step,

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: progetto open L6203+microstep....

Messaggio da walgri » martedì 30 agosto 2011, 1:57

Può essere utile al progetto vedere cosa è stato fatto nel PICStep (con codice in assembler) e in quest'altro Microstepper (con codice in C)?
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

murof
Junior
Junior
Messaggi: 192
Iscritto il: giovedì 6 marzo 2008, 22:24
Località: prov di ME

Re: progetto open L6203+microstep....

Messaggio da murof » martedì 30 agosto 2011, 10:12

turbina ha scritto:ho visto che hai pensato ad un periodo di chopper kostante generato da un timer, , a quanto pensavi? un 10usec circa? comunque va bene, io darei sempre priorità  in irq al chopper rispetto allo step,
avevo pensato un po di più.... circa 20khz.... ma solo perchè così avevo più comandi eseguibili fra un overflow e l'altro e dunque un comando del duty cycle del chopper più preciso...

ma invece ora ho pensato un altra cosa (come tu pure mi consigli se ho capito bene): invece di fare il polling dell'uscita dei comparatori metto un altro interrupt così comando l'attivazione dei comparatori (inhibit) con l'interrupt dell'overflow e la disattivazione con l'interrupt dell'uscita dei comparatori

inoltre tiro fuori dall'isr la tabella dei valori di corrente e fasi dei passi e faccio semplicemente il polling del flag di PORTB,0 (step) ma senza attivarne l'interrupt
in questo modo il programma girerebbe sulle righe:

btfss intcon,intf
goto $-1
goto tabella_passi

e sarebbe interrotto dai due interrupt del chopper (che dunque avrebbe priorità  assoluta) o dall'impulso di step....

appena posso cambio il codice e lo riposto

turbina

Re: progetto open L6203+microstep....

Messaggio da turbina » martedì 30 agosto 2011, 15:01

certo, + fai fare all'hardware e meglio è, l'unico inconveniente è che si genererebbero più armoniche perchè la frequenza del chopper non avrebbe una freq stabilissima ma con correnti di 3-4 ampere non sono molto alte e se il pcb è fatto bene non hai nemmeno bisogno di filtri.

per quanto riguarda l'irq dello step puoi lasciarlo così (no polling) perchè entrambi i 3 interrupt durano poco (penso 2-3 microsecondi a 8mhz cl) , e non si disturbano a vicenda, se durante una routine di servizio irq ne arriva subito un'altra, viene eseguita al termine della isr corrente e non dovresti perderne nemmeno una.

Un'altra cosa, se non hai nessuna porta rs232 puoi levare il quarzo e attivare l'osc interno a 8mhz, dovresti farcela, riduci ulteriormente i consumi e il costo.

Rispondi

Torna a “Elettronica CNC”