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

Re: progetto open L6203+microstep....

Messaggio da murof » martedì 30 agosto 2011, 18:23

turbina ha scritto: per quanto riguarda l'irq dello step puoi lasciarlo così (no polling) ....

attenzione però non voglio fare il polling della porta ma del bit INTCON,INTF (senza però attivarne il relativo INTCON,INTE) in questo modo non perdo lo step neanche se avviene (e finisce) durante un interrupt del chopper perchè quel bit resta settato....

spero di postare il codice stasera.....

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, 20:59

comunque gli interrupt sono già  3 senza lo step...
perchè mentre l'attivazione dei 2 comparatori è contemporanea all'overflow del timer la disattivazione è invece comandata da un interrupt ciascuno...

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 » mercoledì 31 agosto 2011, 16:03

circa 20 istruzioni ciascuno per tutti e tre gli interrupt del chopper(10uS a 8mhz o circa 4,5uS a 20 mhz)

circa 30 istruzioni per selezionare i nuovi dati di corrente inhibit e combinazione fasi da quando si riceve un impulso di step

28 istruzioni per cambiare effettivamente il passo (che si ridurrebbero a circa 20 con le resistenze al posto del DAC) ovvero disattivare gli interrupts, spegnere comparatori, impostare il nuovo comando delle fasi,impostare i nuovi valori di corrente, riattivare i comparatori e riattivare gli interrupts... di cui 18 istruzioni (o circa 10 senza DAC) con i comparatori fermi (inhibits a 0)....


..... mi sa che è necessario il quarzo a 20 mhz...

Codice: Seleziona tutto

interrupt_chopper


	
	MOVWF	W_TEMP 			;push registri
	SWAPF	STATUS, W 
	MOVWF	STATUS_TEMP

	CLRWDT	
	bcf	STATUS,RP1		;controlla che l'interrupt sia stato
	btfss	PIR1,TMR2IF		;dell'overflow del timer del chopper o	
	goto	interrupt_uscita_comp	;dell'uscita dei comparatori
	bcf	PIR1,TMR2IF		;se è l'overflow azzera il flag, riattiva 
	bsf	STATUS,RP1		;i comparatori e retfie 
	btfsc	inhibit,1
	bsf	CM1CON0,C1ON
	btfsc	inhibit,2
	bsf	CM2CON0,C2ON
	
	swapf	STATUS_TEMP,w		;pop registri
	movwf	STATUS
	swapf	W_TEMP,f
	swapf	W_TEMP,w
	retfie

	
	
	

interrupt_uscita_comp

	bsf	STATUS,RP1
	btfss	CM1CON0,OUT	;controlla quale comparatore ha provocato 
	goto	$+5		;l'interrupt (valore di corrente raggiunto)
	bcf	CM1CON0,C1ON	;e lo disattiva fino al prossimo overflow del timer
	bcf	STATUS,RP1
	bcf	PIR2,C1IF
	
	bsf	STATUS,RP1
	btfss	CM2CON0,OUT
	goto	$+4
	bcf	CM2CON0,ON
	bcf	STATUS,RP1
	bcf	PIR2,C1IF
	bcf	STATUS,RP1
	
	swapf	STATUS_TEMP,w	;pop registri
	movwf	STATUS
	swapf	W_TEMP,f
	swapf	W_TEMP,w
	retfie

;**********************************************
polling_intf

	btfss intcon,intf
	goto $-1
	goto traslatore

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

traslatore

	clrf	PCLATH		
	movfw	tabella_passi	
	movwf	PCL		
	


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 corrispondente
	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	cambia_passo
	nop

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

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

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

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

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

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

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

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

cambia_passo

	bcf	INTCON.GIE		;disattiva l'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
	
	bsf	STATUS,RP1
	bsf	CM1CON0,C1ON		;riattiva i comparatori 
	bsf	CM2CON0,C2ON
	bcf	STATUS,RP1

	clrf	TMR2			;azzera il timer e ripulisce 
	bcf	PIR1,TMR2IF		;i flags degli interrupt
	bcf	INTCON,INTF	
	bcf	PIR2,C1IF
	bcf	PIR2,C2IF
				
	bsf	INTCON,GIE		;riattiva l'interrupt e ripassa al ciclo di chopper	
	goto	polling_intf


	

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 » venerdì 2 settembre 2011, 15:04

ieri ho guardato il comportamento del chopper di un tb6560 e ho visto che i miei tempi di esecuzione sono troppo lunghi... a soli 12 volt la tensione sulle rsense raggiungeva la vref in soli 10uS.... e in meno di 5uS a 24v....

mi sa che dovrò optare per un controllo esterno del chopper....oppure un pic con oscillatore interno a 32mhz.... consigli?

Rispondi

Torna a “Elettronica CNC”