OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4066|回复: 4

自制正弦表生成器(附源代码)

[复制链接]

4

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
402
金钱
402
注册时间
2021-4-8
在线时间
52 小时
发表于 2021-4-20 14:00:43 | 显示全部楼层 |阅读模式
用于32生成正弦函数时正弦表的生成,可将其直接移植到32程序中。也可先运算后将正弦表添加在32程序中,以查表的方式输出正弦函数。
###注意###
1.        数据为0-3.3V输出
        12位DAC
                理论上只要是12位DAC均可使用,不是12位DAC可修改源代码中参数使用
        其余系列DAC可修改源代码中数值来使用
2.        该应用为无用户界面,非常精简,效率也比较高
        不喜勿喷
3.        关于移植,会C语言的都没问题
        相当简单
4.        仅供学习交流

自制正弦表生成软件.zip

42.26 KB, 下载次数: 34

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8645
金钱
8645
注册时间
2020-5-11
在线时间
4102 小时
发表于 2021-4-20 20:02:09 | 显示全部楼层
本帖最后由 LcwSwust 于 2021-4-20 20:07 编辑

我这有个用串口的:

  1. //以下注释内容用于产生正弦表与余弦表,将数组发送到串口,
  2. //可根据个人需要进行修改.
  3. //--------------------------------------------------
  4. //数据转字符串
  5. //--------------------------------------------------
  6. void Num2Str(S32 num,U8 *s,U8 size)
  7. {
  8.         U8 i,n[15]={0};//位数,要显示的数字
  9.         U32 unum=0;
  10.         U8 sign=0;
  11.         //U16 num1;
  12.         if(size<1)size=1;
  13.         if(size>12)size=12;//限制size
  14.         i=0;
  15.         if(num<0)//负数
  16.         {               
  17.                 unum=-num;//取绝对值
  18.                 sign='-';               
  19.         }
  20.         else
  21.         {
  22.                 unum=num;
  23.         }       
  24.         while(unum)//位数为i
  25.         {
  26.                 n[i++]=unum%10+'0';
  27.                 unum=unum/10;
  28.         }
  29.         if(i<1)//至少有一位0
  30.         {
  31.                 n[i++]='0';
  32.         }
  33.         if(sign)n[i++]=sign;       
  34.         while(i<size)//不足size 前方加空格
  35.         {
  36.                 n[i++]=' ';
  37.         }
  38.         while((i!=0)&&(size--))//数据位、最大长度都有限制
  39.         {
  40.                 *(s++)=n[--i];
  41.         }
  42.         *(s++)=0;
  43. }
  44. //--------------------------------------------------
  45. //把S8数据转为4个字符,左方以空格填充
  46. //--------------------------------------------------
  47. void SendN10(S8 n)
  48. {
  49.         U8 buf[10];
  50.         Num2Str(n,buf,4);
  51.         uart1_sendstr(buf);
  52. }
  53. //发送16进制字符
  54. void SendHEX(U8 n)
  55. {
  56.         code U8 num[]="0123456789ABCDEF";
  57.         uart1_sendstr("0x");
  58.         uart1_sendbyte(num[n>>4]);
  59.         uart1_sendbyte(num[n&0x0f]);
  60. }
  61. //--------------------------------------------------
  62. //生成正弦或余弦表格
  63. //结果放大127倍,范围为-127~+127.
  64. //type=0 表示正弦,type=1 表示余弦
  65. //Cn周期数,Tn总点数,表示以Tn个点形成Cn个周期
  66. //        MakeSinTab(0,2,256);//生成256点正弦表,2周期
  67. //--------------------------------------------------
  68. void MakeSinTab(U8 type,U16 Cn,U16 Tn)
  69. {
  70.         S16 d,i;
  71.         float v=0;
  72.         for(i=0;i<Tn;i++)
  73.         {
  74.                 if(type==0)
  75.                         v=sin(i*Cn*6.2832/Tn)*127;//sin库函数需包含头文件<MATH.H>
  76.                 else if(type==1)
  77.                         v=cos(i*Cn*6.2832/Tn)*127;//余弦
  78.                 if(v>0)
  79.                         d=v+0.5;//四舍五入
  80.                 else
  81.                         d=v-0.5;
  82.                 SendN10(d);//数据转字符
  83.                 uart1_sendstr(",");               
  84.                 if((i%16)==15)//每16个数据换一行
  85.                 {
  86.                         uart1_sendstr("\r\n");       
  87.                 }
  88.         }
  89. }
复制代码


专治疑难杂症
回复 支持 1 反对 0

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2021-2-4
在线时间
11 小时
发表于 2021-4-21 11:34:45 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2021-4-12
在线时间
1 小时
发表于 2021-4-21 15:56:43 | 显示全部楼层
牛逼!刚好需要,谢谢分享!
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
402
金钱
402
注册时间
2021-4-8
在线时间
52 小时
 楼主| 发表于 2021-4-21 16:24:34 | 显示全部楼层
LcwSwust 发表于 2021-4-20 20:02
我这有个用串口的:

感谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 02:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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