打印

28335的浮点运算问题

[复制链接]
10099|11
手机看帖
扫描二维码
随时随地手机跟帖
沙发
lianshumou| | 2008-8-1 10:42 | 只看该作者

应当是编译器自动分配的!不是双核,只是多了浮点指令

使用特权

评论回复
板凳
mac001| | 2008-8-1 17:27 | 只看该作者

没有用到过

不知道C2000的浮点运算模块,跟C3000C67x是不是一样的。

使用特权

评论回复
地板
tptzj|  楼主 | 2008-8-5 14:59 | 只看该作者

大概看了一下,好像跟TI以前的浮点运算不太一样

使用特权

评论回复
5
hansonhe| | 2012-2-11 23:50 | 只看该作者
可以参考如下例程代码,使用FPU。

一个32位乘法

cpu运算需要2079个CPU周期 2079*6.67ns=13866.93ns=13.86us

FPU运算需要75个CPU周期 75*6.67ns=500.25ns=0.5us

FPU运算一个浮点的sin函数 73*6.67=486.91ns=0.486us (sin函数无法输出180°到360°的负值)

FPU运算一个浮点的sin函数 71*6.67=473.57ns=0.473us

71这个数字是有浮动的。

相差两位数啊!

需要加载 头文件 math.h 库文件使用 rts2800_fpu32.lib



value=sin(1.57)*2+cos(0.5)*2;//147 cpu cycles
ESTOP0;
value=cos(0.5);// 70 cpu cycles
ESTOP0;//software breakpoint
value=2*value+3;// 5 cpu cycles
ESTOP0;
value=value*0.5;// 3 cpu cycles
ESTOP0;
value=value/2;//155 cpu cycles===1us
ESTOP0;由此可以看出来,在计算除法的时候尽量把除法化为乘法计算,乘法比除法速度快的太多了。

下面是psim仿真SVPWM的时候用c BLOCK写的程序,实现的SVPWM功能。

//输入和输出变量说明
//x1----alpha
//x2----beta
//x3----Vdc 母线电压
//x4----Ts Tpwm pwm周期
//y1----扇区号
//y2----tcm1
//y3----tcm2
//y4----tcm3
//----------------------------------------------------扇区判断
float u1,u2,u3;//扇区判断中间变量
unsigned char A,B,C,N;//扇区判断中间变量
float x,y,z;//PWM波中间变量
float tx,ty;//PWM波中间变量
float txx,tyy;
float ta,tb,tc;//PWM波中间变量
//float tcm1,tcm2,tcm3;//PWM波中间变量
u1=x2;
u2=0.866*x1-0.5*x2;
u3=-0.866*x1-0.5*x2;
if(u1>0)
A=1;
else
A=0;
if(u2>0)
B=1;
else
B=0;
if(u3>0)
C=1;
else
C=0;
N=4*C+2*B+A;
switch(N)
{
case 1:N=2;break;
case 2:N=6;break;
case 3:N=1;break;
case 4:N=4;break;
case 5:N=3;break;
case 6:N=5;break;
}
y1=N;//输出扇区号码


x=1.414*x2*x4/x3; //一次除法
y=(x1+0.5774*x2)*1.2247*x4/x3; //第二次除法
z=(x1-0.5774*x2)*1.2447*x4/x3; //第三次除法

switch(N)
{
case 1:tx=z;ty=x;break;
case 2:tx=-z;ty=y;break;
case 3:tx=x;ty=-y;break;
case 4:tx=-x;ty=-z;break;
case 5:tx=-y;ty=z;break;
case 6:tx=y;ty=-x;break;
}
if((tx+ty)>x4||(tx+ty)==x4)
{
txx=tx*x4/(tx+ty); //第四次除法
tyy=ty*x4/(tx+ty); //第五次除法
tx=txx;
ty=tyy;
}

ta=(x4-tx-ty)/4; //可以变除法为乘法
tb=ta+tx/2; //可以变除法为乘法
tc=tb+ty/2; //可以变除法为乘法

switch(N)
{
case 1:y2=ta;y3=tb;y4=tc;break;
case 2:y2=tb;y3=ta;y4=tc;break;
case 3:y2=tc;y3=ta;y4=tb;break;
case 4:y2=tc;y3=tb;y4=ta;break;
case 5:y2=tb;y3=tc;y4=ta;break;
case 6:y2=ta;y3=tc;y4=tb;break;
}


可以看出SVPWM最多有5此除法,根据前面的分析,5次除法大约使用了5us的时间。

20khz的载波频率,Tpwm=50us。50-5=45us

45us/6.67ns=6746.6(CPU cycles)

因此在中断内部实现矢量控制还是很有可能的。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
hpujie + 1 赞一个!
6
TI_MCU| | 2012-2-13 09:57 | 只看该作者
FPU是CPU中的一个协处理单元,一般来说编译器会自动把相应的代码放在FPU中进行计算的。所以编程的时候只要声明成合适的浮点型变量就可以了

使用特权

评论回复
7
balabalaa| | 2012-2-13 10:57 | 只看该作者
谢谢楼上的。

使用特权

评论回复
8
sqcumt123| | 2012-2-13 14:05 | 只看该作者
5楼的说得很详细啊,楼主参考

使用特权

评论回复
9
wkwangke123| | 2015-8-23 16:55 | 只看该作者
厉害,我现在也在做SVPWM,用的是28335正在纠结用浮点还是定点。不过现在看来,直接用浮点试试吧。

使用特权

评论回复
10
到此寻渡| | 2016-6-26 09:44 | 只看该作者
我遇到了一个问题,查找了很久都没能解决,我已经将库文件和头文件添加到文件搜索路径和link路径,为什么还是Description        Resource        Path        Location        Type#1965 cannot open source file "fpu_fft_hamming.h";
Description        Resource        Path        Location        Type #1965 cannot open source file "fpu_cfft.h"        CFFT_f32_sincostable.c        /rfft/dsp/FPU/v1_50_00_00/source/fft       
Description        Resource        Path        Location        Type#1965 cannot open source file "fpu_rfft.h"        RFFT_f32_sincostable.c        /rfft/dsp/FPU/v1_50_00_00/source/fft        line 18        C/C++ Problem@TI_MCU 谢谢




使用特权

评论回复
11
mmbs| | 2016-6-26 23:11 | 只看该作者
这个芯片是双处理器吗

使用特权

评论回复
12
mmbs| | 2016-6-26 23:12 | 只看该作者
这个是浮点运算?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

76

帖子

0

粉丝