硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2549|回复: 7
收起左侧

[emWin] 有关ST-DSP库的问题

[复制链接]

270

主题

605

回帖

1415

积分

至尊会员

积分
1415
发表于 2018-11-4 17:38:29 | 显示全部楼层 |阅读模式
看ST的DSP库源码,发现有q7/q15/q31这三种Q格式的文件,没有发现Q20/Q24这种格式的呢?
现在有一个原来TI的C2000的库,用的是Q20/Q24这种定点浮点数格式的。不知道要怎么转换成ST的DSP库函数
有什么办法么
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2018-11-5 01:12:36 | 显示全部楼层
这个不是ST的库,是ARM的库。直接使用ARM的就行,没必要用TI的转,因为ARM的DSP是做了专门的指令优化的,专用于M内核。

互转的话,比如Q31转Q20就是右移11位。
回复

使用道具 举报

270

主题

605

回帖

1415

积分

至尊会员

积分
1415
 楼主| 发表于 2018-11-5 09:27:21 | 显示全部楼层
eric2013 发表于 2018-11-5 01:12
这个不是ST的库,是ARM的库。直接使用ARM的就行,没必要用TI的转,因为ARM的DSP是做了专门的指令优化的,专 ...

其实我在想,我直接用ARM的math库算了,只要包含<math.h>就可以了,直接用浮点运算表达式就好了。
但是的话呢,原来的代码是用的整型转换成浮点型的。如果要用浮点运算式写的话,得知道对应的浮点数值呀。。比如说原来代码中是这种写的:
SPEED_CALC_FACTOR = _IQ20( (float)SPEED_LOOP_FREQ*2*PI/motor_parameter[parameter_table[Version]].LineEncoder );其中:
s32 SPEED_CALC_FACTOR
SPEED_LOOP_FREQ:这个为整数,#define SPEED_LOOP_FREQ               ( CURRENT_LOOP_FREQ/SPEED_LOOP_PRESCALER )
motor_parameter[parameter_table[Version]].LineEncoder:这个也是u16的类型
#define _IQ20(A)                ((_iq20)((A) * (1 << 20)))  typedef long _iq20;

那么这个搞的就有点晕了,
(float)SPEED_LOOP_FREQ*2*PI/motor_parameter[parameter_table[Version]].LineEncoder
此表达式一算,应该是个浮点数,但(_iq20)((A)这么一搞,是什么意思呢,把浮点数转为long型再移位,得到的是什么呀?

如果要用运算表达式计算的话,直接写成
SPEED_CALC_FACTOR =(s32)((float)SPEED_LOOP_FREQ*2*PI / motor_parameter[parameter_table[Version]].LineEncoder)
是不是可以呢?

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2018-11-6 02:27:11 | 显示全部楼层
jplzl10000 发表于 2018-11-5 09:27
其实我在想,我直接用ARM的math库算了,只要包含就可以了,直接用浮点运算表达式就好了。
但是的话呢, ...

TI的库倒腾的这么麻烦,直接用ARM吧。
回复

使用道具 举报

270

主题

605

回帖

1415

积分

至尊会员

积分
1415
 楼主| 发表于 2018-11-6 09:23:52 | 显示全部楼层
eric2013 发表于 2018-11-6 02:27
TI的库倒腾的这么麻烦,直接用ARM吧。

老大,我这不是正想用呢嘛。。。
这个是原来C2000上面的FOC算法,用的就是IQmath的库呀。
这不是正要移植到103/407上面么
哎,又没有原来DSP上的运行结果进行对比,也不知道代码里面的表达式要怎么转换成ARM下的运算式哦
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2018-11-7 02:04:40 | 显示全部楼层
jplzl10000 发表于 2018-11-6 09:23
老大,我这不是正想用呢嘛。。。
这个是原来C2000上面的FOC算法,用的就是IQmath的库呀。
这不是正要移 ...

有一点确认下,这个库是纯C的不,如果是的话,那还好整。
回复

使用道具 举报

270

主题

605

回帖

1415

积分

至尊会员

积分
1415
 楼主| 发表于 2018-11-7 11:23:10 | 显示全部楼层
eric2013 发表于 2018-11-7 02:04
有一点确认下,这个库是纯C的不,如果是的话,那还好整。

是纯C的呀
可以用在TI的CM3/CM4上的,不光是DSP能用
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2018-11-8 02:36:29 | 显示全部楼层
jplzl10000 发表于 2018-11-7 11:23
是纯C的呀
可以用在TI的CM3/CM4上的,不光是DSP能用

那可以直接移植下试试。有源码吗,上传下,我也学习学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-19 11:23 , Processed in 0.039969 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表