基于单片机控制直流电机调速系统设计正文.doc
《基于单片机控制直流电机调速系统设计正文.doc》由会员分享,可在线阅读,更多相关《基于单片机控制直流电机调速系统设计正文.doc(67页珍藏版)》请在咨信网上搜索。
基于单片机控制直流电机调速系统设计正文 67 2020年4月19日 文档仅供参考 目 录 第一章 引言 1 1.1 课题的研究意义 1 第二章 总体设计方案 2 2.1设计思路与原理 2 2.2系统总体设计框图 3 2.3系统主要参数设计原理 4 第三章 硬件设计 5 3.1使用设备 5 3.2 AT89S52单片机简介: 7 3.3 PWM信号发生电路设计 10 3.4 显示与键盘模块 11 3.5 ZigBee无线收发模块 11 3.6 转动源模块 13 第四章 系统的软件设计与实现 14 4.1 系统软件简介 14 4.2 编程语言简介 14 4.3程序设计 15 第五章 上位机设计 23 5.1 函数介绍 23 5.2 前面板设计 25 5.3 程序框图设计 26 第六章 运行与调试 27 个人小结 31 参考文献 41 附录1 42 第一章 引言 1.1 课题的研究意义 直流电机具有良好的起动、制动性能,宜于在大范围内平滑调速,在许多需要调速或快速正反向的电力拖动系统中得到了广泛的应用。近年来,交流调速系统发展很快,然而直流拖动系统无论是在理论上还是在实践上都比较成熟,而且从反馈闭环控制的角度来看,它又是交流拖动控制系统的基础,因此直流调速系统在生活中有着举足轻重的作用。虽然随着电力技术的发展,特别是在大功率电力电子器件问世以后,直流电机拖动将有逐步被交流电机拖动所取代的趋势,但在中、小功率场合,常采用永磁直流电动机。 早期的直流电动机的控制均以模拟电路为基础,采用运算放大器、非线性集成电路以及少量的数字电路组成,控制自通的硬件部分非常复杂,功能单一,而且系统非常不灵活,调试困难。随着单片机技术的不断进步,使得许多控制功能及算法能够采用软件技术来完成,为直流电动机的控制提供了更大的灵活性,并使系统能够达到更高的稳定性能,同时还具有软特性好,过载能力强,可进行PID调节,调速稳定等优势。因此,本课题的研究具有很好的实际意义。 本次设计主要研究的是PID控制技术在运动控制领域中的应用,纵所周知运动控制系统最主要的控制对象是电机,在不同的生产过程中,电机的运行状态要满足生产要求,其中电机速度的控制在占有至关重要的作用,因此本次设计主要是利用PID控制技术对直流电机转速的控制。其设计思路为:以AT89S52单片机为控制核心,产生占空比受PID算法控制的PWM脉冲实现对直流电机转速的控制。同时利用光电传感器将电机速度转换成脉冲频率反馈到单片机中,构成转速闭环控制系统,达到转速无静差调节的目的。因此该系统在硬件方面包括:电源模块、电机驱动模块、控制模块、速度检测模块、人机交互模块。软件部分采用C语言进行程序设计,其优点为:可移植性强、算法容易实现、修改及调试方便、易读等。 第二章 总体设计方案 2.1设计思路与原理 本文主要研究了利用AT89S52单片机控制PWM信号从而实现对直流电机转速进行控制的方法。而中间利用了大家都比较熟悉的数字PID算法,以前大家用的比较多的是模拟PID算法,可是由于现场的系统参数、温度等条件发生变化,使系统很难达到最佳的控制效果,因此采用模拟PID控制器难以获得满意的控制效果。数字PID不但能够实现模拟PID所完成的控制任务,而且具备控制算法灵活、可靠性高等优点,应用面越来越广。 本实验还利用了Labview设计上位机来对直流电机的转速进行测量,并在Labview的前面板显示出转速,再经过Labview的串口通信反馈给单片机,然后利用数字PID算法调节转速,经过Labview实时检测转速大小。 单片机直流电机调速简介:单片机直流调速系统可实现对直流电动机的平滑调速。PWM是经过控制固定电压的直流电源开关频率,从而改变负载两端的电压,进而达到控制要求的一种电压调整方法。在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并根据需要改变一个周期内“接通”和“断开”时间的长短。经过改变直流电机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。因此,PWM又被称为“开关驱动装置”。本系统以AT89S52单片机为核心,经过单片机控制,C语言编程实现对直流电机的平滑调速。本实验主要运用的是脉冲触发(也就是上升沿触发中断) 系统控制方案的分析:本直流电机调速系统以单片机系统为依托,根据PWM调速的基本原理,以直流电机电枢上电压的占空比来改变平均电压的大小,从而控制电动机的转速为依据,实现对直流电动机的平滑调速,并经过单片机控制速度的变化。 转速监测与反馈系统的分析:以往我们会使用测速发电机来进行转速的测量与分析,把输入的机械转速变换为电压信号输出,并要求输出的电压信号与转速成正比,分为直流与交流两种。而运用Labview(G语言)设计转速测量系统是种大胆的尝试,用Labview设计起来方便,操作简单,只要用Labview的串口通信就能够与单片机相连接,编入C代码就能实现监测功能。 2.2系统总体设计框图 上位机监控 光电对管 转动源 转速显示 MCU INTO P1.7模拟PWM PID调整 由于上位机和单片机都具有串口,因此经常使用串口完成两者之间的数据交换,这就需要在上位端设计相应的串口通信程序。完成了与单片机的数据交换后,就能在Labview的前面板实时监测转速,用上位机监测到的数据反馈给MCU,用P1.7模拟PWM,进而经过位置型PID进行调整,将数据传输给转动源,实现调整转速的功能。 PWM信号的产生与放大就是在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,而且根据需要改变一个周期内“接通”和“断开”时间的长短。经过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。也正因为如此,PWM又被称为“开关驱动装置”。 N给定 PID 驱动 电机 + — 2.3系统主要参数设计原理 模拟PID就是在现场安装的利用DDZII或者DDZIII型表再加上其它气动仪表的模块,对现场控制变量的模拟信号利用旋钮或拨盘对PID的三个值进行设定对或者手动控制输出的系统,其信号均为模拟信号。 数字PID就是把现场的控制变量的模拟信号和对现场受控变量的输出信号均转换成了数字信号,PID的实现也是经过数字信号的设定来完成的。现在大多在DCS、PLC系统内完成的。 数字PID有两种模式:位置型PID算式,增量型PID算式。增量型PID不需要做累加,控制量增量的确定仅与最近几次误差采样值有关,计算误差或计算精度问题对控制量的计算影响较小,而位置型算法要用到过去的误差累加值,容易产生大的累加误差。增量型算法得出的是控制量的增量,例如阀门控制中,只输出阀门开度的变化部分,误动作影响小,必要时经过逻辑判断限制或禁止本次输出,不会严重影响系统的工作。采用增量型算法,易实现手动到自动的无冲击切 第三章 硬件设计 3.1使用设备 ZYMCU02主机模块、显示与键盘模块、ZigBee无线收发实验模块、转动源实验模块、电脑一台(已装KEIL和STC下载软件)、导线。 实验连线表: 表3-1 主台体 ZigBee无线收发模块 转动源 ZYMCU02主机模块 显示与键盘模块 +24V +24V GND GND Vout +24V GND GND +5V +5V GND GND 频率/转速表“+” Fout P3.2 频率/转速表“-” GND P1.0 KEY1(设置) P1.1 KEY2(加) P1.2 KEY3(减) P1.3 Q7(用于指示“设置”按键的动作状态) P7.7与GND之间未标示的插针 P1.7 P0[0..7] LED4-[H..A] P2[0..7] LED4-[8..0] 图3.1 ZYMCU02主机模块 3.2 AT89S52单片机简介: AT89S52为 ATMEL 所生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flsah存储器。 (一)、AT89S52主要功能列举如下: 1、拥有灵巧的8位CPU和在系统可编程Flash 2、晶片内部具时钟振荡器(传统最高工作频率可至 12MHz) 3、内部程序存储器(ROM)为 8KB 4、内部数据存储器(RAM)为 256字节 5、32 个可编程I/O 口线 6、8 个中断向量源 7、三个 16 位定时器/计数器 8、三级加密程序存储器 9、全双工UART串行通道 (二)、AT89S52各引脚功能介绍: 图3.2 VCC: AT89S52电源正端输入,接+5V。 VSS: 电源地端。 XTAL1: 单芯片系统时钟的反相放大器输入端。 XTAL2: 系统时钟的反相放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英振荡晶体系统就能够动作了,另外能够在两引脚与地之间加入一 20PF 的小电容,能够使系统更稳定,避免噪声干扰而死机。 RESET: AT89S52的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,而且至地址0000H处开始读入程序代码而执行程序。 EA/Vpp: "EA"为英文"External Access"的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。如果是使用 8751 内部程序空间时,此引脚要接成高电平。另外,在将程序代码烧录至8751内部EPROM时,能够利用此引脚来输入21V的烧录高压(Vpp)。 ALE/PROG: ALE是英文"Address Latch Enable"的缩写,表示地址锁存器启用信号。AT89S52能够利用这支引脚来触发外部的8位锁存器(如74LS373),将端口0的地址总线(A0~A7)锁进锁存器中,因为AT89S52是以多工的方式送出地址及数据。平时在程序执行时ALE引脚的输出频率约是系统工作频率的1/6,因此能够用来驱动其它周边晶片的时基输入。另外在烧录8751程序代码时,此引脚会被当成程序规划的特殊功能来使用。 PSEN: 此为"Program Store Enable"的缩写,其意为程序储存启用,当8051被设成为读取外部程序代码工作模式时(EA=0),会送出此信号以便取得程序代码,一般这支脚是接到EPROM的OE脚。AT89S52能够利用PSEN及RD引脚分别启用存在外部的RAM与EPROM,使得数据存储器与程序存储器能够合并在一起而共用64K的定址范围。 PORT0(P0.0~P0.7): 端口0是一个8位宽的开路汲极(Open Drain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。其它三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当做I/O用时能够推动8个LS的TTL负载。如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0~A7)及数据总线(D0~D7)。设计者必须外加一锁存器将端口0送出的地址栓锁住成为A0~A7,再配合端口2所送出的A8~A15合成一完整的16位地址总线,而定址到64K的外部存储器空间。 PORT2(P2.0~P2.7): 端口2是具有内部提升电路的双向I/O端口,每一个引脚能够推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。P2除了当做一般I/O端口使用外,若是在AT89S52扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8~A15,这个时候P2便不能当做I/O来使用了。 PORT1(P1.0~P1.7): 端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器能够推动4个LS TTL负载,同样地若将端口1的输出设为高电平,便是由此端口来输入数据。如果是使用8052或是8032的话,P1.0又当做定时器2的外部脉冲输入脚,而P1.1能够有T2EX功能,能够做外部中断输入的触发脚位。 PORT3(P3.0~P3.7): 端口3也具有内部提升电路的双向I/O端口,其输出缓冲器能够推动4个TTL负载,同时还多工具有其它的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。 其引脚分配如下: P3.0:RXD,串行通信输入。 P3.1:TXD,串行通信输出。 P3.2:INT0,外部中断0输入。 P3.3:INT1,外部中断1输入。 P3.4:T0,计时计数器0输入。 P3.5:T1,计时计数器1输入。 P3.6:WR:外部数据存储器的写入信号。 P3.7:RD,外部数据存储器的读取信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不论是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 3.3 PWM信号发生电路设计 PWM(Pulse Width Modulation)——脉宽调制。 PWM的基本原理:PWM是经过控制固定电压的直流电源开关频率,改变负载两端的电压,从而达到控制要求的一种电压调整方法。PWM能够应用在许多方面,比如:电机调速、温度控制、压力控制等等。 在PWM驱动控制的调整系统中,经过一个频率来接通和断开电源,就能够改变一个周期内“接通”和“断开”时间的长短,就可改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,平均电压是经过等效直流电流实现的,由冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同,冲量即指窄脉冲的面积, 从而来控制电动机的转速。也正因为如此,PWM又被称为“开关驱动装置”。如图3.3所示: 图3.3 PWM方波 设电机始终接通电源时,电机转速最大为Vmax,设占空比为D= t1 / T,则电机的平均速度为Va = Vmax * D,其中Va指的是电机的平均速度;Vmax 是指电机在全通电时的最大速度;D = t1 / T是指占空比。 由上面的公式可见,当我们改变占空比D = t1 / T时,就能够得到不同的电机平均速度Vd,从而达到调速的目的。严格来说,平均速度Vd 与占空比D并非严格的线性关系,可是在一般的应用中,我们能够将其近似地看成是线性关系。 图3.4 显示与键盘模块 3.4 显示与键盘模块 LED动态扫描方式:动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。 键盘是由一组按压式或触摸式开关构成的阵列。智能仪表键盘的设置应由该仪表具体的功能来决定,因此,智能仪表往往采用专用的功能键盘。 矩阵式键盘适用于按键数量较多的场合,它由行线和列线组成,按键位于行、列的交叉点上。在按键数量较多的场合,矩阵式键盘比独立式键盘要节省很多的I/O口。 3.5 ZigBee无线收发模块 Zigbee是一个由可多到65000个无线数传模块组成的一个无线数传网络平台,十分类似现有的移动通信的CDMA网或GSM网,每一个Zigbee网络数传模块类似移动网络的一个基站,在整个网络范围内,它们之间能够进行相互通信;每个网络节点间的距离能够从标准的75米,到扩展后的几百米,甚至几公里;另外整个Zigbee网络还能够与现有的其它的各种网络连接。 图3.5 ZigBee无线收发模块 运用Zigbee的优点: 1. 无网络使用费:使用移动网需要长期支付网络使用费,而且是按节点终端的数量计算的,而Zigbee没有这笔费用; 2. 设备投入低:使用移动网需要购买移动终端设备,每个终端的价格在人民币1000元上下,而使用Zigbee 网络,不但Zigbee网络节点模块(相当于基站)费用每只人民币不到1000元,而且,主要使用的网络子节点(相当于手机)的价格还要低得多; 3. 通信更可靠:由于现有移动网主要是为手机通信而设计的,尽管CDMA-1X和GPRS能够进行数据通信,但实践发现,不但通信数率比设计速率低很多,而且数据通信的可靠信也存在一定的问题。而Zigbee网络则是专门为控制数据的传输而设计的,因而控制数据的传输具有相当的保证。 4. 高度的灵活性和低成本:首先,经过使用覆盖距离不同,功能不同的Zigbee网络节点,以及其它非Zigbee系统的低成本的无线收发模块,建立起一个Zigbee局部自动化控制网,(这个网络能够是星型,树状,网状及其共同组成的复合网结构)再经过互联网或移动网与远端的计算机相连,从而实现低成本,高效率的工业自动化遥测遥控; 3.6 转动源模块 图3.6 转动源模块 霍尔效应是磁电效应的一种,利用霍尔效应在电机上安装磁片,而将霍尔集成片安装在固定轴上,经过对脉冲的计数进行电机速度的检测,表示式为UH=KHIB,当被测圆盘上装上N只磁性体时,转盘每转一周磁场变化N次,每转一周霍尔电势就同频率相应变化,输出电势经过放大、整形和计数电路就能够测出被测旋转物的转速。 第四章 系统的软件设计与实现 4.1 系统软件简介 本设计使用的软件是Keil编程软件。 Keil软件是当前最流行的开发单片机的软件,Keil提供了包括编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,经过一个集成开发环境(μVision)将这些部分组合在一起。 使用Keil Software工具时的项目开发流程和其它软件开发项目的流程极其相似:①创立一个项目,从器件库中选择目标器件,配置工具设置。②用C语言或汇编语言创立源程序。③用项目管理器生成应用。④修改源程序中的错误。⑤测试连接应用。 4.2 编程语言简介 本设计采用C语言进行编程。虽然汇编语言在控制底层硬件方面有着良好的性能且执行效率高,可是编程效率低,可移植性和可读性差,维护极其不便,从而导致整个系统的可靠性也较差。C语言与汇编语言相较而言有以下优势:①能够大幅加快开发进度,特别是开发一些复杂的系统,程序量越大,用C语言就越有优势。②能够实现软件的结构化编程,C语言使得软件的逻辑结构变得清晰、有条理。③省去了人工分配单片机资源(包括寄存器、RAM等)的工作。在汇编语言中要每一个子程序分配单片机的资源,而在C语言中,只要在代码中声明一下变量的类型,编译器就会自动分配相关资源,从而有效地避免了人工分配单片机资源可能带来的差错。④当写好一个算法后,需要移植到不同的MCU上时,在汇编语言中只有重新编写代码,因而汇编语言的可移植性很差;而用C语言开发时,符合ANSI C标准的程序基本不必修改,只要将一些与硬件相关的代码做适度的修改,就能够移植到其它种类的单片机上。⑤C语言提供data、idata、pdata、xdata、和code等存储器类型,针对单片机的内部数据存储空间、外部数据存储空间和程序空间自动为变量合理地分配空间,而且C语言提供复杂的数据类型,如指针、数组、结构体等,极大地增强了程序的处理能力和灵活性。 C语言较汇编语言的不足之处就是使用C语言写出来的代码会比用汇编语言占用的空间大5%~20%,因此执行起来效率就不及汇编语言。 4.3程序设计 主程序主程序是一个循环程序,其主要思路是,先设定好速度初始值,这个初始值与测速电路送来的值相比较得到一个误差值,然后用PID算法输出控制系数给PWM发生电路改变波形的占空比,进而控制电机的转速。其程序流程图如图所示。软件由1个主程序、1个中断子程序、1个PID控制算法子程序、1个定时器子程序、3个延时子程序和2个显示子程序组成。主程序主程序是一个循环程序,其主要思路是由单片机P1.7口生数据送到PWM信号发生电路,然后用PID算法输出控制系数给PWM发生电路改变波形的占空比进而控制电机的转速。 主程序流程图如图3-1所示: 图3-1 1.主程序设计: void main() { P1=0x00; SCON=0x40; PCON=0x80; TMOD=0x21; TL1=0xfa;TH1=0xfa;TH0=0XFE;TL0=0X33; ES=0;ET0=1;EX0=1; TR1=1;TR0=1;EA=1; while(1) { while (key1==0||key2==0||key3==0||a==0) { if(key1==0&&key2==1&&key3==1) { while(key1==0); state_flag=~state_flag; if(state_flag==1) { EX0=1;TR0=1; en =0;en_1 =0;en_2 =0;un =0; wide=150; a=1; //wide = set_count; } if(state_flag==0) { PWM = 0; EA=0;TR0=0; run_count=0;stop_count=0; time=0;t1=0;t2=0; display_num4(set_count); a=0; } } if(key1==1&&key2==0&&key3==1&&state_flag==0) { while(key2==0); delay1(20); set_count+=1; if(set_count>300) set_count=100; } if(key1==1&&key2==1&&key3==0&&state_flag==0) { while(key3==0); delay1(20); if(set_count>100) set_count-=1; if(set_count==100) set_count=300; } else display_num4(stop_count); } while(key1==1&&key2==1&&key3==1&&a==1) { if(time==400) { time=0;stop_count=run_count/2; run_count=0; pid(); } } } } 主程序主程序是一个循环程序,其主要思路是,首先判断系统的运行模式,如果KEY1键按下,且state_flag为1则系统处于运行模式,如果state__flag为0则为设置模式。如果系统处于设置模式,则关闭定时器中断和外部中断,同时初始化部分变量,KEY2为按键加,KEY3为按键减。如果系统处于运行模式,xcount开始计时,当xcount=82时,即为1s时,调用串口中断子程序,单片机开始发送数据,模拟I/O口输出PWM,此时PWM波的频率为81.43Hz,周期为12.82ms,然后调用PID函数,计算出PWM波输出的占空比,最后上位机显示转速。 2. PID控制算法子程序设计: void pid(void) //PID 计算输出量 { en=set_count-stop_count; un=a0*en-a1*en_1+a2*en_2;//计算输出量 if(un > 400)un = 400; else if(un <-400)un = -400; en_2=en_1;en_1=en; //更新误差 wide += un/4; //计算wide,用于调节PWM的占空比,计算周期为100ms if(wide>900)wide=900; //防止超限,确保计算饿wide值有效 else if(wide<10)wide=10; } 位置式PID控制: 增量式PID控制: 从表示式我们能够得出以下结论: (1) 位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值;而增量式PID的输出只与当前拍和前两拍的误差有关,因此位置式PID控制的累积误差相对更大; (2) 增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。 (3) 由于增量式PID输出的是控制量增量,如果计算机出现故障,误动作影响较小,而执行机构本身有记忆功能,可仍保持原位,不会严重影响系统的工作,而位置式的输出直接对应对象的输出,因此对系统影响较大。 (4) PID调节器的参数整定方法有很多,但可归结为理论计算法和试测法两种。用理论计算法设计调节器的前提是能获得被控对象准确的数学模型,这在工业过程中一般较难做到。因此,实际用得较多的还是试测法。这种方法最大优点就是整定参数时不依赖对象的数学模型,简单易行。当然,这是一种近似的方法,有时可能略嫌粗糙,但相当适用,可解决一般实际问题。本文使用试测法。 3.延时子程序: void delay(uint time) { uint i; for(i=0;i<time&&key1==1;i++) display_num4(stop_count); } void delay1_ms(uint time) //1ms延时函数 { uint i,j; for(i=0;i<time;i++) for(j=0;j<123;j++); } void delay1(uint num) { uint i; for(i=0;i<num;i++) display_num4(set_count); } 4. 显示子程序: void display_num1(uint dat,uchar num1) //指定的位上显示 指定的一位数据 { P0=xianshi[dat]; //段显 switch(num1) { case 1: P2=0x01;break; case 2: P2=0x02;break; case 3: P2=0x04;break; case 4: P2=0x08;break; default: break; } delay1_ms(2); } void display_num4(uint num) //四位数据显示函数 { uint qian,bai,shi,ge; qian=num/1000; if(qian==0)qian=11; display_num1(qian,4); bai=(num%1000)/100; if(qian==11&&bai==0)bai=11; display_num1(bai,3); shi=(num%100)/10; if(qian==11&&bai==11&&shi==0)shi=11; display_num1(shi,2); ge=num%10; display_num1(ge,1); } 5. 外中断子程序: void int0() interrupt 0 //外部中断0用于电机转速测量 { EX0=0;run_count++;EX0=1; 6. 定关中断 开启计数器T1工作 计数器清零 调用子程序dis_num() 将TL1中的十六进制数转换成十进制数 将TL1中的计数值赋给count 开启定时器T0工作 定时器T0赋初值 计时值++ 0832输入值减小/PWM占空比减小 8032输入值增大/PWM占空比增大 0832数据口赋初值 TL1计数值的十进制数赋值给out 计时1s到? 输出值<键入值? 有值键入? 是 否 是 否 是 否 时器中断子程序: void time0() interrupt 1 //定时器0用于产生PWM ,占空比经过PID计算获得 {// SBUF='a'; //while(TI) {TI=0;} TR0=0; time++; TH0=0XFF;TL0=0X9c;//计数器0赋初值 100us if(low_flag==0)t1++;//低电平时间计时 t2++; if(t2==1000) //用于确定PWM的周期 ,t2乘以定时器的中断周期即为PWM的周期 {PWM=1; t2=0; low_flag=0;} if(t1==wide)//wide的值即为低电平的时间 {PWM=0;t1=0;low_flag=1;} TR0=1; /**/ } 第五章 上位机设计 5.1 函数介绍 1. VISA配置串口 此函数主要的作用是使VISA资源名称指定的串口按特定设置初始化。在下位机的主函数中设置SCON=0x40及PCON=0x80,因此串行口工作于方式1且波特率倍增位SMOD=1,为波特率可变的8位异步通信接口。传送一帧信息总共10位,即1位起始位(0),8位数据位(低位在前)和1位停止位(1)。波特率可变,取决于定时器T1或2的溢出率。波特率=2^SMOD/32·T1溢出率。T1工作于模式2,此时为初值自动加载的定时方式。如果计数器的初始值为X,则每过256—X个机器周期T1就产生溢出,溢出的周期为(256—X)*12/fosc。据此可计算溢出率和波特率。下位机中T1设置的计数初值分别是TL1=0xfa和TH1=0xfa。使用11.0592MHz的晶振,最后得出的波特率为9600bit/s,在函数波特率选择端口能够加上条件结构予以选择,当然在这里我们要选择9600bit/s.因为串口的选择不一样,因此也需要使用条件结构,这里我们用的是COM1口。数据位端口是输入数据的位数, 数据位的值介于5和8之间,默认值为8,我们选择的也是8.奇偶端口指定要传输或接收的每一帧使用的奇偶校验,本次课程设计中只需要从单片机向PC传输数据,选择方式1,因此奇偶端口选择None.停止位端口选择1.0. 2. VISA清空I/O缓冲区 运用此函数来清除发送和接收的I/O接口的缓冲区。 3. VISA读取 这个函数的作用是从VISA资源名称指定的设备或接口中读取指定数量的字节,并使数据返回至读取缓冲区。其中字节总数端口,我们接收8位数据自然输入一个常量4.本次课程设计所要使用的是异步通信,在异步通信中,数据一般以字符或字节为单位组成字符帧传送。字符帧由发送端一帧一帧地发送。发送端和接收端能够由各自的时钟来控制数据的发送和接收,两个时钟源彼此独立,互不同步。异步通信经过规定字符帧格式来协调发送端和接收端的数据发送和接收。正常情况下,发送线为高电平,每当接收端检测到传输线上检测到发送过来的低电平就知道发送端已经开始发送数据;当接收端接收到字符帧中的停止位时,就确定发送完毕。因此在读取缓冲区端口输出的是字符串。 在串口通信中,如果指定读取100个串口缓冲区的字节数,如果当前缓冲区的数据量不足100个时,程序会一直停在VISA 读取这个节点上,如果在超时的时间(默认是10 秒)内还没有凑足100个数据的话,程序就会报"Time out"的错误,如果超时时间设置得太长,有可能导致程序很长时间停止在VISA 读取这个节点上。解决的办法是使用"Bytes at Port"这个串口的属性节点,在VISA>>Serial>>advance 下,也能够在VISA 资源线上右键>>创立>> 属性节点>>串口设置>>Bytes at Port, Bytes at Port 这个属性节点读取当前串口缓冲区有多少字节数,然后将它的输出连接到VISA 读取的"读取字节数"这个输入端上即可,这样当前缓冲区中有多少个字节就读回多少个,不会有任何等待。 另外,我们需要用两个开关按钮指示是否打开串口和接收数据,实现以上要求,需要两个条件结构的嵌套。 4.搜索/拆分字符串 主要作用:使一个字符串拆分为两个子串。可在特定字符或子字符串上拆分字符串。在字符串中搜索/拆分搜索字符串/字符中指定的字符串或字符。该函数拆分字符串,经过匹配之前的子字符串和匹配+剩余字符串返回剩余的两个字符串。如该函数没有找到搜索字符串,匹配偏移量可返回-1,匹配之前的子字符串返回整个原始字符串,匹配+剩余字符串返回空字符串。 这个函数节点能够帮助我们以字符串形式保存所要接收的数据。在搜索字符串/字符输入端接入字符串常量F即可。 5. 分数/指数字符串至数值转换 从偏移量位置开始,使字符串中的下列字符:0-9、加号、减号、e、E、小数点(一般是句点)解析为工程、科学或分数格式的浮点数,经过数字返- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 控制 直流电机 调速 系统 设计 正文
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文