主题中讨论的其他器件: LAUNCHXL-F280025C、 DRV8323、 BQ76952
工具与软件:
您好!
我有基于 launchxl-f280025c + boostxl-drv8323rs 组合的定制电路板、只是更改了 EN、SOMI 和 SIMO 引脚等微小引脚
。 | LaunchXL-F280025C + Boostxl-DRV8323RS | |
SPI-A 时钟 | GPIO_12_SPIA_CLK | GPIO_9_SPIA_CLK |
SPI-A (SOMI) | GPIO_13_SPIA_SOMI | GPIO_10_SPIA_SOMI |
SPI-A (SIMO) | GPIO_16_SPIA_SIMO | GPIO_11_SPIA_SIMO |
EN | GPIO_31_GPIO31 | GPIO_29_GPIO29 |
CS | GPIO_8_GPIO8 | GPIO_8_GPIO8 |
故障 | GPIO_34_GPIO34 | GPIO_34_GPIO34 |
1. HAL_setParams -> HAL_setupGPIO
在这个函数内部、有一个预定义符号 DRV_CS_GPIO、默认情况下会被绕过、这是我的第一个问题:CS 引脚在哪里设置为高电平和低电平? 因为在 DRV8323_readSPI 和 DRV8323_writeSPI 函数内部、CS 引脚也会 被旁路 ?
// M1_DRV_SCS #ifdef DRV_CS_GPIO GPIO_setPinConfig(GPIO_8_GPIO8); GPIO_writePin(8, 1); GPIO_setDirectionMode(8, GPIO_DIR_MODE_OUT); GPIO_setPadConfig(8, GPIO_PIN_TYPE_PULLUP); #else // M1_DRV_SCS (Use a wire->J2-18) GPIO_setPinConfig(GPIO_8_GPIO8); GPIO_setDirectionMode(8, GPIO_DIR_MODE_IN); GPIO_setPadConfig(8, GPIO_PIN_TYPE_STD); #endif // GPIO12->M1_DRV_SCLK* GPIO_setPinConfig(GPIO_12_SPIA_CLK); GPIO_setDirectionMode(12, GPIO_DIR_MODE_OUT); GPIO_setPadConfig(12, GPIO_PIN_TYPE_PULLUP); // GPIO13->SPIA_SOMI->M1_DRV_SDO* GPIO_setPinConfig(GPIO_13_SPIA_SOMI); GPIO_setDirectionMode(13, GPIO_DIR_MODE_IN); GPIO_setPadConfig(13, GPIO_PIN_TYPE_PULLUP); // GPIO16->SPIA_SIMO->M1_DRV_SDI* GPIO_setPinConfig(GPIO_16_SPIA_SIMO); GPIO_setDirectionMode(16, GPIO_DIR_MODE_IN); GPIO_setPadConfig(16, GPIO_PIN_TYPE_PULLUP); // GPIO31->M1_DRV_ENABLE* GPIO_setPinConfig(GPIO_31_GPIO31); GPIO_writePin(31, 1); GPIO_setDirectionMode(31, GPIO_DIR_MODE_OUT); GPIO_setPadConfig(31, GPIO_PIN_TYPE_STD);
2. HAL_MTR_setGateDriver -> HAL_setupGate:
EN 和 CS 分别分配给 gpioNumber_EN 和 gpioNumber_CS
3. HAL_MTR_setGateDriver -> HAL_enableDRV -> DRVIC_ENABLE:
EN 引脚设置为1和 DRV 使能、电机可以旋转和识别。
在此函数内、DRV8323_readSPI (Handle、DRV8323_ADDRESS_STATUS_0)和 DRV8323_STATUS00_FAULT_BITS)!= 0无法判断芯片通信是否正常、因为 SPI 失败失败位是否为0
4. HAL_setupDRVSPI -> DRVIC_setupSPI
在该函数内部、为了立即读取控制寄存器3、它应该更新 drv8323Vars->ctrlReg03.all
但最后它保持为0
//读取控制寄存器3
//所有位默认值都为1、IDRIVEP_HS = 1000mA、IDRIVEN_HS = 2000mA
drvRegAddr = DRV8323_ADDRESS_CONTROL_3;
drvDataNew = DRV8323_readSPI (handle、drvRegAddr);
drv8323Vars->ctrlReg03.all = drvDataNew;
5.如前所述、在 DRV8323_readSPI 和 DRV8323_writeSPI 内部、由于绕过该引脚、因而无法选择操作
#if defined (DRV_CS_GPIO)
GPIO_writePin (obj->gpioNumber_CS、0);
GPIO_writePin (obj->gpioNumber_CS、0);
#endif // DRV_CS_GPIO
CS 引脚操作在哪里发生? 出什么问题了?
Danny