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:PWM 调制

Guru**** 2481465 points
Other Parts Discussed in Thread: DRV2605L

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1217267/drv2605l-pwm-modulation

器件型号:DRV2605L

您好!  

使用 DRV2605L 控制 LRA 电机、我想更改振幅类似正弦函数(在100ms 内逐渐减弱)。 我认为是 PWM 占空比调制  

可以更改振幅。 因为我想在特定的时间(100ms)内设计一个振幅变化的图形、所以我使用了 计时器中断寄存器(Arduino)。  

不过、振幅不再发生变化。  

下面是代码:(我希望它可以帮助您理解)  

#include
#include
#define HMD_ADDR 0x5A

SFE_HMD_DRV2605L HMD;

const int analogOutPin = 9
volatile int pwmvalue = 0
volatile int 方向= 10

void setupTimer1(){
 noInterrupts ();
 //清除寄存器
 TCCR1A = 0
 TCCR1B = 0
 TCNT1=0

 // 1000 Hz (16000000/((249+1)* 64)
 OCR1A = 249
 // CTC
 TCCR1B |=(1 << WGM12);
 //预分频系数64
 TCCR1B |=(1 << CS11)|(1 << CS10);
 //输出比较匹配中断启用
 TIMSK1 |=(1 << OCI1A);
 interrupts()
}

void setup(){
 Wire.begin();
 HMD.begin();
 HMD.Mode (0x03)
 HMD.writeDRV2605L (OVERDRIVECLAMP_REG、0xFF);
 HMD.writeDRV2605L (Control3_REG、0xA1);
 HMD.MotorSelect (0x86);//与反馈控制相关(地址:0x1A)
 HMD.Library(6)
 引脚模式(analogOutPin、输出);
 setupTimer1()

}

void loop(){}

void pwmStep(){
 analogWrite (analogOutPin、pwmvalue);
 pwmvalue +=方向;

 如果(pwmvalue==0){
  方向= 10
 }
 if (pwmvalue==255){
  Direction=-10
 }
}

ISR (Timer1_compa_vect){
 
  pwmStep()
 
  
 
}
要使用定时器中断寄存器,有什么需要考虑的吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kihun:

    您的想法是合理的。 在 PWM 滤波后、以正弦波的形状调制占空比应该会提供正弦波输出。 但是、我们不支持调试 Arduino 代码。 我们仅对器件本身提供支持。

    道歉
    Jeff McPherson

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

    对于这个问题、我想知道使用计时器中断控制是否可以应用于 DRV2605L。 当我创建该代码时、振幅没有改变。   

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

    使用 DRV2605L 控制 LRA 电机、我想更改振幅类似正弦函数(在100ms 内逐渐减弱)。 我认为是 PWM 占空比调制  

    可以更改振幅。 因为我想在特定的时间(100ms)内设计一个振幅变化的图形、所以我使用了 计时器中断寄存器(Arduino)。  

    不过、振幅不再发生变化。  

    [/报价]

    100ms 意味着正弦信号的频率是10Hz? 10Hz 对于 LRC 电机共振频率来说太低了。  

    计时器中断周期是多少? 您是否在调用一个 sine()数学函数来计算定时器中断函数中的 PWM 值?  

    布赖恩

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

    我希望输出电压(DRV2605L)在100ms 内像正弦函数那样从0更改为5、从5更改为0 (实际上不使用正弦函数)。  

    为此、我认为计时器中断可以设置特定(预期)的周期。 在我的示例代码中、我将计时器中断周期设置为1000Hz。 每次 计时器中断时、它都会增加或减少占空比值、以改变振幅(输出电压)。 不过、当我使用该计时器中断代码时、振幅不再发生改变。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但是,当我使用该计时器中断代码时,振幅不再改变。

    如果外部 MCU PWM 输出不变、那么这个问题与2605L 驱动器无关。 则需要调试 MCU 软件。

    布赖恩

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

    当然、我将 Arduino 输出连接到 DRV2605L IN 引脚。 通过更改 Arduino 的输出、我想如前面所述、更改 DRV2605L 输出。 但是、当我使用计时器中断代码来更改要提供给 DRV2605L 的 Arduino 输出时、DRV2605L 的输出(或 LRA 的振幅)不会更改。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但是当我使用定时器中断代码更改要提供给 DRV2605L 的 Arduino 输出时,DRV2605L (或 LRA 振幅)的输出不会更改。  [/报价]

    您未确认2605L 的 PWM 输入是否具有正确的信号。 很显然、如果 PWM 输入不更改、那么输出也是如此。  

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

    哪一种方法正确?  

    因为我已经根据 PWM 示例代码给出了正确的信号、以更改 SparkFun 的振幅。

    但是、这不使用计时器中断功能。 但当我使用它时、振幅不再发生变化。  

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

    您说的是驱动器 PWM 输出没有改变、但您没有说明驱动器 PWM 输入是否改变。

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

    根据我的理解,我改变了 Arduino 的输出,这是驱动程序的输入. 这意味着驱动器 PWM 输入也在变化。

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

    您是否通过示波器验证了这一点?

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

    当然、当我使用此类似代码来改变 LED 亮度时、效果很好。 这意味着 PWM 输入当然会发生变化。

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

    您是否看到或假设它在示波器上发生了变化? 为什么不只是说您已验证它在随着范围发生变化?

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

    好的、我看到了示波器。  

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

    尊敬的 Kihun:

    正如 Brian 和我说过的、这个问题似乎与 DRV2605L 无关。 他还正确地说、10Hz 对于驱动器来说太慢了。 我们在这里没有调试 Arduino 代码的专业知识、因此我建议使用 Arduino 专用社区来查找帮助。  

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

    它与 Arudino 代码问题无关。 我只是问、 IN/TRIG 是否具有特定的频率范围。  

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

    尊敬的 Kihun:

    数据表列出了 IN/TRIG 的建议范围为10kHz 至250kHz。

    此致、
    Jeff McPherson