直流电机转速测量与控制系统设计实验报告评语:成绩教师:年月日班级:学号:姓名:地点:时间:直流电机转速测量与控制系统设计与实现一、课程设计题目:直流电机转速测量与控制系统实验。二、课程设计目的:1.了解以微机为核心的闭环控制系统的组成原理。掌握电机转速闭环控制系统的构成方法。2.了解霍尔器件的工作原理:电机转速的测量与控制的基本原理。掌握PWM调速原理和应用方法。3.掌握控制系统的设计与调试方法,提高分析问题和解决问题能力。三、课程设计的内容:设计一个对直流电机转速测量与转速控制的闭环控制系统。微机控制中心在监控界面上设置电机转速。电机转速测量利用霍尔传感器电路产生转速脉冲,定时/计数电路通过脉冲计数获得转速参量。电机转速调整采用PWM(脉宽调节)方法,控制中心采样到电机转速参量,算得转速值同预定转速设置值进行比较,若不相同,则调整控制转速脉冲的占空比,来达到调速的目的。(占空比=脉冲宽度/脉冲周期)四、系统功能要求与设计要求:1.系统监控界面设计:监控系统具有转速参数设置窗口、采样的电机转速数据显示窗口、转速动态曲线显示窗口相应功能选择菜单。2.监控程序设计要求:a)监控程序用查询方式获取转速数据。b)监控程序用中断方式获取转速数据。3.硬件设计要求:充分利用现有实验系统资源设计一个性能较好的直流电机转速闭环控制系统。利用带锁存的I/O接口电路(如8255,74LS273,D/A-DA0832)输出控制电机转速的脉冲。采样转速用霍尔传感器件提供电机转速脉冲。利用定时/计数电路对电机转速脉冲计数。微机可从定时/计数电路中获得电机转速数值,并产生控制电机转速的PWM脉冲。五、设计详情:1)闭环控制系统原理图电机转速测量与控制闭环系统基本功能图2)电机控制及转速测量原理图3)操作步骤直流电机在控制脉冲作用下转动,电机转盘上的永久磁铁随之旋转,霍尔传感器件3101T受磁场的影响,从端口OUT输出脉冲信号,电机旋转一圈,霍尔传感器输出一个脉冲,脉冲频率于电机转速成正比。通过测出脉冲信号的频率(单位时间脉冲个数)就可以计算出电机的转速。测量转速时,需要一个定时器,设定时间为T,还需要一个计数器,将霍尔传感器的(OUT端)输出脉冲引导计数器的输入端。电机转动时,同时启动定时器和计数器,当定时器定时时间T到时,停止计数器的脉冲计数,并读出计数器的计数值S(即:时间T内的转数),可以计算出主流电机的转速R=S/T。直流电机转速调整:首先确定控制脉冲占空比的调整方式,一种是设定正(或负)脉冲宽度,不断调整负脉(或正)冲宽度实现转速,当转速高于设定转速时,加大负脉冲(或减小正脉冲)的宽度。另一种是同时调整正负脉冲的宽度实现直流电机转速调整。在调整了脉冲占空比后,同时启动定时器和计数器,进行转速测量,直流电机转速调整与测量交叉进行。A.编制利用带锁存功能I/O端口(如8255,74LS273,D/A-DA0832)输出控制电机转速的PWM脉冲程序B.编制利用定时器/计数器测量电机转速程序C.A)程序和B)程序合并,实现电机转速测量与控制D.编制系统监控界面的程序E.电机转速测量与闭环控制系统的连调。4)课程设计试验环境:1.微机一台(Pentium4)微机接口技术实验箱一个ISA–PCI转接卡一块连接电缆一条万用表一块微机接口技术实验讲义一本导线、剥线钳等2.软件环境:WindowsXP平台VisualC++6.0编译器六、实验结果:我们在完成了实验的基本要求基础上,还完成了实验的全部三个附加要求。详情如下:1)界面截图2)测试数据设定转速2600r/m2100r/m1800r/s1200r/m600r/m300r/m实测转速40r/s37r/s30r/s19r/s11r/s0调整时间∞015s8s20s∞误差∞5.71%0.0%5%10%∞实际观察情况如:调节快慢,波动大小等设定速度超过了额定最大速度,无法平衡,因此该数据为坏值。最接近设定速度,并且刚启动就稳定。电机刚启动后,立即达到最大速度,等待一段时间后,下降到设定速度。电机刚启动后,立即达到最大速度,等待一段时间后,下降到设定速度。电机刚启动后,立即达到最大速度,等待一段时间后,下降到设定速度。由于速度太小,电机收到阻尼,产生震荡,无法测出实际速度。七、实验心得:这次实验的题目确实比较难,因为是6个人一组,设为组长,我们首先讨论了要完成这个题目需要做的工作,于是我们首先对任务进行了分工,两个人负责顶层软件的设计以及具体的程序控制,两个人对硬件进行设计,两个人进行中间接口的设计和分析8255,8253等一起的代码,在做完之后大家再一起讨论,争取使每个人都能明白整个实验的原理和具体的实现过程。经过这次试验,我明白了8255,8253等器件的用处以及对这两种器件的编程,对硬件的编程有了更深的理解,由于在实验过程中,我负责的是顶层的软件设计与控制,所以对MFC进行了学习,对MFC也有了进一步的认识与了解。实验过程中,大家在一起交流学习,共同为一个课题而努力,这是平时很难得的机会。增进了友谊,促进了学习。很希望大学期间可以多有一些这样的课程设计!八、实验附录:实验代码:#includestdafx.h#includekkk.h#includekkkDlg.h#includePCI9052Dll.h#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CAboutDlgdialogusedforAppAboutclassCAboutDlg:publicCDialog{public:CAboutDlg();//DialogData//{{AFX_DATA(CAboutDlg)enum{IDD=IDD_ABOUTBOX};//}}AFX_DATA//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport//}}AFX_VIRTUAL//Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg():CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}voidCAboutDlg::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)//{{AFX_MSG_MAP(CAboutDlg)//Nomessagehandlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CKkkDlgdialogCKkkDlg::CKkkDlg(CWnd*pParent/*=NULL*/):CDialog(CKkkDlg::IDD,pParent){//{{AFX_DATA_INIT(CKkkDlg)m_str=_T();m_set_speed=30;//}}AFX_DATA_INIT//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32m_hIcon=AfxGetApp()-LoadIcon(IDR_MAINFRAME);}voidCKkkDlg::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CKkkDlg)DDX_Text(pDX,IDC_EDIT_SPEED,m_str);DDX_Text(pDX,IDC_EDIT_SET_SPEED,m_set_speed);DDV_MinMaxInt(pDX,m_set_speed,0,2400);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CKkkDlg,CDialog)//{{AFX_MSG_MAP(CKkkDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1,OnSpeed_Add)ON_BN_CLICKED(IDC_BUTTON2,OnSpeed_Min)ON_WM_TIMER()ON_BN_CLICKED(IDC_BUTTON_ADD,OnButtonAdd)ON_BN_CLICKED(IDC_BUTTON4,OnStop)//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CKkkDlgmessagehandlersBOOLCKkkDlg::OnInitDialog(){CDialog::OnInitDialog();//AddAbout...menuitemtosystemmenu.//IDM_ABOUTBOXmustbeinthesystemcommandrange.ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX0xF000);CMenu*pSysMenu=GetSystemMenu(FALSE);if(pSysMenu!=NULL){CStringstrAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if(!strAboutMenu.IsEmpty()){pSysMenu-AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);}}//Settheiconforthisdialog.Theframeworkdoesthisautomatically//whentheapplication'smainwindowisnotadialogSetIcon(m_hIcon,TRUE);//SetbigiconSetIcon(m_hIcon,FALSE);//Setsmallicon//TODO:Addextrainitializationhere//this-SetTimer(1235,1000,0);OpenDevice();GetIoBase(&usIoAddr1);data1=0x50;OutByte(usIoAddr1+0x08+3,data1);data1=0xff;OutByte(usIoAddr1+0x08+1,data1);returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}voidCKkkDlg::OnSysCommand(UINTnID,LPARAMlParam){if((nID&0xFFF0)==IDM_ABOUTBOX){CAboutDlgd