OpenEdv-开源电子网

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

产生正弦波

[复制链接]

15

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2019-1-10
在线时间
32 小时
发表于 2019-1-16 11:36:29 | 显示全部楼层 |阅读模式
1金钱
void SineWave_Data( u16 cycle ,u16 *D)
{
    u16 i;
    for( i=0;i<cycle;i++)
    {
        D[i]=(u16)((Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)*4095/3.3);
    }
}
这是看到别人分享生成正弦波形输出表的函数,但是不懂什么意思,麻烦大家给我指点一下。


最佳答案

查看完整内容[请看2#楼]

D=(u16)((Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)*4095/3.3);等效如下 D=(u16)((Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)/3.3/4095); -- cycle为将一个周期的正玄波切割几段 -- 1.0*目前使得计算使用float型运算保证运算精度 -- Um为设置输出正弦幅值 -- 由于Um*sin范围为[-Um,Um],但输出为单边电源必须加一个直流大于0 +Um使得[-Um,Um]变为[0,2Um] -- *4095/3.3等效为/3.3/4095这样就好理解了 而3.3/4095就是12位DA ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2019-1-16 11:36:30 | 显示全部楼层
D[i]=(u16)((Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)*4095/3.3);等效如下
D[i]=(u16)((Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)/3.3/4095);

-- cycle为将一个周期的正玄波切割几段
-- 1.0*目前使得计算使用float型运算保证运算精度
-- Um为设置输出正弦幅值
-- 由于Um*sin范围为[-Um,Um],但输出为单边电源必须加一个直流大于0
    +Um使得[-Um,Um]变为[0,2Um]
-- *4095/3.3等效为/3.3/4095这样就好理解了
     而3.3/4095就是12位DAC最大输出3.3V的分辨率
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

头像被屏蔽

18

主题

184

帖子

0

精华

禁止发言

积分
258
金钱
258
注册时间
2019-1-10
在线时间
10 小时
发表于 2019-1-16 15:45:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

15

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2019-1-10
在线时间
32 小时
 楼主| 发表于 2019-1-21 10:54:07 | 显示全部楼层
DongInker 发表于 2019-1-16 15:40
D=(u16)((Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)*4095/3.3);等效如下
D=(u16)((Um*sin(( 1.0*i/(cycle-1))* ...

谢谢你!
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2018-7-13
在线时间
2 小时
发表于 2019-2-21 16:07:22 | 显示全部楼层
请问最后的*4095/3.3 等效于 3.3/4095是什么意思?为什么要作这个运算
回复

使用道具 举报

4

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2016-10-9
在线时间
48 小时
发表于 2022-10-10 14:47:06 | 显示全部楼层
DongInker 发表于 2019-1-16 11:36
D=(u16)((Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)*4095/3.3);等效如下
D=(u16)((Um*sin(( 1.0*i/(cycle-1))* ...

*4095/3.3等效为/3.3/4095  这个怎么等效啊,计算的话差距非常大的,
(u16)((Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)*3.3/4095)  我感觉这样计算才是对的,
但是网上都是这样(u16)((Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)*4095/3.3)    实在不明白
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 01:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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