自制单片机信号发生器 vs dds模块
自制单片机信号发生器 vs dds模块一.单片机信号发生器,利用定时中断与函数查表法。
实物图:
http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_661585W3XZAG.jpg
自制信号发生器实物图 (原文件名:YH}6F1@YC]JQ1TLW~]VXOE0.jpg)
三个开关选择三种波形,按钮开关控制频率
Protues仿真:
http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_661586V2DN24.jpg
自制信号发生器仿真 (原文件名:
方波:
http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_661587H0H917.jpg
自制信号发生器方波 (原文件名:5`P8XM0
三角波:
http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_661588JCXL7J.jpg
自制信号发生器三角波 (原文件名:F}S%XJMH@WYDS.jpg)
正弦波:
http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_661589IJ4MXV.jpg
自制信号发生器正弦波 (原文件名:LK5MJNLXQ]0D3$7MGQDVREU.jpg)
二.dds模块,网上买的,实物我就不上了,用ad9851,有示例程序,编程还是很容易。
正弦波:
http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_661590KQJC8F.jpg
dds正弦波 (原文件名:T{R13U$HFBYH_G]]_I%CZ%F.jpg)
结论:用单片机做的信号发生器编程困难,外围芯片多,要用到dac0832数模转换,运放741进行电压转换,正弦波频率范围为0--3.9khz(我的算法),而且误差大。
用dds模块产生信号的关键是ad9851芯片,有示例程序,理论上频率范围为0---70M,误差小(低频时),且幅度可调。但价格贵(100元)
另外,我发现如果输出接瓷片电容对输出产生很大影响:
直接输出:
http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_661598EPTZAJ.jpg
直接输出 (原文件名:L2Q(_O%G6]}L~5O_S01R%%A.jpg)
接104到地:
http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_661599SC9GZE.jpg
输出与地接一个104电容 (原文件名:ZN0]82]_4WRBCSPCPX7L7RL.jpg)
接221到地:
http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_661600FMA9QK.jpg
接一个221电容 (原文件名:JCYVJGO}W%715@_)R4)R_TE.jpg)
并接2个221到地:
http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_661601M4H4RX.jpg
并接2个221电容 (原文件名:9E]X%)%`3X3{CZN1UC1]VWU.jpg)
先写到这吧有人就继续 mark 记号 如果你的单片机频率够高,输出信号的频率误差是不会太大的。
难道就没考虑过噪声是如何产生的? 输出频率的差距是巨大的! 用单片机频率误差是有很大,我设置周期是20ms, 但实际上周期是25ms 我老师说可能是运放电源引来了噪声,我也想知道为什么,加个电容太神奇了回复【3楼】huayuliang 花生
如果你的单片机频率够高,输出信号的频率误差是不会太大的。
难道就没考虑过噪声是如何产生的?
-----------------------------------------------------------------------
我老师说可能是运放电源引来了噪声,我也想知道为什么,加个电容太神奇了 不加buffer直接带容性负载,输出不稳。 cpld做还差不多 回复【6楼】Quavarion
-----------------------------------------------------------------------
如果你的电路就是仿真的图,基础上就是不完整的。滤波是必须的。 回复【9楼】huayuliang 花生
回复【6楼】quavarion
-----------------------------------------------------------------------
如果你的电路就是仿真的图,基础上就是不完整的。滤波是必须的。
-----------------------------------------------------------------------
长经验了,噪声是从电源来的吗?输出经过了741运放,将dac0832的电流输出转为电压输出。 回复【10楼】Quavarion
-----------------------------------------------------------------------
你有没有展开看? 是不是欠采样了? 回复【10楼】Quavarion
-----------------------------------------------------------------------
我是指输出滤波,不是对电源噪声处理,电源是之后的事情。 DAC0832的波形存在两个问题:
1. DAC0832的WR1/WR2没用上,输出肯定产生毛刺。抱着手册研究一下CS/ILE/WR1/WR2/XFER这5个信号的关系,至少要用单缓冲,51注意利用好ALE。
2. 大多数运放输出直接带电容负载会振荡,这是基本常识。
至于频率不准的问题,你把中断进入时间考虑进去了吗? 回复【11楼】ssaweee
回复【10楼】quavarion
-----------------------------------------------------------------------
你有没有展开看? 是不是欠采样了?
-----------------------------------------------------------------------
正弦波用查表法,每个定时中断发生时查到对应的2进制值,然后用da转为模拟值 回复【12楼】huayuliang 花生
回复【10楼】quavarion
-----------------------------------------------------------------------
我是指输出滤波,不是对电源噪声处理,电源是之后的事情。
-----------------------------------------------------------------------
最近正好在看滤波方面的问题,理论和实际偏差太大了 回复【13楼】gzhuli 咕唧霖
dac0832的波形存在两个问题:
1. dac0832的wr1/wr2没用上,输出肯定产生毛刺。抱着手册研究一下cs/ile/wr1/wr2/xfer这5个信号的关系,至少要用单缓冲,51注意利用好ale。
2. 大多数运放输出直接带电容负载会振荡,这是基本常识。
至于频率不准的问题,你把中断进入时间考虑进去了吗?
-----------------------------------------------------------------------
问题应该就是出在这儿,那些我直接接地或+5V.
频率的话,方波频率误差很小,几乎没有,但正弦波就比较大了,应该是正弦波中断查表时占了时间,所以实际上频率比理论上小。
/******方波T = 20 ms **********/
/*
void main()
{
EA= 1;
TR0 = 1;
TF0 = 0;
TMOD = 0x01;
TH0 = ( 65536 - 10000 ) / 256;
TL0 = ( 65536 - 10000 ) % 256;
P2 = 0xff;
while(1)
{
if( TF0 )
{
TF0 = 0;
P2 = ~P2;
TH0 = ( 65536 - 10000 ) / 256;
TL0 = ( 65536 - 10000 ) % 256;
}
}
}
/************正弦波 T= 20ms计数器初值=(65536 – 20ms/4/64/1us***********/
#include<reg52.h>
unsigned int i = 0;
unsigned char code sin2={ 0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,
0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,
0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,
0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,
0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,
0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,
0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,
0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,
0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,
0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,
0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,
0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,
0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,
0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,
0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,
0x40,0x43,0x45,0x48,0x4c,0x4e ,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,
0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 };
void sinfun()
{
P2 = sin2;
i = i %255;
}
void Timer0( void ) interrupt 1 using 0
{
TH0 = ( 65536 - 78 ) / 256;
TL0 = ( 65536 - 78 ) % 256;
sinfun();
}
void main()
{
EA = 1;
TR0= 1;
TMOD = 0x01;
ET0= 1;
TH0 = ( 65536 - 78 ) / 256;
TL0 = ( 65536 - 78 ) % 256;
while(1);
} 回复【14楼】Quavarion
回复【11楼】ssaweee
回复【10楼】quavarion
-----------------------------------------------------------------------
你有没有展开看? 是不是欠采样了?
-----------------------------------------------------------------------
正弦波用查表法,每个定时中断发生时查到对应的2进制值,然后用da转为模拟值
-----------------------------------------------------------------------
我是说你9851未滤波输出,是不是示波器欠采样了?
如果示波器打到比较慢的档位去看高频的信号就会这样。 回复【17楼】ssaweee
回复【14楼】quavarion
回复【11楼】ssaweee
回复【10楼】quavarion
-----------------------------------------------------------------------
你有没有展开看? 是不是欠采样了?
-----------------------------------------------------------------------
正弦波用查表法,每个定时中断发生时查到对应的2进制值,然后用da转为模拟值
-----------------------------------------------------------------------
我是说你9851未滤波输出,是不是示波器欠采样了?
如果示波器打到比较慢的档位去看高频的信号就会这样。
-----------------------------------------------------------------------
那个输出有杂波要加电容的是我用单片机自己做的信号源,见protues电路图。
买的DDS模块使用的是9851,能直接输出效果很好的波形(模块里有滤波电路) 请问自制DDS模块怎么输出的正弦波杂波很多啊,而且不稳定...求解关于后端加电容的经验。谢谢~~ 回复【18楼】Quavarion
-----------------------------------------------------------------------
LZ能不能把你买的DDS模块的电路图和程序发过来参考下啊,最近在做DDS,效果不是很好...小弟在这谢了~~~邮箱546427209@qq.com 回复【20楼】fuwa
-----------------------------------------------------------------------
汗,貌似都买的100¥的DDS啊。。。 回复【20楼】fuwa
回复【18楼】quavarion
-----------------------------------------------------------------------
lz能不能把你买的dds模块的电路图和程序发过来参考下啊,最近在做dds,效果不是很好...小弟在这谢了~~~邮箱546427209@qq.com
-----------------------------------------------------------------------
注意查收:) 正努力做,有问题还要多请教你呢,哈哈哈 欢迎大家讨论 mark mark 回复【26楼】Quavarion
欢迎大家讨论
-----------------------------------------------------------------------
楼主也发一份资料吧 正需要用呢,不知这个副值能调吗
kkang.mail@tom.com 谢谢 有全部的程序吗???求共享!!! 俺玩過這個開源的, 參考看看
http://xiaolaba.wordpress.com/2011/11/19/70khz-lf-receiver-different-waveform-and-dds-performance/]http://xiaolaba.wordpress.com/2011/11/19/70khz-lf-receiver-different-waveform-and-dds-performance/ 还是把购买的DDS模块芯片资料发上来 kangkai613 发表于 2012-2-14 13:33 static/image/common/back.gif
回复【26楼】Quavarion
欢迎大家讨论
---------------------------------------------------------------- ...
已经发到你邮箱了
页:
[1]