主题中讨论的其他部件: DRV2605、 DRV2624
工具/软件:
大家好、我将 使用 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); }