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.8027万:使用Simulink使ADC结果通过SCI发送时遇到问题。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/575088/ccs-tms320f28027-trouble-getting-adc-result-to-send-through-sci-using-simulink

部件号:TMS320F2.8027万

工具/软件:Code Composer Studio

您好,  

这是我目前正在处理的问题:  

  • TMS320F2.8027万 C2000 Launchpad
  • 安装了相应支持软件包的CCS6
  • MATLAB,带Simulink,2016a

到目前为止,我可以与启动台进行通信,也可以从启动台进行通信。 我正在尝试理解和控制ADC,并创建了几个简单的Simulink程序来对其进行测试。 我的问题是,我能够控制ADC,但我无法从ADCRESULT寄存器获取值,以便通过SCI发送到终端进行验证。 一个程序只是每5秒发送一个值,我可以看到我现在用来定义结果的“["标题和"]”终结符,但它们之间没有任何内容。 虽然ADC可能不工作,但如果我进入CCS并观看ADCRESULT寄存器,我就可以看到当我向输入引脚施加电压时,值会相应地变化。 我不确定我做了什么错,论坛上的其他帖子也没有真正回答类似的问题。 是否有人可以为我说明一下这一点? 谢谢你。  

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

    伊恩

    现在我们知道您的传输有问题,但我们不知道该问题在链中的位置。 如果我的理解正确,则您的系统数据流 具有如下内容:  

    电压源--ADC--SCI--Matlab终端

    电压源->ADC:

    听起来您可以看到ADC寄存器中的值,因此此连接看起来正常。

    ADC->SCI:

    这听起来不像您检查了这些值是否已从ADC寄存器正确复制到SCI传输寄存器。 检查值是否正确传输!

    SCI -> Matlab终端:

    您正在获取一些数据,但缺少一些数据。 这里可能会出现问题,但由于我们看到了一些数据,因此它不是“最”可能出现问题的地方。

    有一件事可能对您有帮助:尝试发送文字值而不是ADC结果。

    希望它有所帮助!

    此致,
    科迪

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

    感谢您提供信息。 假设电压源的结构--ADC--SCI--Putty是正确的。

    我没想到看SCI寄存器。 检查之后,我发现ADC值没有被复制到SCI寄存器。 我尝试更改模型参数设置,ADC块和SCI块中的设置,但我无法获得要复制的值。 我也尝试过通过SCI发送一个简单的值,就像你建议的那样,但我仍然没有得到任何输出。

    我昨晚读过的另一个论坛谈到某些寄存器是只读的,可以使用EALLOW命令来解决这个问题。 这是否是导致我的SCI寄存器不接收任何数据的问题的一部分?

    我原本希望使用Simulink快速编程和验证我的项目,但如果我无法获得这些块来执行我想要的操作,我可能只需在CCS中恢复编码。

    再次感谢,
    伊恩
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ian,您是否尝试联系MathWorks技术支持?
    www.mathworks.com/.../
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    伊恩

      您是否解决了此问题? EALLOW不影响所有寄存器您可以在 系统控制和中断指南 的5.2 部分找到描述。 EALLOW只是内存中的一个位,当清除时不允许写入某些寄存器,它不会影响读取。 这是一项安全功能,在调试代码时,始终启用EALLOW会很有帮助,当然在实际应用程序代码中,强烈建议 禁用它。

    此致,
    科迪

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

    否。我无法解决我的原始问题。 我仍然不知道为什么我在使用Simulink时无法更新SCI寄存器。 我开始直接修改TI的SCI示例程序,但还没有花太多的时间在它上。 我认为我可能需要放弃Simulink来完成我的特定项目。

    感谢您检查我的问题Cody。 我很感谢。

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

    伊恩

    尝试从 controlSUITE 示例开始,根据需要使其工作,并查看代码和示例之间的不同之处。 请务必进行小幅增量更改。 一个好的启动项目是SCI_echoback,scia_loopback,甚至是scia_looping_interrupts。 如果这些项目中有任何一个使用简单终端(如PuTTY)工作,那么切换到使用Simulink与设备通信应该非常容易。

    编辑:其中一些示例使用内部回送,这会在内部将Tx连接到Rx,因此您发送的任何内容都将直接发送到接收器...这可以禁用。 SCI用户指南 将详细介绍如何启用此功能,请参阅“SCICCR”寄存器的环回ENA位。

    希望它有所帮助!
    科迪

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

    我不确定我是如何错过这个主题的... 您能否分享模型? 另外,请检查视频的结尾部分,了解Simulink示例:  

    www.youtube.com/watch

    此致,

    Gautam

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

    您好,Ian:

    我向我的开发团队征求意见。 他们进行了一次快速测试,并能够使其正常工作。  他们提供了一些反馈和建议-我将其粘贴在下面。

    ---

    问题可能出在“putty”工具,因为它一次采样8位数据,并显示相同的ASCII等效字符。 因此,当我们发送大的原始ADC值时,该值被分解为8位的数据包,每个数据包都将作为其ASCII等效值进行回显。 这不 是用户从ADC块中获得的内容与他在PuTTY终端中看到的内容的1:1匹配。

     

    因此,如果用户可以访问主机“Instrument Control Toolbox (仪器控制工具箱)”中的“Serial Receive (串行接收)”块,则可以使用该块进行验证。 请注意:为了简单明了,我不使用任何标头/终结器。

     

    向用户提供的一些建议:

    1. 验证配置的波特率是否与“Instrument Control Toolbox (仪器控制工具箱)”中的Putty/主机“Serial Receive (串行接收)”块匹配。
    2. 验证GPIO引脚配置是否正确。 对于ME,GPIO 28 (Rx)和29 (Tx)工作正常。
    3. 尝试使用上面提到的其他选项来捕获Putty等工具以外的数据。

    ---

    HTH,

    -Brian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢大家的意见。 Gautam,你的视频让我想到了一些可能会有所帮助的我可以改变的东西。 Brian,感谢您询问您的团队。 我已确保波特率匹配并验证了GPIO引脚,但我正在使用Putty。 我将尝试使用超级终端或其他程序,看看这是否会有所不同。

    今晚我有一些空闲时间,所以我会得到一些我的模型和结果的图片,以便每个人都知道我最后看到的是什么
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我设置超级终端以接收来自TI的串行信息。 这一次确实显示了一个"值",但这不是我所期望的。 如图所示,从0V至1V输入到ADCIN的方括号中没有任何内容。 然后,从1V到2V左右,有一个白色笑脸。 2V或更高电压会产生黑色面部。 这告诉我ADC和SCI之间有一些通信,否则当我改变电压时,它不知道显示什么。 但它仍然不是我可以使用的值。  

    我正在附加终端,Simulink和CCS的屏幕截图。 我让大家查看我的内容并添加一些评论  

    这是我在Simulink中设置的程序

    Simulink设置:

    我在CCS中观看的寄存器的屏幕截图。 当我升高或降低电压输入时,我可以观察ADCRESULT0的变化值,但SCI寄存器不起作用。  

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

    您好,

    从模型中, 产品块的输出是以IEEE754格式存储在内存中的浮点值。

    从下图中,产品值2.7512 (伏特)存储为0x40.3013万CE (在CCS中以十六进制格式显示)。 因此,当我们使用SCI传输2.7512 伏特时,它将这些位于内存中的十六进制字节(一次8位)转换为Tx,这些字节共同表示2.7512 的浮点值。 现在,当我们使用putty或HyperTerminal之类的工具时,这些十六进制字节(每次8位)以ASCII格式表示。 这是因为这些中间表示数据看起来不正确。

    重新构造2.7512 的原始浮点值的最佳方法是编写一个例程,该例程执行 将这些字节打包在一起的任务,并从其中派生十进制表示。 这可以通过查找与串行终端上接收的ASCII字符等效的十六进制值来手动确认,并对其进行打包,然后使用IEEE754转换器获得十进制等效值。 常用工具可从以下网址获得:

    https://www.h-schmidt.net/FloatConverter/IEEE754.html

    仪表控制工具箱中的串行接收块执行相同的操作。

    加热

    此致,

    Venkatesh C

    附注:您的案例中的SCI注册商具有正确的值。 SCITXBUF - 0x005D只是用于终结符']'的ASCII代码。