Index Mode without calibration on start up

How can I avoid calibration but i need to use the driver with encoder

Hey @Nidhi_Rao

Are you okay with some limited movement during startup or does your application require the motor to stay completely still during startup?

If you just want to avoid calibration you can use any encoder and save the motor + encoder calibration data after performing an initial calibration. If you require the motor be completely still you’ll need to use an absolute encoder.

Skip calibration but have some (small) movement on startup: check here.
No movement whatsoever (using absolute encoders): see here.

Hope that helps!

1 Like

I don’t want any movement. I have an inbuilt encoder so I am facing issues. Your post suggests other encoders. I have an absolute encoder without index signal. Anyway I can work around it?

An absolute encoder doesn’t use an index pulse, it just outputs its current angle directly.
If you have an absolute encoder you can calibrate once, when you first set up your system, then every time after that you can immediately go into closed-loop control.
The ODrive supports absolute encoders, but currently only a few models are implemented.

From my post I linked to previously:

I’m using the AS5047P (Digikey Link ).
To use them you’ll need the RazorsEdge firmware branch (from here ).

To set up the encoder, follow the instructions at the bottom of the page here ( Under AS5047/AS5048 Encoders)

More info:

Using this encoder (or another supported absolute encoder), you can get rid of movement on startup. No index pulse is needed.

1 Like

Hi
I’m using AMT102-V encoder with odrive, and I have tried the steps to how to do a one time calibration, but that does not seem to work. It is stated that the one time calibration would only work if the encoder has an index signal, which AMT102-V has as per the datasheet. when i check:
odrv0.axis1.encoder.config.pre_calibrated
i get false.
Please help

Hi Kedvall ,
Odrive comes with only one SPI right? So if I want to use AS5047P absolute encoder , I can only use for one BLDC . How about for the second BLDC motor ,there are no more MISO ,MOSI pins .

Right, there is only one SPI bus. However, you can use two different chip select (CS) pins to use the same bus with two different devices.
There should be a setting called abs_spi_cs_gpio_pin (or something similar) under the encoder settings. You can set this to whichever pins you have free, for example Pin 3 and Pin 4.
Then wire:

  • MISO, MOSI, CLK, VCC, and GND to both encoders
  • Pin3 to encoder 1 CS
  • Pin4 to encoder 2 CS

That should be work

Hi Kedvall,

Thank you for your reply. I am using an encoder with index, however even with 22nF-47nF capacitor .
my motor does not return to the same position each time after index_search.

Do you experience any encoder noise with AS5047 SPI ?

Hmm I think there is some confusion here. The AS5047 supports two modes: Absolute (over SPI), and Incremental (with ABI lines).

If you’re using SPI mode you won’t have an index pulse and don’t need a capacitor on the lines. You should only be using MOSI, MISO, CLK, and CS (plus VCC and GND). In this mode you can actually check the error rate (I think it’s .spi_error_rate but can’t quite remember).
Anyways no, I haven’t seen much noise on the SPI lines and mine are decently long (30+cm).

Are you perhaps still using the encoder’s incremental mode? You have to change the ODrive’s encoder mode to SPI or it will still try to use incremental.

Hi Kedvall,
Sorry, for the confusion . I am currently using E6B2CWZ6C OMRON Rotary Encoder with index . (no SPI) Even adding capacitor ,still there is noise.
However after AXIS_STATE_CLOSED_LOOP_CONTROL , everything is fine ,working good ,but i am concern that since the search for index does not give the same value each time i perform odrv0.axis0.requested_state = AXIS_STATE_ENCODER_INDEX_SEARCH. I may have problems later .

I have never use AS5047 before. I am considering using it.

Ah I see that makes sense. I also haven’t had a problem with noise on the ABI interface but haven’t used that as extensively. Have you tried looking at the index signal with a scope to see what kind of noise you’re getting? I’m not familiar with that encoder but if your signal lines are a reasonable length I think you should be able to get almost no noise…

I would try to seperate the problem if you can. Test the encoder with something else (or just a scope) and try another encoder with the ODrive (if you have one).

Hope that helps, good luck!

Hi Kedvall,

If possible please share with us a picture of your mounting of AS5047P encoder to the motor. Also what wires you used? (shield or twist).Thank you.

I have similar problems - you can take a look at:
https://discourse.odriverobotics.com/t/index-search-does-not-work-correctly-with-my-setup

kevdall

Am working on a Bruton robot and saw this post regarding avoiding all motor movement during startup.

Unfortunately, the link referred to in the post is not longer found.

Can you (or someone) provide updated information about this?

Thanks in advance.

Ciao

Hey there - which encoder specifically are you using? And is this with an ODrive v3.6 or a Pro/S1/Micro?

Solomon,

Sorry for not including that info.

ODrive 3.6

AMS AS5047P absolute encoder.

Hi
I replied a little while ago, but have yet to see a response.

I am using Odrive 3.6 with AMS AS5047P absolute encoders

Any assistance will be greatly appreciated.

Ciao

Thanks for following up :slight_smile: have you checked out here? Encoders — ODrive Documentation 0.5.6 documentation

solomondog

Thanks for the reply.

Yes, I’ve read through the documentation - lots of times over ;^)

I can get the Odrives to boot up and work correctly, they just perform a small cycling (turn left then right).

I am a bit worried that when my project is completed this cycling will cause issues.

This thread mentions

" No movement whatsoever (using absolute encoders)"

I am unable to find anything further on this idea.

Will keep working at it though, any suggestions will be greatly appreciated.

Ciao

Sorry, had to check :wink:

Here - you probably have this set. ODrive Reference — ODrive Documentation 0.5.6 documentation . It’s only for incremental encoders without index. If you calibrate the absolute encoder and then save_configuration(), you should be good to go.