打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
mini DSO STC15 开源示波器

没有哪个蓝孩子可以抵挡住一个示波器的诱惑,如果有,那就再加一台网络矢量分析仪。

阿巴阿巴,比如这个6W的示波器,我好喜欢

还有范老师给我测得电源纹波

今天带来的是一个卖79元的示波器,自己做估计20?25?搁我手里有啥不可能的,emmmm

多说无益,上图:

就是这个样子的

加外壳

背面

侧面

若干功能

如果不想折腾的,真的可以去买,79 嘛,又不贵。

这是初代的样子

这是用的元件


连线图

这个是接口图,看的更清晰

分压电路,不然你以为30V怎么测量的

阿巴阿巴,烧

编码器就完成了所有的逻辑,喜欢

和示波器的波形的比较

屏幕还是很亮的

keil编译

还有操作逻辑:

操作说明:

        主界面-选项设置模式:

            单击编码器:切换开始/暂停采样

            双击编码器:切换波形水平滚动模式/选项设置模式

            长按编码器:进入设置界面

            旋转编码器:修改当前参数

            按下同时旋转编码器:在参数间切换

        主界面-波形水平滚动模式:

            单击编码器:切换开始/暂停采样

            双击编码器:切换波形水平滚动模式/选项设置模式

            长按编码器:进入设置界面

            旋转编码器:水平滚动波形(在暂停采样状态下有效)

            按下同时旋转编码器:垂直滚动波形(仅在暂停采样状态下有效)

        设置界面:

            单击编码器:无效

            双击编码器:无效

            长按编码器:返回主界面

            旋转编码器:修改当前选项

            按下同时旋转编码器:切换选项

    主界面参数:

        横轴时间区间:

"500ms", "200ms", "100ms", "50ms", "20ms", "10ms","5ms", "2ms", "1ms", "500us", "200us", "100us"

(100us仅在自动触发模式下可用)

        纵轴电压区间:设定电压量程上限,最大30V,顺时针旋转编码器将电压上限设置为0则进入自动量程,逆时针旋转进入手动量程

        触发值:设定触发电压值,触发位置被放在屏幕中心

        触发方向:上下箭头,分别代表上升沿触发和下降沿触发

        触发方式:

            Auto(自动触发)  :连续采样,指示灯始终点亮,通过单击编码器控制启停;触发成功时,触发点位于屏幕中心,触发失败则波形无规律滚动,屏幕左侧显示Fail标志

            Normal(普通触发):等待预采样,待指示灯亮起表示预采样结束,这时可以输入信号;

                              触发成功后,显示波形,并继续等待下次触发;

                              如果有新的触发成功,则自动显示新的波形,如没有新的触发成功则屏幕波形保持并一直等待下次触发;

                              需注意设置正确的触发值,否则一直处于等待触发状态,屏幕不会显示波形

            Single(单次触发):等待预采样,待指示灯亮起表示预采样结束,这时可以输入信号;

                              触发成功后,显示波形,并停止采样,需用户单击编码器开始下次采样

                              需注意设置正确的触发值,否则一直处于等待触发状态,屏幕不会显示波形

    主界面状态显示:

        Run:正在采样

        Stop:停止采样

        Fail:自动模式下,触发值超出波形范围引起触发失败

        Auto:自动量程

    设置界面选项:

        PMode(绘图模式):

            Vector:波形以矢量显示

            Dots  :波形以点阵显示

        LSB(采样系数):分压系数的100倍,比如用10k加2k的电阻进行分压,分压系数为(10+2/2)=6,LSB理论取值为6x100=600,根据实际电阻精度进行微调

        BRT:OLED亮度

    保存设置:长按编码器退出设置界面时,设置界面和主界面的所有参数被保存到EEPROM

这个图是在上面都看不懂的情况下使用

缺陷:

1. 不能测量负电压。波形将在 0V 处停止。

2、如果高速采样输入PWM信号,采样结果会频繁跳到最大值。我向STC工程师询问了这个问题,但没有得到明确的解释。这个跳跃问题也和各个MCU的质量有关。

性能:

通道数:单通道

采样率:750kSa/s 

模拟带宽:500kHz 

储存深度:1k 

输入阻抗:1MΩ 

水平时基:50us-20s(1-2-5) 

输入电压:0-32V 

工作电压:4-5V

一些示波器的功能,未来看源码都可以找到

测量的接口

接下来看看源码实现:

这些头

  1. reg51,头文件

  2. global,因为需要大量的变量来实现复杂的逻辑,所以这个有用

  3. 还有关于测量,示波器是和时间强相关的仪器

  4. 因为电压到数字的转换就是ADC了,这里也需要重点处理

  5. 还有就是外设的引脚的连接,这里单独处理

  6. 因为实现了复杂的逻辑功能,每一次的设置都有很多的变量改变,这里也单独的进行了功能的封装

  7. 剩下就是处理屏幕的事情了,以后说

变量

延时

实现

引脚定义

OLED的连接

关于设置

编码器使用的是中断法

电池电压的测量使用了一个ADC

旋转中断的实现

这个值得看一下:

void INT0_interrupt(void) interrupt INT_0

关键词声明,这个是中断

延时500us

判断这个中断引脚上面的信息

bit EC11PressAndRotate;                                    // EC11编码器按下同时旋转标志位

如果有的话,就开始设置标志位

因为旋转编码器动了,接下来就是知道这个东西咋动的:

一个扫描的功能

里面需要注意的一个改变了多少步进的功能,我这里就先不分析,因为很长,比较占地方,我之后写一下这个编码器的使用。

这是一个设置的功能,实现在设置的文件里面

这个我称为,擦屁股,把中断恢复,等下次在激发

接下来看初始化:

void init(){    InSettings = 0;         //初始化开机界面    OptionInSettings = 0;   //初始化设置界面的选项编号    OptionInChart = 0;      //初始化主界面的选项标号    WaveScroll = 0;         //清零波形滚动标志    OptionChanged = 0;      //清零设置修改标志    ADCRunning = 1;         //置位采样标志    ADCInterrupt = 0;       //清零ADC中断标志    ADCComplete = 0;        //清零ADC完成标志    WaveUpdate = 0;         //清零波形更新标志    ClearWave = 0;          //清零清除波形标志    ClearDisplay = 1;       //置位清空屏幕标志    EC11PressAndRotate = 0; //清零编码器旋转标志    UpdateVbat = 0;         //清零采样电池电压标志    ADCComplete = 0;        //清零ADC完成采样标志    WaveFreq = 0;           //清零波形频率    TriPos = 50;            //初始化触发点位置    TriPosOffset = 0;       //初始化触发点偏移量    TriFail = 0;            //清零触发失败标志    VMax = 0;               //清零波形电压最大值    VMin = 0;               //清零波形电压最小值    WaveLengthSumNum = 0;   //清零波形长度求和次数    WaveLengthSum = 0;      //清零波形长度求和
/* 波形滚动模式下正在采样则禁用外部中断0(编码器旋转) Disable external interrupt 0(Encoder rotation) in waveform scroll mode when sampling*/ if (ADCRunning && WaveScroll) EX0 = 0;
/* 获取内部参考电压值 Get internal reference voltage */ BGV = GetBGV();}

里面的一些初始化是按照位定义的

这里是在一个处理,使用标志位更改了寄存器

获取参考电压

这个函数的功能是实现了,在运行功能的时候改变一些设置

翻译

这是电池电压的测量功能,写的很干净,学会了

更改OLED的亮度是写IIC的参数在里面

自己看注释,简单

然后开始把这些更改保存,下次使用

退出后刷新一下,启用新功能

主要逻辑好多,看不动了

我有空再写,累了。

张开心的祝福真不错!!!

https://github.com/CreativeLau/Mini-DSO

源码位置

https://oshwhub.com/sarins/minidso

JLC

https://www.instructables.com/Upgrade-DIY-Mini-DSO-to-a-Real-Oscilloscope-With-A/

教程

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
用STC12C单片机和12864显示屏制作一个简易示波器
数字示波器的使用说明
示波器基础指南
【汽修兵器谱】高手修车都用示波器:示波器是什么?如何选购?
示波器基础(二)
示波器的采样率和示波器存储深度
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服