Problema de interconexión PIC18F26K80 con el controlador de motor paso a paso TMC5130 trinámico

1

Trinamic TMC5130 es un controlador de motor IC más empinado ( Hoja de datos ). Tiene una interfaz SPI con la CPU host. Mi controlador host es PIC18F26K80envíadatosde8bitsalavez,porloquedeboenviar5bytescontinuamenteaTMC5130paraqueentiendalosdatos.ElproblemaesquenoestoyobteniendolosdatosdeseadosdelTMC5130,elmotornoseestácolocandodeunladoaotrocomosesupone.ElregistroserialdedepuraciónPIC26K80eselsiguiente:

SPIMASTERInitialize....Received:0x0000000000fromregister:0x00Received:0x7900000000fromregister:0x6CReceived:0x7900000000fromregister:0x10Received:0xF900038301fromregister:0x11Received:0xF981000005fromregister:0x70Received:0x7905000000fromregister:0x24Received:0x7900000000fromregister:0x25Received:0x7900000000fromregister:0x26Received:0x7900000000fromregister:0x27Received:0x7900000000fromregister:0x2AReceived:0x7900000000fromregister:0x2BReceived:0x7900000000fromregister:0x20Received:0x7900000000fromregister:0x2D10Rotation512000pulseReceived:0x7900000000fromregister:0x2DReceived:0x7900000000fromregister:0x21STOPReceived:0x7900000000fromregister:0x21Received:0x7900000000fromregister:0x2B

CódigodeinicializaciónSPIPIC18F26K80:

voidSPI_Initialize(void){//SettheSPImoduletotheoptionsselectedintheUserInterface//R_nWwrite_noTX;//Pstopbit_notdetected;//Sstartbit_notdetected;//BFRCinprocess_TXcomplete;//SMPmiddleofdataoutputtime;//UAdontupdate;//CKE:TransmitoccursontransitionfromIdletoactiveclockstate;//D_nAlastbyte_address;//0000000SSPSTAT=0x00;//WCOLno_collision;//SSPOVno_overflow;//SSPENenabled;//CKPIdle:Low,Active:High;//00000010//(SSPM3:0)--->0010SPIMastermode:clock=FOSC/64SSPCON1=0x02;//SSPADD0;//SSPADD=0x00;}

PIC18F26K80SPII/OInitialization

//RB0asslave1selectoutput//RB1DriveEnableoutputforTMC3150LATB=0x00;TRISB=0xFC;//11111100//WPUB=0x00;////SPIMASTERMode//SD0(RC5)asOutput//SCK(RC3)asOutpurPORTC=0x00;//00000000TRISC=0xD4;//11010100

SPIByteExchangedesdePIC18F26K80MASTER

uint8_tSPI_Exchange8bit(uint8_tdata){//CleartheWriteCollisionflag,toallowwritingSSPCON1bits.WCOL=0;SSPBUF=data;while(SSPSTATbits.BF==SPI_RX_IN_PROGRESS){}return(SSPBUF);}

DatagramaSPIenviadodesdePIC18F26K80aTMC5130

voidTMC5130_SendData(unsignedlongaddress,unsignedlongdatagram){Delay_ms(100);uint8_tstat;unsignedlongi_datagram;//digitalWrite(chipCS,LOW);CS1_SetLow();__delay_ms(10);stat=SPI_Exchange8bit((address|0x80));i_datagram|=SPI_Exchange8bit((datagram>>24)&0xff);i_datagram<<=8;i_datagram|=SPI_Exchange8bit((datagram>>16)&0xff);i_datagram<<=8;i_datagram|=SPI_Exchange8bit((datagram>>8)&0xff);i_datagram<<=8;i_datagram|=SPI_Exchange8bit((datagram)&0xff);//digitalWrite(chipCS,HIGH);CS1_SetHigh();#ifdefDEBUD_LOGUSARTWriteString("Received: ");
    PrintHex40(stat, i_datagram);
    USARTGotoNewLine();
    USARTWriteString(" from register: 0x");
    USARTPrintHex(address);
    USARTGotoNewLine();
#endif
}
El código

PIC18F26K80 para TMC5130 está referenciado en Cómo conducir un motor paso a paso con su Arduino Mega usando un TMC5130-EVAL

He capturado las señales de SPI Clock / Data de PIC18F26K80, estoy obteniendo los datos y el reloj adecuados según lo deseado. He probado TMC5130 con la placa Cypress, CY8CKIT- 042 con el mismo código referenciado, funciona bien como se esperaba. También he capturado las señales de reloj de Cypress. Encontré la diferencia en SPI-Clock, PIC y Cypress. El reloj PIC18F26K80 SPI no es continuo cuando Cypress da una señal de reloj de 40 bits continuamente. El PIC transmite un byte tras otro con un retraso de algunos microsegundos.

Asíquemiobservacióndicequehayunproblemasoloporelreloj.NecesitoenviarelrelojSPIde40bitscontinuamenteparaqueTMC5130entiendaelcomando.Ahoralapreguntaes¿CómopuedolograrelrelojmaestroSPIcontinuodesdePICSPI?Necesitoconfirmarqueestoyenladireccióncorrectaono?¿Puedealguienaquíguiarme?Cualquierpequeñaayudaosugerenciaesapreciada.Graciasdeantemano.

EDIT(1):HeprobadoelmismocódigodereferenciaparalaplacaArduinoUNO,¡estáfuncionando!HemedidoseñalesdeSCKenDSOyencontrélasmismasseñalesderelojqueenPIC18F26K80,exceptolafrecuenciaderelojdeSCK.EnPIC18F26K80tiene125KHz.LafrecuenciaSPICLKdeArduinoesde2MHz.PuedoconcluirqueelrelojSCKnoesunproblema.TMCnecesita40CLKperonotodoslos40continúan,8bitsdereloj5vecesconunpocoderetrasoesaceptable.

    
pregunta Taher Kawantwala

0 respuestas

Lea otras preguntas en las etiquetas