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.8377万S:来自SIN ()和COS()函数的错误结果

Guru**** 2482225 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/629736/ccs-tms320f28377s-wrong-results-from-sin-and-cos-functions

部件号:TMS320F2.8377万S

工具/软件:Code Composer Studio

您好,请帮助我解决以下问题:

在我的程序中,我使用TMS320F2.8377万S处理器三角数学单元中的sin()和cos()函数。

我很惊讶地发现处理器给出的值是错误的。 为了说明这一点,我获得了许多值,以便绘制函数的结果,如下所示,以及使用电子表格计算的真实值:

结果会发生变化(罪恶和cos的变化不同),但其他时候却是明显的错误。

我看到了一篇可能与此问题相关的文章: TMS320F2.8069万FPFPQ在计算sin (x)和cos (x)时出错

我正在使用2837xS_Generic_flash_Lnk.cmd文件。

什么问题? 如何解决?

谢谢你。

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

    您好,

    您是否介意分享一个代码片段,用于获取上面绘制的数字?

    Whitney

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

    您好,感谢您阅读我的帖子。

    下面是我的代码中使用SIN和COS的部分,它在每个ADC中断上调用。 "GuardarEntvector_AuxFloat1"是一个小函数,用于将SIN和COS计算结果存储在固定大小数组中:
    *******************
    void CalculoSenoCoseno(void)

    motor_sin = sin (motor_theta);
    motor_cos = cos (motor_theta);
    GuardarEntvector_AuxFloat1 (123.4567万.8);
    GuardarEntvector_AuxFloat1(motor_theta);
    GuardarEnVector_AuxFloat1 (motor_sin);
    GuardarEnVector_AuxFloat1 (motor_cos);
    }
    *******************

    拆卸视图:


    来自.lst文件的相应汇编程序:

    *******************
    1629;***********************************************************************
    1630 ;* FNAME:_CalculoSenoCoseno FR大小: 0*
    1631;**
    1632;*函数环境*
    1633;**
    1634;*函数属性*
    1635 ;* 0参数,0自动,0 SOE *
    1636;***************************************************************
    1637.
    1638 0000018e _CalculoSenoCoseno:
    1639 .dwcfi CFA_offset,-2
    1640 .dwcfi save_reg_to_mem,26,0
    1641 .dwpsn文件"../aa_motor.c",第271行,第5列,is_stmt,ISA 0
    1642 0000018e 761F- MOVW DP,#_motor_theta;[CPU_U]
    0.0018万f 0000
    164.3万 0000.019万 E2AF- MOV32 R0H,@ø r_motor_theta;[CPU_]|271|
    0.0001万91 002E9.1002万E
    1644 $C$DW108美元 .dwtag DW_TI_BRANCH
    1645 .dwattr $C$DW108美元,DW_AT_low_PC (0x00)
    1646 .dwattr $C$DW108美元,DW_at_name ("___lendered_sin")
    1647 .dwattr $C$DW108美元,DW_AT_TI_CALL
    1648.
    TMS320C2000汇编器PC v 16.9 12017年10月5日09:28:53

    工具版权所有(c) 1996-2015 Texas2015 Texas Instruments Incorporated
    C:\Users\doctor~1\AppData\Local\Temp\96.641万第35页

    164.9万 0000.0192万 7640' LCR ##_lurse_sin;[CPU_]|271|
    0.0193万 0000
    1650;发生呼叫[##___lendered_sin];[]|271|
    165.1万 0000.0194万 E203- MOV32 @_MOTOR_SIN,R0H;[CPU_]|271|
    0.0001万95 000c9.5万c
    1652 .dwpsn文件"../aa_motor.c",第272行,第5列,is_stmt,ISA 0
    165.3万 0000.0196万 E2AF- MOV32 R0H,@ø r_motor_theta;[CPU_]|272|
    0.0001万97 002E9.7002万E
    1654美元C$DW109美元 .dwtag DW_TI_BRANCH
    1655 .dwattr $C$DW109美元,DW_AT_low_PC (0x00)
    1656 .dwattr $C$DW 109,DW_at_name ("__lance_cos")
    1657 .dwattr $C$DW109美元,DW_AT_TI_CALL
    1658.
    165.9万 0000.0198万 7640' LCR ##_lurlance_cos ;[CPU_]|272|
    0.0001万99 000b9.9万b
    1660;发生呼叫[##__lance_cos];[]|272|
    1661 0000019a E203- MOV32 @_MOTOR_COS,R0H;[CPU_]|272|
    0.0019万b 0012
    1662 .dwpsn文件"./aa_motor.c",第273行,第5列,is_stmt,ISA 0
    1663 0000019c E802 MOVIZ R0H,#1.8838万;[CPU_]|273|
    0.0019万d 4CB0
    1664 0000019e E80D MOVXI R0H,#4.6142万;[CPU_]|273|
    0.0019万f A1F0
    1665美元C$DW110美元 .dwtag DW_TI_BRANCH
    1666 .dwattr $C$DW110美元,DW_AT_low_PC (0x00)
    1667 .dwattr $C$DW110美元,DW_AT_NAME ("_GuardarEnVector_AuxFloat1")
    1668 .dwattr $C$DW110美元,DW_AT_TI_CALL
    1669
    16.7亿 000001a07640! LCR #_GuardarEntvector_AuxFloat1 ;[CPU_]|273|
    0.0001万a1 000010000
    1671;发生呼叫[#_GuardarEntvector_AuxFloat1];[]|273|
    1672 .dwpsn文件"../aa_motor.c",第274行,第5列,is_stmt,ISA 0
    16.73亿 000001a2761F- MOVW DP,#_motor_theta;[CPU_U]
    0.0001万a3 000030000
    16.74亿a4 E2AF- MOV32 R0H,@ø r_motor_theta;[CPU_]|274|
    0.0001万a5 002E5002E
    1675美元C$DW111美元 .dwtag DW_TI_BRANCH
    1676 .dwattr $C$DW111美元,DW_AT_low_PC (0x00)
    1677 .dwattr $C$DW111美元,DW_AT_NAME ("_GuardarEntiver_AuxFloat1")
    1678 .dwattr $C$DW111美元,DW_AT_TI_CALL
    1679
    16.8亿 000001a67640! LCR #_GuardarEntvector_AuxFloat1 ;[CPU_]|274|
    0.0001万a7 000070000
    1681;发生呼叫[#_GuardarEntvector_AuxFloat1];[]|274|
    1682 .dwpsn文件"../aa_motor.c",第275行,第5列,is_stmt,ISA 0
    16.83亿 000001a8761F- MOVW DP,#_MOTOR_SIN;[CPU_U]
    0.0001万a9 000090000
    16.84亿aa E2AF- MOV32 R0H,@ó n_motor_sin;[CPU_]|275|
    0.0001万ab 000c
    1685 $C$DW112美元 .dwtag DW_TI_BRANCH
    1686 .dwattr $C$DW112美元,DW_AT_low_PC (0x00)
    1687 .dwattr $C$DW112美元,DW_AT_NAME ("_GuardarEnVector_AuxFloat1")
    1688 .dwattr $C$DW112美元,DW_AT_TI_CALL
    1689年
    16.9亿ac 7640! LCR #_GuardarEntvector_AuxFloat1;[CPU_]|275|
    TMS320C2000汇编器PC v 16.9 12017年10月5日09:28:53

    工具版权所有(c) 1996-2015 Texas2015 Texas Instruments Incorporated
    C:\Users\doctor~1\AppData\Local\Temp\96.641万第36页

    0.0001万ad 0000
    1691;发生呼叫[#_GuardarEntvector_AuxFloat1];[]|275|
    1692 .dwpsn文件"../aa_motor.c",第276行,第5列,is_stmt,ISA 0
    16.93亿ae 761F- MOVW DP,#_MOTOR_COS;[CPU_U]
    0.0001万af 0000
    16.94亿b0 E2AF- MOV32 R0H,@ó n_motor_cos;[CPU_]|276|
    0.0001万b1 001210012
    1695美元C$DW113美元.dwtag DW_TI_BRANCH
    1696 .dwattr $C$DW113美元,DW_AT_low_PC (0x00)
    1697 .dwattr $C$DW113美元,DW_AT_NAME ("_GuardarEnVector_AuxFloat1")
    1698 .dwattr $C$DW113美元,DW_AT_TI_CALL
    1699年
    17亿 000001b27640! LCR #_GuardarEntvector_AuxFloat1 ;[CPU_]|276|
    0.0001万b3 000030000
    1701;发生呼叫[#_GuardarEntvector_AuxFloat1];[]|276|
    1702 .dwpsn文件"../aa_motor.c",第277行,第1列,is_stmt,ISA 0
    1703 $C$DW114美元 .dwtag DW_TI_BRANCH
    1704 .dwattr $C$DW114美元,DW_AT_low_PC (0x00)
    1705 .dwattr $C$DW114美元,DW_AT_TI_RETURN
    1706
    17.07亿 000001b40006 LRETR;[CPU_]
    1708;返回;[]
    1709 .dwattr $C$DW107美元,DW_AT_TI_END_FILE("./aa_motor.c")
    1710 .dwattr $C$DW107美元,DW_AT_TI_End_line (0x115)
    1711 .dwattr $C$DW107美元,DW_AT_TI_END_COLUMN(0x01)
    1712 .dwendentry
    1713 .dwendtag $C$DW 107
    *******************

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否在函数中设置了断点并在CCS的表达式窗口中读取motor_sin和motor_cos值? 当您执行此操作时,它们是否显示为正确计算,或者它们是否也不正确,如您的图表中所示?

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

    ...我现在看到,我认为这些值是正确的。 我相信我是在误解CodeComponenterStudio显示的信息。 当我设置断点或暂停程序的执行时,我在代码中收集的值或我在CCS的表达式表中看到的值都很好,并且对应于SIN和COS函数的真实值。 但是当我停止刷新变量(但程序继续运行)时,显示的值可能是来自不同时间的值,因此它们似乎是错误的,因为它们与CCS当时给出的参数值不匹配。

    我知道所有值都不能实时显示,至少对于以千赫兹速率更新的值来说是如此。 现在这看起来很明显,我觉得有点傻,但当时我认为它是这样的...

    感谢您花时间帮助我。