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.

[参考译文] TMS320F28069M:支持 fp32和 TMU 的 Motorware

Guru**** 2530900 points
Other Parts Discussed in Thread: MOTORWARE, DRV8305, TMS320F28069M

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/804955/tms320f28069m-motorware-with-fp32-and-tmu-support

器件型号:TMS320F28069M
主题中讨论的其他器件:MOTORWAREDRV8305

您好!

我们需要使用支持 fp32和 TMU 的 motorware。

因此、我们以 instaspin lab5b 为例、仅进行了以下更改:

[]编译器选项已更改 –float_support=fp32 以及--tmu_support

[]将 RTS 库切换为 rts2800_fp32.lib

[]更改了以下库

C:\TI\motorware\motorware_1_01_00_18_05\sw\modules\fast\lib\32b\F28x\f2806x\2806xRevB_IQmath_BootROMSymbols.lib

C:\TI\motorware\motorware_1_01_00_18_05\sw\modules\fast\lib\32b\F28x\f2806x \ 2806xRevB_IQmath_BootROMSymbols_fpu32.lib

 

C:\TI\motorware\motorware_1_01_00_18_05\sw\modules\IQMath\lib\f28x\32b\IQmath.lib

C:\TI\motorware\motorware_1_01_00_18_05\sw\modules\IQMath\lib\f28x\float\IQmath_fpu32.lib

它可以正常运行、但不幸的是、在这些变化之后、电机不再旋转。 在我们进一步调查之前、您能否告诉我我们是否缺少了什么? 您是否尝试过这种方法?

谢谢、

-Gunter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以参阅支持 FPU32的 lab04a 和 lab05g。 您无需启用 TMU 支持、因为2806xRevB_IQmath_BootROMSymbols_fpu32.lib 也不使用 TMU 函数。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Yanming、

    感谢您的评论。  

    我在调查这一情况时还有点远。 将带有 softlib 的 Lab5b 与带有 fpu32的 Lab5b 并排使用、我在 fpu32案例失败的早期发现了一些明显的地方。 HAL_setParams()中有一个实例

    _IQ Current_SF =_IQ (pUserParams->Current_SF);

    在这里、用户参数结构中的 CURRENT_SF 定义为  

    float_t CURRENT_SF;//!<定义系统的电流换算系数

    实际值为1.964... 浮点格式。

    然后由_iq()转换

    对于_IQ()转换后的"softlib"情况,值为1.964.... Q24格式。 这起作用了。

    但是、对于"fpu32"情况、_IQ 转换会导致 Q24格式的值为0.0 (零)。

    我缺少什么?

    此外、对于各种.c 文件、还包含一个名为 IQmathLib.h 的头文件。 您还能解释一下对浮点数学与 IQMath 的需求。 现在、我可以告诉大家、IQ_Math 的所有内容都是定义的。

    #define FLOAT_MATH 1.
    #define IQ_Math 0

    #ifndef MATH_TYPE
    #define MATH_TYPE IQ_MATH
    #endif

    我们与 Witney Dewey 谈过、我们认为这可能很重要。

    谢谢!
    -Gunter

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

    您好、Yanming、

    我又说了一个有趣的观点:

    在有问题的_IQ()函数上执行时、构建和运行 Lab5g 似乎是有效的。 Lab5g 使用 FPU32构建。

    在支持 FPU32的情况下使用 Lab5b 时、.map 文件存在明显差异、我认为缺少一些函数、这些函数应该从 rts2800_fpu32.lib 链接进来

    hal.c 在两个实验之间是相同的、但在 Lab5g 中、它会导致符号的链接、而在另一个实验中、它不会导致符号的链接。

    Lab5g 工作.map 文件

    .text     0   003f0000   00003024     
                     003f0000   00000c24    hal.obj (.text)
                     003f0c24   0000077f    drv8305.obj (.text)
                     003f13a3   00000595    user.obj (.text)
                     003f1938   0000046d    ctrl.obj (.text)
                     003f1da5   000002F1    PWM.obj (.text)
                     003f2096   000002e9    proj_lab05g.obj (.text)
                     003f237f   00000206    adc.obj (.text)
                     003f2585   00000195    GPIO-obj (.text)
                     003f271a   0000018a    clk.obj (.text)
                     003f28a4   00000102    PIE.obj (.text)
                     003f29a6   000000a9    spi.obj (.text)
                     003f2a4f   00000088    rts2800_fpu32.lib:fs_div.obj (.text)
                     003f2ad7   00000083                      :fd_mpy.obj (.text)
                     003f2b5a   00000068                      :exp.obj (.text)
                     003f2bc2   00000061                      :log.obj (.text)
                     003f2c23   0000005b    PLL.obj (.text)
                     003f2c7e   0000005a    rts2800_fpu32.lib:pow.obj (.text)
                     003f2cd8   00000050                      :_log.obj (.text)
                     003f2d28   00000047    pw.obj (.text)
                     003f2d6f   00000046    rts2800_fpu32.lib:boot.obj (.text)
                     003f2db5   00000046    wdogg.obj (.text)
                     003f2dfb   00000045    offset.obj (.text)
                     003f2e40   00000032    timer.obj (.text)
                     003f2e72   00000031    rts2800_fpu32.lib:ldexp.obj (.text)
                     003f2ea3   0000002d    osc.obj (.text)
                     003f2ed0   00000027    cpu.obj (.text)
                     003f2ef7   00000023    filter_fo.obj (.text)
                     003f2f1a   00000022    rts2800_fpu32.lib:i_div.obj (.text)
                     003f2f3c   00000020    flash.obj (.text)
                     003f2f5c   0000001f    rts2800_fpu32.lib:fd_tol.obj (.text)
                     003f2f7b   0000001c                      :fs_tofd.obj (.text)
                     003f2f97   0000001a                      :modf.obj (.text)
                     003f2fb1   00000019                      :args_main.obj (.text)
                     003f2fca   00000019                      :exit.obj (.text)
                     003f2fe3   00000016                      :frexp.obj (.text)
                     003f2ff9   00000010    memcopy.obj (.text)
                     003f3009   0000000a    PIE.obj (.text:retain)
                     003f3013   00000009    rts2800_fpu32.lib:_lock.obj (.text)
                     003f301c   00000008    CodeStartBranch.obj (.text)
     
    这是正确的映射!
     
    地址名称    
    ----   ----
    003f0000  .text
    003f2fca  C$$$exit
    003f2ad7  fD$$MPY
    003f2f5c  Fd$$TOL
    003f2a4f  FS$$DIV
    003f2f7b  FS$$TOFD
    003f2f1a  i$$DIV
    003f2f2b  i$MOD

    Lab5b 失败的.map 文件

    FD_mpy 和 FD_tol 函数缺失! 还有一些其他的缺失。

    .text     0   003f0000   00002d75     
                     003f0000   00000c61    hal.obj (.text)
                     003f0c61   0000077f    drv8305.obj (.text)
                     003f13e0   00000595    user.obj (.text)
                     003f1975   0000046d    ctrl.obj (.text)
                     003f1de2   00000339    proj_lab05b.obj (.text)
                     003f211b   000002F1    PWM.obj (.text)
                     003f240c   00000206    adc.obj (.text)
                     003f2612   00000195    GPIO-obj (.text)
                     003f27a7   0000018a    clk.obj (.text)
                     003f2931   00000102    PIE.obj (.text)
                     003f2a33   000000a9    spi.obj (.text)
                     003f2adc   0000005b    PLL.obj (.text)
                     003f2b37   00000047    pw.obj (.text)
                     003f2b7e   00000046    rts2800_fpu32.lib:boot.obj (.text)
                     003f2bc4   00000046    wdogg.obj (.text)
                     003f2c0a   00000045    offset.obj (.text)
                     003f2c4f   00000032    timer.obj (.text)
                     003f2c81   0000002d    osc.obj (.text)
                     003f2cae   00000027    cpu.obj (.text)
                     003f2cd5   00000023    filter_fo.obj (.text)
                     003f2cf8   00000020    flash.obj (.text)
                     003f2d18   00000019    rts2800_fpu32.lib:args_main.obj (.text)
                     003f2d31   00000019                      :exit.obj (.text)
                     003f2d4a   00000010    memcopy.obj (.text)
                     003f2d5a   0000000a    PIE.obj (.text:retain)
                     003f2d64   00000009    rts2800_fpu32.lib:_lock.obj (.text)
                     003f2d6d   00000008    CodeStartBranch.obj (.text)
     
    符号在那里、但位置不正确! 此时的代码将导致 TRAP0指令。 似乎没有真正的代码。
     
    地址名称    
    ----   ----
    003f0000  .text
    003f2d31  C$$$EXIT
    003f81d6  FD$$MPY
    003f853d  FD$$TOL
    003f8259  FS$$DIV
    003f8579  FS$$TOFD
     
     
     
    此致、
    -Gunter
     
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Yanming、

    更多测试。

    首先、链接器命令是这样

    构建目标:"Proj_lab05b.out"

    调用:C2000链接器

    "c:/TI/ccsv8/tools/compiler/c2000_6.2.11/bin/cl2000 -v28 -ml -mt --float_support=fpu32 -O2 -g -define=FAST_ROM_V1p6 --define=flash --diag_warning=225 --display_error_number -z -m"proj_lab05b.map"--stack_size=0x3B0 --express-exag_express-ategrob-at_ap_ap_intrack_ap-ate-inese-ex-at_ap_inese-intrack_ap_ap_ategrob.ate-ines=-"-"-at_ap_ap_intrack_ap_ap_ap_ap_ap_ategrob.atese-inese-inese-/TI/ccsv8/tools/compiler/c2000_6.2.11/include /TI/ccsv8/tools/compiler/c2000_6.2.11/lib rom_model -o "proj_lab05b.out"./CodeStartBranch.obj "./adc.obj "./clk.obj "./clk.obj "./cpu.obj "./ctrl.obj ./drv8305.obj "./filter_f./delt./ipt.obj ".pobj "./ip./obj ".pobj ".obj "./ip.obj "./.obj "./ip.obj "././.obj "././.obj "./.obj "././././deltog.obj ././delt././././obj "././././././.obj "././././.obj "././././.obj "././././././.obj /TI/motorware/motorware_1_01_00_18_05/sw/modules/iqmath/lib/f28x/float/IQmath_fpu32.lib /TI/motorware/motorware_1_01_00_18/sw/ide/ccs/cmd/f2806x/F28069F.cmd /TI/motorware/motorware_1_01_00_18_05/sw/modules/fast/lib/32b/f28x/f2806x/2806xRevB_FastSpinROMSymbols_fpu32.lib  

     

    您可以看到2806xRevB_FastSpinROMSymbols 在 rts2800_fpu32符号之前链接在一起。

     

    列出 2806xRevB_FastSpinROMSymbols_fpu32.lib 中的符号

    $./nm2000.exe -a 2806xRevB_FastSpinROMSymbols_fpu32.lib |grep "TOL"
    003f853d A FD$$TOL
    00000000 f TMS320x2806X_RevB_BOOT_ROM_OUT_FD$TOL_TMP.asm
    003f84cd a fs$$TOL
    00000000 f TMS320x2806X_RevB_BOOT_ROM_OUT_FS$TOL_TMP.asm

    这是一个带有地址的绝对符号、首先链接地址。 正是我们所看到的。 它指向 ROM 符号。

     

    a0192896@LTA0192896 /cygdrive/c/TI/ccsv8/tools/compiler/c2000_6.2.11/bin
    $./nm2000.exe rts2800_fpu32.lib |grep "TOL"
    00000000 U FD$$TOL
    00000000 U FD$$TOL
    00000000 U FD$$TOL
    00000000 T FD$$TOL
    00000000 T FD$$TOLL
    00000000 T FS$$TOL
    00000000 T FS$$TOLL

    这些都是相对符号、因此我认为它会强制链接代码。

    现在、当我通过"Disassembly"窗口查看该位置时、只会看到 ITRAP0指令

    003f853d A FD$$TOL

    3f853d:0000 ITRAP0
    3f853e:0000 ITRAP0
    3f853f:0000 ITRAP0
    3f8540:0000 ITRAP0
    3f8541:0000 ITRAP0
    3f8542:0000 ITRAP0

    我们在库中是否有错误的 ROM 符号?

    或者、我是否有错误的器件、例如使用不同的 ROM? 我正在使用 TMS320F28069M Launchpad。

    谢谢、

    -Gunter

     

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

    您好!

    由于 Lab5g 正在工作、我再次检查了该实验的链接器命令行

    构建目标:"Proj_lab05g.out"

    调用:C2000链接器

    "c:/TI/ccsv8/tools/compiler/c2000_6.2.11/bin/cl2000 -v28 -ml -mt --float_support=fpu32 -O2 -g -define=FAST_ROM_V1p6 -diag_warning=225 -display_error_number -z -m"proj_lab05g.map"-stack_size=0x3B0 -warn_auto_i -ice-i -express-"-express-at_lab_ap_express-"-track_ap_ap_ap_ateg.map-"-ines"-"-inu_line_display_linepsection-"-at_line_p2p"-ine"-"-r_line_display_linepit_line_line_p2"-=/TI/ccsv8/tools/compiler/c2000_6.2.11/include /TI/ccsv8/tools/compiler/c2000_6.2.11/lib rom_model -o "proj_lab05g.out"-lrts2800_fpu32.lib "C:/TI/motorware/motorware_1_01_00_18/sw/modules/fast/lib/32b/f28x/f2806x/2806xRevB_FastSpinROMSymbols_fpu32.lib "C:/TI/motorware/motorware_1_01_00_18/sw/modules/iqmath/lib/f28x/float/IQmath_fpu32.lib "./CodeStartBranch.w""./adc.obj "./clark.obj "./clobj .obj "./ip./pr./obj ".pobj "./out./ref./rts."/m./late.obj ".pobj ".obj ".obj "./.obj /TI/motorware/motorware_1_01_00_18/sw/ide/ccs/cmd/f2806x/f28069F_ram_lnk.cmd。  

    在这里、rts2800_fpu32.lib 2806xRevB_FastSpinROMSymbols_fpu32.lib 之前链接

    这与我在 Lab5b 中的情况正好相反。

    这是库订购问题吗?

    谢谢!

    -Gunter

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

    您好、Yanming、

    我已确定问题是链接器库订购问题。 在 rts2800_fpu32.lib 之后将2806xRevB_FastSpinROMSymbols_fpu32.lib 置于优先级后、Lab5b 立即工作。 现在、符号首先从 rts2800_fpu32.lib 中正确拉出。

    这是链接器命令行

    构建目标:"Proj_lab05b.out"

    调用:C2000链接器

    "c:/TI/ccsv8/tools/compiler/c2000_6.2.11/bin/cl2000 /TI/ccsv8/tools/compiler/c2000_6.2.11/lib /TI/motorware/motorware_1_01_00_18_05/sw/modules/fast/lib/32b/f28x/f2806x -v28 -ml -mt --float_support=fpu32 -O2 -g -define=FAST_ROM_V1p6 --define=analog_hall --define=adc_switching-diag_warning=225 --display_error_number -z -m"proj_lab05b.aprob.at_ex-c=intrad_capsections-b-link_inese-express-ategrob-at_ines"--intrack-"-ines"--ines"-"-link_intrack_ines"--ines"-"-"-intrack_ines"-"-"-ines"-"-"-intrack_ram_ines"-"-ines"-"-ines"-"-"-intrad_line_/TI/ccsv8/tools/compiler/c2000_6.2.11/include rom_model -o "proj_lab05b.out"./CodeStartBranch.obj "./adc.obj "./clk.obj "./clk.obj "./cpu.obj "./ctrl.obj ./drv8305.obj "./filter_f./delt./ipt.obj ".pobj "./obj ./ip.obj "./deltog./ip./.obj "./.obj "./././.obj "./././.obj /TI/motorware/motorware_1_01_00_18_05/sw/modules/iqmath/lib/f28x/float/IQmath_fpu32.lib /TI/motorware/motorware_1_01_00_18_05/sw/ide/ccs/cmd/f2806x/F28069F.cmd  

    完成构建目标:"Proj_lab05b.out"

    此致、

    -Gunter