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.

[参考译文] CCS/TMS320F28377S:变量类型、ADC、DMA

Guru**** 1993905 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/791938/ccs-tms320f28377s-variable-type-adc-dma

器件型号:TMS320F28377S

工具/软件:Code Composer Studio

我使用 DMA 并从 DMA 中断获取 ADC 结果。 主要功能如下所示。

void main (void)
{
InitSysCtrl();

init_gpio();

Dint;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();

EALLOW;
PieVectTable.DMA_CH1_INT=&DMA_CH1_ISR;
PieVectTable.DMA_CH2_INT=&DMA_CH2_ISR;
EDIS;

EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0;
EDIS;

init_EPWM10();
init_EPWM11();
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;

init_adca();
init_adcb ();

init_dma();
EALLOW;
CpuSysRegs.SECMSEL.bit.PF2SEL = 1;
EDIS;

init_pid();

IER |= M_INT1;
IER |= M_INT7;
PieCtrlRegs.PIEIER7.bit.INTx1 = 1;
PieCtrlRegs.PIEIER7.bit.INTx2 = 1;
EINT;
ERTM;

StartDMACH1();
StartDMACH2();

while (1)
{
}
} 

_interrupt void DMA_CH2_ISR (void)

uint16 i;
uint32温度;

温度= 0;
for (i=0;i<8;i++)

temp += dma_ch2_Buffer[i];

ADC_IPV =温度>> 3;

温度= 0;
for (i=0;i<8;i++)

temp += dma_ch2_Buffer[i+8];

ADC_Ibat =温度>> 3;

温度= 0;
for (i=0;i<8;i++)

temp += dma_ch2_Buffer[i+16];

adc_vmid = temp >> 3;

CHARGE_CC_Loop ();

PieCtrlRegs.PIEACX.ALL = PIEACK_group7;

void charge CC_Loop (void)
{
PID_CHARGE_CC.Error =(Int32)(ADC_Ibat)- PID_CHARGE_CC.Target;
test1 = PID_CHARGE_CC.Error - PID_CHARGE_CC.Error_Old;
PID_CHARGE_CC.Error_Old = PID_CHARGE_CC.Error;

} 
可变 PID_CHARGE_CC.Error、PID_CHARGE_CC.Error_Old 和测试1均为 Int32类型。 当我调试时、PID_CHARGE_CC.Error 和 PID_CHARGE_CC.Error_Old 的图形是正常的。 但变量 test1很奇怪、 
如下所示。

test1图:
PID_CHARGE_CC.Error 和 PID_CHARGE_CC.Error_Old 的图形:
该计划有什么问题?
谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好'9259、

    什么是 Test1? 您期望它是什么?  您是否在其他任何情况下获得预期结果?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    test1是一个用于显示奇怪值的变量。 由于 Test1 = PID_CHARGE_CC.Error-PID_CHARGE_CC.Error_Old、并且图形显示 PID_CHARGE_CC.Error 和 PID_CHARGE_CC.Error_Old 是稳定的(-300 ~-240)、因此 test1应该更加稳定。 但是、Test1的某些值大约为65536或-65536。  

    如果 将 Test1、 PID_CHARGE_CC.Error 和 PID_CHARGE_CC.Error_Old 更改为 Int16或浮点类型、我可以获得预期结果。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好'9259、

    这是由该图的缩放问题引起的吗? 如果您直接观察原始数据数组、它是否在预期范围内?

    如果不是、您能否在数组元素的计算位置放置断点? 在这里、您可以检查假设正在执行哪些计算以及当时输入数据的状态。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好'9259

    您是否能够解决您的问题?