This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] DRV2605L:Vybronics VLV101040A LRA 电机变得非常热

Guru**** 2369410 points
Other Parts Discussed in Thread: DRV2605L, DRV2624
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1503424/drv2605l-vybronics-vlv101040a-lra-motors-getting-extremely-hot

部件号:DRV2605L
主题中讨论的其他部件: DRV2605DRV2624

工具/软件:

大家好、我将 使用 4个 DRV2605L 连续驱动4个 LRA 电机、并通过 PWM 输入持续大约2小时。 我已经发布了一个嗅探我的代码。 它的配置使1个电机在 特定周期内以250 Hz 的频率振动一次、静置667ms。

但是、一段时间后、这些电机会开始变热。 我已经将占空比从180降低到140。 但是、根据数据表、一旦该值变为127、就会向电机提供0伏电压。 我如何解决这个问题。 流经电机的电流似乎过大。 我曾经使用过分压器,这是有效的,但出于效率的原因,我很愿意不这样做。 能否进一步降低占空比?

请告诉我您的任何建议:

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

Adafruit_DRV2605 drv0;
Adafruit_DRV2605 drv1;
Adafruit_DRV2605 drv2;
Adafruit_DRV2605 drv3;

const int PWM_CHANNEL0 = 0;
const int PWM_CHANNEL1 = 1;
const int PWM_CHANNEL2 = 2;
const int PWM_CHANNEL3 = 3;
const int PWM_FREQ = 32000;
const int PWM_RESOLUTION = 8;
const int JITTER = 23.5;
int dutyCycle = 140;

const int DRV1 = 3;
const int DRV2 = 4;
const int DRV3 = 5;
const int DRV4 = 10;

int perms[24][4] = {
  {0, 1, 2, 3}, {1, 0, 2, 3}, {2, 0, 1, 3}, {0, 2, 1, 3},
  {1, 2, 0, 3}, {2, 1, 0, 3}, {2, 1, 3, 0}, {1, 2, 3, 0},
  {3, 2, 1, 0}, {2, 3, 1, 0}, {1, 3, 2, 0}, {3, 1, 2, 0},
  {3, 0, 2, 1}, {0, 3, 2, 1}, {2, 3, 0, 1}, {3, 2, 0, 1},
  {0, 2, 3, 1}, {2, 0, 3, 1}, {1, 0, 3, 2}, {0, 1, 3, 2},
  {3, 1, 0, 2}, {1, 3, 0, 2}, {0, 3, 1, 2}, {3, 0, 1, 2}
};

void TCA9548A(uint8_t bus){
  Wire.beginTransmission(0x70);
  Wire.write(1 << bus);
  Wire.endTransmission();
}

void setup() {
  Wire.begin(6,7);
  TCA9548A(0);
  delay(50);

  while (! drv0.begin()) {
    delay(5000);
  }
  drv0.useLRA();
  drv0.setMode(3);
  drv0.writeRegister8(0x1D, 161);

  TCA9548A(1);
  while (! drv1.begin()) {
    delay(5000);
  }
  drv1.useLRA();
  drv1.setMode(3);
  drv1.writeRegister8(0x1D, 161);

  TCA9548A(2);
  while (! drv2.begin()) {
    delay(5000);
  }
  drv2.useLRA();
  drv2.setMode(3);
  drv2.writeRegister8(0x1D, 161);

  TCA9548A(3);
  while (! drv3.begin()) {
    delay(5000);
  }
  drv3.useLRA();
  drv3.setMode(3);
  drv3.writeRegister8(0x1D, 161);

  ledcSetup(PWM_CHANNEL1, PWM_FREQ, PWM_RESOLUTION);
  ledcSetup(PWM_CHANNEL0, PWM_FREQ, PWM_RESOLUTION);
  ledcSetup(PWM_CHANNEL2, PWM_FREQ, PWM_RESOLUTION);
  ledcSetup(PWM_CHANNEL3, PWM_FREQ, PWM_RESOLUTION);

  ledcAttachPin(DRV1, PWM_CHANNEL0);
  ledcAttachPin(DRV2, PWM_CHANNEL1);
  ledcAttachPin(DRV3, PWM_CHANNEL2);
  ledcAttachPin(DRV4, PWM_CHANNEL3);
}

void loop() {
  for(int period = 1; period < 4; period++){
    int pattern = random(25);
    for(int j = 0; j < 4; j++){
      ledcWrite(perms[pattern][j], dutyCycle);
      delay(100);
      ledcWrite(perms[pattern][j], 0);
      delay(66);
    }
  }
  delay(666);
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    感谢您的联系。 让我看看我是否可以在这里帮助-这是一个很长的周期时间! 您是否根据 Vybronics 网站以开环方式驱动此 LRA?

    有时、我们的闭环算法会遇到 LRA 问题。 闭环模式是最有效的驱动方式(也应提高热性能)。 缺点是如果它有效、则会使用算法将频率固定到谐振中。  

    您进一步远离谐振应增加 LRA 阻抗并减少电流消耗(帮助散热)。  除此之外、我认为唯一的选择是像您提到的那样降低电压/占空比。

    您有机会查看 DRV2624吗? 该器件在寄存器映射中有一个正弦波选项、有助于散热。 典型波的波形比正弦波形状更接近。