基于AVR单片机的实时正弦表计算
yanli123212013/12/30软件综合 IP:天津
本帖最后由 yanli12321 于 2013-12-30 16:10 编辑

这几天刚开始学信号与系统,看到差分方程这块,突然再一次来了灵感:能不能搞出这么一个差分方程,使得他的通解为y(k)=sin(kβ)?
然后就是一下午的计算..............................................
终于搞出这么个东西
推导1.jpg
从数学角度讲呢,就是如果已知一个以β角步进的正弦表的某连续两位的值和cosβ,就可以通过这个很简单的运算得到下一位的值,以此类推,就可以得出整个正弦表。
通俗一点讲呢,这个相当于模拟LC振荡,把实时得到的数据当做正弦表输出。
推出这个东西激动了好久,星期天专门做了一次试验,看看能不能用这个思路给AVR单片机编个SPWM程序。
然后又是一天的编程..........................................
中间出现了无数奇葩波形,比如
波形1.jpg
再比如
波形2.jpg
最后...........终于搞正常了
成功.jpg
这个波形是ATMEGA16在12M晶振下实现的256点正弦表计算,算出的数据送至硬件PWM输出,再示波器数字滤波得到的。
事实证明,我的思路是可行的,但事实同时证明了我这个算法在节约大量ROM的同时占掉了CPU的绝大部分资源,因为程序的核心部分全部是浮点计算..........avr几乎拼了老命才算出这个正弦表,不过速度依然比自带的三角库函数快得多。
最后,附上代码,编译环境为GCCAVR,通过修改n值可以得到采样点数为2n的正弦表,注意n最好不要大于128,否则AVR可能算不过来。
+100  科创币    金坷居士    2013/12/30 高质量发帖
+25  科创币    张静茹    2013/12/30 高质量发帖 加精
+20  科创币    量子隧道    2013/12/30 高质量发帖
来自:计算机科学 / 软件综合
11
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
yanli12321 作者
10年4个月前 IP:未同步
662286
张静茹 发表于 2014-1-9 18:50
把程序注释一下吧~~~~


偷懒了.................过几天我会试试定点计算,到时候会加上注释........
引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
yanli12321
学者 机友 笔友
文章
47
回复
1182
学术分
3
2012/03/04注册,1个月23天前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}