单片机或者 FPGA能不能通过设计程序 输出正弦波 锯齿波以及其他波形?

我想可能的话主要应该是通过 单片机的 AD DA功能,,但是我想这样肯定能输出三角波,锯齿波仔细想想也是可能的,就是正弦波好像不行啊, C语言里面 Keil 软件提供的程序库里面有正弦函数或者可以输出正弦的有关函数吗?

或者有其他思路的,可以讲讲么?我是个新手,看看淘宝上 信号发生器挺贵的,不知道能不能把 单片机和 FPGA当 信号发生器使呢?

讲讲原理就行,要用到哪些知识哪些部分,不需要实际程序,行有行的道理,不行有不行的道理;都讲讲吧,谢谢了
不限于正弦波锯齿波之类,只要是 信号发生器能输出的,有哪些可以自己编程搞出来,哪些搞不出来的,都说说,谢谢了
除了大量查表外,有其它的办法吗?能模拟的更像一点的?

DDS不是FPGA或者51能干的事吧?要再买东西的吧?

大哥们,除了建表没办法了吗?有没有简单一点的???

用DDS方法去产生你需要的任意波形,比如AD9850,单片机控制其产生正弦波或者锯齿波,频率可以任意调整。

一个DDS芯片AD9850,一片单片机AT89S52,全搞定,比你用FPGA简单多了吧?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-27
用51单片机或者FPGA完全可以实现正弦波的输出,具体的方法有:
1.你说的查表法,就是在ROM里面建一个表格,只需要四分之一正弦波的数据就可以了,然后用DA输出;
2.用PWM波的方法,就是用单片机的定时计数器输出不同占空比的方波,后端用合适的低通滤波器滤波,就能产生不同幅值的模拟信号正弦波,低通滤波器将方波的高频部分滤掉,PWM波的占空比越大,输出的模拟信号幅值就越高;
3.使用DDS技术,一块DDS芯片中主要包括频率控制寄存器、高速相位累加器和正弦计算器三个部分。频率控制寄存器可以串行或并行的方式装载并寄存用户输入的频率控制码;而相位累加器根据 dds频率控制码在每个时钟周期内进行相位累加,得到一个相位值;正弦计算器则对该相位值计算数字化正弦波幅度(芯片一般通过查表得到)。DDS芯片输出的一般是数字化的正弦波,因此还需经过高速D/A转换器和低通滤波器才能得到一个可用的模拟频率信号。
总之,上述方法一最简单,但是产生的只是比较粗糙的正弦波,方法三最麻烦,不过最精确,看看你的应用场合再具体选择吧。这里只是提供一个思路,具体的方法还要你下去查阅大量的资料,祝你早日解决问题!本回答被提问者采纳
第2个回答  2011-03-24
正弦也可以的.
波形其实也是由很多个输出值连接起来的,如果值比较少,看起来毛刺比较多,曲线不够圆滑,如果输出值多了,自然就圆滑了.
根据曲线周期,然后根据DA转换参数,计算出,一个周期内的输出值得个数,然后再计算出每个值得大小,根据该值输出即可.
另外输出的效果还和液晶的分辨率有关.
简单些,可以先画一个正弦曲线,然后自己用笔进行等时间间隔描点.
信号发生器能实现的所有的波形,都可以自己编程出来,只是效果可能没有信号发生器好.
第3个回答  2011-03-24
查表简单一些,因为正弦的计算量比较大,一般的单片机算不来,比较常见的方法是,用MATLAB程序做一张正弦表,在程序里格式设置好了,自动生成数据表,然后贴到程序里就行了。
FPGA速度虽然比较快,但常见的也是用查表法。
信号发生器,也可以用模拟电路搭,曾经见人做过,正弦,方波,三角波的等,只用了四五个运放,效果也不错。
第4个回答  2011-03-24
最简单的方法就是查表法,就是你事先生成一个表,这个表的值是SIN的值的集合。看你取多少个点这个表就有多长,比如说我要360个点,这个表就有360个数。然后保存在ROM里面,按时钟读出ROM的数据输出到DA,最后接一个滤波器,就可以在示波器上观察了。其实很简单的。
相似回答