DRV2605L in RTP mode

Hey,
I'm trying to use the drv2605L driver to drive an LRA vibrating motor, the goal is to make it vibrate by controlling only the amplitude of the oscillation, to do this there seem to be two ways: pwm mode using the duty cicle and RTP mode.
I am using the second method but I have encountered a problem, I have based myself on this graph (figure 27 in the DRV2605L's datasheet):

so I set the registers for the following modes: RTP mode, unidirectional, DATA_FORMAT_RTP = 1 (unsigned) and the rated_voltage to 83.
The problem is that using values ​​above about 0x7F, I no longer feel variations in the vibration of the LRA, while with values ​​from 0 to 0x7F the vibration increases in accordance with the previous graph.
So I have some questions to understand if I'm doing something wrong.
Did I make a mistake in setting up registers?
Do I need to do an LRA calibration first?
Is the rated_voltage set to 83 correct? To calculate it I used formula (5) from the datasheet in section 8.5.2.1:

using: t (sample_time) = 300micros (default), frequency = 175Hz and V(LRA-CL_RMS) = 2V

the test sketch:

#include <Wire.h>
#include "Adafruit_DRV2605.h"

Adafruit_DRV2605 drv;

void setup() {
  Serial.begin(9600);
  Serial.println("DRV test");
  drv.begin();

  // Set Real-Time Playback mode
  drv.setMode(DRV2605_MODE_REALTIME);

  //set the rated_voltage
  drv.writeRegister8(0x16, 83);

  //set unidirectional
  drv.writeRegister8(0x1C, drv.readRegister8(0x1C) & 0x7F);

  //set DATA_FORMAT_RTP to 1 (unsigned)
  drv.writeRegister8(0x1D, drv.readRegister8(0x1D) | 0x08);
}

void loop() {
  for (int i = 0; i < 256; i = i + 16) {
    Serial.println(i, HEX);
    drv.setRealtimeValue(i);
    delay(500);
  }
}

LRA model: https://bit.ly/2Vxgy91
DRV2605L model: https://bit.ly/2TWzrBM
DRV2605L datasheet: https://bit.ly/3AgSeqZ

Thank you all
Riccardo

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.