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.
工具与软件:
您好!
我正在使用 TMS320F28379D 和 DRV8305。 我使用 EPWM4、EPWM5和 EPWM6 (即 GPIO6&7、GPIO8&9、GPIO10&11)在开环中驱动三相 BLDC 电机。 但是、每当我加载并恢复程序时、都会收到以下错误消息。
C28xx_CPU1:错误:(错误-1135 @ 0x8B25)调试探针报告了错误。 确认调试探针配置和连接、重置调试探针、然后重试此操作。 (仿真包12.7.0.00130)
每当我注释掉 EPWM6的 ePWM_setTimeBasePeriod、我将从 EPWM4和 EPWM5的控制器中获取调制信号、EPWM6是恒定的高电平信号。
这可能是什么原因造成的?
EPWM_setTimeBasePeriod(EPWM4_BASE, 2500); EPWM_setTimeBasePeriod(EPWM5_BASE, 2500); // EPWM_setTimeBasePeriod(EPWM6_BASE, 2500);
我已经测试了 JTAG 连接并且通过了测试、GPIO 切换等基本程序以及其他操作都可以正常运行。
我已经完成了一些其他帖子,但无法解决问题,测试连接的屏幕截图:
我也在尝试再次连接、在遇到错误后能够通过控制台中进行连接、我只得到了
C28xx_CPU1:GEL 输出:
存储器映射初始化完成
我尝试了加载程序、不过.out 文件、但在加载并再次按下"Resume"后、我再次遇到相同的错误:
我尝试过闪烁程序、它运行正常。
你(们)好
您是否能够在失去连接时尝试仔细检查 JTAG 信号?
您看到的行为通常表明电机或电源造成的 EMI 过多、使得 JTAG 无法使用。 修复方法是减少 EMI 或重新路由 JTAG 信号。
此致、
Ben Collier
您好、 Benjamin Collier
PFB JTAG 信号、TDO 和 TRST。
加载程序后、我们将持续看到以下情况:
绿色:TRST、黄色:TDO
按下"恢复"后、我们看到两个通道上都有高电平信号。
您好!
您的示波器是否受带宽限制? TCK 和 TMS 是什么样子的?
如果您在恢复时执行单次捕获、您在 TCK 或 TDI 上没有看到任何脉冲?
此致、
Ben Collier
尊敬的 Benjamin:
我们的示波器存在一些限制、因此我们仅探测 TRST 和 TDO、将探测所有四个 JTAG 信号并进行 POST。
同时、您能否澄清一些问题:
您好!
[报价 userid="513473" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1392930/c28xx_cpu1-error-error--1135-0x8b25/5337496 #5337496"]这将取决于噪声的糟糕程度。
我们尝试刷写程序、但是我们收到一个错误、.cinit 的大小对于该闪存来说太大、这是 FLASHB。 所以、我们在连接器文件中进行了修改、并使其实现了 FLASHD 和编译的代码。 但是、我们无法在 GPIO 引脚上看到输出。 仅供参考、当我们在 RAM 中加载程序时、程序会正常工作、我们可以看到输出、因此代码会正常工作(不过、如前所述、仅当 GPIO115引脚为低电平时)。 在闪存中刷写程序时,我们还观察到电流消耗从0.18A 跃升到0.7A。[/报价]您将需要根据程序在闪存中的位置更改您的 codestart。
您好!
1.我很难确定您的链接器 CMD 文件是否能正常工作,我看不到任何明显的问题。
2.我不知道为什么在下电上电后 GPIO 不能按预期工作、即使 PWM 信号是这样。
请尝试在尝试刷写新代码时将器件置于等待引导模式。 当程序运行时、您可能会遇到闪烁问题、因为它会产生大量噪音。
谢谢!
Ben Collier
您好、 Benjamin Collier
1.我认为链接器 CMD 文件工作正常、因为下电上电后可以看到 ePWM 和 GPIO 的预期输出。
2.
[报价 userid="531788" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1392930/c28xx_cpu1-error-error--1135-0x8b25/5348054 #5348054"]我不确定为什么下电上电后您的 GPIO 不能按预期工作(即使 PWM 信号正常)。 [报价]此处的校正是在下电上电后、我的 PWM 信号和 GPIO 正常工作。 在我之前的回复中、看到最后一个图形、它一直保持高电平、之前我无法将其设置为高电平。
3. 现在的问题是、DRV8305没有输出、由于 JTAG 无法正常工作、如何读取故障 从 DRV8305到 SPI 寄存器数据、因为这将告诉我为什么 DRV8305没有输出、对吗?
4.我会尝试将器件置于等待模式、然后刷写、并更新结果。
尊敬的 Gautham:
您使用 DCSM 是否正确? 等待引导模式解决方案仅在使用安全性时适用。
谢谢!
Luke
尊敬的 Luke:
1.
"您使用 DCSM 是否正确? "
如何验证?
2.我已经验证过、 刚好在我对控制器输出进行编程后不符合预期、但是在下电上电后、控制器的输出符合预期、我可以看到启用 DRV8305的 EN_GATE 的 PWM 信号和 GPIO 引脚也如预期为高电平。 但是、DRV8305没有输出。 由于我无法使用 JTAG 进行连接、如何通过 SPI 读取 DRV8305的故障寄存器、从而知道为什么不从 DRV8305获取输出。 感谢任何帮助。
尊敬的 Gautham:
我的错、这个问题与 DCSM 无关。
要澄清、现在的问题是您需要读取从 DRV8305发送到 C2000器件的 SPI 寄存器中的值、对吗? 您能否探测 SPI 引脚以检查正在发送的消息?
谢谢!
Luke
尊敬的 Luke:
从我之前的帖子中可以看到、当我们在 CPU RAM 中转储程序时、我们面临 JTAG 问题。因此、为了规避此问题、我已开始将程序直接刷写到闪存中。
现在、程序在控制器中运行后、我们无法访问 JTAG、这可能是由于噪声问题(Benjamin 在之前的文章中突出显示)、因此无法查看控制器正在读取的内容。
您能否建议使用另一种通过 SPI 读取寄存器的方法? 我目前正在尝试读取 SPI 寄存器、然后通过切换 GPIO 引脚来发送这些寄存器的值。 FIR 示例、我正在读取 DRV8305中0x01处的寄存器、然后、控制器读取的16位值、通过切换引脚来确定发生了哪种类型的故障、持续将其发送到一个 GPIO 引脚。 寄存器执行该操作。
这是一种非常粗略的方法、这种方法对吗?
您好!
我可以在定制电路板上探测 SPI 线路(供参考)、 我使用 ***、因为 Pine 122,123,124和125连接到 DRV8305的 SPI 通道。 我的问题分为两部分。
DRV8305数据表规定的 模式应为1、我已在代码中进行相同设置。 我观察到 MOSI 信号看起来与模式1中设置的不同、但我的 MISO 信号与模式1中相同。 您能否验证我的部分 SPI 代码并确认我从 DRV8305接收的数据是否正确?
#include "driverlib.h" #include "device.h" #include "board.h" #include "epwm.h" #include "math.h" // // Globals // #define DRV8305_FAULT_STATUS_1 0x8800 //1000 1000 0000 0000 #define DRV8305_FAULT_STATUS_2 0x9000 //1001 0000 0000 0000 #define DRV8305_FAULT_STATUS_3 0x9800 //1001 1000 0000 0000 #define DRV8305_VDS_STATUS 0xA000 //1010 0000 0000 0000 uint16_t faultStatus1; // // Some declarations // void main(void) { // Some device initialization codes initSPIC(); for(;;) { faultStatus1 = readSPIRegister(DRV8305_VDS_STATUS); sendFaultStatus(faultStatus1); } } void initSPIC(void) { // Ensure SPI-C is disabled before configuration SPI_disableModule(SPIC_BASE); // Configure GPIOs for *** using predefined mappings GPIO_setPinConfig(GPIO_122_SPISIMOC); // Set GPIO122 as *** SIMO GPIO_setPinConfig(GPIO_123_SPISOMIC); // Set GPIO123 as *** SOMI GPIO_setPinConfig(GPIO_124_SPICLKC); // Set GPIO124 as *** CLK GPIO_setPinConfig(GPIO_125_SPISTEC); // Set GPIO125 as *** STE // Configure SPI in master mode SPI_setConfig(SPIC_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA1, SPI_MODE_MASTER, 500000, 16); SPI_enableFIFO(SPIC_BASE); SPI_enableModule(SPIC_BASE); } uint16_t readSPIRegister(uint16_t address) { uint16_t receivedData; // Send the address to the DRV8305 SPI_writeDataBlockingFIFO(SPIC_BASE, address); // Read the received data receivedData = SPI_readDataBlockingFIFO(SPIC_BASE); return receivedData; } void sendFaultStatus(uint16_t faultStatus) { GPIO_writePin(119, (faultStatus & 0x01)); // Example: toggle based on LSB } //My interrupt code for generating pwm
下面是使用示波器探测的 SCLK、MOSI 和 MISO 输出。 注:目前我只能访问2个探头。
故障寄存器0x01 (DRV8305_FAULT_STATUS_1)
黄色:时钟、橙色:MOSI 黄色:时钟、橙色:MISO
故障寄存器0x02 (DRV8305_FAULT_STATUS_2)
黄色:时钟、橙色:MOSI 黄色:时钟、橙色:MISO
故障寄存器0x03 (DRV8305_FAULT_STATUS_3)
黄色:时钟、橙色:MOSI 黄色:时钟、橙色:MISO
故障寄存器0x04 (DRV8305_VDS_STATUS)
黄色:时钟、橙色:MOSI 黄色:时钟、橙色:MISO
2.如果上述 SPI 读数正确、
我们在0x03中收到故障、即 IC 故障寄存器、我们得到的错误为:
如果是这种情况、请确认、 如何解决该问题?
此外、为什么0x01保留位为高电平、这是否正常? 因为对于0x02、保留位不为高电平
您好!
更多信息:
如上所述、对于通道2、注释掉" EPWM_setTimeBasePeriod (EPWM6_BASE、2500) " U 相和 V 相正在工作
我们现在发现、在注释掉" EPWM_setTimeBasePeriod (EPWM1_BASE、2500); " U 相连续高、V 相和 W 相按预期工作、但在设置时 EPWM_setTimeBasePeriod (EPWM1_BASE、2500); 我们在 DRV8305中遇到故障、其故障寄存器如上所示。 (如果正确)
这仅供您参考。
Gautham、
为什么要注释掉为 ePWM 设置 TBPRD 的代码? 您希望 EPWM1上的输出是什么?
谢谢!
Luke
尊敬的 Luke:
我们意外发现、在注释掉通道2和1的 EPWM6和 EPWM1的 TBRD 时、我们将在其他2个通道(即通道1的 V 和 W 相位以及通道2的 U 和 V 相位)中从 DRV 获得输出。 这仅供您参考 、这样、DRV 就不会给出任何故障、而是从我们获得输出。
若要测试定制电路板、我们尝试运行一个开环程序、 其中 ePWM1上的输出将是由 PWM 信号调制的正弦波形。
您好!
更新了:由于我们在 发生其他故障时遇到了 VCPH_UVLO2故障、因此我们 探测了 VREG 和 PVDD、并得到了图中所示的行为。 仅当 epwm1/epwm6激活时才会发生这种情况。
在运行其他 ePWM 时、我们在启用 EN_GATE 时不会看到这种瞬态行为。
PVDDD 在靠近 DRV 的0欧姆电阻器附近探测、探测28V 直接电源时、压降较小
VREG
这是 VCPH_UVLO2故障的原因? 我们观察到的其他故障情况如何?
如何解决此问题? 我们是否应该在 PVDD 和接地之间仅放置一个10uF 的电容器、这就足够了吗? 我们还应该如何调试该错误吗?
PS:
我们已有一个4.7uF 的电容器
尊敬的 Gautham:
澄清一下、ePWM 输出不存在问题、但当 EPWM1和 EPWM6运行时、系统中似乎会出现阻碍 JTAG 连接的噪声。 是这样吗?
谢谢!
Luke
尊敬的 Luke:
"澄清一下、ePWM 输出不存在问题、但当 EPWM1和 EPWM6运行时、系统中似乎会出现阻碍 JTAG 连接的噪声。 这是不是真的?"
是的、您回答正确。
由于我 遇到 JTAG 中断、并且在使用 EPWM1和 EPWM6时无法运行程序、因此我 将 程序直接转储到闪存中。 这样做时、我可以看到控制器输出正常、ePWM 波形在 EPWM1上符合预期、但是 DRV8305中没有输出。 nFAULT 为低电平。
您好!
更新:我们确定了一个问题、 SH_A 缺少0欧姆电阻、我们填充了相同内容、现在我们将从所有三个通道中的 DRV 获得输出。
问题:
我们仍不确定我们的 SPI 读取是否正确、我们的 SPI 读取表明存在故障、因为0x03寄存器的某些位为高电平。 您能否通过探测的上述 SPI 信号确认 MOSI 的行为是否正确? 由于时钟下降沿与 MOSI 位的下降沿对齐、它看起来与 SPI Mode1行为不像。
我们使用标准 SPI 库
#include "driverlib.h" #include "device.h" #include "board.h" #include "epwm.h" #include "math.h" #include "spi.h" // // Globals // #define DRV8305_FAULT_STATUS_1 0x8800 //1000 1000 0000 0000 #define DRV8305_FAULT_STATUS_2 0x9000 //1001 0000 0000 0000 #define DRV8305_FAULT_STATUS_3 0x9800 //1001 1000 0000 0000 #define DRV8305_VDS_STATUS 0xA000 //1010 0000 0000 0000 uint16_t faultStatus1; // // Some declarations // void main(void) { // Some device initialization codes initSPIC(); for(;;) { faultStatus1 = readSPIRegister(DRV8305_VDS_STATUS); sendFaultStatus(faultStatus1); } } void initSPIC(void) { // Ensure SPI-C is disabled before configuration SPI_disableModule(SPIC_BASE); // Configure GPIOs for *** using predefined mappings GPIO_setPinConfig(GPIO_122_SPISIMOC); // Set GPIO122 as *** SIMO GPIO_setPinConfig(GPIO_123_SPISOMIC); // Set GPIO123 as *** SOMI GPIO_setPinConfig(GPIO_124_SPICLKC); // Set GPIO124 as *** CLK GPIO_setPinConfig(GPIO_125_SPISTEC); // Set GPIO125 as *** STE // Configure SPI in master mode SPI_setConfig(SPIC_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA1, SPI_MODE_MASTER, 500000, 16); SPI_enableFIFO(SPIC_BASE); SPI_enableModule(SPIC_BASE); } uint16_t readSPIRegister(uint16_t address) { uint16_t receivedData; // Send the address to the DRV8305 SPI_writeDataBlockingFIFO(SPIC_BASE, address); // Read the received data receivedData = SPI_readDataBlockingFIFO(SPIC_BASE); return receivedData; } void sendFaultStatus(uint16_t faultStatus) { GPIO_writePin(119, (faultStatus & 0x01)); // Example: toggle based on LSB } //My interrupt code for generating pwm
尊敬的 Gautham:
我会在1-2天后回复您的问题。
Aishwarya.
Gautham、
快速浏览 DRV805 DS、看看列出的 SPI 模式与 F28379xD SPI 控制器/主模式(极性= 0、相位= 0)等效。 请仔细检查。 您是否还看过展示如何配置 SPI 的 C2000Ware 示例? 如果没有、请执行。
此致、
Aishwarya.
您好!
请查看下面的代码片段、这会将其配置为模式1、对吧?
SPI_setConfig (SPIC_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL0PHA1、SPI_MODE_MASTER、500000、 16);
Gautham、
不同的产品涉及不同的模式编号、因此匹配时序图非常重要。 您可能需要执行以下操作:
SPI_setConfig (SPIC_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL0PHA0、SPI_MODE_MASTER、500000、 16);
Aishwarya.
尊敬的 Aishwarya:
我们将使用 DRV8305、根据该公式、我们需要在模式1下运行该器件。
尊敬的 Gautham:
Aishwarya 目前不在办公室、因此请预计她的回复会有延迟。
此致、
Delaney
您好!
对于延迟、我们深表歉意。 您是对的、请忽略我之前的评论。 您能否确认 SPI 同时进行读取和写入操作、除此一次性故障外、其他所有器件均按预期工作?
此致、
Aishwarya.
Gautham、
检查此问题是否已解决和/或是否有任何待解决问题?
此致、
Aishwarya.