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/TMS320F2.8335万:绘制ADC寄存器值可提供随机输出

Guru**** 2539500 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/590593/ccs-tms320f28335-plotting-adc-register-values-gives-random-output

部件号:TMS320F2.8335万

工具/软件:Code Composer Studio

您好,我是CCS的新用户。 我正在使用带TMS320F2.8335万控制卡的德州仪器(TI)开发板。 我需要为TMS320F2.8335万的ADC提供整流正弦波。 我使用Matlab生成了代码。 我使用CCS4和CCS 3.3 (在不同的PC上)。 现在,当我进入图形实用程序时,有一个'Starting Address',我在其中使用0x7111 (我使用的是ADC信道B1)。  我使用了实时模式。  但是,图解的y轴显示的数据与ADC*10e4类似,远远超过6.4 范围(0-4095)。 图形上显示的值是随机的。 然后我将'开始地址'更改为0x7108,0x7109。 即使仅连接ADC B1,它们也会在图上显示类似的值。 我还尝试将'AdcBuf'添加到监视窗口,但CCS 4无法识别它。

如何确认图形窗口中的图属于ADC通道B1的输出?

ADC的输出应介于0-4095之间。 起始地址0x7011是否意味着该图解仅是ADC B1的结果,还是我的误解?

我几乎尽了我所能,但徒劳无功。 请指导我如何继续(CCS4或3.3)。 如有任何帮助,我将不胜感激。

谢谢!

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

    遗憾的是,没有多少信息可以准确评估根本原因。 使用图形时,所使用的参数,地址和设置断点的位置对于正确显示至关重要。

    以下页面显示了如何正确设置图形以显示12位ADC并配置断点以读取ADC数据寄存器的示例:
    processors.wiki.ti.com/.../Graph_Visualization_for_MSP430

    请记住,根据设备的不同,读取ADC寄存器一次可能会清除其值-在这种情况下,您可以将值复制到变量中,也可以通过设置参数"采集缓冲区大小"来创建缓冲区以绘制值的数量。

    最后,如果您仍在使用CCSv4,我必须告诉您,许多错误已在新版本的CCS中修复,其中一些错误对正确显示至关重要。

    我强烈建议您尝试更新的版本,看看是否能获得更好的效果。

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

    您好,感谢您之前的回复。

    我制作了一个程序,在这个程序中,50 % 占空比产生了2秒的脉冲,并在GPIO 27上获得。 我将GPIO 27引脚连接到ADC A4引脚以验证CCS中的图形实用程序。 我从MATLAB中生成了代码。 我在CCS中使用了实时模式。 我没有手动设置任何断点。 我将ADCRESULT0镜像添加到监视窗口。

    然后,我使用 起始地址0x0B00的图形绘制ADCRESULT0镜像。  

    图形属性对话框显示在所附图片中:

     当GPIO 27连接到ADC A4时,获得以下输出:

    但是,当GPIO 27与ADC A4断开连接时,ADC输出将保持高电平,如下所示。

    显示了CCS 4中相同代码和相同属性获得的图形:

    请回答我的以下问题:

    1. 为什么当GPIO 27引脚与ADC A4引脚断开连接时,ADC输出会变高? 既然没有输入,它是否应该降低并接近零?
    2. 为什么图形显示梯形脉冲而不是预期的方形脉冲?
    3. 这些图形上的水平轴的单位是秒。 脉冲的时间段应为2秒。 观察监视窗口中ADCRESULT0镜像的值(使用连续刷新)也会显示2秒的时间段。 但是,在图形中,时间周期要短得多(大约0.2 秒)。 图形中的时间段似乎也会随着图形的某些属性的更改而变化。 如何在图形窗口中获得正确的时间段?

    感谢您抽出时间回答我的问题。 我将不胜感激。 谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1输入将浮动,除非您有下拉列表,否则可以读取任何电压。
    2.您的时机可能不对。 我想我们需要看到代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Kieth: 
    此代码是使用MATLAB Simulink中的嵌入式编码器生成的。 有一个脉冲发生器,可为GPIO 27提供输出。 有ADC A4提供
    输出到GPIO 32。 运行代码后,我将手动将GPIO 27连接到ADC A4,并在CCS中监控ADC值。 为什么是时间段和
    统计图窗口中的脉冲形状错误,但在监视窗口中的脉冲形状错误。 谢谢!


    /* 文件:dsc_test3.c * 为Simulink模型'dsc_test3'生成的代码。 * **型号版本 :1.2 * Simulink编码器版本 :8.2 (R2012a) 2011年12月29 日* TLC版本 :8.2 (2011年12月29日) * C/C++源代码生成于:2017年5月2日10:05:51 * 目标选择:idelink_ERT.tlc *嵌入式硬件选择:德州仪器(TI)>C2000 *代码生成目标:未指定 *验证结果: 未运行 */ #include "sc_test3.h" #include "dsc_test3_private.h" /*块信号(自动存储)*/ BlockIO_scheduler_test3_B; /*块状态(自动存储)*/ D_Work_testsc_&3 sc_testwork; /*实时模型*/ rt_test3_m_3 sc_static = /* 设置需要运行此基本步骤的子速率(始终运行基本速率)。 *必须在调用模型步进函数 *之前调用此函数,以便"记住"需要运行此基本步骤的速率。 事件的*缓冲允许重叠抢占。 */ void sc_test3_SetEventsForThisBaseStep(Boleane_T *eventFlags) {/* 任务在其计数器为零时运行,通过rtmStepTask宏*/ eventFlags[1]=((boole_T)rtmStepTask(dcher_compute 3_M,1))计算; {/* rate_monotonic_scheduler_void *在下一步骤运行期间运行时运行的基率为空 子项 *是基本费率计数器的整数倍数。 因此,子任务 *计数器在达到其限制时重置(零表示运行)。 */ (dsc_test3_M->Timing.TaskCounters.TID[1])+; IF ((dsc_test3_M->Timing.TaskCounters.TID[1])>999){/*样本时间:[0.1秒,0.0s]*/ DSC_test3_M->Timing.TaskCounters.TID[1]=0; }}/* TID0的模型步进函数*/ void DSC_test3_step0(void) /*采样时间:[0.0001s,0.0s]*/ { /*采样时间:[0.0001s,0.0s]*/ RATE_MONOTONIC_scheduler(); }/* DiscretePulseGenerator:'<Root>/Pulse Generator'*/ sc_test3_B. PulseGenerator =((REAL_T)sc_test3_DWork.clockCounter < DSC_test3_P.PulseGenerator_Duty)&&(DSC_test3_DWork.clockTickCounter >= 0L) ? DSC_test3_P.PulseGenerator_Amp : 0.0 ; IF (((REAL_T)SC_test3_DWork.clockCounter >= DSC_test3_P.PulseGenerator_Period - 1.0){ DSC_test3_DWork.clockCounter = 0L; }其它{ DSC_test3_DWork.clockCounter++ ;}/* DiscretePulseGenerator结束:'<Root>/* S函数块:<Root>/Digital Output 27 (c280xgpio_do)*/ { GpioDataRegs.GPASET.Bit.GPIO27 =(sc_test3_B. PulseGenerator!= 0); GpioDataRegs.GPACLEAR.bit.GPIO27 =!(dsc_test3_B.PulseGenerator!=0); }}/* TID1的模型步进函数*/ voidsc_test3_step1(void) /*采样时间:[0.1s,0.0s]*/ {/* S函数块:<Root>/ADC (c280xadc)*/ { AdcRegs.ADCTRL2.bit.RST_SEQ1 =1;/*重置SEQ1模块*/ AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;/*Clear INT序列发生器*/ AdcRegs.ADCTRL2.bit.so_SEQ1 =1;/*软件触发器*/ while (AdcRegs.ADCST.bit.INT_SEQ1 ==0){ } /*等待序列发生器INT位清除*/ ASM (" RPT #11 || NOP"); DSC_test3_B. ADC =(AdcRegs.ADCRESULT0)>> 4; }/* S函数块:<Root>/Digital Output 32 (c280xgpio_do)*/ { GpioDataRegs.GPBSET.Bit.GPIO32 =(dsc_test3_B.ADC!= 0); GpioDataRegs.GPBCLEAR.bit.GPIO32 =!(dsc_test3_B.ADC !=0); } } voidsc_test3_step(int_T tid) { switch (tid){ Case 0: dsc_test3_step0(); 中断; 案例1: dsc_test3_step1(); 中断; 默认: break; } }/* Model initialize function */ void sc_test3_initialize(void) { /*注册代码*/* 初始化实时模型*/ (void) memset((void *)sc_test3_M, 0, sizeof(RT_model_sc_test3)); /*块I/O */ (void) memset((((void *)&sc_test3_B),0, sizeof (BlockIO_sc_test3)); /* States (dwork)*/ (void) memset ((void *)&sc_test3_DWork,0, sizeof(D_Work Dsc_test3)); /* S函数开始(c280xadc):'<Root>/ADC'*/ InitAdc(); CONFIG_ADC_A (0U,3U,0U,0U, 0U); /* S函数开始(c280xgpio_do):'<Root>/Digital Output 32'*/ EALLOW; GpioCtrlRegs.GPBMUX1.all &=4294967292U; GpiotretlRegs.GPBDI.all |= 1U; EDIS; /* Start for DispixRegs.gpi_Org= D381= /*模型终止函数*/ void sc_test3_terminate(void) {/* (不需要终止代码)*/ }/* 生成的代码的文件尾部。 * **[EOF] */