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.