找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3042|回复: 9
收起左侧

使用STM32生成正弦波程序看不懂,本人小白

[复制链接]
ID:851922 发表于 2021-1-18 16:52 | 显示全部楼层 |阅读模式
不知哪位大佬给解释解释下面那个公式 小白看不懂
void SineWave_Data( u16 cycle ,u16 *D,float Um)
{
    u16 i;
    for( i=0;i<cycle;i++)
    {
        D[ i]=(u16)((Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)*4095/3.3);
回复

使用道具 举报

ID:592807 发表于 2021-1-19 08:51 | 显示全部楼层

    for( i=0;i<cycle;i++)
    {
        D[ i]=(u16)((Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)*4095/3.3);
    }

在这里sin(( 1.0*i/(cycle-1))*2*PI)你可以理解成sin(x)(x >= 0 且 x <=2派,当i= 0时,x= 0;当i= cycle - 1时, x = 2派,x随着i的增大而增大),cycle就是sin(x)的周期,也可以说是宽度,cycle越大,正弦波的过零点距离越大。


在这里(Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)你可以理解成A * sin(x) +A,A就是正弦波的幅度也就是最大值,A*sin(x)+ A,就是将正弦波函数的向上挪移A个单位,这样就将正弦波中的负数值变为正数值,最大值变成2A,最小值变为0.



最后那个*4095/3.3,就是个模数转换,将模拟量转换成数字量,4095是12位的DAC。



这个函数一般用作模数转换或者LCD画图像。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:752974 发表于 2021-1-19 10:32 | 显示全部楼层
正弦波生成我比较喜欢用查表法,简单,CPU负担也小。先将一个周期的正弦波数据算好存储,然后读数据输出就可以了。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:584814 发表于 2021-1-19 16:19 | 显示全部楼层
楼上的解释都深奥了,要先解释什么是三角函数才合理
回复

使用道具 举报

ID:592807 发表于 2021-1-19 20:30 | 显示全部楼层
man1234567 发表于 2021-1-19 16:19
楼上的解释都深奥了,要先解释什么是三角函数才合理

如果真的是这中纯粹的小白,那只能当我没回过这个贴,教不了,告辞。
回复

使用道具 举报

ID:752974 发表于 2021-1-20 08:39 | 显示全部楼层
man1234567 发表于 2021-1-19 16:19
楼上的解释都深奥了,要先解释什么是三角函数才合理

不知道三角函数的话,就别要自行车了!
回复

使用道具 举报

ID:612392 发表于 2021-1-20 09:01 | 显示全部楼层
为什么不查表呢?这样计算,就是在浪费MCU资源呀。。。
回复

使用道具 举报

ID:851922 发表于 2021-1-20 20:16 | 显示全部楼层

懂了 懂了  非常感谢
回复

使用道具 举报

ID:851922 发表于 2021-1-20 20:17 | 显示全部楼层
man1234567 发表于 2021-1-19 16:19
楼上的解释都深奥了,要先解释什么是三角函数才合理

哈哈哈  从三角函数开始倒还不至于
回复

使用道具 举报

ID:213124 发表于 2021-1-20 22:50 | 显示全部楼层
三十年前,老师傅们做的变频器
就不用单片机,用存储模块,数字电路,就可以生成了
单片机里,存一个表,定时输出表里的数据,再DA就成啊
简单,高效
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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