作者 主题:基于ATmega 32u4和AD9833的函数发生器 (Read 2691 times)

0位成员和16位客人正在查看此主题。

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
基于ATmega 32u4和AD9833的函数发生器
« 上: 2020年6月9日,下午01:57:33»
大家好,

我根据本文松散地设计了这个小函数生成器 //www.allaboutcircuits.com/projects/how-to-DIY-waveform-generator-analog-devices-ad9833-ATmega328p/ 我想知道是否有人会用新的眼神看一下它是否存在任何盲目错误。我对它进行了三重检查并运行ERC,但这是我的第一个"larger"规模项目,我不知道'完全信任自己(尚未) ; D.

非常感谢,
加布里埃尔
 

离线 莫菲

  • 经常贡献者
  • **
  • 帖子:457
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下方面回复#1: 2020年6月10日,上午12:31:45»
看起来不错,除了一些问题:
1. The output of the DDS DAC needs a substantial 低 pass filter to get rid of the high frequency noise. Look at some of the other DDS data sheets 对于 examples.
2.当您可以处理高达12.5MHz的信号时,LM7322仅具有20MHz的GBW。您需要一个GBW是LM7322的5至10倍的运算放大器。
3.旋转编码器上的100nf电容帽似乎有点大,也许是10nf?对此不确定,您可能是正确的。
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下方面回复#2: 2020年6月10日,上午02:26:23»
用我的AD9834函数生成器查看另一个线程:
   寻找<$ 50函数发生器

具有100mA输出电流的LM7171将是更好的输出运算放大器。
但是,即使LM7171也无法在全电压下驱动50Ω负载。 
实际上,您甚至都没有设置50Ω输出。

如前所述,您在输出端至少需要一个小的重建滤波器。
我只做了第二个。 但是,您可能希望更快速地滚动。
   Filter design:  //www-users.cs.york.ac.uk/~fisher/lcfilter/

也有人说,编码器上的电容器太大,您缺少两个电阻。
直接从PEC11编码器数据表中查看我的设计。


如果您想要高于1MHz的频率,我将为AD9833使用更高的时钟频率。
没关系,最大频率为25MHz。
« Last 编辑: June 10, 2020, 02:32:01 am by 马克 »
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下方面回复#3: 2020年6月10日,上午02:32:33»
看起来不错,除了一些问题:
1. The output of the DDS DAC needs a substantial 低 pass filter to get rid of the high frequency noise. Look at some of the other DDS data sheets 对于 examples.
2.当您可以处理高达12.5MHz的信号时,LM7322仅具有20MHz的GBW。您需要一个GBW是LM7322的5至10倍的运算放大器。
3.旋转编码器上的100nf电容帽似乎有点大,也许是10nf?对此不确定,您可能是正确的。

感谢您的反馈!一世'm not sure about the 低 pass filter 要么 how to design it, and the datasheet 对于 the AD9833 isn'并没有太多帮助't mention it at all.

我厌倦了快速参数搜索寻找一款能够满足要求的运放(+ -12V,最好是轨到轨,现在具有较高的GBW),我没有'真的找不到任何东西。您有什么建议可以代替LM7322吗?

我只是复制了旋转编码器的互联网图并使用了它。我周围也有一个旋转编码器(没有模块的组件),所以我尝试了一下,它工作得很好……您可能是对的,它可能不是最佳选择。

 
以下用户感谢这篇文章: 瓦特

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下方面回复#4: 2020年6月10日,上午02:55:36»
用我的AD9834函数生成器查看另一个线程:
   寻找<$ 50函数发生器

具有100mA输出电流的LM7171将是更好的输出运算放大器。
但是,即使LM7171也无法在全电压下驱动50Ω负载。 
实际上,您甚至都没有设置50Ω输出。

如前所述,您在输出端至少需要一个小的重建滤波器。
我只做了第二个。 但是,您可能希望更快速地滚动。
   Filter design:  //www-users.cs.york.ac.uk/~fisher/lcfilter/

也有人说,编码器上的电容器太大,您缺少两个电阻。
直接从PEC11编码器数据表中查看我的设计。


如果您想要高于1MHz的频率,我将为AD9833使用更高的时钟频率。
没关系,最大频率为25MHz。

好的,谢谢!我现在才看你的答复。

至于运算放大器,您有什么建议可以提供50Ω负载所需的600毫安电流,同时仍具有正确的GBW和所有功能?或任何好的解决方法?

我只是看了看链接,它似乎可以为我计算过滤器。滚降是否有任何优势?另外,阻抗为50Ω,转折频率为12.5MHz,对吗?

I'看看编码器数据表,然后重新绘制该部分。
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下问题上回复#5: 2020年6月10日,上午03:30:15»
我在某处读到一些文章,展示了如何并联LM7171运算放大器以获得更大电流,但是't find it.
也许看一下通孔零件以获得更好的散热。
在50Ω负载下,SOIC-8部分只能达到约2Vpp。

我只做了一个二阶过滤器。
eBay上的AD9834开发板似乎排名第六。
这是带有在线程序的六阶系列滤波器的快速运行:
您可能需要尝试使用标准值以查看其变化。

请记住,AD9833 DDS的方波也将通过滤波器。
滤镜将在边缘变圆。  To_filter或Not_to_filter。 就是那个问题...

[attachimg = 1宽度= 650]
« Last 编辑: June 10, 2020, 04:07:04 am by 马克 »
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下方面回复#6: 2020年6月11日,上午12:01:24»
好的,这里是更新的原理图,其中添加了滤波器,更新的旋转编码器以及开关的回读。我仍在努力寻找合适的运放...我需要并联LM7171的6以获得所需的600mA,'真的认为这是一个可行的选择。尤其是因为我一共需要12个(偏移和幅度每个6个)。有什么建议还是值得一试?

编辑:我忘了附加文件哎呀
« Last 编辑: June 11, 2020, 12:27:28 am by 加布里埃尔 »
 

离线 格伦特克

  • 贡献者
  • 帖子:30
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下方面回复#7: 2020年6月11日,上午12:36:11»
Itead十年前有一个类似的单位要出售-我买了一个,但实际上从来没有使用它。看看,可能会给您一些想法。
//www.itead.cc/blog/iemp-dds-signal-generator-in-stock-and-data-release
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下方面回复#8: 2020年6月11日,上午02:16:21»
好的,这里是更新的原理图,其中添加了滤波器,更新的旋转编码器以及开关的回读。我仍在努力寻找合适的运放...我需要并联LM7171的6以获得所需的600mA,'真的认为这是一个可行的选择。尤其是因为我一共需要12个(偏移和幅度每个6个)。有什么建议还是值得一试?

编辑:我忘了附加文件哎呀

差不多好了:

   Encoder: 电容器放置在错误的位置。

   [attachimg=1]

   Output filter: 设计工具中的R2是您的50Ω负载。
                       基本上,您会倒退。

   [attachimg=2]
« Last 编辑: June 11, 2020, 02:20:01 am by 马克 »
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下方面回复#9: 2020年6月11日,上午02:28:29»
好的,我不好,我纠正了两个错误。
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下问题上回复#10: 2020年6月11日,上午02:34:37»
您可能会感兴趣的一种增强功能是扫频。

您可以通过Atmega更新AD9833来实现'中断的频率。
使用固定的中断,您可以计算增量频率。每次更新和扫描周期。
在扫描周期结束时,您重置AD9833频率。回到初始值,然后再次开始扫描。
有了正增量,您可以向上扫描;而有负增量,您可以向下扫描。
它不需要太多数学就可以很好地工作。

我也产生了"start_of_sweep"使用未使用的I / O引脚触发脉冲。
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下方面回复#11: 2020年6月11日,上午02:41:24»
第二个nice_to_have是PWM输出。

您可以使用Atmega上的第二个未使用的I / O引脚来执行此操作。
您应该将此输出缓冲到另一个输出连接器。 
 (我不会将其合并到AD9833输出中。)

制作PCB之前要三思而后行。

所有这些开始在代码方面以及您的编码技能的效率上加起来。
我使用了图形显示,这烧毁了我很多程序空间。
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下问题上回复#12: 2020年6月11日,上午02:59:55»
这些绝对是我可以添加的功能,即使我没有'最终无法对其进行编码,可以在PCB上进行扩展以供将来扩展。我还计划至少将SCPI实施到基本水平(因此USB为32u4)。我使用的是标准20x4 LCD,所以效果很好。该代码当前占用8920个字节(共28672个),没有进行任何优化,并且TBH我的代码有些混乱...
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下问题上回复#13: 2020年6月11日,上午03:14:37»
这些绝对是我可以添加的功能,即使我没有'最终无法对其进行编码,可以在PCB上进行扩展以供将来扩展。我还计划至少将SCPI实施到基本水平(因此USB为32u4)。我使用的是标准20x4 LCD,所以效果很好。该代码当前占用8920个字节(共28672个),没有进行任何优化,并且TBH我的代码有些混乱...

为了比较,我在PIC18F2550中使用了32621个32768字节。
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下问题上回复#14: 2020年6月11日,上午03:21:04»
哇,干得好!  :clap:
我还有很多东西要写,所以我们'll see how I go  :-\
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下问题上回复#15: 2020年6月13日,上午08:17:33»
好的,我已经进一步研究了运算放大器的问题。我真正能找到满足所有需求的唯一产品是xDSL接口运算放大器。这是广告中的选择表: //www.analog.com/en/parametricsearch/11070#/d=5002|2687|4502|300|4501|4101|4500|4108|2839|2840|s3|s5&p5002=600m|2&p4502=100M|4G&p2840=24|220&p2687=|2

这些的唯一问题是我发现它们非常难以采购,在哪里可以找到它们非常昂贵,超过20澳元(约合13美元的洋基雄鹿)...
我开始考虑是否值得尝试使用更大电流的另一个运算放大器,或者我应该坚持使用当前的运算放大器(MarkF建议的LM7171)。

无论如何,除了这个难题,我认为我可以继续为其制造PCB。我已经为扫描触发器和PWM设置了一个引脚,就像板上的插头一样,以防万一。感谢您的想法马克!
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#16: 2020年6月13日,下午03:35:04»
无论使用哪种运算放大器,都可能值得考虑使用通孔部分,因为它们更大且散热更好。 有一些在中心的导热垫,但是很难(如果不是不可能的话)用手焊接。

[attachimg = 1宽度= 800]
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#17: 2020年6月14日,上午12:44:24»
这是原理图的第三个版本,现在将PWM,扫描触发和运算放大器交换至LM7171。我决定不是'为了获得高电流运算放大器,不值得付出巨额的额外费用。
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下方面回复#18: 2020年6月14日,上午01:56:11»
您在输出上的过滤器仍然不正确。
LC组件从左到右颠倒。

如果不检查ATmega 32u4,用于PWM的引脚是否可以进行PWM输出?
在PIC中,只有某些引脚可以执行PWM。
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下问题上回复#19: 2020年6月14日,上午02:17:45 »
啊,我以为我已经扭转了,但那不是。修复它。

至于32u4,我仔细检查了我可以使用的巫婆引脚,并使用了具有PWM功能的引脚,这样我一切都很好!
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 回复#20: 2020年6月14日,上午02:23:58»
受艾伦·沃尔克(Alan Wolke)的视频的启发,我构建了他的时域反射仪(TDR),以产生非常快的边缘。
我使用了四个带有200Ω电阻的输出,以获得50Ω的输出阻抗。
您可能对将74AC14用作PWM引脚的缓冲器/驱动器感兴趣。

[attachimg = 1宽度= 400]

 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#21: 2020年6月16日,上午12:34:26»
抱歉,我以某种方式错过了您的回复!

我认为那将是一个单独的项目,我认为应该没问题。
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#22: 2020年6月16日,上午01:43:40»
要求creep!    :palm:

你不'不想用处理器驱动外部信号。
我犯了一个错误,就是没有缓冲我的数字输出,
现在使用BNC耦合器连接到那块小的PCB作为缓冲。

如果您认为可能需要,建议您现在添加脚印。


[attachimg = 1宽度= 450]

编辑: 更新了图纸,消除了PWM信号的整体反转。
« Last 编辑: June 19, 2020, 09:18:32 am by 马克 »
 

离线 重生

  • 经常贡献者
  • **
  • 职位:722
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#23: 2020年6月18日,下午01:42:41»
您可能会感兴趣的一种增强功能是扫频。
扫频效果很好,请确保同时进行线性和对数扫频。

它不需要太多数学就可以很好地工作。
嗯,这需要一点点数学。 >:D
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#24: 2020年6月18日,晚上11:06:03»
好吧,我 might just add it in then, it will be just easier like that. It'也很便宜(0.45澳元)'s not a problem.
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下问题上回复#25: 2020年6月19日,上午05:58:36»
好吧,我 might just add it in then, it will be just easier like that. It'也很便宜(0.45澳元)'s not a problem.

我刚刚意识到,PWM信号将如图所示反转。  (编辑: Drawing updated

只需在TRIG输出上使用一个反相器,然后使用第二个反相器对PWM信号进行反相,然后再转到驱动PWM输出的四相反相器即可。

您始终可以在软件中反转TRIG信号。 
尽你所能't用软件将PWM信号反相。
« Last 编辑: June 19, 2020, 09:15:50 am by 马克 »
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#26: 2020年6月19日,上午06:03:43»
您可能会感兴趣的一种增强功能是扫频。
扫频效果很好,请确保同时进行线性和对数扫频。

它不需要太多数学就可以很好地工作。
嗯,这需要一点点数学。 >:D

有赢了'因为我有不到150字节的可用程序空间,所以将来我不会做任何对数扫描。
 

离线 重生

  • 经常贡献者
  • **
  • 职位:722
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#27: 2020年6月20日,上午02:40:21»
有赢了'因为我有不到150字节的可用程序空间,所以将来我不会做任何对数扫描。
好吧,如果您摆脱了Comic Sans字体,'会有足够的空间。 >:D
或者您可以摆脱所有浮点数。对,就那个'这是一个严肃的建议。
有时还需要将其转储为汇编程序,以查看编译器如何处理您的代码。
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#28: 2020年6月20日,上午06:16:37»
有赢了'因为我有不到150字节的可用程序空间,所以将来我不会做任何对数扫描。
好吧,如果您摆脱了Comic Sans字体,'会有足够的空间。 >:D
或者您可以摆脱所有浮点数。对,就那个'这是一个严肃的建议。
有时还需要将其转储为汇编程序,以查看编译器如何处理您的代码。
  • 字体是Verdana,我附上了它's file.
    当前显示。

  • 我还附上了代码,将把练习留给您来代替浮点数。
    期待看到您的代码。

  • I'm使用具有优化级别2的XC8编译器。
    免费版本可以做到的最好。
    很久以前,当我看时,我以为装配体还不错。
    但是我可以'证明购买我所拥有的很少的许可证是合理的。
    It would be cheaper to replace the PIC with a 大一点 one. 这将使我有机会进行其他所需的硬件更改。

我实际上相信真正的记忆猪是"sprintf" function.
But, 我不知道'不想自己写代码。 也许有人可以为我提供高效的功能...   ;)

函数调用有很多开销。
我想可以通过牺牲可读性来消除某些内容。
« Last 编辑: October 23, 2020, 04:01:36 am by 马克 »
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#29: 2020年6月20日,上午09:13:04»
好!我终于完成了PCB设计,至少直到我或你们发现其中的一些缺陷为止  ; D 我已经在电路板和更新后的原理图中附上了PDF。我试图使底层尽可能地空以便接地,但最终我不得不在各处使用它作为零碎的零件。我显然将数字和模拟地平面分开,并且仅将它们非常靠近AD9833进行连接。's引脚(根据其数据表)。我还在其下创建了一个禁区(也根据其数据表)。我尽力将运放下的痕迹减至最少'避免跑一些...

最好说这是最好的布局和/或布线,但是我'我对此比较满意。让我知道你们的想法!
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下方面回复#30: 2020年6月20日,上午09:37:30»
我以为我们之前说过输出过滤器是错误的???



电容器放置在错误的位置。
看到帖子:  //www.villagehousevacs.com/forum/projects/atmega-32u4-and-ad9833-based-function-generator/msg3093229/#msg3093229

看起来值也不同吗? 您是否更改了截止频率?
« Last 编辑: July 04, 2020, 02:37:19 pm by 马克 »
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#31: 2020年6月20日,上午09:42:13»
好吧,我'真抱歉我向上帝发誓我改变了这一点,旋转编码器也发生了同样的事情,所以我认为我可能在某个地方丢失了一个版本  | O。值与我可能略有不同'来源。确切的910uH只1uH。

I'll fix it again :(
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#32: 2020年6月20日,上午09:57:05»
我本打算再提一个建议,但是不要'看不到在布局上实现它的简单方法。

如果要构建另一版本的PCB,我想将LM7171的未使用引脚(1、5和8)连接到接地层。
这将有助于散热。  我没有'在数据表中看不到任何未连接的地方。
需要测试。

我没有'分开我的模拟和数字接地层。 
PCB的两面都为我的接地层注入了铜。
有时将它们分开可能会导致问题。
对于您和其他人,是否将其分开我会有所不同。
« Last 编辑: June 20, 2020, 10:03:13 am by 马克 »
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#33: 2020年6月20日,上午10:01:52»
好吧,我'真抱歉我向上帝发誓我改变了这一点,旋转编码器也发生了同样的事情,所以我认为我可能在某个地方丢失了一个版本  | O。值与我可能略有不同'来源。确切的910uH只1uH。

I'll fix it again :(

运行在线过滤器应用程序后,您可以输入准确的值,然后重新绘制结果。
只需输入值并按ENTER(不要按任何按钮)。
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#34: 2020年6月20日,上午10:09:38»
我只是快速插入了值,并且2之间的差异是如此之小,以至于我不得不快速在选项卡之间切换以注意到任何东西。我想我对此感到满意。
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#35: 2020年6月20日,上午10:11:15»
哦,是的,我也只是检查了一下是否可以将某些引脚连接到接地层,所以我很快就做到了(并修复了该死的滤波器)
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#36: 2020年6月20日,上午10:42:05»
I'我今天早上在这里有点头脑混乱。   :scared:

我正在查看您的输出滤波器的封装。 
通常,过滤器排成一行。  (maybe it doesn'在这些频率上无关紧要。)
电感似乎很小。 您选择的电感器能否在最大电压下承受50Ω负载中的预期电流?
你没有'不要给手工焊接留很多空间。
« Last 编辑: July 04, 2020, 02:36:16 pm by 马克 »
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#37: 2020年6月20日,上午10:49:06»
不可以,但运算放大器也不能。它可以做的最大电流是100mA,电感器可以做的最大电流是250mA,所以我认为这没关系。

编辑:至于布局,这是我最初尝试的但它没有'确实与董事会的其他成员非常相称,所以我刚刚决定最有可能获胜'在这样的情况下有很大的不同"low"最大频率只有12.5MHz
« Last 编辑: June 20, 2020, 10:50:44 am by 加布里埃尔 »
 

离线 重生

  • 经常贡献者
  • **
  • 职位:722
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#38: 2020年6月20日,下午12:46:35»
字体是Verdana
关于Comic Sans的一切只是个玩笑。
不过,您仍然可以将字体切成所需的字体,显然只有数字和小数。
如果您坚持使用一种字体,然后将细小的东西制作成位图,那也会有所帮助。

我对编译器/汇编器输出的评论不是对编译器的批评。
我只是说如果你看着垃圾场'会看到所有引入的库和函数
并且您可能会看到所写的内容导致了意想不到的后果。

我不知道'在几个子例程调用中变得不正常,如果我在那儿做's always "inline" 要么 a macro.

可能最大的麻烦是SSD库。
您可能只是检查一下'不要输入椭圆,六边形或独角兽的代码。
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#39: 2020年6月20日,下午01:53:31»
字体是Verdana
关于Comic Sans的一切只是个玩笑。
不过,您仍然可以将字体切成所需的字体,显然只有数字和小数。
如果您坚持使用一种字体,然后将细小的东西制作成位图,那也会有所帮助。
您看过代码了吗? 我的字体只需要480个字节。
只有一种大小的字体(最小)。  It's scaled up 对于 大一点 sizes.

引用
我对编译器/汇编器输出的评论不是对编译器的批评。
我只是说如果你看着垃圾场'会看到所有引入的库和函数
并且您可能会看到所写的内容导致了意想不到的后果。

我不知道'在几个子例程调用中变得不正常,如果我在那儿做's always "inline" 要么 a macro.
这就是为什么我提到 冲刺 ()功能。
It'我唯一想到的是编译器会提取很多代码。 
打印功能需要大量程序空间。

注意,浮点数学是另一个需要考虑的问题。
但是,它的用法非常有限。 只有三四个计算。

引用
可能最大的麻烦是SSD库。
您可能只是检查一下'不要输入椭圆,六边形或独角兽的代码。
我自己写了SSD1351库。 它都是自包含的,不使用任何其他库。
我不知道'相信XC8编译器会为未调用的函数生成代码。  But, I haven't verified that.
你自己看。
« Last 编辑: October 23, 2020, 04:01:59 am by 马克 »
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#40: 2020年6月20日,下午02:16:01»
好的,这是PCB的第二版,并进行了编辑。我将运放的引脚连接到了地平面,然后重新安装了滤波器。手指交叉了'这次一切都很好!
 

离线 重生

  • 经常贡献者
  • **
  • 职位:722
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#41: 2020年6月20日,下午04:46:33»
注意,浮点数学是另一个需要考虑的问题。
但是,它的用法非常有限。 只有三四个计算。

Well, this is all PIC stuff and 我不知道'没有工具链或其他可以遵循的工具。
我只是想给您一些想法,如何节省一些字节。
I'我已经为AVR8编写了一些功能齐全的东西,但从未达到32k中的20k。
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#42: 2020年6月23日,下午03:08:03»
好的,这是PCB的第二版,并进行了编辑。我将运放的引脚连接到了地平面,然后重新安装了滤波器。手指交叉了'这次一切都很好!

我正在研究输出过滤器的布局。 假设0805组件。
我相信,即使对于热风或回流焊接,过滤器中的组件也距离太近。

您缝合在一起的散热器接地平面太小,以至于's 我们eless.
您需要保持LM7171周围的接地平面完整,以将热量从芯片上带走。
还有一些过孔将热量传到PCB的另一侧。

看一下局部布局。  Plus the filter is 排队 and not jumping around.
生成PCB的3D视图是一个好主意,以让您了解它的紧凑程度。

[attachimg = 1宽度= 400]
« Last 编辑: July 04, 2020, 02:34:16 pm by 马克 »
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#43: 2020年6月24日,上午02:57:06»
好吧,我想我可能当时犯了一个错误  :-[

我昨晚订购了木板和零件,然后LCSC休假了。猜猜我们'我得看看我的样子...
 

离线 重生

  • 经常贡献者
  • **
  • 职位:722
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#44: 2020年6月24日,下午01:28:42»
嗯,我'很抱歉这么晚才发表评论,我分心了。 :-[

我不知道't think that you'我会对整个增益/偏移阶段感到满意。
更改增益时,必须调整偏移量。
当您在偏置上使用开关或电位计时,增益也将发生变化,因为该点具有实时信号。
同样,增益不能下降到零信号。

AD9833输出标称(额定值)0.6V P-P信号。
For a sine wave, the 基线 is half that, +0.3V
您确实必须在任何可变增益之前就开始处理该偏移。

这里's松散的LT Spice,这是我随机选择的运算放大器。
您只需要一个运算放大器(除非您想添加一个缓冲级)。
标记的点指向+ 12,-12,接地线或刮水器。

编辑:啊,只是跳过1.3k的东西,直接运行200欧姆。禁用内部200欧姆。
[attachimg = 1]
« Last 编辑: June 24, 2020, 10:02:11 pm by 重生 »
 

线上 马克

  • 超级贡献者
  • ***
  • 职位:1876
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#45: 2020年6月24日,下午02:18:20»
好吧,我想我可能当时犯了一个错误  :-[

我昨晚订购了木板和零件,然后LCSC休假了。猜猜我们'我得看看我的样子...

抱歉,我花了一些时间来跟踪您的PCB布局(我只做了输出滤波器)。 图片太小了。
同样,我在很大程度上依靠布局的3D视图来可视化组件之间的间隙。
让我们知道您的电路板进入时装配的工作方式。


我不知道't think that you'我会对整个增益/偏移阶段感到满意。
更改增益时,必须调整偏移量。
当您在偏置上使用开关或电位计时,增益也将发生变化,因为该点具有实时信号。
同样,增益不能下降到零信号。

这是我使用差分输出AD9834的原因之一。
在差分配置中使用运算放大器,其幅度和直流偏移彼此独立。
我还利用了AD9834外部FSADJ引脚来控制幅度。

利用AD9833的单路输出,您几乎陷于幅度和失调之间的相互作用。
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#46: 2020年6月25日,上午01:36:08»
别担心!它'这只是一个小项目,所以我们'我会看看情况如何。一世'我不太担心它不是完美的。

I'我不确定在更改增益Renate时必须调整偏移量的含义。我拥有两个独立的运算放大器的原因是't happen.

无论如何,这就是它。它's too late now :-\
 

离线 罗布卡

  • 定期贡献者
  • *
  • 帖子:131
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#47: 2020年6月25日,下午09:07:05»
鸣叫为时已晚,但我'无论如何,我都会提供这样的建议:为什么在功能强大得多的处理器(例如STM32系列)的价格基本相同并且提供更大的编码空间的情况下,使用内存有限的8位处理器呢?

Even a 低 STM32F103 (as 我们ed in the BluePill) 提供4倍的闪存和12倍的RAM。当然,这些器件在3.3V而不是5V的电压下工作,但是'在大多数情况下这不是问题

或者使用ESP32模块,240MHz的双核处理器,兆字节的闪存,甚至具有蓝牙或WiFi功能。

实际上,对它们进行编程比对Atmega 32u4进行编程更容易,因为您可以使用相同的工具链(如果愿意,可以使用Arduino库),但是可以使用真正的硬件调试器(通过SWD)。

你不会'由于处理器的限制,没有必要限制函数发生器的功能...

 

离线 重生

  • 经常贡献者
  • **
  • 职位:722
  • 国家: 我们
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#48: 2020年6月25日,晚上09:35:10»
为什么要使用8位处理器...
因为我可以自己写每个字节(没有库),所以功能绰绰有余。
不过,8位已经过时了。

因此,抵消的问题:
基本上,您可以预先增益补偿或之后增益补偿(或两者)。
通常,函数发生器倾向于以零伏特/信号为中心,正好在零伏特之上/信号在零伏特之下。
如果您使用正信号并启动增益,它将从0V-1V信号变为0V-5V信号,这通常是人们想要的。
It'就像在一行上混合不同字体一样,您必须选择稳定的基线。
在大多数情况下,您希望将0伏特作为"baseline".
如果您有一个中心信号/正信号/负信号,并且您将增益提高了,那么在0伏时的增益将保持在0伏。

你可能会说"好吧,如果我想要一个具有3.3V直流偏移的信号,并且在调整增益时将其变化为3.0V-3.6V到2.8V-3.8V,该怎么办?"
好吧's是增益后补偿的一个很好的参数。
还是's not typical.

当然,如果您在增益前或增益后使用DAC,则可以使它看起来像软件中的一个(假定增益是受控的或可读的)。
 

离线 罗布卡

  • 定期贡献者
  • *
  • 帖子:131
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#49: 2020年6月26日,上午12:16:48»
为什么要使用8位处理器...
因为我可以自己写每个字节(没有库),所以功能绰绰有余。
不过,8位已经过时了。
任何STM32处理器上的任何人,包括高端STM32H743(480MHz,M4内核,硬件浮点)都可以。无需库,即可在8位Atmega上轻松编程任何STM32。在大多数情况下,相同的Arduino库可在这些库上工作。所有STM32处理器都具有完整记录的寄存器,您可以直接对其进行编程,使用LL库(仅是寄存器的精简抽象)或我个人讨厌的完整HAL。或者只是使用STM32duino并像任何Arduino板一样对它进行编程,好与坏

ESP32需要库,但这仅仅是因为它完成了BLE和WiFi所需的所有功能,并将其作为核心功能的一部分

STM32在所有方面都优于旧的8位Atmega(ADC,DAC,DMA,存储器,速度)。只有当您需要5V逻辑并且在某些情况下需要硬化时,旧的8位仍然能赢的唯一区域(从8位Atmega释放魔力烟几乎是不可能的)

另一方面,在没有硬件调试器的情况下对8位处理器进行编程就像使用石碑来编写小说。可以做到,但是为什么呢?
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下问题上回复#50: 2020年6月26日,上午12:22:12»
好的,谢谢您的解释。增益不是由软件控制的,因为要获得具有正确额定值(1k和50k以及它们之间超过64档的数字电位器)的数字电位器非常困难且昂贵……我选择的解决方案是使用双电位计并使用Arduino'ADC读取回显示的值。因此,电位计的一侧从-12V变为+ 12V的偏压,或者只是用作可变电阻以获得增益,另一侧则连接至GND和5V以供Arduino读取。我还实现了一个3位置开关,用于在电位计,GND和2.5V之间切换增益。这样,我可以采用一种半精确的方式来设置一个0-5V波形或一个完全以0为中心的波形。

罗布卡:关于32位uC足够公平。我最终选择了Atmegas,因为它是我所熟悉的,并且它具有我需要的所有东西。我最初只是想使用328P,但是后来我选择使用32U4的USB功能。我应该得到一个小的开发板,并可以使用32位开发板。可以从eBay上拿一个,然后试一下,然后在下一个项目中使用它,不管它是什么!
 

离线 罗布卡

  • 定期贡献者
  • *
  • 帖子:131
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#51: 2020年6月26日,下午03:05:41»
罗布卡:关于32位uC足够公平。我最终选择了Atmegas,因为它是我所熟悉的,并且它具有我需要的所有东西。我最初只是想使用328P,但是后来我选择使用32U4的USB功能。我应该得到一个小的开发板,并可以使用32位开发板。可以从eBay上拿一个,然后试一下,然后在下一个项目中使用它,不管它是什么!
我强烈建议您购买一块ESP32板(只要您使用USB板,它们几乎都具有相同的功能。  集成。如果需要的话,甚至还有带有集成LCD屏幕的显示器: //www.banggood.com/LILYGO-TTGO-T-Display-ESP32-CP2104-WiFi-bluetooth-Module-1_14-Inch-LCD-Development-Board-p-1522925.html. 如果要进行硬件调试,则需要一块F2232L板,可用作ESP32线的SWD。

直到一年前,我也曾推荐过Blue Pill,但如今,eBay上的许多Blue Pill电路板都具有STM32的外观,其中有些存在很多问题。因此,如果您是专家并且可以让他们工作,仍然还是不错的选择,但是对于那些会浪费大量时间来寻求董事会问题的初学者而言,这还是不错的选择。 //www.villagehousevacs.com/forum/microcontrollers/cheap-bluepill-very-likely-it-has-fake-stm32-right/.

带有STM32F4的ST Nucleo板可能是一个不错的选择。比STM32F1贵一点,但功能也更强大。 Nucleo板上还带有ST Link,因此您也可以进行硬件调试。或者你可以建立这样的东西 //github.com/profdc9/STM32surface 加上eBay上的〜$ 3 ST Link克隆。 //robotdyn.com/catalogsearch/result/?q=stm32 也有很多非常好的,精心设计的板子。

STM32本机支持USB(甚至支持USB OTG),而ESP32不支持,并且需要USB串行芯片。但另一方面,如果您使用ESP32的WiFi功能,则只能编程一次OTA引导加载程序,然后可以通过WiFi空中更新设备。还有很多库可帮助在任何网络上预配置WiFi,因此它'设计一种可以通过WiFi进行自我配置并通过空中更新的设备非常容易
 

离线 加布里埃尔

  • 定期贡献者
  • *
  • 帖子:66
  • 国家: au
回复:基于ATmega 32u4和AD9833的函数发生器
« 在以下回复#52: 今天 在上午05:52:25»
嗨,大家好,

I'米回来。生活一直很疯狂,我没有'没有机会在这个项目上做很多事情。我现在终于组装好了'主要工作。我面临几个问题,主要涉及幅度和偏移调整。我将其写为进行健全性检查,然后再做其他任何事情,但是由于我现在已经进行了设置,因此第一个运算放大器(幅度)的最大增益为〜40(1 + 50k / 1.3k),第二个运算放大器的增益为40。增益为2(1 + 10k / 10k)。 AD9833的输出为〜600mV p2p,因此要使其达到最大+ -12V范围,我需要40的增益。因此,我实际上需要第一个放大器仅具有20的增益,以便使电位器覆盖整个范围并且没有't "clip", right?

除了这些问题,一切似乎都工作正常,AD9833似乎很满意,并且可以根据要求生成所有波形和频率,再次感谢您在早期提供的所有帮助!
 


分享我

掘客  脸书  SlashDot  美味的  Technorati  推特  谷歌  雅虎
中频