使用串行接口的数据采集系统的设计与实现

上传人:x**** 文档编号:71603401 上传时间:2022-04-07 格式:DOC 页数:16 大小:280.50KB
收藏 版权申诉 举报 下载
使用串行接口的数据采集系统的设计与实现_第1页
第1页 / 共16页
使用串行接口的数据采集系统的设计与实现_第2页
第2页 / 共16页
使用串行接口的数据采集系统的设计与实现_第3页
第3页 / 共16页
资源描述:

《使用串行接口的数据采集系统的设计与实现》由会员分享,可在线阅读,更多相关《使用串行接口的数据采集系统的设计与实现(16页珍藏版)》请在装配图网上搜索。

1、. . . . 使用串行接口的数据采集系 统的设计与实现一:设计任务与要求1. 连接单片机基本电路,检查电路,直到测量出晶振有振荡波形。2. 连接串口芯片MAX232C,使用STC编程软件,可以测量到芯片存在。3. 编写基本的串口测试实验,可以将串口数据传输到PC机。4. 连接TL431,用电压表测量输出电压为2.5V,给单片机芯片作为参考电压。5. 编写AD读取程序,将AD读取的测量值通过串口传输到PC机,验证其正确性。在输入端加入不同的直流电压,调节程序在屏幕上显示的正确的直流电压值。6. 在AD端加入低频正弦/脉冲/三角信号,在屏幕上正确的波形。7. 采用合适的方法,能够准确测量输入信号

2、的时间参数。二:系统设计单片机采用串口编程的STC5616AD单片机,根据其技术文档,做出单片机最小系统。同时焊接TL431使其输出电压为2.5V作为基准电压。再把采样的数据发送给PC。其系统框图为: 单 片 机PC信号TL431Max2322.5V基准电压三:数据采集具体原理图: 此程序由RS232串口发送程序和AD采样程序组成。AD采样采用查询方式,为了提高采样的进度,我们应用的2.5V的参考电压,但是由于此单片机没有直接的参考电压输入端,不能直接输入参考电压。所以每次测量时,先测量2.5V参考电压,得到10位参考AD值ref,再采集需要测量的通道的电压值,得到另一个10位AD值Vad,那

3、么所测电压的计算公式就是:V=2.5*(Vad/ref)。具体AD,串口发送 程序:#includetypedef unsigned char INT8U;typedef unsigned int INT16U;#define AD_SPEED 0x00/最低采样速率void delay(INT8U delay_time) / 延时函数 INT16U n; while(delay_time-) n = 6000; while(-n); INT16U get_AD_result(INT8U channel) ADC_DATA = 0; channel &= 0x07; /0000,0111 清0

4、高5位 ADC_CONTR = AD_SPEED; ADC_CONTR = 0xE0; /1110,0000 清 ADC_FLAG, ADC_START 位和低 3 位 ADC_CONTR |= channel; /选择 A/D 当前通道 delay(1); /使输入电压达到稳定 ADC_CONTR |= 0x08; /0000,1000 令 ADCS = 1, 启动A/D转换kaishizhuanhuan, while (1) /等待A/D转换结束 if (ADC_CONTR & 0x10) /0001,0000 测试A/D转flag=1 zhuanhuanwancheng 换结束否 bre

5、ak; ADC_CONTR &= 0xe7; /1110,0111 清 ADC_FLAG 位, 关闭A/D转换, qingchu FLAG return (ADC_DATA8);Send_Byte(ADC_REF8);Send_Byte(ADC_10bitpvData+12)=0;for(i=0;ipvData+i,2);if(head=0xffff)memcpy(char*)&AD_ref+1,(char*)vRecv.parray-pvData+i+2,1);memcpy(&AD_ref,(char*)vRecv.parray-pvData+i+3,1);memcpy(char*)&AD_

6、dest+1,(char*)vRecv.parray-pvData+i+4,1);memcpy(&AD_dest,(char*)vRecv.parray-pvData+i+5,1);vol=2.5*(double)AD_dest/AD_ref);cs.Format(%1.2fV,vol);m_Vol=vol;SetDlgItemText(IDC_STATIC_RECV,cs);break;bool CADCommDlg:MSCommInit()m_cMSComm.SetCommPort(m_CBN_PORT.GetCurSel()+1); /选择COMif(m_cMSComm.GetPortO

7、pen() /假如串口是打开的,则强行关闭串口 m_cMSComm.SetPortOpen(FALSE); m_cMSComm.SetInBufferSize(1024); /接收缓冲区 m_cMSComm.SetOutBufferSize(1024);/发送缓冲区 m_cMSComm.SetInputLen(0);/设置当前接收区数据长度为0,表示全部读取 m_cMSComm.SetInputMode(1);/以二进制方式读写数据 m_cMSComm.SetRThreshold(12);/接收缓冲区有1个与1个以上字符时,将引发接收数据的OnComm事件 m_cMSComm.SetSetti

8、ngs(57600,n,8,1);/波特率9600无检验位,8个数据位,1个停止位 if(!m_cMSComm.GetPortOpen()/假如串口没有打开则打开 m_cMSComm.SetPortOpen(TRUE);/打开串口 else m_cMSComm.SetOutBufferCount(0);return true;void CADCommDlg:OnBtnOpenCom() / TODO: Add your control notification handler code hereif (!MSCommInit()AfxMessageBox(Init Failed!);elsem

9、_timer=SetTimer(1,100,0);void CADCommDlg:OnBtnCloseCom() / TODO: Add your control notification handler code hereif(m_cMSComm.GetPortOpen()m_cMSComm.SetPortOpen(0);else AfxMessageBox(串口未开);KillTimer(m_timer);void CADCommDlg:OnOK() / TODO: Add extra validation hereif(m_cMSComm.GetPortOpen()m_cMSComm.S

10、etPortOpen(0);KillTimer(m_timer);CDialog:OnOK();void CADCommDlg:DrawDiagram(CPaintDC *pDC)CRect rect;int W,H,x,y;float xinterval,yinterval;CPen curpen,*oldpen;CBrush newbrush,*oldbrush;m_btnView.GetWindowRect(rect);ScreenToClient(rect);rect.top+=15;W=rect.Width();H=rect.Height();xinterval=(float)W/9

11、9;yinterval=(float)H/100;newbrush.CreateSolidBrush(RGB(0,0,0);oldbrush=pDC-SelectObject(&newbrush);pDC-Rectangle(rect);newbrush.DeleteObject();pDC-SelectObject(oldbrush);curpen.CreatePen(PS_SOLID,2,RGB(0,255,0);oldpen=pDC-SelectObject(&curpen);pDC-MoveTo(rect.left,rect.bottom);for(int i=0;iLineTo(x,

12、y);pDC-SelectObject(oldpen);curpen.DeleteObject();void CADCommDlg:OnDestroy() CDialog:OnDestroy();/ TODO: Add your message handler code hereKillTimer(m_timer);void CADCommDlg:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultdouble per;per=m_Vol;for(int i=0;i99;i+)

13、m_VolHistoryi=m_VolHistoryi+1;m_VolHistoryi=per;UpdateData(FALSE);Invalidate();CDialog:OnTimer(nIDEvent);CDialog:OnTimer(nIDEvent);四:测试结果 基准电压2.5V显示电源电压显示接地电压显示五:实验小结本次课程设计,我们做的是基于单片机的AD串口采集,并由VC面向对象界面进行电压输出,并显示电压波形。VC与C语言有很大的区别,VC主要是面向对象,基于C,而又不同于C。刚开始的时候编程有一定的难度,在看了一段时间VC+方面的书籍以后,对VC有了一定的了解,开始编程。本次设计的难点就是采样的精度与频率。采样频率不够,在采样高频电压的时候,波形会有明显的失真,精度不够,则会有明显的误差。六:参考书籍C程序设计. 清华大学Visual C+从入门到精通. 清华大学网上资料16 / 16

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!