主题中讨论的其他器件:DRV8323、 LAUNCHXL-F280025C
工具与软件:
您好!
我的定制电路板使用 DRV8323RS、使用 GPIO11作为 CS 引脚、下载 universal_motorcontrol_lab、运行调试以查看它是否可以与 DRV 芯片通信、我所做的就是:
1.设置 GPIO、 这是我的定制电路板、我 使用 GPIO11作为 CS 引脚
GPIO_setPinConfig (GPIO_11_SPIA_STE);
GPIO_setDirectionMode (11、GPIO_DIR_MODE_OUT);
GPIO_setPadConfig (11、GPIO_PIN_TYPE_STD);
2.在 DRV8323_setupSPI 函数内、 我插入代码以确保可以加载默认值(抱歉我没有 逻辑分析仪)
drvDataNew0至 drvDataNew6用于 statReg00至 statReg06
调用 DRV8323_setupSPI 后、其默认值已无问题地读取(根据 DRV 的手册)
drvDataNew0 = 0
drvDataNew1 = 0
drvDataNew2 = 0
drvDataNew3 = 1023
drvDataNew4 = 2047
drvDataNew5 = 345
drvDataNew6 = 643
void DRV8323_setupSPI(DRV8323_Handle handle, DRV8323_VARS_t *drv8323Vars) { DRV8323_Address_e drvRegAddr; uint16_t drvDataNew; // Set Default Values // Manual Read/Write drv8323Vars->manReadAddr = 0; drv8323Vars->manReadData = 0; drv8323Vars->manReadCmd = false; drv8323Vars->manWriteAddr = 0; drv8323Vars->manWriteData = 0; drv8323Vars->manWriteCmd = false; // Read/Write drv8323Vars->readCmd = false; drv8323Vars->writeCmd = false; // Read registers for default values // Read Status Register 0 drvRegAddr = DRV8323_ADDRESS_STATUS_0; drvDataNew = DRV8323_readSPI(handle, drvRegAddr); drv8323Vars->statReg00.all = drvDataNew; drvDataNew0 = drvDataNew; // Read Status Register 1 drvRegAddr = DRV8323_ADDRESS_STATUS_1; drvDataNew = DRV8323_readSPI(handle, drvRegAddr); drv8323Vars->statReg01.all = drvDataNew; drvDataNew1 = drvDataNew; // Read Control Register 2 // all bit default value are 0, 6*PWM Mode drvRegAddr = DRV8323_ADDRESS_CONTROL_2; drvDataNew = DRV8323_readSPI(handle, drvRegAddr); drv8323Vars->ctrlReg02.all = drvDataNew; drvDataNew2 = drvDataNew; // Read Control Register 3 // all bit default value are 1, IDRIVEP_HS=1000mA, IDRIVEN_HS = 2000mA drvRegAddr = DRV8323_ADDRESS_CONTROL_3; drvDataNew = DRV8323_readSPI(handle, drvRegAddr); drv8323Vars->ctrlReg03.all = drvDataNew; drvDataNew3 = drvDataNew; // Read Control Register 4 // all bit default value are 1, TDRIVE=400ns, IDRIVEP_LS=1000mA, IDRIVEN_LS = 2000mA drvRegAddr = DRV8323_ADDRESS_CONTROL_4; drvDataNew = DRV8323_readSPI(handle, drvRegAddr); drv8323Vars->ctrlReg04.all = drvDataNew; drvDataNew4 = drvDataNew; // Read Control Register 5 // DEAD_TIME=100ns, OCP_DEG=4us, VDS_LVL=0.75V drvRegAddr = DRV8323_ADDRESS_CONTROL_5; drvDataNew = DRV8323_readSPI(handle, drvRegAddr); drv8323Vars->ctrlReg05.all = drvDataNew; drvDataNew5 = drvDataNew; // Read Control Register 6 // DEAD_TIME=100ns, OCP_DEG=4us, VDS_LVL=0.75V drvRegAddr = DRV8323_ADDRESS_CONTROL_6; drvDataNew = DRV8323_readSPI(handle, drvRegAddr); drv8323Vars->ctrlReg06.all = drvDataNew; drvDataNew6 = drvDataNew; return; } // end of DRV8323_setupSPI() function
到目前为止、我确信与 DRV 的通信是可以的、尤其是 GPIO CS 引脚工作正常!!!
================================
=== 再次读取===时会发生奇怪的事情
================================
尝试通过 main.c 循环内的 HAL_readDRVData (motorHandle_M1->halMtrHandle、&drvicVars_M1)读取最新更新值时
并通过 设置 drv8323Vars->readCmd = true 来强制执行读取操作;
void DRV8323_readData(DRV8323_Handle handle, DRV8323_VARS_t *drv8323Vars) { DRV8323_Address_e drvRegAddr; uint16_t drvDataNew; drv8323Vars->readCmd = true; if(drv8323Vars->readCmd) { // Read registers for default values // Read Status Register 0 drvRegAddr = DRV8323_ADDRESS_STATUS_0; drvDataNew = DRV8323_readSPI(handle, drvRegAddr); drv8323Vars->statReg00.all = drvDataNew; // Read Status Register 1 drvRegAddr = DRV8323_ADDRESS_STATUS_1; drvDataNew = DRV8323_readSPI(handle, drvRegAddr); drv8323Vars->statReg01.all = drvDataNew; // Read Control Register 2 drvRegAddr = DRV8323_ADDRESS_CONTROL_2; drvDataNew = DRV8323_readSPI(handle, drvRegAddr); drv8323Vars->ctrlReg02.all = drvDataNew; // Read Control Register 3 drvRegAddr = DRV8323_ADDRESS_CONTROL_3; drvDataNew = DRV8323_readSPI(handle, drvRegAddr); drv8323Vars->ctrlReg03.all = drvDataNew; // Read Control Register 4 drvRegAddr = DRV8323_ADDRESS_CONTROL_4; drvDataNew = DRV8323_readSPI(handle, drvRegAddr); drv8323Vars->ctrlReg04.all = drvDataNew; // Read Control Register 5 drvRegAddr = DRV8323_ADDRESS_CONTROL_5; drvDataNew = DRV8323_readSPI(handle, drvRegAddr); drv8323Vars->ctrlReg05.all = drvDataNew; // Read Control Register 6 drvRegAddr = DRV8323_ADDRESS_CONTROL_6; drvDataNew = DRV8323_readSPI(handle, drvRegAddr); drv8323Vars->ctrlReg06.all = drvDataNew; drv8323Vars->readCmd = false; } // Manual read from the DRV8323 if(drv8323Vars->manReadCmd) { // Custom Read drvRegAddr = (DRV8323_Address_e)(drv8323Vars->manReadAddr << 11); drvDataNew = DRV8323_readSPI(handle, drvRegAddr); drv8323Vars->manReadData = drvDataNew; drv8323Vars->manReadCmd = false; } return; } // end of DRV8323_readData() function
它返回 drvicVars_M1值:
statReg00 = 0
statReg01 = 0
statReg02 = 0
statReg03 = 769
statReg04 = 1
statReg05 = 1
statReg00 = 1
我的结论是当再次读取值,这是原因设置腐败...
如果阅读过程有任何错误、请提供帮助?
Danny