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.

[参考译文] DRV8301:DRV 8301 SPI写入不工作

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/564675/drv8301-drv-8301-spi-write-not-working

部件号:DRV8301

我有Arduino Uno ,我开发了HTTSOP至DIP (带2.57 mm 节距管座) PCB板。 我在这个印刷电路板上焊接了DRV8301的微型芯片。 我已按照数据表中的参考设计所述连接所有外围设备。 我还在Arduino Uno板上将EN_GATE连接到5V,将VDD_SUPPLY连接到5V引脚。 我刚开始尝试与DRV进行SPI通信,因为我想在3-PWM模式下配置它。 我认为下面是要为此传递的寄存器值,请用0x08的值写入0x02,这样寄存器就变成了

0x1008,用于在3-PWM模式下配置DRV。

但不幸的是,我只能读取值,即使我通过SPI写入任何内容,然后尝试从这些值中读取,我也会得到默认值,即

Read 0x02 register命令为  

0x9000

我得到的回应是

0x9000

而不是  

将3-PWM模式的配置写入DRV后出现0x9008。  

请帮助!!

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

    请尝试读取寄存器0x01两次并报告两次结果。 第二读应该正确。

    请注意数据表的7.5 中描述的1.1 读取操作。

    如果您读取的值不正确,请提供第一次和第二次读取的范围捕获。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    #include <SPI.h> #define ss digitalWrite (10,低); #define NSS digitalWrite (10,高); const int ChipSelectPin = 10; const int EN_gate = 8; void setup(){ Serial.begin(9600); pinMode(ChipSelectPin,output); pinMode(EN_gate, output); digitalWrite (EN_gate,高); digitalWrite (ChipSelectPin,低); SPI.begin(); // DRV8301首先与MSB通信,具有低时钟极性,数据在上升边缘上移位 // SPI.beginTransaction(SPISettings(400万,MSBFIRST,SPI_MODE1); SPI.setBitOrder(MSBFIRST); SPI.setDataMode(SPI_MODE1); //空闲SPI CLK =0时,为Rx 锁定自定义锁定} void loop(){ readRegister (0x02); delay(5000); } 无符号int readRegister (字节寄存器){ uint16_t dataToSend = 0x0000,dataToRead =0; //位1 2 3 4 5 6 7 8 9 10 11 12 12 13 14 15 16 // R=1/W=0 |-Raddr--|----------- 数据----------------------- |// Fault=1/0|-Raddr--||----------- 数据----------------------- | dataToSend |=(0x0010 | Register); dataToSend <<= 11; Serial.print("sending read command:"); Serial.println(dataToSend,hex); SPI Serial.println(SPI.transfer16(dataToSend),hex); Serial.printn(nss.transfer16(data.transfer16(dataSend,hex) ;Tovoid =,dateteRegister) //位1 2 3 4 5 6 7 8 9 10 11 12 12 13 14 15 16 // R=1/W=0 |-Raddr--|----------- 数据----------------------- | dataToSend || Register ; dataToSend <<=11; dataToSend |= value; Serial.print("sending write command:"); Serial.println(dataToSend,hex); ss Serial.println(SPI.transfer16(dataToSend),hex);//发送值记录到register中 //print://选择串 行回写<spherit:</sphere:</spect-spect-spect()

    您好,Rick:

        以上是 我 用于打印接收到两次的SPI数据的Arduino代码。 随附  的是DSO I观察到的数字,即使尝试了半个多小时,miso针脚上也没有信号。 我测量到DRV8301的电源电流,当仅打开SPI电源时,在24V时大约需要50mA。 DRV可在15分钟内将温度加热至130 C。 我没有将任何MOSFET电路连接至DRV,但其他电路与参考设计中所示相同,仍在加热。

    在图中,最顶部的信号是时钟,第二个是MOSI (来自微控制器),第三个是Miso,第四个是slaveSelect。

     我缺少什么?

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

    请参阅以下文章: e2e.ti.com/.../172.3924万

    这与您描述的内容相似。 请务必确保NSC正按照数据表7.5 .1.1 部分第21页中的说明“成帧”SPI命令。

    另外,请缩小以捕获两个SPI读取事务。 其中一个读取应将位D10设置为1。