《一个应届毕业生的毕设——基于STM32的简易示波器设备驱动的研究 》.docx

《一个应届毕业生的毕设——基于STM32的简易示波器设备驱动的研究 》.docx

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《一个应届毕业生的毕设——基于STM32的简易示波器设备驱动的研究 》.docx

 HYPERLINK /wellrun/archive/2009/03/14/1411275.html 一个应届毕业生的毕设——基于STM32的简易示波器设备驱动的研究  文章来自 HYPERLINK /club/bbs/bbsview.asp?essenceID=10689 /club/bbs/bbsview.asp?essenceID=10689   这是一位应届毕业大学生的毕业设计,我看了之后,感触良多,很值得学习,当年我毕业的时候,只知道51,哈,嗨!。 1 概述 毕业设计的题目是“基于STM32的简易示波器设备驱动的研究”,就是利用STM32的AD采集波形数据,然后通过它内置的USB2.0把数据传到PC上面显示出来。框图如下。 /upfiles/img/20093/20093914421549.jpg 题目一共是两个人做,我和我搭档耗子。他做信号处理,采集部分。我做USB在PC下的驱动开发,以及上位机界面的显示。USB固件那部分我们是一起完成的。 ??这个课题从08年10月开始,到12月圣诞前夕基本完成。最后基本实现了波形的显示,实测最大可以测量的频率是200KHZ, 效果图如下: /upfiles/img/20093/20093914512875.jpg /upfiles/img/20093/20093914532692.jpg 方波的图形好像不是很漂亮会有上升沿老是有尖刺,还需要作软件做处理。没截出来, ??最后能出数据离不开很多前辈的经验。有些地方是借鉴了他们的东西。现在先列出来。 第一个是21IC上面alien2006原帖地址。他也是做了一个简易示波器,但是用的是以太网传输。采集部分我很多借鉴了他的方案。 第二个是电脑圈圈,他对USB的理解令我钦佩。我能搞出驱动,他提供的源码包非常重要,有些代码也是直接在他的基础上修改的。 2 整体方案 ??先说下一次完整的采集,比如外面进来的波形是正弦波,波形电压有正负,STM32单片机的AD只能采集0~3.6V的电压,所以要对信号进行处理。也就是需要一个模拟前端电路,把电压抬上去。接着就是采集了,STM32的AD可以用外设进行触发,这里用定时器进行触发。每过一个单位时间AD开启一次,采集一个点,这样采集的频率只要调整这个单位时间也就是定时器就可以控制了。采集了一桢数据,比如200个点。DMA中断被触发,开启USB,把数据发送到上位机,然后显示出来。 ??整个过程大体就是这样了,还有一个很重要的环节补充下。熟悉示波器的人都知道示波器有个触发概念。像刚才这样显示的话,比如前一帧数据是波峰开始显示,后一帧是波谷开始。这样显示出来的波形就是乱的,于是为了解决这个问题,就需要做触发,也就是保证每次采集的起始电位相同。我们的采用的是用外中断的形式,外面波形数据先不采集,先让它通过一个比较器,比如比较器的基准电压是1V,也就是每次都和1V比较,低于1V输出低电平,高于1V输出高电平。当数据电压大于1V的时候,比较器输出高电平,高电平接到单片机外中断口,这样外中断就被触发。然后开始采集,这样就能保证每帧数据的起始点都相同。 ??这个方案是大体方案,后来做了下修改。就是让AD一直在采集。外中断触发了后开启的是DMA,AD一直开着,只是控制DMA什么时候去取。从哪里开始取,取多少个点。下位机部分不再详说,贴下主要的程序,大侠们随便看看,多多指教。 定时器设置代码如下: /******************************************************************************* * Function Name??: TIM_Configuration * Description????: Configure the TIM2. *******************************************************************************/ void TIM2_Configuration(void) { ??TIM_TimeBaseInitTypeDef??TIM_TimeBaseStructure; ??TIM_OCInitTypeDef??TIM_OCInitStructure; ??? ??TIM_DeInit(TIM2); //TIM2初始化 ????? ??/* Time base configuration */ ??TIM_TimeBaseStructure.TIM_Period = 18; //设置了下一个更新事件装入活动的自动重装载寄存器周期的值 ??TIM_TimeBaseStructure.TIM_Prescale

文档评论(0)

ghfa + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档