发新帖本帖赏金 5.00元(功能说明)我要提问
1234下一页
返回列表
打印

【我的DIY设计】stm32f3之4通道数字存储示波器

[复制链接]
21455|79
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
airwill|  楼主 | 2013-1-20 22:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    从看到 STM32F3 系列的介绍就非常激动于其模拟信号是的大幅度加强. 拿到 STM32F3DISCOVERY 一直在琢磨, 玩什么才能发挥其特别强大的模拟外设的功能.
1. ADC 性能测试
    介于上次对 F051 的 ADC 测试冒出的错位和 OVERRUN 的问题, 决定对 F303 也先做此类似的测试.
采样最多到9通道的外部通道+3个内部通道. 连续测试很久, 没有捕捉到错位现象和 OVERRUN 标志.
还没有采用最快采样速度和最高时钟频率, 留下再进一步测试.
有个很奇怪的问题, 按照数据手册, 在 CONT 置位的软件触发模式下, 设置 ADSTART 位后, 我理解为应该是连续重复采样的. 但是发现每次一个规则序列采样结束后, ADSTART 位会由硬件自动清除!
见 RM316 Rev1 的 P216:
    12.4.13  Starting conversions (ADSTART, JADSTART)
Note: 1 In continuous mode (CONT=1), ADSTART is not cleared by hardware with the assertion of
EOS because the sequence is automatically relaunched.
    上面是 CC_SRAM 里运行, CPU 主频 72Mhz. ADC 时钟为 RCC_ADC12PLLCLK_Div2 的测试.
为了提高触发 OVERRUN 的可能性, 首先提高 ADC 时钟为 RCC_ADC12PLLCLK_Div1 再测试. 但测试后也没有捕捉到错位现象和 OVERRUN 标志.
    考虑到 CC_SRAM 里运行, 指令读取在 I-BUS, 是0 等待的, 这样 CPU 的总线矩阵的空闲率还是比较高.
    于是决定增加数据贪吐率再测试, 方法是前台主程序里增加数据读写操作; 于是在前台主程序里, 进行大数组从 FLASH 搬移到 RAM 的工作. 继续 ADC 转换, 经过一个多小时的测试, 没有捕捉到 OVERRUN.
    基本认为, ADC 方面的性能得到了提升.
   
2. DIY 一个示波器, 由于 STM32F3DISCOVERY 的 STM32F303 有 4 路独立的 ADC, 而且每个 ADC 的转换速度可以达 5Mps. 单芯片就能做到实时采样达 5M 的 4 通道示波器. 蛮有吸引力和挑战的设计.  
    方案设计:  
  1. 存储器分配: STM32F303 的 SRAM 为 40KB, 对于这个设计并不充裕, 为了高效利用存储器, 示波器 ADC 的采样深度设为 8 位,  除了系统使用外, 可以将 32KB SRAM 来做采样数据, 这样每个通道可以 8K 的采样存储.
  2. 采样通道: 通常高速 ADC 采样要求信号源的阻抗不能太大. 为了避免使用高速运放. 决定利用内部 PGA 作为采样的前级运放. 因为 PGA 可选 2,4,8,16 倍放大, 这样还可以纯软件实现 4 级 Y 方向的放大倍率.
  3. 界面: 手头有个 7 寸 TFT 屏, 有了它就完全可以做到细致的波形显示. 但最大的缺陷是缺少输入接口. 如果时间充足的话, 可以将 LCD 的触摸屏功能调出来做手触控制波形显示. 不过第一步先连上本人的现成键盘数码板, 以提供上下左右这些最基本的按键输入.
  4. 软件方案: 首先是控制 ADC 采样, 采用定时器触发是最节省软件资源的办法. 为了实现5M 和 2M 的采样率. 定时器的时钟要求是 10MHz 的整数倍. 考虑 8MHz 的晶振不想去更换, 40MHz 的主频太低了, 决定将主频稍做提升到 80MHz. 可以8分频后给 TIM1 提供时钟. ADC 用 1 通道的规则转换, 非连续转换方式. 根据手册 RM316, TIM1 有好多信号可以自动触发 ADC 转换, 先考虑由 TIM1 的 TRGO 信号来触发. 然后通过 DMA 方式将转换结果保存做采样存储器. 分别由 DMA1 通道1, DMA2 通道1, DMA2 通道5, DMA2 通道2 来完成. 最后由 DMA 中断关闭定时器 TIM1, 通知主程序更新 LCD 显示. 如果是触发方式, 也可以通过 ADC 看门狗来触发延时关闭定时器 TIM1, 再通知主程序更新 LCD 显示.  
    回头检查一下, 对照数据手册, 感觉方案里没有什么缺陷. 于是开始动手搭硬件平台, 找来大把杜邦线来连接 STM32F3DISCOVERY 和 LCD 和键盘数码板. 连接完成, 先还是运行之前的 ADC 测试程序. 咦, 怎么按键没有反应? 一会儿忽然飘来一股焦味, 还在迟疑间 LCD 的屏幕暗了, 赶紧拔下 STM32F3DISCOVERY 的 USB 连线! 拆掉所有线再上电, STM32F3DISCOVERY 没有反应, 拔下, 插上 U 盘. 还好, 灯闪烁, u 盘正常, 电脑口没有坏. 再检查 STM32F3DISCOVERY 发现 D2 烧毁了. 小问题, 修理一下继续.
    几个晚上下来, LCD 的显示很顺利的完成了. 但是后来的 ADC 采样部分颇费周折. 这个定时器 TRGO 触发 ADC 怎么都不好使. 验证通过软件触发 ADC, 然后由 DMA 完成数据的存储, 完成. 但是在自动触发上, 不知是 TRGO 生成的问题, 还是 ADC 接受触发信号的问题. 采用 Update 触发, 或者各个 OCxREF 触发 TRGO, 都不能触发 ADC, 更换定时器 TIM3 的 TRGO , 也没有能触发 ADC. 由于 TRGO 是个内部信号, 无法检测, 又让 TIM1 的 OC2 生成 PWM 信号, 输出通过 PE11 检测到波形, 再选择 TIM1 的 OC2REF, 也没有触发 ADC. 再试用 PE11 的信号生成 EXTI11,  EXTI 中断验证完成, 改设成事件, 还是没有触发 ADC. 这已经是最后一个晚上了, 时间过于仓促. 不得已先采用定时中断里软件触发 ADC 的办法, 让系统先跑起来. 先上个离散点方式的采样图形. 等以后有空再完善这个示波器.
    体会: STM32F3DISCOVERY 由于搭载 STM32F303, 由于增加了很多模拟功能, 在应用中可以做很灵活的设计. 但是在编程中发现参考资料严重不足. 遇到问题, 发现编程手册 RM316 并没有说得很清楚 (象遇到的这个 ADC 触发问题), 而外设库里面带的例子也过于简单, 对于深入一些的应用基本没有啥帮助. 另外 STM32F303 一些内部信号功能的确强大 (比如 TRGO), 单对其的调试和验证却缺乏手段, 一则没有办法引出来让示波器捕捉, 二则不能通过寄存器软件捕捉, 导致这个信号很难捉摸. 对软件的调试验证带来了很大的不确定性.

IMG_2.jpg (699.44 KB )

IMG_2.jpg

IMG_1.jpg (705.51 KB )

IMG_1.jpg
沙发
gaupen1186| | 2013-1-21 00:21 | 只看该作者
兄弟,帖子发的够晚的!不够,我比你还晚,哈哈~~

使用特权

评论回复
板凳
airwill|  楼主 | 2013-1-21 08:50 | 只看该作者
gaupen1186 发表于 2013-1-21 00:21
兄弟,帖子发的够晚的!不够,我比你还晚,哈哈~~

想搞个有点深度的东东, 自己找了题目, 太难了点
过于仓促了些

使用特权

评论回复
地板
lzq1804| | 2013-1-22 14:02 | 只看该作者
学习。

使用特权

评论回复
5
jlass| | 2013-1-22 16:34 | 只看该作者
NB两个字已不够形容楼主的强大

使用特权

评论回复
6
pkat| | 2013-1-22 21:12 | 只看该作者
很有深度了:lol

使用特权

评论回复
7
xsgy123| | 2013-1-22 21:25 | 只看该作者
DIY 一个示波器也不容易啊

使用特权

评论回复
8
louyj| | 2013-1-24 10:29 | 只看该作者
希望楼主能完善后开源,也让我们DIY一把。

使用特权

评论回复
9
airwill|  楼主 | 2013-1-24 12:43 | 只看该作者
嗯, 是得好好完善,
这几天下来, ADC 的触发总算是调试出来了. 为了调整足够宽度的时间调整, 我已经改用 TIM2 做定时 ADC 采样触发了. 125 方式的触发控制实现了.
模拟信号用外部信号已经调试通过. 但是 OPAMP 的功能还在验证.
还有验证和实现的东西还很多呢

使用特权

评论回复
10
feiguohai517| | 2013-1-25 10:43 | 只看该作者
真心不懂....

使用特权

评论回复
11
ichenqiang| | 2013-1-25 13:35 | 只看该作者
楼主nb,一直想DIY一个示波器,但网上资料都比较复杂。楼主完善后能开源示波器吗?

使用特权

评论回复
12
airwill|  楼主 | 2013-1-27 14:30 | 只看该作者
本帖最后由 airwill 于 2013-1-27 14:31 编辑

    进一步调试和验证:
1. 为了验证 ADC 和 OPAMP 的采样情况. 决定先使用 DAC 模块生成一个特定的波形做基准信号. 参考了库里的例子程序, 决定采用正弦波, 方法是用 TIM6 触发 DAC 转换, DAC 触发 DMA. 由DMA 将更新 DAC 的波形数据. 软件调试观察 TIM6, DAC, 和 DMA 的寄存器完全符号设置, 但就是不生成正弦波. 最后发现居然是 DMA 有错误!  查数据手册, 这个 DMA 错误还解释了一大通. 折腾了一通, 还是没有办法解决 DMA 错误的问题. 换个思路, TIM6 触发 DAC, 同时也触发 DMA 来更新波形, 发现还是 DMA 错误. 真郁闷, 干脆用 DAC 自身的三角波生成功能, 扔掉 DMA, 这倒是成功了. 于是设置了两路 DAC 都生成三角波提供测试用的波形.
2. 将 ADC 通道设置 OPAMP 输出(ADC1-通道15, ADC2-通道17, ADC3-通道17, ADC4-通道17) 发现全是噪声. 看来也得再细细验证. 先验证 ADC 信号. 设置 ADC1-通道1, ADC2-通道1(即 DAC1输出), ADC3-通道14, ADC4-通道6. 后面的这两路是指示灯信号. 发现信号不用折腾就很正常. 看来 ADC 设置是正确的, 难道是 OPAMP 的问题?
3. 验证 OPAMP 的功能, 原以为这一步就是多余的. 纯硬件的东西不值得费脑筋的, 看来并不是这样. 而且折腾好久居然仍然没有弄明白有时候是正常的, 有时候又完全不对! 为了仔细验证, 决定干脆对 OPAMP 一个个脚的进行设置和验证. 后来才发现 原来 RM316 Rev1 版手册 P345 页的图和后面的寄存器说明里的引脚不是对应的. 这图是错误的! 按照寄存器说明进行验证才是正确的.
4. 这下终于可以将 OPAMP 送给 ADC 了. 再次设定(ADC1-通道15, ADC2-通道17, ADC3-通道17, ADC4-通道17), 手册 ADC 部分的介绍里面, 不管是框图, 还是文字说明, 都提到了这样的内部通道说明. 然而照此设定, 波形显示还是毫无信号的杂波! 实在是不解. 幸好, 在验证 OPAMP 时发现其输出信号都是与 IO 口硬连接的, 即 OPAMP1 输出接 PA2,  OPAMP2 输出接 PA6,  OPAMP3 输出接 PB1,  OPAMP4 输出接 PB12, 将这几路硬连接输出的信号送 ADC 采样. 波形输出正常了. 看来以后要用 OPAMP功能, 就得空下这几个引脚, 千万不能挪作他用!
    经过这么多天的辗转, 到此终于完成了初步功能, 上一张实拍的波形采样照片. 通道红,黄为两路 DAC 经 OPAMP 2倍放大后波形, 通道青,蓝为对前面这两通道信号再由 OPAMP 2倍放大后波形.


使用特权

评论回复
13
gxgclg| | 2013-1-27 16:07 | 只看该作者
最近也想DIY 一个示波器,LZ花了多长时间DIY出来的

使用特权

评论回复
14
无冕之王| | 2013-1-27 16:31 | 只看该作者
高手有个共同的特征,都喜欢琢磨

使用特权

评论回复
15
sinadz| | 2013-1-27 16:49 | 只看该作者
很给力

使用特权

评论回复
16
cgd| | 2013-1-27 19:27 | 只看该作者

使用特权

评论回复
17
whb0521| | 2013-1-27 20:55 | 只看该作者
顶一下,楼主很强啊

使用特权

评论回复
18
txcy| | 2013-1-27 22:45 | 只看该作者
DIY不错,写的小结也很给力

使用特权

评论回复
19
baidudz| | 2013-1-27 22:54 | 只看该作者
继续完善就能出产品了:lol

使用特权

评论回复
20
airwill|  楼主 | 2013-2-1 04:33 | 只看该作者
本帖最后由 airwill 于 2013-2-1 04:36 编辑

再测试, 发现 ADC 自动结束并不是因为使用 TIM3 引起的. 而是和设定 ADC 的主从模式有关.
再仔细查询 RM316 手册, 终于找到那行小字, 原来是 MDMA 的设置问题, 由于在我的应用中, 主从 ADC 各自使用了 DMA, 所以应该禁止 MDMA 的.
我的示波器 DIY 基本功能实现了, 里面遇到的问题也基本都弄清楚了. 可以收工了.
发布体会, 要想用好 F3, 真的要仔仔细细地琢磨手册, 细细地测试哪!
最后感谢 STM32F3DISCOVERY, 还有这块可爱的 TFT 7寸屏.

咦, 怎么跑到第二页了, 把这个收尾篇补到上一页吧.

使用特权

评论回复
发新帖 本帖赏金 5.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎进入 TI 模拟技术论坛!

556

主题

17724

帖子

884

粉丝