直流电机转速控制系统报告分解753.pdf

上传人:深夜****等你... 文档编号:84294862 上传时间:2023-04-04 格式:PDF 页数:16 大小:993.07KB
返回 下载 相关 举报
直流电机转速控制系统报告分解753.pdf_第1页
第1页 / 共16页
直流电机转速控制系统报告分解753.pdf_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《直流电机转速控制系统报告分解753.pdf》由会员分享,可在线阅读,更多相关《直流电机转速控制系统报告分解753.pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、微机系统与应用课程设计 实验报告 直流电机转速测量与控制系统设计与实现 评 语:成 绩 教 师:年月日 班 级:学 号:姓 名:实验地点:实验时间:直流电机转速测量与控制系统设计与实现 一、应用系统设计方案设计目的:了解以微机为核心的闭环控制系统的组成原理。掌握电机转速闭 环控制系统的构成方法。了解霍尔器件的工作原理:电机转速的测量与控制的基本原理。掌握 PWM 调速原理和应用方法。掌握控制系统的设计与调试方法,提高分析问题和解决问题能力。二、课程设计的内容:设计一个对直流电机转速测量与转速控制的闭环控制系统。微机 控制中心在监控界面上设置电机转速。电机转速测量利用霍尔传感器 电路产生转速脉冲

2、,定时/计数电路通过脉冲计数获得转速参量。电 机转速调整采用 PWM(脉宽调节)方法,控制中心采样到电机转速 参量,算得转速值同预定转速设置值进行比较,若不相同,则调整控 制转速脉冲的占空比,来达到调速的目的。(占空比=脉冲宽度/脉冲 周期)三、系统功能要求与设计要求:1)系统监控界面设计:监控系统具有转速参数设置窗口、采样的电机转速数据显示窗 口、转速动态曲线显示窗口及强行干预系统运行的按钮功能或相应功 能选择菜单。2)监控程序设计要求:监控程序用查询方式获取转速数据。监控程序用中断方式获取转速数据。3)硬件设计要求:充分利用现有实验系统资源设计一个性能较好的直流电机转速 闭环控制系统。利用

3、带锁存的 I/O 接口电路(如 8255,74LS273,D/A-DA0832)输出控制电机转速的脉冲。采样转速用霍尔传感器件提 供电机转速脉冲。利用定时/计数电路对电机转速脉冲计数。微机可 从定时/计数电路中获得电机转速数值,并产生控制电机转速的 PWM 脉冲。四、设计详情:1)闭环控制系统原理图 图一 电机转速测量与控制闭环系统基本功能图 2)电机控制及转速测量原理图 3)硬件连线图 图三 硬件连线图 4)操作步骤 直流电机在控制脉冲作用下转动,电机转盘上的永久磁铁随之旋 转,霍尔传感器件 3101T受磁场的影响,从端口 OUT 输出脉冲信号,电机旋转一圈,霍尔传感器输出一个脉冲,脉冲频率

4、于电机转速成正 比。通过测出脉冲信号的频率(单位时间脉冲个数)就可以计算出电 机的转速。测量转速时,需要一个定时器,设定时间为 T,还需要一个计数 器,将霍尔传感器的(OUT 端)输出脉冲引导计数器的输入端。电 机转动时,同时启动定时器和计数器,当定时器定时时间 T 到时,停 止计数器的脉冲计数,并读出计数器的计数值 S(即:时间 T 内的转 数),可以计算出主流电机的转速 R=S/T。直流电机转速调整:首先确定控制脉冲占空比的调整方式,一种是设定正(或负)脉 冲宽度,不断调整负脉(或正)冲宽度实现转速,当转速高于设定转 速时,加大负脉冲(或减小正脉冲)的宽度。另一种是同时调整正负 脉冲的宽度

5、实现直流电机转速调整。在调整了脉冲占空比后,同时启动的定时器和计数器,进行转速 测量,直流电机转速调整与测量交叉进行。A.编制利用带锁存功能 I/O 端口(如 8255,74LS273,D/A-DA0832)输 出控制电机转速的 PWM 脉冲程序 B.编制利用定时器/计数器测量电机转速程序 C.A)程序和 B)程序合并,实现电机转速测量与控制 D.编制系统监控界面的程序 E.电机转速测量与闭环控制系统的连调。五、课程设计试验环境:a)实验仪器微机一台(Pentium 4)连接电缆 万用表 微机接口技术实验讲义 一本 导线、剥线钳等 b)软件环境:Windows XP 平台和 Visual C+

6、6.0 编译器 六、实验主要代码/ReaderDlg.cpp:implementation file#include#include stdafx.h#include Reader.h#include ReaderDlg.h#include PCI9052Dll.h/总线转换#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILE static char THIS_FILE=_FILE_;#endif int iospeed;/设置转速 int rate;/实际转速 int times=0;/运行时间 double key=1.0;/占空比 int

7、normal=0;/异常判断 int stop=0;/CReaderDlg dialog 微机接口技术实验箱 一个 ISA PCI 转接卡 一块 一条 一块 CReaderDlg:CReaderDlg(CWnd*pParent/*=NULL*/):CDialog(CReaderDlg:IDD,pParent)/AFX_DATA_INIT(CReaderDlg)m_edit6=_T();m_edit4=_T();m_edit5=_T();m_speed=0;m_edit3=_T();/AFX_DATA_INIT/Note that LoadIcon does not require a subs

8、equent DestroyIcon in Win32 m_hIcon=AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CReaderDlg:DoDataExchange(CDataExchange*pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CReaderDlg)DDX_Text(pDX,IDC_EDIT6,m_edit6);DDX_Text(pDX,IDC_EDIT4,m_edit4);DDX_Text(pDX,IDC_EDIT5,m_edit5);DDX_Text(pDX,IDC_EDIT1,m_speed

9、);DDV_MinMaxInt(pDX,m_speed,0,2500);DDX_Text(pDX,IDC_EDIT3,m_edit3);/AFX_DATA_MAP BEGIN_MESSAGE_MAP(CReaderDlg,CDialog)/AFX_MSG_MAP(CReaderDlg)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1,OnButton1)ON_EN_CHANGE(IDC_EDIT1,OnChangeEdit1)ON_BN_CLICKED(IDC_BUTTON2,OnButton2)ON_BN_CLICKED(

10、IDC_BUTTON3,OnButton3)ON_EN_CHANGE(IDC_EDIT3,OnChangeEdit3)ON_EN_CHANGE(IDC_EDIT6,OnChangeEdit6)ON_EN_CHANGE(IDC_EDIT4,OnChangeEdit4)ON_EN_CHANGE(IDC_EDIT5,OnChangeEdit5)/AFX_MSG_MAP END_MESSAGE_MAP()/CReaderDlg message handlers BOOL CReaderDlg:OnInitDialog()CDialog:OnInitDialog();/Set the icon for

11、this dialog.The framework does this automatically/when the applications main window is not a dialog SetIcon(m_hIcon,TRUE);/Set big icon SetIcon(m_hIcon,FALSE);/Set small icon/TODO:Add extra initialization here return TRUE;/return TRUE unless you set the focus to a control /If you add a minimize butt

12、on to your dialog,you will need the code below/to draw the icon.For MFC applications using the document/view model,/this is automatically done for you by the framework.void CReaderDlg:OnPaint()if(IsIconic()CPaintDC dc(this);/device context for painting SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSaf

13、eHdc(),0);/Center icon in client rectangle int cxIcon=GetSystemMetrics(SM_CXICON);int cyIcon=GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x=(rect.Width()-cxIcon+1)/2;int y=(rect.Height()-cyIcon+1)/2;/Draw the icon dc.DrawIcon(x,y,m_hIcon);else CDialog:OnPaint();/The system calls t

14、his to obtain the cursor to display while the user drags/the minimized window.HCURSOR CReaderDlg:OnQueryDragIcon()return(HCURSOR)m_hIcon;void CReaderDlg:OnButton1()/启动按钮 /TODO:Add your control notification handler code here/初始化 unsigned short iobase,addr;OpenDevice();GetIoBase(&iobase);/得到基地址 addr=i

15、obase+3;/8255 控制字 OutByte(addr,0 x8a);addr=iobase+11;/8253 计数器 0 控制字 OutByte(addr,0 x32);addr=iobase+8;/计数器 0 初始化 OutByte(addr,0 x09);OutByte(addr,0 x3d);addr=iobase+11;/8253 计数器 1、2 控制字 OutByte(addr,0 x52);OutByte(addr,0 xa0);addr=iobase+9;/计数器 1 初始化 OutByte(addr,100);/初始值为 100 addr=iobase+10;/计数器

16、2 初始化 OutByte(addr,0 x01);addr=iobase+2;/PC 口置 1 OutByte(addr,0 xff);OutByte(iobase,0 x01);/PA0 置 1,电机以最高速度转动/闭环调节系统 char a11,a12;/辅助变量,调节占空比 int num=1;/用来判断是否计时到 1秒 unsigned char speed;unsigned char tt;/判断 PB 口状态,辅助计时 while(stop=0)Sleep(1);/转速 if(num=1)times+;/运行时间 CReaderDlg:OnChangeEdit3();/显示运行时

17、间 addr=iobase+9;/计时器 1 初始化 OutByte(addr,100);addr=iobase+2;/PC口控制计数器 0、1的 GATE,同步计数 OutByte(addr,0 x00);OutByte(addr,0 xff);num=0;addr=iobase+1;/读 PB 状态,判断是否计时超过 1 秒 InByte(addr,&tt);if(tt=1)/时间到,进入转速计算语句 addr=iobase+2;/PC口置零,GATE 失效,停止计数 OutByte(addr,0 x00);addr=iobase+9;/读计数器 1 的计数值 InByte(addr,&s

18、peed);if(int)speed iospeed&key=0.1)/修改占空比 key=key-0.1;else if(rate iospeed&key 0.1)/判断正常/异常normal=0;/异常 else normal=1;/正常 a11=(char)(100*key);/电机驱动脉冲高电平持续时间 OutByte(iobase,0 x01);addr=iobase+10;OutByte(addr,0);OutByte(addr,a11);unsigned char a;int b;while(1)/高电平倒计时 addr=iobase+2;InByte(addr,&a);b=(i

19、nt)a;if(b&0 x10)break;a12=(char)(100*(1-key);/电机驱动脉冲低电平持续时间 OutByte(iobase,0 x00);addr=iobase+10;OutByte(addr,0);OutByte(addr,a12);while(1)/低电平倒计时 addr=iobase+2;InByte(addr,&a);b=(int)a;if(b&0 x10)break;/CloseDevice();void CReaderDlg:OnChangeEdit1()/TODO:If this is a RICHEDIT control,the control wil

20、l not/send this notification unless you override the CDialog:OnInitDialog()/function and call CRichEditCtrl().SetEventMask()/with the ENM_CHANGE flag ORed into the mask./TODO:Add your control notification handler code here void CReaderDlg:OnButton2()/停止按钮 stop=1;/TODO:Add your control notification h

21、andler code here unsigned short iobase;OpenDevice();GetIoBase(&iobase);OutByte(iobase,0 x00);/置驱动脉冲无效 MessageBox(电机已停止工作!);CloseDevice();void CReaderDlg:OnChangeEdit2()/TODO:If this is a RICHEDIT control,the control will not/send this notification unless you override the CDialog:OnInitDialog()/funct

22、ion and call CRichEditCtrl().SetEventMask()/with the ENM_CHANGE flag ORed into the mask./TODO:Add your control notification handler code here void CReaderDlg:OnButton3()/设置转速确认按钮 /TODO:Add your control notification handler code here UpdateData();/m_speed.GetDlgItemInt(iospeed);iospeed=m_speed;void C

23、ReaderDlg:OnChangeEdit3()/显示运行时间 /TODO:If this is a RICHEDIT control,the control will not/send this notification unless you override the CDialog:OnInitDialog()/function and call CRichEditCtrl().SetEventMask()/with the ENM_CHANGE flag ORed into the mask./TODO:Add your control notification handler cod

24、e here CString temp;temp.Format(%d,times);m_edit3=temp;/m_edit3=times;UpdateData(false);UpdateWindow();void CReaderDlg:OnChangeEdit6()/显示实测转速 /TODO:If this is a RICHEDIT control,the control will not/send this notification unless you override the CDialog:OnInitDialog()/function and call CRichEditCtrl

25、().SetEventMask()/with the ENM_CHANGE flag ORed into the mask./TODO:Add your control notification handler code here CString temp;temp.Format(%d,rate);m_edit6=temp;UpdateData(false);UpdateWindow();void CReaderDlg:OnChangeEdit4()/显示占空比 /TODO:If this is a RICHEDIT control,the control will not/send this

26、 notification unless you override the CDialog:OnInitDialog()/function and call CRichEditCtrl().SetEventMask()/with the ENM_CHANGE flag ORed into the mask./TODO:Add your control notification handler code here CString temp;temp.Format(%lf,key);m_edit4=temp;UpdateData(false);UpdateWindow();void CReader

27、Dlg:OnChangeEdit5()/显示异常状况 /TODO:If this is a RICHEDIT control,the control will not/send this notification unless you override the CDialog:OnInitDialog()/function and call CRichEditCtrl().SetEventMask()/with the ENM_CHANGE flag ORed into the mask./TODO:Add your control notification handler code here

28、 CString temp;if(normal=1)temp.Format(正常);else temp.Format(异常);m_edit4=temp;UpdateData(false);UpdateWindow();七、系统测试结果 八、课程设计中遇到的问题及解决办法 这次实验的课题相对于其他三个而言,难度比较大,做起来相对 困难,由于实验器材的限制,我们两个组合成了一个组,一共十个人。大家齐心协力,团体的智慧是非常强大的!拿到这个题目,我们首先读懂实验要求。然后根据实验的要求对 人员进行了分工,一部分同学分析 8255,8253 等器件的用处以及电 路的连接方法,一部分同学选择实验箱,测试重要器件的好坏,确保 器件以及芯片是可用的。硬件相对于软件比较简单,大部分的组员是 参与软件的编写。软件耗时耗力,我们综合了大家的智慧于一体,经 过了艰苦的奋斗,终于在最后一天将代码写好了。连接硬件进行综合 测试。实验的不足之处还有很多,在老师的指导下,我们已经意识到了。比如可视界面不够精确,没有相应的坐标标识,在改变数值的时候,曲线不能及时的反馈出来。我们以后的软件设计中一定会注意这些方 面的问题。实验过程中,大家在一起交流学习,共同为一个课题而努力,这 是平时很难得的机会。增进了友谊,促进了学习。很希望大学期间可 以多有一些这样的课程设计!谢谢老师的耐心指导!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁