基于Mega8单片机和AD9833的正弦波信号发生器(原创)
去年9月开始学习、使用Mega单片机,从本站获得了许多帮助,特别是《新手入门》以及技术论坛,获益匪浅!为感谢阿莫、HJJourAVR及许多同仁的帮助,特展示一下我的设计:基于Mega8单片机和AD9833的正弦波信号发生器。AD公司生产的AD9833是一款低功耗、可编程波形发生器,在Mega8单片机的控制下可生成0-12.5MHz的正弦波,还可以生成三角波和方波。硬件电路:参考AD9833的典型电路。
软件方面:编程时需要注意以下几个问题:第一,Mega8单片机虽然具有硬件SPI总线功能,但是一次只能传输8位数据位,而AD9833在接收数据时是16位数据位,因此,需要用软件模拟SPI总线,如同软件模拟I2C总线;第二,AD9833在接收16位数据时是高位在前,低位在后;第三,先发送控制寄存器字(注意B28的定义,B28=1时,进行两次连续写操作)然后发送想要的频率字(注意低字节在前,高字节在后);第四,发送数据前必须把FSYNC置成低电平,发送完以后把FSYNC置成高电平。
http://cache.amobbs.com/bbs_upload782111/files_8/armok01165782.JPG
http://cache.amobbs.com/bbs_upload782111/files_8/armok01165783.JPG
http://cache.amobbs.com/bbs_upload782111/files_8/armok01165784.JPG
http://cache.amobbs.com/bbs_upload782111/files_8/armok01165785.JPG
上面展示的5Hz、50Hz、500Hz、5000Hz的正弦波。
补充:
因为东西都在办公室的计算机上,今天上班才能把程序和原理图发过来!
点击此处下载armok01166279.rar
感谢网上朋友们的帮助! 请阿莫给我加点分呀! 波形不错啊!
呵呵,要上传SCH,源代码等才能置成COOL呢。 ok不错 不错啊,顶下,我以前做过用ICL8038和MAX038搞的信号发生器,不过还是想搞搞DDS,不过芯片实在是不好找,顺路问下AD9833哪里能搞到啊,问遍了电子市场都没DDS芯片卖的
另外有没有试试高频率比方说1MHZ的波形?贴个图看看啊,不知道10BIT的DAC出来的波形失真会不会比较高,我用MAX038做的信号发生器按PDF说可以达到千分之几的失真率,不知道10BIT的DDS能达到什么效果? to 阿莫:
硬件电路原理图实际就是AD9833的数据手册中的典型电路。下载个数据手册看看即可。
软件方面我把要点已经讲的比较清楚,仿照I2C总线方式,软件模拟一个即可。 to alien2006:
我在西安买的,价位50圆左右,不开票45圆拿到。
高频试验过,到50KHz已经有些变形。
另:Ad9833输出为0-0.6V的波形,实际使用中需要在输出端接放大电路。 为什么要模拟SPI呢?16位数据发送两次8位不行吗?
我用过几个SPI设备也没有发现16bit不能用硬件的 怎么没源程序捏,给个驱动参考也行呀! void DDS_Write(uint Write)
{
signed char i;
DDS_PORT &= ~DDS_SCS;
DDS_Delay();
for (i=15;i>=0;i--)
{
if (Write&(1<<i))
DDS_PORT |= DDS_DATA;
else
DDS_PORT &= ~DDS_DATA;
DDS_Delay();
DDS_PORT &= ~DDS_SCLK;
DDS_Delay();
DDS_PORT |= DDS_SCLK;
}
DDS_Delay();
DDS_PORT |= DDS_SCS;
} 阿莫注意了:
因为东西都在办公室的计算机上,今天上班才能把程序和原理图发过来!
点击此处下载armok01166279.rar
感谢网上朋友们的帮助! 原理图为什么发不上来?
没办法,各位参考AD9833的数据手册中的典型电路即可! 阿莫给我加点分呀! 请问一下AD9833多少钱一片 上传个AD9833的数据手册
点击此处打开armok01166299.pdf
点击此处打开armok01166300.pdf 【10楼】 hb8421 ,
好的,已经帮你置到楼主位,并且置成COOL了。分数请放心,迟些我们升级论坛里,会将COOL贴的加分也统计入内的。 楼主把原理图传上来吧,这样看起来完整,谢谢! to laoki8888 阿虚:
我开始也想用硬件SPI总线方式,不过没有试验成功,不得以采用软件模拟SPI总线。或许我的编程能力有限,不妨把你的软件发到我的邮箱 hb8421@163.com 交流交流。 to jacky2056:
不知为何,原理图发送不上来,若有兴趣,可用邮件联系。
我的邮箱 hb8421@163.com AD9833不是标准的SPI总线接口,应该通过软件模拟的。
楼主,已给你发送邮件了,谢谢! 好资料,正想用M32来控制AD9834 to jacky2056:
原理图已给你发出,望查收! hb8421 我这2天在搞9834,但发现数据写不进去,能跟你交流下吗?
我QQ:319302900 学习一下,谢谢楼主的分享。 有兴趣,想多了解! 请问长期运行的话,输出会稳定吗?我怕单片机会异常。 我的AD9833和AD9835 都是刚开始用的时候好好的,都是工作过程实然烧了,看现象是它的输出buffer烧了,AD的DDS片子好像很脆弱,我只按标准电路接了,负载直接接到了示波器上,结果工作过程中示波器的波形实然消失了,再查片子over了。 1. "工作过程中示波器的波形实然消失了,再查片子over"
工作时能看到波形,连线应该没错.
2. 负载直接接到示波器?用示波器测负载两端的电压,除了直接用探针测量外,还有间接连接的保护措施?
3. 是不是电源的问题? 工作正常,用单片机可以控制,结果也都对,看起来一切正常。
直接用示波器10X档测输出,没有接其它电路
应该不是电源问题,是7805做的电源,用了很久了,一直都很好啊。
另外,这两个片子我不是一起烧的,去年用的AD9833,莫名其妙烧了,当时以为可能是自己不小心呢。
今年又做了一个AD9835的,只工作了一个多小时,工作正常,波形挺好的,频率控制也很精确,芯片也不热,
然后发现示波器上波形实然消失了,
再摸芯片烫手,赶紧断电,可是片子还是烧了,还是莫名其妙。 我是初学者,谁能解释一下楼主的这几句代码(加问号的)?谢谢!
dds=dds<<2;//??
dds_l=dds; //低字节
dds_h=dds>>16; //高字节
dds_l=dds_l>>2;//??
dds_l=dds_l & 0x7FFF;//??
dds_l=dds_l | 0x4000;//??
dds_h=dds_h & 0x7FFF;//??
dds_h=dds_h | 0x4000;//??
TO hb8421:我也想要个原理图,warmbupt@gmail.com.非常感谢! 28楼AVRBeginner 的问题我也遇到的,我烧掉了10多枚DDS,都是莫名其妙的,正常工作时就over了!目前我还是重点怀疑电源问题,但还要进一步研究,究竟是什么原因。也希望有经验的大侠来指点。 warmbupt ,楼主有给我发原理图,我把原理图发给你。请查收。
void output(unsigned long freq_value)
{
unsigned long dds;
unsigned int dds_l,dds_h;
dds= freq_value *268.435456; //268435456/ FMCLK
dds=dds<<2;
dds_l=dds; //低字节
dds_h=dds>>16; //高字节
dds_l=dds_l>>2;
dds_l=dds_l & 0x7FFF;
dds_l=dds_l | 0x4000;
dds_h=dds_h & 0x7FFF;
dds_h=dds_h | 0x4000;
Write_word(0x2000); //28位连续,选择频率0,相位0,RESET=0
Write_word(dds_l);
Write_word(dds_h);
}
这个代码我也不太理解,还请楼主解释下,谢谢! 最近没上网,上来一看,大家比较感兴趣,现比程序中大家的问题讲一讲。
dds= freq_value *268.435456; //268435456/ FMCLK // 2∧28方除以系统晶振(我的系统晶振为1MHz)
dds=dds<<2; //为什么要左移两位,目的是给高字节一个有效值
dds_l=dds; //低字节
dds_h=dds>>16; //高字节
注意:频率寄存器的定义:
表2 频率和相位寄存器操作
DB15 DB14 DB13 DB12 D11 DB0
相位寄存器0 1 1 0 × MSB 12 PHASE0 Bits LSB
相位寄存器1 1 1 1 × MSB 12 PHASE1 Bits LSB
频率寄存器0 0 1 MSB 14 FREQ0 REG Bits LSB
频率寄存器1 1 0 MSB 14 FREQ1 REG Bits LSB 希望大家还是认真看看AD9833的数据手册,不要因为是英文就不想看,认真看看,就能明白控制寄存器、频率寄存器的内容。 我也表个态,我是用25M数字示波器调试的
波形在低频处很好,但是细致察看有很小的毛箣,当频率到1M时波形已经细节有问题,5M的时候波形有太多的大毛刺,8M时已经波形发生畸变!
经分析和测试,后面20p的电容滤波似乎有些牵强,派型滤波好了很多,但是还是没有能实现12M优良的波形输出!!!关于优良的DDS滤波器大家各抒己见吧! 软件设置还是要看手册,否则大家无法交流,要讲究讨论层次吗! TO:【32楼】 hb8421兄,才看到你32楼的帖子,你说你用的晶振是1MHZ,我想这个是不是导致你在6楼回复说波形到50KHZ就严重失真的问题了?
我看到网上的资料说是AD9833的正选波查表是,0-360度中分布228个点,就是一个完整的正弦波周期由228个点组成,因此要产生不失真的正弦波,最高的正弦波频率应该是25MHZ / 228 =0.109MHZ,是不是可以这样理解?
对DDS也比较感兴趣,希望能多看到各位高手的好帖,继续顶。 我看的9833数据手册里面是直接通过管脚输出的,到达1M的时候波形就很差了,需要外加低通滤波器,可以参考AD9851的电路设计,滤波器做得好的话可以到12.5M hb8421:你好,能把你的原理图给我发一分吗?非常感谢! email:hetao7241@163.com to alien2006:
我在西安买的,价位50圆左右,不开票45圆拿到。
高频试验过,到50KHz已经有些变形。
另:Ad9833输出为0-0.6V的波形,实际使用中需要在输出端接放大电路。
不知道这种放大电路要注意些啥?怎么设计放大部分,对模拟电路做得较少,不要见笑,谢谢! 楼主把原理图传上来吧,这样看起来完整 网上找了好久,终于找到了虚拟打印机,现将原理图上传。
点击此处打开armok01172849.pdf 简要说明:
原理图上半部为M8控制DDS器件的电路图,下半部为单片机产生脉冲信号。
只所以用两个单片机,是因为项目开始前,DDS器件没把握,同时,M8非常便宜,所以分开来做。 请教hb8421:74HC244有没有实际的作用,R10有什么作用?谢谢! 暑假用MEGA16操作了下AD9854,这块DDS的性能和他的发热量一样大 AD985X这些的功耗是不小,AD9834/AD9833这些就好多了,才20mW,绿色环保,呵呵!
另外楼上几位兄弟DDS都是哪里搞到的啊, 可不可以帮偶也代买一块AD9834C 啊,谢谢 后级OP07电路及外围电路的作用:
1.放大。AD9833的输出只有0.6V,我要2V的峰峰值,必须要放大。
2.调零。AD9833的输出在0-0.6V ,是单极性,我要-1V到 1V的波形,用电位器调零,使基线到零值。 谢谢分享 谢谢分享!! 请版主帮我把我在17、18楼留下的邮箱地址删除,谢谢!拜托了! 请版主帮我把我在17、18楼留下的邮箱地址删除,谢谢!拜托了! 不错。顶一个。。。
说实话这个东西我还正不知道除了(信号源)仪器外还有什么地方能用的到的。比方讲变频器上能用吗?
哈哈。 有两个问题:
1.完全可以用SPI总线,无需模拟。
2.无需R10来调零,用一个电容隔离直流成分即可达到双极性。 恩,不错。 DDS信号源 我也做过9850的DDS信号发生器 很好啊~~~~~~` 学习了 很好哟 hoho!我也搞定了AT89S52+AD9833,现在可以随意出信号了,
上周搞的时候很简单的一个失误,让我整整搞了一个星期,求助了无数的人,只不过都没有回音,这个帖子也浏览了无数次。
现在心情大好。过一段时间在51版会贴出源码,输出信号、时序等信息供给大家。 很好很强大! 用过169+AD9833
下载个AD9833的小工具
根据那个编程的话到时候改频率字很方便 顶 谢谢分享! 我买了几个AD9835的片,都不知如何玩呢
有需要的低价点出了.
http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_467811.jpg
(原文件名:ourdev_448449.jpg) 请教9833如何出方波?控制字如何写 记号+感谢+收藏 mark 很好的参考资料 不错的资料! 【64楼】 fujiachun
积分:33
派别:
等级:------
来自: 请教9833如何出方波?控制字如何写
----------------------------------------------
你自己下个datasheet看看不就行了
mark mark 回复【58楼】undeadhuman
-----------------------------------------------------------------------
我最近也想做一个,正在学习,可以把你的发给我看看吗?
邮箱gan-yu-13@163.com
谢了! 好的好的哈哈 动手了 路过 谢谢了 mark ad9833 mark 好资料,谢谢 记号+感谢+收藏 mark 楼主 能传个原理图给我吗,我主要想看看 滤波器设计部分 信箱saga.2009@live.cn 最近也在做信号发生器,向楼主学习! 学习中。。。。 不错 我用的是AD9834但是输出总是会随频率改变不知有没有办法稳幅? 不知道AD9833能不能到10M 波形也很漂亮 可以发一份电路原理图给我么? 回复【30楼】ecat电子猫
-----------------------------------------------------------------------
可以发给我一份么?452281556@qq.com,,谢谢 您好楼主!
请问正弦波的幅值怎么通过单片机控制,我有个项目要用到,
您说的 0-0.6V 是固定的吗?能通过程序设置可调吗?
谢谢!!! 想问楼主一个问题。。。我也在看dds,是ad9834.。我不明白的是相位控制字p,为什么输出波的相位P0与控制字p的关系是:P0=p*2pi/2N(pi是圆周率,分母是2的N次方)啊!!希望能解答。。谢谢 不能下载,楼主传我一份,祝发财d_a_b@sina.com 学习学习 回复【楼主位】hb8421
-----------------------------------------------------------------------
楼主,我在用AD9834做信号发生器,做了快两个月了,就是出不了波形啊,能不能指点一下啊,QQ:369444759. 回复【86楼】martiny
--------------------------------------------------------------------
我最近也在用AD9834,输出地波形也不对,正弦波频率不对,而且不稳定,像是噪声,可以交流一下吗? AD9833看起来输出波形很好,找到替代的了,真好!! mark 不错 mark
页:
[1]
2