Hey all, I’ve been banging my head against this for awhile now and I’ve gotten to the point where I need assistance from more experienced developers.
I’m currently using an MKS XDrive Mini, a MAX485, and an AR49-M25S using RS485 for communication. Here’s what I have so far:
#include <SimpleFOC.h>
#define RS485_RO PA1
#define RS485_RE PA2
#define RS485_DE PA3
#define RS485_DI PA0
#define AR49_READ 0x02
#define AR49_ZERO_RST 0xC2
HardwareSerial Serial4(RS485_RO, RS485_DI);
char buffer[10];
void PrintBits(char c)
{
for(int i = 7; i >= 0; i--)
{
Serial.print(bitRead(c,i));
}
}
float OnReadEncoder()
{
digitalWrite(RS485_RE, HIGH);
digitalWrite(RS485_DE, HIGH);
delayMicroseconds(2);
Serial4.write(AR49_READ);
Serial4.flush();
delayMicroseconds(5);
digitalWrite(RS485_RE, LOW);
digitalWrite(RS485_DE, LOW);
delayMicroseconds(20);
Serial.print("Response from encoder:");
int bytesReceived = Serial4.available();
if (bytesReceived > 0)
{
Serial4.readBytes(buffer, bytesReceived);
for (int i = 0; i < bytesReceived; i++)
{
Serial.print(' ');
PrintBits(buffer[i]);
if (buffer[i] == AR49_READ)
{
Serial.print(" (Read cofirmed!) ");
}
}
}
Serial.println("");
return 0;
}
void OnInitEncoder()
{
}
GenericSensor encoder = GenericSensor(OnReadEncoder, OnInitEncoder);
void setup()
{
pinMode(RS485_RE, OUTPUT);
pinMode(RS485_DE, OUTPUT);
Serial4.begin(2500000, SERIAL_8N1);
encoder.init();
Serial.begin(115200);
delay(1000);
}
void loop()
{
encoder.update();
delay(1000);
}
Unfortunately what I’m getting back from the encoder doesn’t seem to make any sense nor conform to what I should expect to be getting back. Here’s the documentation for the encoder https://docs.broadcom.com/doc/AR49-Series-AN starts on Page 39.
Here’s a sample of what I’m getting back:
Response from encoder: 00010000 01101111 11111110
Response from encoder: 00110000 10111111 11111011 10011100
Response from encoder: 00110000 11111000 11111011 11111111
Response from encoder: 00110000 11100000 11111011 11110111
Response from encoder: 00010000 01101111 11111110
Response from encoder: 00010000 11100011 11111011 11110110
Response from encoder: 00110000 11100110 11111011 11110011
Response from encoder: 00110000 11100111 11111011 11110000
Any ideas or suggestions would be greatly appreciated.