Other Parts Discussed in Thread: DRV8353RS-EVM
器件型号: DRV8353RS-EVM
尊敬的小组:
SPI 写入方法存在问题、如数据表中所述。 在写入过程中、文本中提出 nSCS 的几个问题是完全无效的、无法以任何串行频率 (IE、30/KHZ 60MHz 9KHz、12kHz、16KHz, 65kHz 等 数据表似乎需要更新、并且状态不会在 RS 版本中增加 nSCS 引脚? 否则、带有 SDI 数据的控制 DRV 寄存器将在字写入之间以>400ns 的时间进行捕获和传播。
然而、当我们在写入多个控制寄存器(位拆裂)后尝试进行任何循环读取时、SDO 移出的数据会以任何 STE 时钟速率返回奇数值。 没有 SDO 回读的一次性 SDI 写入似乎成功。 根据分流放大器电流反馈的分频方式、将增益 10 设置为死区 100ns 和 HS/LS 电流强度、通过示波器探头捕获查看结果。
更大的问题是控制寄存器 0x02 第 2 位正在设置 SDI 捕获并在电机运行期间传播、但半桥不会进入高阻抗状态、PWM 模式 00b 6x。 如果 MCU PWM 输出设为高阻抗、则 DRV 输出不遵循输入引脚的驱动状态!
一些背景:drv8353rs 由 UMCSDK v5.03 drv8353s.c/h 文件通过 CPUTM1 和一次性 SPI 字命令以秒为间隔驱动、在 CCS 调试表达式窗口中执行捕获和传播。 但是、当在电机运行时设置滑行控制位寄存器 0x02h 时、drv8353rs 半桥不会进入高阻抗、直接进行 SPI 写入(如下所示)似乎会制动 PWM 驱动输出。
问题:
1.如果在 Rx 阻塞 FIFO 或 RX 缓冲器读取模式下 MCU SPI 外设读取 SDO 移出数据、为什么 SPI SDO 控制寄存器写入看起来会捕获和传播、但随机改变奇数值、而在写入期间 nSCS 引脚上升时间大于 400ns? 通过 XDS110 调试探针在 CCS 调试表达式窗口中将读取命令 bool 位设置为 0x1 时、下面显示的第二个代码示例?
2.为什么对控制寄存器 0x02h 滑行位 2 进行单次写入似乎会导致半桥上发生制动操作! 数据表(SLVSDY6A–2018 年 8 月–2019 年 6 月修订)是否包含不正确的信息?
3.为什么在写入 RS 器件类期间、这个热门器件数据表未附加关于 nSCS SPI 控制引脚的正确讨论? 将 RS 器件上的 nSCS 引脚增大至>400ns 会导致 SDO 和 SDI 数据在任何 MCU SDI 频率设置或 SPI 接收器模式、Rx 缓冲器或非/阻断 FIFO 中被改编?
/* Enable drv8353rs to disable PWM drive gates */
drvicVars_M1.ctrlReg02.bit.COAST = true;
// Manual write DRV8353RS control registers
drvicVars_M1.manWriteCmd = 1;
HAL_writeDRVData(halHandle_M1, &drvicVars_M1);
// Wait 1ms
DEVICE_DELAY_US(1000);
// Manual write DRV8353RS control registers
drvicVars_M1.manWriteCmd = 1;
HAL_writeDRVData(halHandle_M1, &drvicVars_M1);
/* One second timer for drv8353rs module registers */
if(HAL_getCPUTimerStatus(halHandle_M1, HAL_CPU_TIMER1) &&
(motorVars_M1.motorState == MOTOR_STOP_IDLE))
{
/* clear overflow flag */
HAL_clearCPUTimerFlag(halHandle_M1, HAL_CPU_TIMER1);
//
CPUTimer_reloadTimerCounter(HAL_CPU_TIMER1);
//
drvicVars_M1.ctrlReg03.bit.IDRIVEP_HS = DRV8353_ISOUR_HS_0P150_A; //820mA DRV8353_ISOUR_HS_0P820_A
drvicVars_M1.ctrlReg03.bit.IDRIVEN_HS = DRV8353_ISINK_HS_1P100_A; //640mA DRV8353_ISINK_HS_1P640_A
drvicVars_M1.ctrlReg04.bit.IDRIVEP_LS = DRV8353_ISOUR_LS_0P150_A; //820mA DRV8353_ISOUR_LS_0P820_A
drvicVars_M1.ctrlReg04.bit.IDRIVEN_LS = DRV8353_ISINK_LS_0P600_A; //640mA DRV8353_ISINK_LS_1P640_A
drvicVars_M1.ctrlReg05.bit.VDS_LVL = DRV8353_VDS_LEVEL_1P500_V;
drvicVars_M1.ctrlReg05.bit.OCP_MODE = DRV8353_LATCHED_SHUTDOWN;
drvicVars_M1.ctrlReg05.bit.DEAD_TIME = DRV8353_DEADTIME_100_NS;
drvicVars_M1.ctrlReg06.bit.CSA_GAIN = DRV8353_Gain_10VpV;
drvicVars_M1.ctrlReg06.bit.LS_REF = false;
drvicVars_M1.ctrlReg06.bit.VREF_DIV = true;
drvicVars_M1.ctrlReg06.bit.CSA_FET = false;
drvicVars_M1.ctrlReg02.bit.OCP_ACT = true; // All NEXFets shut down in OVC condition
drvicVars_M1.ctrlReg02.bit.COAST = false;
//
drvicVars_M1.writeCmd = 1;
HAL_writeDRVData(motorHandle_M1->halMtrHandle, &drvicVars_M1);
//
drvicVars_M1.readCmd = 1;
HAL_readDRVData(motorHandle_M1->halMtrHandle, &drvicVars_M1);
}



