Hallo,
Ik heb een nano ESP32-s3 die ik gebruik om een MKS_SERVO42D closed loop stepper driver aan te sturen. De driver heeft gelukkig een behoorlijke handleiding en het is mij gelukt om een aantal voorbeeld codes met wat aanpassingen succesvol uit te voeren. De voorbeelden zijn voor AVR bordjes dus niet alles werkt op de nano ESP32.
Ik wil een sketch maken waarin ik zo veel mogelijk functies van de driver verzamel. Die functie kan bijvoorbeeld zijn om naar een relatieve positie te gaan met een bepaalde snelheid, acceleratie etc etc. Na het aanroepen van de functie antwoord de driver of het is gelukt of niet etc.
Maar ik snap de handleiding niet goed wanneer het gaat om versturen van de bytes. Het ontvangen van de bytes denk ik wel onder controle te hebben omdat die reeks korter is en daarom makkelijker te identificeren wat wat is. Ik denk dat het misschien mis gaat bij mijn vertaling van de HEX bytes naar decimaal?
hieronder een stukje uit de code
void positionMode1Run(uint8_t slaveAddr, uint8_t dir, uint16_t speed, uint8_t acc, uint32_t pulses);
positionMode1Run(1, runDir, 300, 30, 320000); //Slave address=1, speed=100RPM, acceleration=200, pulse number=32000 (10 circles)
void positionMode1Run(uint8_t slaveAddr, uint8_t dir, uint16_t speed, uint8_t acc, uint32_t pulses) {
int i;
uint16_t checkSum = 0;
txBuffer[0] = 0xFA; //frame header (Hiermee start de reeks bytes)
txBuffer[1] = slaveAddr; //slave address
txBuffer[2] = 0xFD; //function code
txBuffer[3] = (dir << 7) | ((speed >> 8) & 0x0F); //High 4 bits for direction and speed
txBuffer[4] = speed & 0x00FF; //8 bits lower
txBuffer[5] = acc; //acceleration
txBuffer[6] = (pulses >> 24) & 0xFF; //Pulse bit31 - bit24
txBuffer[7] = (pulses >> 16) & 0xFF; //Pulse bit23 - bit16
txBuffer[8] = (pulses >> 8) & 0xFF; //Pulse bit15 - bit8
txBuffer[9] = (pulses >> 0) & 0xFF; //Pulse bit7 - bit0
txBuffer[10] = getCheckSum(txBuffer, 10); //Calculate checksum
Serial1.write(txBuffer, 11);
}
hieronder verschijnt hopelijk het plaatje waarin ik met groen, oranje en blauw aangeef wat ik niet snap. Wat rode lijnen wat aangeeft welk HEX bij welke Byte hoort.
-BYTE 4 en BYTE 5 bestaat dus uit "01 40 02 00 00" waarna FA 00 het aantal pulsen geeft?
-dir = direction maar wat is Rev?
-in groen staan b7 tm b0. Dit zijn vast de bitjes in de byte maar snap hier niet de relatie tot "01 40 02 00 00"
Hieronder hopelijk de complete handleiding.