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.

[参考译文] DRV8303:电流感应无响应问题

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1128036/drv8303-problem-with-current-sense-being-unresponsive

器件型号:DRV8303

大家好、

以下是客户提出的问题、可能需要您的帮助:

客户目前正在使用 DRV8303驱动 BLDC 电机。  电流感应存在问题。 如果电路板上未连接任何电机、并且未连接电机电压(PVDD)、则电流感测输出(SO1和 SO2)是正确的。

他们检查了 SN1和 SP1以及 SN2和 SP2是否正好为0V、这是正确的、因为没有电流流流过分流电阻器。 基准输入 REF 恰好为3.3V。SO1和 SO2引脚的输出为1.65V、这是正常现象。

要测试放大器是否正常工作、请移除连接到 SN1和 SP1引脚的分流电阻器、并手动向 SN1引脚施加电压(0.100V)、该电压本应会被放大、 而 SO1 (OUTPUT)引脚上的电压将降至0.65V (根据公式[1.65-(0.1*10)]将 C.S.A.的增益设置为10V)。 但是、SO1引脚上的电压保持为1.65V。 C.S.A 的输出对输入无响应。

原理图和电路如下:
返修: https://drive.google.com/file/d/1lv5I7GT6esK-80-wN8fSaVhWlB1ejIwC/view?usp=sharing
Sch: https://drive.google.com/file/d/1lvBKcgRM2TCG_ksn0xLjSbLgVWraZkdn/view?usp=sharing

代码如下所示:

#include <SPI.h>

#define INHA PA8
#define INLA PA9
#define SO1 PB1

#define INHB PA10
#define INLB PB6
#define SO2 PB0

#define INHC PB7
#define INLC PB8
#define LED PC13

#define EN_GATE PB12

#define NOCTW PB14
#define NFAULT PB13

#define chipSelectPin PA4
word data;

void changeSPI3PWM()
{
digitalWrite(chipSelectPin, LOW); // manually take CSN low for SPI_1 transmission
data = SPI.transfer16(0b0001000000111000); //0 0010 00000111000
digitalWrite(chipSelectPin, HIGH);
}

void changeCurrentSense() {
digitalWrite(chipSelectPin, LOW);
data = SPI.transfer16(0b000110000000000); //0 0011 0000000000
digitalWrite(chipSelectPin, HIGH);
}

void setup() {
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE1);
SPI.setClockDivider(SPI_CLOCK_DIV16);
pinMode(chipSelectPin, OUTPUT);
Serial.begin(115200);
pinMode(INHA, OUTPUT);
pinMode(INLA, INPUT);
pinMode(SO1, INPUT);

pinMode(INHB, OUTPUT);
pinMode(INLB, INPUT);
pinMode(SO2, INPUT);

pinMode(INHC, OUTPUT);
pinMode(INLC, INPUT);

pinMode(EN_GATE, OUTPUT);
pinMode(PB4, OUTPUT);

pinMode(NOCTW, INPUT);
pinMode(NFAULT, INPUT);

pinMode(LED, OUTPUT);

digitalWrite(PB4, LOW); //PB4 is the DC_CAL PIN
digitalWrite(EN_GATE, HIGH);


changeSPI3PWM();
changeCurrentSense();
}

void loop() {
digitalWrite(INHB, HIGH);
digitalWrite(INHA, HIGH);
digitalWrite(INHC, HIGH);

if (digitalRead(NFAULT) == LOW) {
Serial.println("NFault low");
}

if (digitalRead(NOCTW) == LOW) {
Serial.println("NOCTW low");
}

Serial.print(Current_Calculation(analogRead(SO1) / 4096. *3.3), 10);
Serial.print(" ");
Serial.println(Current_Calculation(analogRead(SO2) / 4096. *3.3), 10);
}

double Current_Calculation(double RawVolt) {
const double K = 2. ;
const double G = 80.;
const double VREF = 3.3;
return (VREF - (K * RawVolt)) / (G * K); //general solve
}

出现此错误的最可能原因是什么? 您可以帮助检查此案例吗? 谢谢。

此致、

樱桃

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

    您好、Cherry、

    这听起来像是启用了直流校准。 这会将 SPX-SNx 输入对地短路、从而导致 CSA 引脚上的 VREF/2输出。  

    请检查 DC_CAL 引脚(PB4)是否设置为低电平、SPI 中的 DC_CAL_CHX 寄存器是否设置为0b。  

    谢谢、
    Aaron

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

    您好、Aaron、

    感谢您的支持!

    客户确保将 DC_CAL 引脚(PB4)设置为低电平、并在  发生该问题时禁用 SPI 中的 DC_CAL 寄存器。

    digitalWrite (PB4、low);//PB4是 DC_CAL 引脚

    是否有任何其他可能的原因与此问题相关?

    谢谢、此致、

    樱桃

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

    樱桃、您好!

    感谢您分享这些信息。 我将与团队协商、并在本周结束前提供反馈。

    此致、

    Akshay

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

    樱桃、您好!

     

    我希望客户测量 SNX 与 GND 和 SPx 与 GND 之间的电阻。

     

    我们还希望客户直接测量 DC_CAL 引脚、同时在 SNX 和 SPx 上施加100mV 电压、而不仅仅是在 SNx 和接地端施加电压。 程序发送的内容和引脚上实际发生的情况可能会有所不同。

     

    此致、

    Akshay