尊敬的团队成员
我们使用了 TMS320F280025C - 48引脚 IC
将 JTAG 连接到 PCB 后、便可以成功下载代码。
在调试代码时、ADC 值无法正确处理。
我们在 ADC 中使用了以下设置
1.内部基准电压3.3V
2. ADC 时钟50MHz
我们使用了电机控制 SDK 项目。 我们将驱动器 IC 用作 DRV8343。
ADC 的电流和电压值输入不正确。 但相同代码在 Launchpad 280025C 中可正常工作。
谢谢你
Punitha . b.
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.
尊敬的团队成员
我们使用了 TMS320F280025C - 48引脚 IC
将 JTAG 连接到 PCB 后、便可以成功下载代码。
在调试代码时、ADC 值无法正确处理。
我们在 ADC 中使用了以下设置
1.内部基准电压3.3V
2. ADC 时钟50MHz
我们使用了电机控制 SDK 项目。 我们将驱动器 IC 用作 DRV8343。
ADC 的电流和电压值输入不正确。 但相同代码在 Launchpad 280025C 中可正常工作。
谢谢你
Punitha . b.
请查看 通用工程和实验用户指南: https://www.ti.com/lit/spruj26。 按照5.1章的说明更改 hal.c 和 hal.h 文件中的器件配置代码。
如果您没有机会查看技术讲座材料、我认为这样可以帮助您揭开一些术语和架构的神秘面纱、并了解 C2000 MCU 以着手开发。
以上问题得到解决。 错过了 VrefLO 引脚的接地连接。 现在、在中断例程中正确读取了 ADC 值。
在通用电机控制项目的电压和电流偏移校准计算函数中、
for (offsetCnt = 0;offsetCnt < 32000;offsetCnt++)
{
//清除 ADC 中断标志
ADC_clearInterruptStatus (MTR1_ADC_INT_base、MTR1_ADC_INT_NUM);
while (ADC_getInterruptStatus (MTR1_ADC_INT_base、MTR1_ADC_INT_NUM)= false);
HAL_readMtr1ADCData (&obj->adcData);
if (offsetCnt >= 2000)//忽略前2000次
{
//相电流检测偏移
obj->adcData.offset_I_AD.value[0]=
offsetk1 * obj->adcData.offset_I_ad.value[0]+
obj->adcData.I_A.值[0]* offsetK2;
obj->adcData.offset_I_AD.value[1]=
offsetk1 * obj->adcData.offset_I_ad.value[1]+
obj->adcData.I_A.value[1]* offsetk2;
obj->adcData.offset_I_AD.value[2]=
offsetk1 * obj->adcData.offset_I_ad.value[2]+
obj->adcData.I_A.value[2]* offsetk2;
#if defined (motor1_fast)|| defined (motor1_ISBLDC)
invVdcbus = 1.0f / obj->adcData.VdcBus_V;
//相位电压感应偏移
obj->adcData.offset_V_sf.value[0]=
offsetk1 * obj->adcData.offset_V_sf.value[0]+
(invVdcbus * obj->adcData.V_V.value[0])* offsetK2;
obj->adcData.offset_V_sf.value[1]=
offsetk1 * obj->adcData.offset_V_sf.value[1]+
(invVdcbus * obj->adcData.V_V.value[1])* offsetK2;
obj->adcData.offset_V_sf.value[2]=
offsetk1 * obj->adcData.offset_V_sf.value[2]+
(invVdcbus * obj->adcData.V_V.value[2])* offsetK2;
#endif // motor1_fast || motor1_ISBLDC
}
方案
{
//启用 PWM
HAL_enablePWM (obj->halMtrHandle);
}
}// for ()
在该函数之后、当前偏移值为2035、2045、2009
但 Voltage Offset 值为 1.033、1.026、1.036, 而不是0.5006,0.5002,0.498。
相应的 ADC 引脚电压保持相同0.5V。
将发生电压偏移误差。
不知道如何继续
请帮助解决此问题。
谢谢
Punitha.B.
请检查是否为直流母线和 DRV 器件添加了正确的电源、并正确配置了 ADC 以进行电压感应。
我认为电源也没有问题。 在我们开发的 PCB 中、直流母线引脚和 ADC 引脚中的电压始终为0.5V。 [/报价]这话什么意思? 如果您调节直流母线电压、该值是否发生了变化? motorVars_M1.adcData.VdcBus_V 的值是否接近直流母线电压?
可以。 当我更改为直流电压时、相应的 motorVars_M1.adcData.VdcBus_V 值也发生了变化。 我们使用以下 ADC 通道来测量电压和电流。
我们使用了 Tms320F280025C 48引脚 IC
1.直流电压 = A6/C6 引脚编号为 4 通道 C6
2. VSEN A = A0/C15 引脚编号 11 通道 A0
3. VSEN B = A3/C5 引脚编号 5 通道 A3
4. Vsen C=A2/C9 引脚编号6 通道 C9
5. ISEN A = A15/C7 引脚编号7 通道 A15
6. Isen B = A11/C0 引脚编号8 通道 C0
7. Isen C = A5/C2 通道 C2的引脚
我们也更改了相应的 CMPSS 配置。
在 runoffset1校准函数之后、只会发生错误。
当我在 ADC 读取函数中设置为断点时、结果寄存器中的值根据相应引脚的输入电压而来。
如果我将 for 环路计数值从32000减少到2050、则不会发生电压失调误差。