Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TMC2209 returns wrong microsteps from the REGISTRY when it is set to 4 #306

Open
korianv opened this issue Dec 8, 2024 · 0 comments
Open

Comments

@korianv
Copy link

korianv commented Dec 8, 2024

I have noticed that when setting microsteps to 4, the TMC2209 does not return the correct value of 4 when reading from the Register Map, but 256, although the driver is, indeed, in 4 microsteps mode.

This only happens when the interpolation is disabled [driver.intpol(false);]. With it enabled, the returned value is correct.

Here is a code to set all 9 possible microsteps using the UART:

uint16_t MicroStep[9] = {0, 2, 4, 8, 16, 32, 64, 128, 256};
  for (int16_t i = 0; i < 9; i++)
  {
    Serial.print("i=");
    Serial.println(i);
    Serial.print("set microsteps=");
    Serial.println(MicroStep[i]);
    driver.microsteps(MicroStep[i]);
    Serial.print("get microsteps=");
    Serial.println(driver.microsteps());
    if (i == 0)
      driver.VACTUAL(839);
    else
      driver.VACTUAL(839 * MicroStep[i]);
    Serial.print("get VACTUAL=");
    Serial.println(driver.VACTUAL());
    Serial.println();
    delay(4000);
  }

The output from serial is:

i=0
set microsteps=0
get microsteps=0
get VACTUAL=839

i=1
set microsteps=2
get microsteps=2
get VACTUAL=1678

i=2
set microsteps=4
get microsteps=256 <<<<<<------------------ WRONG!
get VACTUAL=3356

i=3
set microsteps=8
get microsteps=8
get VACTUAL=6712

i=4
set microsteps=16
get microsteps=16
get VACTUAL=13424

i=5
set microsteps=32
get microsteps=32
get VACTUAL=26848

i=6
set microsteps=64
get microsteps=64
get VACTUAL=53696

i=7
set microsteps=128
get microsteps=128
get VACTUAL=107392

i=8
set microsteps=256
get microsteps=256
get VACTUAL=214784

The motor is always spinning at exactly 3 RPM, so internally the driver TMC2209 is running with 4 microsteps, but it returns a wrong value when requesting the status for microsteps.

The library's code seems correct. Does the driver itself has a bug?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant