Increasing range of DWM3001C module

Hi experts,

I am currently evaluating the latest DWM 3001C module using the DWM3001CDK. I have been able to compile the source code and make minor changes in functionality.

One thing that bothers me is the poor range when using the DWM3001C as a “responder” with an iPhone iOS app. I do not get anything more than 4 meters in great difficulty. This is using the standard source code that comes along.

What are the parameters I need to play around with to increase the range?

I was playing around with DWT_PLEN_64 in default_config.h and changed it to DWT_PLEN_512 based on a suggestion in another post. But obviously, that did not work and an error was observed in the RTT viewer.

Any pointers will be of great help as I am just doing a PoC. I shall deep dive later if the solution suits our requirements.

Regards,

KSHAH

Hi @kshah
what is your TX power setting. You can increase that but you should not go over the calibrated value in the OTP.

Cheers
JK

Hi @leapslabs

Kindly find the below default configuration I am working with

#define DEFAULT_TXPREAMBLENGTH      (DWT_PLEN_64)
#define DEFAULT_RXPAC               (DWT_PAC8)
#define DEFAULT_PCODE               (11)
#define DEFAULT_NSSFD               (DWT_SFD_IEEE_4Z)
#define DEFAULT_DATARATE            (DWT_BR_6M8)
#define DEFAULT_PHRMODE             (DWT_PHRMODE_STD)
#define DEFAULT_PHRRATE             (DWT_PHRRATE_STD)
#define DEFAULT_SFDTO               (64 + 1 + 8 - 8)
#define DEFAULT_STS_MODE            (DWT_STS_MODE_OFF)
#define DEFAULT_STS_LENGTH          (DWT_STS_LEN_64)
#define DEFAULT_PDOA_MODE           (DWT_PDOA_M0)

/* run-time config */
#define DEFAULT_ANTD                (513.484f * 1e-9 / DWT_TIME_UNITS) /* Mean Total Antenna Delay for DWM3001C module */
#define DEFAULT_RNGOFF_MM           (0) /* Can be used to offset Range */
#define DEFAULT_REPORT_LEVEL        (1)

#define FCONFIG_SIZE                (0x200)

/* Default configuration initialization */
#define DEFAULT_CONFIG \
{\
    .dwt_config.chan            = DEFAULT_CHANNEL, \
    .dwt_config.txPreambLength  = DEFAULT_TXPREAMBLENGTH, \
    .dwt_config.rxPAC           = DEFAULT_RXPAC, \
    .dwt_config.txCode          = DEFAULT_PCODE, \
    .dwt_config.rxCode          = DEFAULT_PCODE, \
    .dwt_config.sfdType         = DEFAULT_NSSFD, \
    .dwt_config.dataRate        = DEFAULT_DATARATE, \
    .dwt_config.phrMode         = DEFAULT_PHRMODE, \
    .dwt_config.phrRate         = DEFAULT_PHRRATE, \
    .dwt_config.sfdTO           = DEFAULT_SFDTO, \
    .dwt_config.stsMode         = DEFAULT_STS_MODE, \
    .dwt_config.stsLength       = DEFAULT_STS_LENGTH, \
    .dwt_config.pdoaMode        = DEFAULT_PDOA_MODE, \
    \
    .v.ver0                     = 0xFFFFFFFF, \
    .v.ver1                     = 0xFFFFFFFF, \
    .v.ver2                     = 0xFFFFFFFF, \
    .v.ver3                     = 0xFFFFFFFF, \
    \
    .s.last_error = 0,\
    .s.mode = 0,\
    \
    .s.txConfig.PGdly           = 0x34, \
    .s.txConfig.power           = 0xfefefefeUL, \
    .s.txConfig.PGcount         = 0, \
    \
    .s.rngOffset_mm         = DEFAULT_RNGOFF_MM, \
    .s.reportLevel          = DEFAULT_REPORT_LEVEL, \
    \
    .s.antRx_a              = (uint16_t)(0.5* DEFAULT_ANTD), \
    .s.antTx_a              = (uint16_t)(0.5* DEFAULT_ANTD), \
    \
    .s.xtalTrim             = 0x2E,\
    \
    .s.fira_config. role = 0,\
    .s.fira_config. enc_payload = 1,\
    .s.fira_config. Session_ID = 1111,\
    .s.fira_config. Ranging_Round_Usage = FIRA_RANGING_ROUND_USAGE_DSTWR,\
    .s.fira_config. Multi_Node_Mode = FIRA_MULTI_NODE_MODE_UNICAST,\
    .s.fira_config. Rframe_Config = FIRA_RFRAME_CONFIG_SP3,\
    .s.fira_config. ToF_Report = 1,\
    .s.fira_config. AoA_Azimuth_Report = 0,\
    .s.fira_config. AoA_Elevation_Report = 0,\
    .s.fira_config. AoA_FOM_Report = 0,\
    .s.fira_config. nonDeferred_Mode = 0,\
    .s.fira_config. STS_Config = 0,\
    .s.fira_config. Round_Hopping = 0,\
    .s.fira_config. Block_Striding = 0,\
    .s.fira_config. Block_Duration_ms = 100,\
    .s.fira_config. Round_Duration_RSTU = 18400,\
    .s.fira_config. Slot_Duration_RSTU = 2400,\
    .s.fira_config. Channel_Number = 9,\
    .s.fira_config. Preamble_Code = 11,\
    .s.fira_config. PRF_Mode = 0,\
    .s.fira_config. SP0_PHY_Set = BPRF_SET_2,\
    .s.fira_config. SP1_PHY_Set = BPRF_SET_3,\
    .s.fira_config. SP3_PHY_Set = BPRF_SET_4,\
    .s.fira_config. MAX_RR_Retry = 1,\
    .s.fira_config. Constraint_Length_Conv_Code_HPRF = 0,\
    .s.fira_config. UWB_Init_Time_ms = 5,\
    .s.fira_config. Block_Timing_Stability = 0,\
    .s.fira_config. Key_Rotation = 0,\
    .s.fira_config. Key_Rotation_Rate = 0,\
    .s.fira_config. MAC_FCS_TYPE = 0,\
    .s.fira_config. MAC_ADDRESS_MODE = 0,\
    .s.fira_config. SRC_ADDR[0] = 0,\
    .s.fira_config. SRC_ADDR[1] = 0,\
    .s.fira_config. Number_of_Controlee = 1,\
    .s.fira_config. DST_ADDR[0] = 1,\
    .s.fira_config. DST_ADDR[1] = 0,\
    .s.fira_config. Vendor_ID[0] = 0,\
    .s.fira_config. Vendor_ID[1] = 0,\
    .s.fira_config. Static_STS_IV[0] = 0,\
    .s.fira_config. Static_STS_IV[0] = 0,\
    .s.fira_config. Static_STS_IV[0] = 0,\
    .s.fira_config. Static_STS_IV[0] = 0,\
    .s.fira_config. Static_STS_IV[0] = 0,\
    .s.fira_config. Static_STS_IV[0] = 0,\
};

Any pointers to configuration changes to be made will be helpful?

Hi @leapslabs! Could you please give your suggestions for configuration changes.

Hi @Keonte45 @kshah
you are already using almost full power .s.txConfig.power = 0xfefefefeUL. You can go to 0xffffffffUL this might add cca +2dB in output power. However in reality you should use calibrated value from OTP - your constant value and 0xffffffff violated the FCC rules.

I would like to pinpoint that iphone (very likely also google pixel) doe not have “well designed” antennas due to its nature (its phone with dimensional constraints). Short range is likely expected + as far I remember Apple provides some document how to hold iphone to provide “best UWB experience”.

Cheers
JK

Hi @leapslabs

Thank you for the pointers. The range did improve. We will surely not use it in production-grade products as it may violate FCC rules.

You were right about the iPhone’s UWB antenna. They don’t have the best antenna and work best in certain positions only. We will be using Anchors in our project to approximate the position. It would be helpful if you can share your input on the following:

  1. Source code for DWM3001 as an Anchor. With 3-4 anchors in any given location. Eventually giving me x,y,z positions of the tag wrt anchors.
  2. Can the tag as an item be added in iOS (Find my items - ‘others’ category) ?
  3. Documentation for the source code & the Eval Board has not been the greatest. I come from Microchip & TI background :expressionless:

Regards,

KS

Hi @kshah
sorry I cant help you here. Your questions are related to FIRA NI and you need to ask Qorvo guys to support you.

Cheers
JK