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