Hello! I am working on a project that uses UHF RFID and passive tags to record accurate distance of the passive tag in relation to the reader. I was trying to find if it is possible to get (ultimately) the phase difference between the TX and RX RFID signal. I can just use the RSSI strength, which I will. But for my purposes I really need the phase difference of the two signals. Let me know if this is possible and if not, if anyone has other ideas of sub $300 options for readers in UHF…
Never understood /bordered about “phase” in the tag response, but maybe it is your answer.
As part of the tag-data there is a “tag phase”, according to the M6E datasheet:
Tag Phase: Average phase of tag response in degrees (0°-180°)
Why not 0 - 360 is explained on https://www.jadaktech.com/wp-content/uploads/2022/08/ThingMagic-General-FAQs-02282020-1.pdf
Someone had a question about his before “Phase Ambiguity of UHF RFID - Stack Overflow”
In order to obtain the tag-phase information there are 2 options.
- int8_t phase = nano.msg[22].
- Having extended the Sparkfun library with many other calls and options, I have also updated the version with a getTagPhase() call and added example22 to demonstrate. My version can be found on ThingMagic/Arduino_lib_special at master · paulvha/ThingMagic · GitHub.
Hey! I have been using your example with the getTagPhase() and I am coming across an issue where I am only reading a tag phase between ~168-174 regardless of distance to the reader. Would you be willing to maybe give some insight on this? If I am not able to get an accurate phase difference between the backscatter signal and the TX signal, then my project is dead…
Any help is appreciated.
I am using “example22_constant_read_phase”. With your first option of using nano.msg[22] I instead get a small phase variation of ~ -70 to -96. Seems better but would you be able to point me in the direction of why we have this difference with the two methods?
The phase is defined as an unsigned 16bit value: uint16_t ret = msg[21]<<8 | msg[22];
As the maximum value is 180, msg[21] is always zero and msg[22] contains the real value.
You are using an int (signed) value. make this uint8_t.
Why the phase is nearly the same ?? I have no idea… I have never understood the phasing. I found attached document about reader sensitivity… but again… not sure this answers what you can looking for
20160804154252_62833.pdf (412.2 KB)
I saw that… I was looking through the functions. After a little bit of digging I found that the Thingmagic nano m6e does not support tag phase reading, so I do not know what these values are.
The Thingmagic nano m7e does though. Here are some references:
M7e documentation page 35 states tag phase: Average phase of tag response in degrees (0°-180°)
(https://cdn.sparkfun.com/assets/8/5/2/4/d/M7E_HECTO_User_Guide.pdf)
M6e documentation page 39 states tag phase: Not supported in ThingMagic Nano
(https://cdn.sparkfun.com/assets/4/e/5/5/0/SEN-14066_datasheet.pdf)
Thanks for showing that document you found, that will be helpful too!