本文系统地论述了应用单片机开发步进电动机二维运动控制器的方法。该二维运动控制器的样品已经研制出来,经过实际运行测试,达到了设计要求,既能实现两轴独立运动控制,又能灵活方便地进行联动控制。由于控制软件对步进电动机采用了适当的自动调速方案,使得电机在运动过程中没有失步现象,运行平稳,定位精度高,重复定位性好。 本文所完成的主要工作有:(1)步进电动机驱动电路的研究。(2)系统控制方案设计。(3)硬件系统设计。单片机的选择、串行通信等电路设计。(4)软件系统设计。该控制器重点在于步进电动机的驱动电路硬件与控制软件的设计,以及上下位机串口通信的实现。本设计的控制环节由AT89S52单片机和环形分配器PMM8713构成,单片机采用RS-485标准的串口通信与上位机进行通信,利用PMM8713产生步进电动机运行和正反转的控制信号。驱动环节采用UC3842实现恒流驱动,给出特定的脉冲驱动信号,驱动功率管进行开通和关断,使步进电动机按照规定的轨迹和速度运行。软件部分由上位机软件和下位机软件共同组成。上位机软件用Visual Basic编制,界面友好,下位机软件用单片机汇编语言编制。上位机输入的指令经编译生成相应的目标代码并通过计算机串口发送到下位机中。下位机的功能:一是接收来自上位机的数据和命令;二是根据上位机发送的命令执行相应的动作;三是向上位机发送有关提示信息。 该控制系统在设计方面具有如下特点: 1.采用内部时钟方式产生步进电动机的驱动脉冲,而没有采用高速脉冲发生器等外部方式,用软件来实现,从而降低硬件成本。 2.硬件设计方面,尽可能地选择了标准化、模块化的电路,从而提高了设计的成功率和结构的灵活性。 3.尽可能选用了功能强、集成度高、通用性好、市场货源充足的电路或芯片。 控制器硬件结构简单,成本低廉,控制可靠,功能强大,使用方便,因而具有十分广阔的应用前景。
上传时间: 2013-05-16
上传用户:维子哥哥
交流电机,特别是异步笼型电机,因具有结构简单,坚固耐用,价格便宜等特点而得到广泛应用。经过一个多世纪的发展,其调速方法同趋成熟,而交流调速的最理想方法还是变频调速。随着工业需求的快速增长,高压大功率成为发展的必然趋势,但是在中高压大功率调速领域,大都采用电动机定速运行。 直到20世界末采用全控型电力电子器件的高压大功率交流变频调速产品诞生,大功率传动领域巨大节能需求得到释放。多电平功率变换技术可以使耐压值较低的全控型电力电子器件可靠应用于高压大功率领域,并有效减少PWM控制产生的高次谐波。当前,级联式多电平功率变换电路在高压电机调速和电力系统无功补偿领域已获得实际应用。 本课题以10kV,250kW高压变频器为背景,主要研究级联式多电平高压变频器在异步电机控制领域的应用。在对高压变频器工作原理与结构设计研究的同时,对主电路进行谐波改善分析。高压变频器很难做成通用变频器,所以最好设计与之相适应的高压变频电机。通过对这种新型电机设计的研究,更好地发挥了变频调速技术的优势。在本课题中,还采用了MATLAB7.0/Simulink6.0仿真软件,对功率单元移相多重化进行了仿真,为进一步的研究做准备。 依照本课题的研究,最终目的是为高压变频器在异步电机控制领域的应用作结构优化,器件搭配的指导,并在运行过程中通过调试和仿真提供不断改善的最佳方案。
上传时间: 2013-05-17
上传用户:WMC_geophy
本文致力于可并联运行的斩控式单相交流斩波变换器的研究。交交变换技术作为电力电子技术一个重要的领域一直得到人们的关注,但大都将目光投向AC-DC-AC两级变换上面。AC/AC直接变换具有单级变换、功率密度高、拓扑紧凑简单、并联容易等优势,并且具有较强扩展性,故而在工业加热、调光电源、异步电机启动、调速等领域具有重要应用。斩控式AC/AC 电压变换是一种基于自关断半导体开关器件及脉宽调制控制方式的新型交流调压技术。 本文对全数字化的斩控式AC/AC 变换做了系统研究,工作内容主要有:对交流斩波电路的拓扑及其PWM方式做了详细的推导,着重对不同拓扑的死区效应进行了分析,并且推导了不同负载情况对电压控制的影响。重点推导了单相Buck型变换器和Buck-Boost 变换器的拓扑模型,并将单相系统的拓扑开关模式推导到三相的情况,然后分别对单相、三相的情况进行了Matlab仿真。建立了单相Buck 型拓扑的开关周期平均意义下的大信号模型和小信号模型,指导控制器的设计。建立了适合电路工作的基于占空比前馈的电压瞬时值环、电压平均值环控制策略。在理论分析和仿真验证的基础上,建立了一台基于TMS320F2808数字信号处理器的实验样机,完成样机调试,并完成各项性能指标的测试工作。
上传时间: 2013-04-24
上传用户:visit8888
旋转弯曲疲劳试验机是测定材料机械性能的基本设备之一,应用范围广泛。随着试验机技术和微电子技术的快速发展,旧有的试验机测控系统已逐渐不能适应广大用户的测试需求,迫切要求新一代试验机测控系统向数字化、智能化、集成化方面迈进。 本课题研究的主要任务是在分析和总结国内外同类试验机测控系统技术现状的基础上,吸收先进的微电子技术和试验机控制技术,开发一套新型的基于ARM微处理器的旋转弯曲疲劳试验机测控系统。论文围绕这个任务,主要进行了如下几个方面的研究工作: 1.分析旋转弯曲疲劳试验机的系统工作原理与测量参数,制定试验机测控系统的总体设计方案,并对测控系统中ARM主控制器要实现的功能进行具体分析。 2.依照总体方案,设计出以32位ARM微处理器LPC2210为核心的主控制器,对系统测量模块、驱动模块及外围电路进行了电路设计;分析系统交流驱动单元的工作原理,并对ARM实现系统交流电机的调速控制作出具体阐述。 3.针对系统交流电机的调速控制,在建立交流系统数学模型的基础上,采用一种基于现代控制理论的矢量控制算法并附以PID控制策略来实现无级精度调速。 4.移植实时嵌入式操作系统μC/OS-Ⅱ至LPC2210,编写启动代码和主任务程序,对各任务模块设计用户应用程序,并对上位机的软件系统设计进行结构规划。 5.对基于ARM的旋转弯曲疲劳试验机测控系统进行软硬件调试,并完成部分试验。
上传时间: 2013-06-06
上传用户:tanw97
两级PID调节液位,流量的原理分析,及其试验数据的分析(毕业设计)
上传时间: 2013-04-24
上传用户:qsbbear
载波相移SPWM 调制法目前是级联型逆变器的主流调制方法,其等效载波频率高,谐波特性好,功率单元之间输出功率平衡。而移相空间矢量调制法基于传统的两电平空间矢量调制法,并采用载波移相的思想,因此兼有空间矢量法和载波相移SPWM 法的优势,谐波特性好,电压利用率高,且控制方法简单便于数字实现,可与矢量控制和直接转矩控制等各种现代方法相结合应用于电机的变频调速系统中。本文以三级级联型逆变器为例对载波相移SPWM 调制法和移相空间矢量调制法分别进行了研究,通过仿真对比,总结出移相空间矢量调制法与载波相移SPWM 调制法的异同和所具有的优势。
上传时间: 2014-12-24
上传用户:元宵汉堡包
简介:本产品是将三相晶闸管主电路和移相触发调控电路封装在一起的多功能功率集成模块。它是一个完整电力移相开环控制系统,可实现对三相电力进行整流调压。产品可广泛用于直流电机调速、工业自动化、电加热控制、机电一体化、各类电源、化工、纺织通讯等领域;可实现手动、自动控制接口,主电路交流输入无相序要求,线性控制电路,精度高,稳定性好。
上传时间: 2013-11-12
上传用户:MATAIYES
单片机原理和应用实验电子教材 第一章 MCS—51 实验系统安装与启动§ 1.1 MCS51实验系统安装与启动……………………… 2§ 1.2 DVCC系列实验系统实验调试有关说明…………… 2第二章硬件实验§ 2.1 实验项目实验一 8031 单片机P3、P1口应用……………………3实验二工业顺序控制………………………………… 4实验三8255 控制交通灯……………………………… 6实验四简单 I/O口扩展实验………………………… 7实验五A/D 转换实验………………………………… 8实验六D/A 转换………………………………………… 9实验七串并转换实验……………………………………11实验八定时/计数器8253A应用………………………12实验九8279 键盘显示实验……………………………13实验十微型打印机打印字符、曲线、汉字……………14实验十一 步进电机控制……………………………………15实验十二小直流电机调速实验……………………………16实验十三电子音响…………………………………………17实验十四继电器控制实验…………………………………18实验十五数据存贮器和程序存贮扩展实验………………19§ 2.2 软件清单实验一 8031 单片机P3、P1口应用……………………21实验二工业顺序控制……………………………………21实验三8255 控制交通灯…………………………………23实验四简单 I/O口扩展实验……………………………25实验五A/D 转换实验……………………………………25实验六D/A 转换…………………………………………26实验七串并转换实验……………………………………27实验八定时/计数器8253A应用…………………………28实验九8279 键盘显示实验………………………………29实验十微型打印机打印字符、曲线、汉字………………31实验十一步进电机控制………………………………………34实验十二小直流电机调速实验………………………………41实验十三电子音响……………………………………………42实验十四继电器控制实验……………………………………43实验十五数据存贮器和程序存贮扩展实验…………………44
上传时间: 2013-10-15
上传用户:a296386173
单片机原理及应用实验报告:实验1 WAVE软件的学习应用*.1实验2下载软件的学习应用*.2实验3运算指令的应用编程.3实验4 P0口输入、输出实验.4实验5数码管显示5实验6按键的识别*6实验7计算器设计实验*7实验8中断实验8实验9定时器/计数器实验9实验10串行口通讯实验.10实验11直流电机调速实验*.12实验12 IC卡读写实验*13实验13 TLC2543的应用实验*14实验14温度测量及控制实验*.15附录A 伟福仿真器系统概述16附录B STC-ISP-V3.1 界面23附录C 实验板.24
上传时间: 2013-11-13
上传用户:王小奇
有两种方式可以让设备和应用程序之间联系:1. 通过为设备创建的一个符号链;2. 通过输出到一个接口WDM驱动程序建议使用输出到一个接口而不推荐使用创建符号链的方法。这个接口保证PDO的安全,也保证安全地创建一个惟一的、独立于语言的访问设备的方法。一个应用程序使用Win32APIs来调用设备。在某个Win32 APIs和设备对象的分发函数之间存在一个映射关系。获得对设备对象访问的第一步就是打开一个设备对象的句柄。 用符号链打开一个设备的句柄为了打开一个设备,应用程序需要使用CreateFile。如果该设备有一个符号链出口,应用程序可以用下面这个例子的形式打开句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路径名的前缀“\\.\”告诉系统本调用希望打开一个设备。这个设备必须有一个符号链,以便应用程序能够打开它。有关细节查看有关Kdevice和CreateLink的内容。在上述调用中第一个参数中前缀后的部分就是这个符号链的名字。注意:CreatFile中的第一个参数不是Windows 98/2000中驱动程序(.sys文件)的路径。是到设备对象的符号链。如果使用DriverWizard产生驱动程序,它通常使用类KunitizedName来构成设备的符号链。这意味着符号链名有一个附加的数字,通常是0。例如:如果链接名称的主干是L“TestDevice”那么在CreateFile中的串就该是“\\\\.\\TestDevice0”。如果应用程序需要被覆盖的I/O,第六个参数(Flags)必须或上FILE_FLAG_OVERLAPPED。 使用一个输出接口打开句柄用这种方式打开一个句柄会稍微麻烦一些。DriverWorks库提供两个助手类来使获得对该接口的访问容易一些,这两个类是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass类封装了一个设备信息集,该信息集包含了特殊类中的所有设备接口信息。应用程序能有用CdeviceInterfaceClass类的一个实例来获得一个或更多的CdeviceInterface类的实例。CdeviceInterface类是一个单一设备接口的抽象。它的成员函数DevicePath()返回一个路径名的指针,该指针可以在CreateFile中使用来打开设备。下面用一个小例子来显示这些类最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface( GUID* pClassGuid, DWORD instance, PDWORD pError){ CDeviceInterfaceClass DevClass(pClassGuid, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; CDeviceInterface DevInterface(&DevClass, instance, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; cout << "The device path is " << DevInterface.DevicePath() << endl; HANDLE hDev; hDev = CreateFile( DevInterface.DevicePath(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (hDev == INVALID_HANDLE_VALUE) *pError = GetLastError(); return hDev;} 在设备中执行I/O操作一旦应用程序获得一个有效的设备句柄,它就能使用Win32 APIs来产生到设备对象的IRPs。下面的表显示了这种对应关系。Win32 API DRIVER_FUNCTION_xxxIRP_MJ_xxx KDevice subclass member function CreateFile CREATE Create ReadFile READ Read WriteFile WRITE Write DeviceIoControl DEVICE_CONTROL DeviceControl CloseHandle CLOSECLEANUP CloseCleanUp 需要解释一下设备类成员的Close和CleanUp:CreateFile使内核为设备创建一个新的文件对象。这使得多个句柄可以映射同一个文件对象。当这个文件对象的最后一个用户级句柄被撤销后,I/O管理器调用CleanUp。当没有任何用户级和核心级的对文件对象的访问的时候,I/O管理器调用Close。如果被打开的设备不支持指定的功能,则调用相应的Win32将引起错误(无效功能)。以前为Windows95编写的VxD的应用程序代码中可能会在打开设备的时候使用FILE_FLAG_DELETE_ON_CLOSE属性。在Windows NT/2000中,建议不要使用这个属性,因为它将导致没有特权的用户企图打开这个设备,这是不可能成功的。I/O管理器将ReadFile和WriteFile的buff参数转换成IRP域的方法依赖于设备对象的属性。当设备设置DO_DIRECT_IO标志,I/O管理器将buff锁住在存储器中,并且创建了一个存储在IRP中的MDL域。一个设备可以通过调用Kirp::Mdl来存取MDL。当设备设置DO_BUFFERED_IO标志,设备对象分别通过KIrp::BufferedReadDest或 KIrp::BufferedWriteSource为读或写操作获得buff地址。当设备不设置DO_BUFFERED_IO标志也不设置DO_DIRECT_IO,内核设置IRP 的UserBuffer域来对应ReadFile或WriteFile中的buff参数。然而,存储区并没有被锁住而且地址只对调用进程有效。驱动程序可以使用KIrp::UserBuffer来存取IRP域。对于DeviceIoControl调用,buffer参数的转换依赖于特殊的I/O控制代码,它不在设备对象的特性中。宏CTL_CODE(在winioctl.h中定义)用来构造控制代码。这个宏的其中一个参数指明缓冲方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表显示了这些方法和与之对应的能获得输入缓冲与输出缓冲的KIrp中的成员函数:Method Input Buffer Parameter Output Buffer Parameter METHOD_BUFFERED KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代码指明METHOD_BUFFERED,系统分配一个单一的缓冲来作为输入与输出。驱动程序必须在向输出缓冲放数据之前拷贝输入数据。驱动程序通过调用KIrp::IoctlBuffer获得缓冲地址。在完成时,I/O管理器从系统缓冲拷贝数据到提供给Ring 3级调用者使用的缓冲中。驱动程序必须在结束前存储拷贝到IRP的Information成员中的数据个数。如果控制代码不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,则DeviceIoControl的参数呈现不同的含义。参数InputBuffer被拷贝到一个系统缓冲,这个缓冲驱动程序可以通过调用KIrp::IoctlBuffer。参数OutputBuffer被映射到KMemory对象,驱动程序对这个对象的访问通过调用KIrp::Mdl来实现。对于METHOD_OUT_DIRECT,调用者必须有对缓冲的写访问权限。注意,对METHOD_NEITHER,内核只提供虚拟地址;它不会做映射来配置缓冲。虚拟地址只对调用进程有效。这里是一个用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE来定义一个IOCTL代码:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)现在使用一个DeviceIoControl调用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING, NULL, // no input 注意,这里放的是包含有执行操作命令的字符串指针 0, FirmwareRev, //这里是output串指针,存放从驱动程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize, NULL // not overlapped I/O );如果输出缓冲足够大,设备拷贝串到里面并将拷贝的资结束设置到FirmwareRevSize中。在驱动程序中,代码看起来如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){ ULONG fwLength=0; switch ( I.IoctlCode() ) { case IOCTL_MYDEV_GET_FIRMWARE_REV: fwLength = strlen(FIRMWARE_REV)+1; if (I.IoctlOutputBufferSize() >= fwLength) { strcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV); I.Information() = fwLength; return I.Complete(STATUS_SUCCESS); } else { } case . . . } }
上传时间: 2013-10-17
上传用户:gai928943