打印
[CW32F030系列]

三角函数查表法

[复制链接]
211|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elsaflower|  楼主 | 2025-6-16 21:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在单片机运算中,以整数形式或说定点数形式进行运算会比以浮点数形式运算快。电机控制中,经常需要用到三角函数,正弦,余弦,或者正切,求解这一类函数对于性能没那么优秀的单片机来说十分吃力,实际表现为计算时间长,甚至超过实时运行着的电机系统控制周期,这样对电机控制是十分不利的。
为此可以构建一个三角函数表,使用查表来代替计算,缩短计算所需的时间。以下为构表思路。

一、计算正弦函数值
考虑到在单片机中使用数组去保存三角函数值,为了最大程度节省存储空间,所以在数组中只保存正弦函数在第一象限的函数值,余弦函数和正弦函数其他象限的函数值均由他们之间的关系得出。
以步长1°去构建正弦函数在第一象限的值,同时为了更快地在单片机中运算,把函数值放大1000倍取整,可以得出以下函数值。


补充一个值:10000*sin90 = 9999


二、正余弦函数之间的关系
以下角度范围统一为 -180°~+180°
在第一象限内正余弦函数有如下关系式:

第四象限与第一象限正余弦函数的关系式:

第二象限与第一象限正余弦函数的关系式:

第三象限与第一象限正余弦函数的关系式:





三、根据关系式编写代码
由以上各个象限之间的关系式,编写一个查询函数,如下:
返回值的定义:
三、验证
编写代码将查表的函数值与使用三角函数计算出来的值作对比,一致则建表成功。
验证代码如下:
部分结果输出截图如下:
从输出来看,查表得到的值与计算的值无差异,建表成功。


四、在LPC824上对比使用查表法与实时计算的耗时
单片机的系统时钟为30M,简单测试代码如下:
在循环中插入代码,然后单片机的GPIO0_13接入逻辑分析仪,高电平保持时间即为在单片机中实时计算三角函数的计算耗时。
实时计算的耗时如下:
平均约414us。
查表的耗时如下:
最长耗时一个查表周期约在13us,但绝大部分时间平均4us。


使用特权

评论回复
沙发
中国龙芯CDX| | 2025-6-16 21:23 | 只看该作者
确实好的方法能够省大部分时间

使用特权

评论回复
板凳
小小蚂蚁举千斤| | 2025-6-19 22:33 | 只看该作者
方法非常不错

使用特权

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

本版积分规则

35

主题

1497

帖子

0

粉丝