双踪示波器

53538年

488

80

简介:双道示波器

当我构建我以前的迷你示影时,我想看看我可以让我的最小臂微控制器的情况下STM32F030(F030)表现,它做得很好。

在其中一条评论中,有人建议使用STM32F103(F103)的“蓝色药丸”可能比使用F030的开发板更好、更小,甚至更便宜。但对于迷你示波器,我没有使用开发板,而是在更小的SMD-DIP板上使用F030,因此蓝色药丸肯定不会更小,我怀疑它是否也更便宜。

代码现在在Gitlab上提供:

https://gitlab.com/WilkoL/dual-trace-oscilloscope

供应:

零件清单:
-塑料盒-perfboard(双面原型板8x12cm)-蓝色Pill-ST7735s TFT显示器-锂离子电池-HT7333 3.3V低压差调节器-MCP6L92双运放-TSSOP8至DIP8板-12 MHz晶体(无需)-旋转编码器加旋钮(2x)-电源开关-香蕉端子(4x)-锂离子充电器板-多个电阻器和电容器-尼龙垫片、螺母和螺钉

工具:

-焊锡站- 0.7mm焊料-一些线材-侧切刀-眼镜和放大镜-钻头-万用表-示波器- STLink-V2

软件:

- STM32IDE - STM32CubeMX - STLink Utility - LowLayer library - adaptivelibrary for ST7735s - notepad++ - Kicad

第一步:交替或同步模式

蓝色药丸

但是这个想法就在那里,我知道F103有两个ADC!如果我在“交错”模式下同时使用这两个ADC会怎么样,这是我以前用STM32F407(F407)做过的。采样速度将加倍。这一点,再加上更快的微控制器,它将成为微型示波器的伟大后继者。

交错模式
奇怪的是,F103中的ADC在F030中的一个缺点不太高级(以及F407),您无法选择分辨率。更重要的是,您也无法更改两个ADC之间的时序。现在,当您使用交错模式时,通常您希望采样尽可能快,在任何样本之间的最短时间,但使用示波器,它是必要的,以改变定时。也许它仍然可以完成,我不是专业的示波器设计师,但我放弃了使用交织模式的计划。

同时模式

但是,两个adc提供了更多的选择,这两个adc也可以设置为“常规同步”模式。双道示波器怎么样?

在决定尝试制作双道示波器后,我还想要可变输入灵敏度,这是我在迷你示波器上没有的选项。这意味着在输入端有衰减器(和放大器)。也许我想要更多?所以我列了一张小单子,上面写着“有好的人”。

愿望清单

两个渠道

两个通道的灵敏度可变

双通道触发

两个通道上的可变触发电平

可变偏移

单电池电量

装在与微型示波器相同的盒子里

第2步:原型设计

像往常一样,我在面包板上开始了这个项目。(见图)和在Perfboard上焊接的所有内容之前,我试图了解它是否适​​合所选项目盒。它适合,但只有。一些部分隐藏在屏幕下方,其他在蓝丸下。同样,就像我的大多数项目一样,这是一个唯一一个项目,我不会为它设计PCB。

第3步:衰减器

在常规示波器中,输入衰减器是通过用小信号继电器的开关和输出电阻来改变衰减和放大的电路。虽然我有一些继电器,但我知道它们不会以低于4伏的转换,这意味着它们只能使用完全装载的锂离子电池(4.2V)。所以我需要另一种方法来切换这些电阻。当然,我可以安装机械开关,但这肯定不再适合项目盒,也许我可以再次尝试更好的数字电位器(我的方式太吵了)。

然后我想到了“模拟开关”,我可以用这些开关自己制作一个数字电位器。在我的零件系列中,我发现CD4066带有四个模拟开关。其思想是通过将输入和输出电阻与反馈电阻并联,使opamp的反馈电阻成为可变电阻。

它的运行方式很好,但在4066中只有4个开关,并具有2个通道,无法制作超过三个灵敏度水平。每分部选择500mV,1V和2V,因为那些是我最常使用的电压电平。屏幕分为6个部门,使得为范围-1.5V至+ 1.5V,-3V至+ 3V和-6V至6V。

使用“虚拟地”,您可以向上和向下移动这些范围,因此即使0V至+ 12V也是可能的。

第四步:虚拟地面

因为示波器使用单个电源轨(3.3V),所以Opamps需要虚拟地面级别,或者它们将无法工作。这种虚拟地面是在TIM4的一个输出通道上使用PWM进行的,它的占空比从几乎没有几乎百分之几到百分之一。具有1K电阻的低通滤波器和10UF电容器变换成(几乎)0V至(几乎)3.3V的电压。方形波的频率在100kHz下,因此简单的低通滤波器足够好。

在这个示波器的建设中,我意识到你不能为频道有两个单独的偏移。这是因为通过单个电源,输入地面级必须与opamps的实际地面分开。因此,两个频道在更改GND设置时都以相同的方式移动。

步骤5:旋转编码器和调试

在迷你示波器上,我只使用一个旋转编码器,用于所有功能。这将使双示波器非常难以使用,所以这里我需要两个。用于衰减器的一个编码器和虚拟地面和时基的另一个编码器和触发。可悲的是,就像在我的其他项目一样,这些旋转编码器非常“嘈杂”。它们是如此糟糕,以至于他们根本不会与“编码器模式”中的定时器合作,读取它们的标准方式。我必须使用计时器Tim2进行脱嘴机制,每100us检查编码器。当编码器上有一些活动时,此计时器仅启动(仅限),在输入端口上使用EXTI功能进行检查。现在编码器运作良好。

正如您所看到的,显示屏也可以非常方便地显示调试信息。

步骤6:显示和时基

显示器的分辨率160 x 128像素有160一个screenfull所需样本,我设法加快adc每秒160万个样本,与大部分的超频单片机(稍后详细介绍),给出一个最低时基20我们每个部门每个屏幕(100美元)。因此,一个10kHz的波形将充满整个屏幕。

这只是我以前做的微型示波器速度的两倍。哦,好吧,现在有两个频道:-)。

如上所述,显示器的宽度为160像素,因此每个屏幕只需要160个值。但所有缓冲区实际上都包含320个样本。因此,DMA在触发传输完全中断(TC)之前存储320个值。这是因为触发是在软件中完成的。采样在随机时刻开始,因此缓冲区中的第一个值不太可能是触发点所在的位置。

因此,通过读取跟踪_x_缓冲区来找到触发点,如果该值处于所需的触发值en,如果前一个值刚好低于该值,则找到触发点。这工作得很好,但需要比实际显示大小更大的缓冲区。

这也是为什么较低时间基准设置的刷新率比您可能预期的要慢的原因。当您使用200ms/div设置时,整个屏幕的数据是1秒,但是由于要完成两倍的转换量,所以需要2秒。在更快的时间基础设置中,你不会注意到它那么多。

TIM3用于生成时间基准。它根据所选的时间基准设置以所需的速度触发adc。它的TIM3时钟是120MHz(参见overclock),它计数的最大数字(ARR)决定了它如何溢出,或者,在ST语言中它如何更新。通过TRGO,这些更新脉冲触发adc。它产生的最低频率为160赫兹,最高频率为1.6MHz。

第7步:ADC和DMA

两个adc在同一时间转换其输入端的电压,它们将这两个12位的值存储在一个32位的变量中。因此,DMA在每个(双)转换转换中只有一个变量。

要使用这些值,因此必须将它们拆分为两个值,以便它们可用于显示两个迹线。如上所述,F103中的ADC不能设置为比12位的其他分辨率。它们总是处于12位模式,因此转换总是采用相同数量的时钟脉冲。尽管如此,随着ADC的超频,可以完成每秒1.6毫班斯普拉姆(见额外:超频)。

adc的参考是Vdd, 3.3V轨道。为了把它转换成更方便的值(每一项),我已经计算了衰减器的值,因为我没有精确的电阻值,从那些计算出来,一些修正是在软件中完成的。

在这个项目中,我在“常规模式”中使用DMA。在这种模式下,当所有的字(或半字或字节)都被传输完时,DMA停止传输数据(从de adc到内存)。在另一种可能的模式,即“循环模式”中,DMA会自行重置并继续不间断地传输数据。这并不适用于F103,它是如此之快,它覆盖数据在adc_buffer[]之前,程序的其余部分可以读取它。所以现在的过程如下:

- 设置DMA到要传输的数据数量和启用DMA

- 启动ADC的触发,这些将请在每个(双)转换后请求DMA转印

- 传输组的转换次数后,DMA停止

-立即停止adc的触发

-对内存中的数据进行所有需要的操作

-显示在屏幕上的痕迹

—重新启动该进程

步骤8:用户界面

一个160×128像素屏幕不是很大,我想尽可能多地使用它。所以它没有为电流设置保留的部分。在最后几行中,显示垂直灵敏度,时隙,触发级别和触发通道,但当信号足够大时,它们会出现在同一区域。活动中的选项显示为黄色,其余显示为白色。

步骤9:构建和可能的改进

我对这个项目非常高兴。它可以罚款并完成这项工作,但它可能会更好。

项目盒太小,不能舒适地适应一切,这导致必须在蓝丸下放置零部件。使蓝丸不能直接焊接到“主板”。因为这一切都太高了,我不得不从蓝色药丸中删除许多部分,例如用于选择Boot0和Boot1的跳线(无论如何的东西),我甚至不得不将水晶从顶部移动到底部PCB。

我使用香蕉连接器而不是BNC或SMA连接器使生活更加困难,这意味着perfboard的很大一部分是“禁止进入的区域”,为使自己清楚,我把kapton磁带在它上面,以防止我自己把零件放在它上。

把它放在这样一个小项目箱中的另一个问题是模拟和数字电路非常靠近。您可以看到两个痕迹都有很多噪音。这我甚至没有面包板!通过使模拟和数字电路的电源线移动到尽可能较远的较小的改进,但对我的喜好是不够的。甚至比我的模拟电路中的所有电阻值(输入电阻为100kohm而不是1mohm)没有帮助。我怀疑,在最快的时位设置(20us / div)上的触发并不伟大,也将在信号上的噪音较少。

如果你在一个“真正的”pcb上做这个设计,带有所有的smd部件和模拟、数字和电源的独立层(这是4层!),它可能会工作得很好。它将更小,它将不使用完整的蓝色药丸,但只是F103,这将使它有可能提供一个独立的(干净的)模拟Vdda adc。

最后,我决定将盒子喷成黑色,这使它从所有米色的盒子中做出了改变。

第10步:代码和短视频

第11步:额外:超频

就像我用F03所做的那样,我想看看F103如何超频。这种微控制器的规范声称,最大时钟速度不应超过72MHz(当然已经比F030快),但我已阅读过几个博客,即超频它很容易,为什么不呢?

蓝丸配备了8MHz晶体,PLL将其倍增至9至72MHz。PLL可增加至16,时钟为128MHz。这对我的蓝色药片一点问题都没有,事实上,我所有的蓝色药片在128MHz上都能正常工作。

现在我想知道实际的极限是什么。所以我移除了8MHz的水晶,用12MHz的水晶代替。再次增加锁相环乘法器,直到微控制器最终放弃。那是168MHz !在156MHz上它仍然工作得很好。我让它以那样的速度开了好几个小时都没看到它坠毁。在这个示波器中,我设置为120MHz,速度可以选择12MHz晶体和锁相环10,以及8 MHz晶体和锁相环15。(参见main.c中的SystemClock_Config)

ADC现在也工作更快,我让他们在30MHz上运行(而不是14),他们仍然在60MHz上运行,STMicroelectronics制作一些漂亮的硬件!

意法半导体在数据表中设置这些限制是有原因的,它们保证了微控制器在所有条件下在指定的72MHz下工作。

但由于我没有在-40摄氏度、+85摄氏度、2.0伏或3.6伏的电压下使用微控制器,我认为超频是安全的。当您打算销售带有微控制器的设备时,请不要这样做,因为您永远不知道它们将在何处使用。

一个人做了这个项目!

建议

  • 什么是比赛

    什么是比赛
  • 阻止代码竞赛

    阻止代码竞赛
  • 让它成为真正的学生设计挑战

    让它成为真正的学生设计挑战

80次讨论

0
av.bemmelen

6周前

今天,我的1.8英寸液晶显示器终于到了,我之前已经成功地为所谓的蓝色药丸编程了。所以我给了它一个测试,没有仍然缺失,但命令4066和opamp和显示器都工作,A0和A1输入工作通过放大信号!伟大的工作WilkoL !见附件照片。
我还收到了2个STC控制器的另一个单通道示波器在一个Instructables项目与ST Link程序员,但两个控制器从来没有在RxD TxD上工作,因为两个控制器已经必须有缺陷。卖家没有回答我的问题,所以可能会退9欧元。幸运的是,您的项目现在可以工作了!

0
威尔科尔

六周前答复

听好!看到自己的项目由别人构建仍然很有趣。

(顺便说一句,贝米伦听起来像荷兰人,你是荷兰同胞吗?)

0
av.bemmelen

24天前回复

是的,你完全正确,威尔科!我最近发现了为什么我的另一个来自CreativeLau的带有STC MCU的迷你示波器一直不工作。我只需要从电路中卸下5V Vcc并重新连接它,以便启动处理器的编程模式。所以两个控制器都很好,只是它们从来没有工作过,因为没有人告诉我重新连接已经连接好的电源使其工作!
遗憾的是,他的项目仍然有一个非常糟糕的功能EC11数字电位器,很难调整和控制。我相信你们的双通道范围工作得更好,尽管不是所有组件都收到了,还没有看到完整的结果。祝您晚上/周末愉快!

0
indimasti

6周前

我真的很喜欢你的项目,谢谢这个项目,但我有一个问题,你的代码有版权吗?比如GNU、CC或开源,等等?

0
威尔科尔

六周前答复

好吧,我真的不在乎,所以我把它放在Instructables选择的默认许可下,“归属非商业共享”。可能是来自STMCubeMX(来自STMicroelectronics)的初始化代码有一些限制,但考虑到他们是一家硬件生产商,希望其微控制器尽可能多地销售,这些限制可能是最小的。

你为什么要问?这个范围与“真实”示波器(如RIGOL甚至USB Pico-Scope)不相媲美......我做到了,因为我想看到我可以在STM32F103中使用DMA推动ADC的距离
干杯,
Wilko

1
ngtrphuong

6个月前

非常好的项目。在这里提到:这个示波器可以测量的最大频率从0KHz到100KHz?如果我错了,这个DIY OSC的频率、电压等阈值是多少?
我有这个评论的原因,因为我要么考虑你的帖子,或者购买DSO138,那么价格约为17至20芽,

1
威尔科尔

6个月前回复

谢谢

示波器的带宽远远超过100 kHz。但是,最快的时间基础设置是20us每个部门,这意味着两个周期的一个100千赫信号适合一个部门。一个波形只有8个像素。这是非常小的。我不会使用高于20千赫的频率,所以对于音频和闪烁的led来说是很好的。

在步骤3中,我讨论电压电平。

我不知道DSO138的规格,但即使我知道,我也不会买它。我认为自己设计和建造它更有趣,我从中学到很多。

芽?这是你钱的名字?那是哪个国家?

0
ngtrphuong

6个月前回复

谢谢@WilkoL,

是的,你是对的,为自己做到这一点是最好的经历。
我刚刚完成了DIY的重婚3D打印机,这是我的感受,
有什么方法可以在术语或频率测量上改进它吗?

再次感谢,
Phuong。

0
威尔科尔

6个月前回复

你需要一个更快的ADC去更高,当你有,你可能也想要一个更快的微控制器。

这台示波器的目的是使用蓝色药丸。

因为我知道它有两个adc,我想用这两个adc以两倍的速度取样。虽然这是可能的,但也有一些限制。

所以我决定用双通道示波器。从那时起,使频率范围尽可能的高不再是最重要的事情。
即使我同时使用两个adc,它也只会使频率范围加倍…

也许有一些聪明的技巧,让这个微控制器的adc在更高的频率范围,但我不知道那些技巧,我不是一个专业人士。

干杯,
Wilko

0
ngtrphuong

五个月前的答复

我试图自己做这个,并坚持编译代码。
你能和我分享一下你分享的代码的构建、编译过程吗?
提前谢谢了,

1
威尔科尔

五个月前的答复

当然,也许我甚至可以对它进行指导......有人......

我使用Windows10, STM32CubeIDE (Cube)和STLink_V2程序员/调试器。这个设置完成了,编辑器,编译器,链接器,调试器。它不需要任何配置,而且是免费的。

我以Cube(图片)开始项目,通过选择我想要使用的MCU。你可以选择和配置外设(图片),时钟系统,看看哪些引脚将被使用。习惯这个程序确实需要一些时间。我喜欢它,除了它总是默认使用HAL库的那部分。我不喜欢HAL…所以在项目经理我不得不改变所有的司机LL ver的时间。(图片)哦。

保存后,我关闭这个配置屏幕,永远不会再使用它,因为如果你重新启动它来查看设置,它可以(而且将)覆盖你自己编程的部分。我甚至将它创建的. ioc文件移动到另一个目录(文件夹),以确保不会意外地重新启动它。

正如您可以在我的代码中看到的,我将删除STMicroelectronics放入代码中的所有评论,因为它使我更加可读。

我几乎总是在main()中以两行简单的行开始,类似这样:

LL_GPIO_TogglePin (GPIOC LL_GPIO_PIN_13);
ll_mdelay(100);

在构建(图)、删除我犯的愚蠢错误并调试(图)后,连接到GPIOC_13的led应该闪烁。如果没有,请检查硬件。


所以你有什么问题,我知道编译器产生的错误消息有时是(非常)误导,但大多数时候他们都会指出我犯了一个错误的地方。

0
ngtrphuong

4个月前的回复

它适用于您的指导,
我可以建立代码,正如你所看到的-我已经做到了,

0
ngtrphuong

五个月前的答复

感谢您的详细指导!让我试试吧

2
GmQuick.

5个月前

我指出了你对旋转编码器有噪音问题。我建议使用电容器〜470欧姆添加串联电阻。向GND短路的100N电容器将导致10A加电流峰值,这也可能妨碍随时间损坏旋转触点。

0
mikefromspace

五个月前的答复

旋转触点?它正在使用经销商?

0
GmQuick.

五个月前的答复

编码器仅在转换时具有有效信号。使用Arduino一种输入配置为边缘触发中断。可以使用两个或单边。AB信号是中断中的样本以确定计数和方向。当我第一次看看来自编码器的信号时,它会混淆我。使用这种技术工作正常。

0
威尔科尔

五个月前的答复

如果你仔细观察这些信号,你会发现(用好的编码器)它们产生的方波相位相差90度。

当您对一个信号(A)的上升(或下降)沿做出反应(例如通过中断)并查看另一个信号(B)的值时,您将看到当您朝一个方向旋转时,该值将为低,而如果您朝另一个方向旋转,该值将为高。
这就是我解码它们的方式。

1
威尔科尔

五个月前的答复

好主意,我用的是迷你示波器但不是这个。旋转编码器的问题是,反弹,事实上,来自它的波形甚至不接近50%占空比方波,我怀疑它们根本没有对齐。所以a和b开关的边非常接近。他们太可怕了。这就是通过易趣购物的麻烦所在,你永远不知道你得到的是什么质量。

0
mikefromspace

问题5个月前介绍

通过USB将输出流到PC将输出数据流入PC有多棘手?这样,您可以录制绘图甚至在4K视频中查看它。

0
my_self

问题5个月前

我组装了蓝药丸与TFT和旋转开关。
使用您的六角文件,它非常好。
现在我正在尝试使用step10的文件编译代码。
出现,在描述中缺少时钟和定时器配置,我不知道如何配置这些配置。
你能把国际奥委会的文件也贴出来吗?