首页 >>  正文

tms320f28034与stm32f407在伺服电机驱动板的区别?

来源:www.zuowenzhai.com    作者:编辑   日期:2024-05-31
stm32f407和tms320f28335的区别是什么?

论坛上看到的比较。
这几天刚拿到STM32F4的评估板,STM32F4这次的卖点就是FPU和DSP指令集,关注了挺长时间,这次就想测试一下STM32F4的浮点性能,如果满足就升级自己飞控的架构。本来用STM32F103+28335双核架构,F28335当浮点处理器用,调试起来比较麻烦,所以一直想换了。

测试代码就是用的我飞控的算法,全部使用浮点运算,包含姿态和位置两个7阶和9阶的卡尔曼滤波器,包含大量的矩阵运算以及部分导航算法和PID控制器等,还有部分IF和SWITCH包含跳转的判定语句,相比纯算法算是一个比较综合的运算。

测试环境:
F28335:CCS V3.3,使用TI优化的数学库,不开优化,程序在RAM里执行。
STM32F4:KEIL V4.7,使用ARM优化的数学库,不开优化。

测试方法:
F28335:在飞控算法入口设置断点,清零CCS的CPU计数器(profile->clock),然后STEP OVER,记录下CPU的计数
STM32F4:在飞控算法入口设置断点,记录下Register窗口内算states计数器,然后STEP OVER,记录下新的计数器数值,与之前的数值相减得到CPU计数

测试结果:
F28335:253359个CPU周期,除以150MHZ,大约是1.69ms
STM32F4:一共285964个周期,除以168MHZ,大约是1.7ms,比F28335略慢

结论就是,对于包含相对较多跳转的综合浮点算法而言,STM32F4似乎并不慢多少。

抛开架构因素,从纯浮点运算方面来看的话。STM32F4的FPU加减乘指令VADD.F32、VSUB.F32、VMUL.F32都是单周期指令,而除法VDIV.F32耗费14个周期。
例如:a = a / b;产生的汇编为:
0x08000220 ED900A00 VLDR s0,[r0,#0x00]

0x08000224 4804 LDR r0,[pc,#16] ; @0x08000238

0x08000226 EDD00A00 VLDR s1,[r0,#0x00]

0x0800022A EE801A20 VDIV.F32 s2,s0,s1

0x0800022E 4803 LDR r0,[pc,#12] ; @0x0800023C

0x08000230 ED801A00 VSTR s2,[r0,#0x00]
复制代码 F28335: F28335的FPU有加减乘法指令,都是双周期的,由于没有硬件除法指令,F28335这里是用软件模拟的浮点除法,汇编可以看到 LCR $div_f32.asm字样,需要19个时钟周期。
例如:a = a * b,产生的汇编为:
0087B2 E203 MOV32 *-SP[4], R0H

0087B4 E2AF MOV32 R1H, *-SP[6], UNCF

0087B6 E700 MPYF32 R0H, R1H, R0H

0087B8 7700 NOP //需要让流水线等待FPU运算完毕,所以需要NOP

0087B9 E203 MOV32 *-SP[4], R0H

复制代码 除法:
0087BD E203 MOV32 *-SP[4], R0H

0087BF E2AF MOV32 R1H, *-SP[6], UNCF

0087C1 7640 LCR $div_f32.asm:52:71$

0087C3 E203 MOV32 *-SP[4], R0H
复制代码 结论:
可见单从浮点处理器来说,F28335是不如F4的FPU的。但是由于F28335是哈佛架构,有较长的流水线,可以在一个时钟周期里完成读取,运算和存储,所以程序连续运行的话,就比ARM快上许多许多,比如执行一次a = a + b只需要5个时钟周期,但是缺点就是一旦要跳转,就必须清空流水线,如果是
for(i = 0;i < 1000; i ++)

a = a + b;
复制代码 这样的运算,速度反而要比ARM慢(测试下来单次是17周期,ARM是14).所以说这就是ARM和DSP不同的地方了。

看看这次测试比较,感觉环境还是有一定的问题:
1、F28335是在RAM中运行,并且两者都是在仿真器环境中进行运算,还是离线在Flash中跑比较靠谱。
2、两者编译平台一个是CCS,一个是KEIL,对通用语句的优化,有待商榷。
3、ARM和TI的数学库中,各自支持的运算种类不一样。

如果你是个初学者,可以到Ti的官网上下载相关技术文档,在其官网的应用笔记里有大量相关步进电机控制的应用案例和程序,只是需要自己消化一下。

320伺服电动机的驱动板,它因为功率是比较大的,所以整体来说它的驱动板上会有更多的电气元件,所以它的精度会比较高一些,但是32的伺服电动机相比较尤为功率比较低,但是精度非常的高。


15321758430tms320f28034与stm32f407在伺服电机驱动板的区别?
汲泽紫答:320伺服电动机的驱动板,它因为功率是比较大的,所以整体来说它的驱动板上会有更多的电气元件,所以它的精度会比较高一些,但是32的伺服电动机相比较尤为功率比较低,但是精度非常的高。

15321758430stm32f407和tms320f28335的对比
汲泽紫答:STM32F4:一共285964个周期,除以168MHZ,大约是1.7ms,比F28335略慢 结论就是,对于包含相对较多跳转的综合浮点算法而言,STM32F4似乎并不慢多少。抛开架构因素,从纯浮点运算方面来看的话。STM32F4的FPU加减乘指令VADD.F32、VSUB.F32、VMUL.F32都是单周期指令,而除法VDIV.F32耗费14个周期。例...

153217584303.已知STM32系统时钟频率为72 MHz,如何设置相关寄存器,实现10ms...
汲泽紫答:设置系统时钟:使用RCC寄存器设置PLL倍频系数,将系统时钟频率设置为72 MHz。选择合适的定时器:在STM32中有多个定时器可供选择,根据需要选取合适的定时器。假设在这里我们选用TIM2定时器。配置定时器:使用TIM2的相关寄存器配置定时器的时钟源、分频系数和计数周期等参数。可以将定时器的时钟源设置为内部时...

15321758430stm32f407能驱动ddr3吗
汲泽紫答:stm32f407能驱动ddr3。STM32f407程序移植到GD32F407,只需要更改相应的驱动即可,应用层可以直接使用,GD32的库函数对应stm32是标准库。

15321758430STM32F407的PWR->CR |=3<<14;是什么意思
汲泽紫答:PWR->CR |=3<<14;相当于:PWR->CR |=1100 0000 0000 0000B;

15321758430STM32中0x000f是什么地址,怎么得来的,我在寄存器里面找...
汲泽紫答:回答:这个 “&” 符号用在这里不是取地址的意思,是 “与操作” 的意思,假设GPIO_ReadInputData(KEYPORT) 函数得到的返回值是 0x1234;则经过这个与操作之后得到的数就是 0x0004 了!

15321758430如何提高stm32 f405flash读写速度
汲泽紫答:写入比较快16us每个字节,擦除时间非常长,大概擦除16K需要200ms while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。

15321758430stm32f303cc cb区别?
汲泽紫答:Stm32系列单片机是依法半导体推出的16位到32位高性能处理器,广泛应用于安防交通农业方面应用十分广泛,其中32F303CC和32F 303 CB这两个CPU的功能是一样引脚一样,只是前者支持200兆的速度,而后者可以支持高达800兆的速度且耗着存储器,容量是前者的5倍。

15321758430为什么stm32 f407 adc 采集正弦波得到的电压不是零就是3.3V
汲泽紫答:GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_UP;要设置成GPIO_PuPd_NOPULL

15321758430STM32中操作寄存器GPIOB_CRL &= ~( 0x0F<< (4*0))与GPIOB_CRL &=...
汲泽紫答:没有区别,在这个代码中用到4*0的作用是因为是用的是作用于PB0,而4是对应GPIO设置的最小位数,将4*0中的0改为1后就可以对PB1进行操作,这种写法是为了后续操作的快捷。所以对于只用到PB0的程序~(0x0F<<(4*0))和~0x0F是没有区别的,而若是使程序以后的修改更加的便利,还是推荐书上的...


(编辑:晏乳封)
联系方式:
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图
@ 作文摘要网