导致稳态误差当conveting双(64位)数据格式单(32位)格式或32位处理器上运行仿真软件模型如Ti C2000。万博1manbetx

1视图(30天)
我用Matlab R2017a和嵌入式编码为德州仪器C2000处理器支持包。万博1manbetx我设计了一个验证锁相环(PLL)包括一个反馈循环估计电网频率(50赫兹)。仿真结果(电压频率和振幅)在双格式和实现的结果模型树莓π3包括64位处理器是正确的,但当我改变了数据格式单(32位)的频率和振幅增加。这个稳态误差也可见Launchxl-F28377S实现模型的结果,其中包括32位DSP,然而我们并不指望稳态误差反馈循环。我认为这个问题是数值错误造成的。仿真模型和双和单一格式的结果模拟和实现模型发射台已附加一个zip文件。我应该改变模型设计(例如使用定点设计或代码编程)?它是需要另一个(进一步)设置或特殊的要求吗?我如何修改模型运行在DSP实验结果中没有这样的错误呢?
双格式仿真结果:
单格式模拟结果:
DSP实现模型的结果:

答案(1)

马纳尔Chilapur
马纳尔Chilapur 2017年11月2日
你好,
C2000生成代码,代码运行在目标与给定双32位浮点仿真软件模型。万博1manbetx因为双映射到32位浮点C2000和“长双”映射到64位浮点数。通过解决方案通过使用“数据类型替换”窗格的configset我们可以重新映射“替身”的别名“长两倍”,以确保生成的代码运行在目标与64位浮点数。但是,这将严重影响执行性能,因此不推荐使用双,除非它真的是必需的。
类型演员my_Double长双在一个头文件。
HTH,
马纳尔C
1评论
Jakub Vonkomer
Jakub Vonkomer 2021年2月13日
嗨。
谢谢你!
然而,即使你在Matlab中定义“my_Double”
my_Double 万博1manbetx= Simulink.AliasType (“双”);
它只是rtwtypes.h生成这样的:
类型定义my_Double real_T;
real_T被定义为双,这是32位(单一)C2000精度。
是的,有很多方法如何克服它,例如我使用一个不同的,手动编辑rtwtypes。h,建造CCS中的代码,但是有好的,干净的方式迫使Matlab生成代码,my_Double真的是双(64位C2000) ?据我所知,没有本地“长双”输入Matlab。
最好的问候,
Jakub

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!