计算机控制系统课程设计直流电机测速调速系统

合集下载

基于STM32的直流电机PID调速系统设计

基于STM32的直流电机PID调速系统设计

《计算机控制技术课程设计》题目:基于STM32的直流电机PID调速学院:计算机与电子信息学院专业:电气工程及其自动化班级:电气12-5 学号: 12034320515 姓名:任课教师:完成时间: 2015.11.18——2015.12.30基于STM32的直流电机PID调速摘要电机转速控制在运动控制系统中占有至关重要的地位,本设计将电机转速控制作为研究对象;以PID为基本控制算法,STM32F103单片机为控制核心,产生受PID算法控制的PWM脉冲实现对直流电机转速的控制。

同时利用光电传感器将电机速度转换成脉冲频率反馈到单片机中,实现转速闭环控制,达到转速无静差调节的目的。

在系统中采320×240TFTLCD显示器作为显示部件,通过4个按键通过界面切换方式设置P、I、D、V四个参数和正反转控制,启动后可以通过显示部件了解电机当前的运行状态和系统的CPU温度。

该系统控制精度高,具有很强的抗干扰能力。

关键词:PID 直流电机反馈调节Based on the STM32 PID speed control of dc motorAbstractMotor speed control occupies a crucial position in the motion control system, the design of the motor speed control for the study; in the basic PID control algorithm, STM32F103 microcontroller core, by the PID control algorithm generates a PWM pulse to achieve DC speed control. At the same time the use of photoelectric sensors to convert the motor speed to pulse frequency feedback to the microcontroller to achieve closed-loop speed control, to speed static error adjustment purposes. Mining 320 ×240TFTLCD monitor as a display unit in the system, through four key settings P, I, D, V four parameters and reversing control through the interface switching mode, start to understand the current state of the motor and the system through the display unit CPU temperature. The system control and high precision, has a strong anti-jamming capability.Keywords: PID DC motor feedback regulation目录1. 绪论 (1)1.1研究背景与意义 (1)1.2本文主要研究方法 (1)2. 设计方案与论证 (2)2.1系统设计方案 (2)2.2控制器模块设计方案 (2)3. 系统硬件电路设计 (3)3.1整体电路设计 (3)3.1.1整体理论 (3)3.1.2整体简单结构图和资源分配图 (3)3.2最小单片机系统设计 (4)3.2.1STM32F103复位电路 (6)3.2.2电源电路 (6)3.3电机驱动电路设计 (7)3.4光电码盘编码器电路设计 (7)3.5显示电路设计 (8)3.6按键电路设计 (10)4. 系统软件设计 (10)4.1PID算法 (10)4.2PID参数整定方法 (11)4.3电机速度采集算法 (12)4.4程序流程图 (12)5. 系统调试 (13)5.1软件调试 (13)5.2系统测试与分析 (14)6. 总结与展望 (15)参考文献 (16)附录一部分程序源程序 (17)附录二系统界面实物图和PCB图 (20)1.绪论1.1研究背景与意义电动机在现代的工业中,是主要的驱动设备,尤其是直流电动机,由于它的平滑调速性和结构上的简单,使其成为许多电器,如洗衣机,电梯等的驱动。

直流电机调速方案设计

直流电机调速方案设计

示,最终再由单片机输出 PWM 脉冲信号,通过测速电路把转速反馈给
器。引脚 XTAL1 和 XTAL2 分别是此放大器的输入端和输出端。这个放
CPU 并且通过 CPU 把转速显示在 LED 显示器上,从而到达想要设定的转
大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外

第2页共4页
本文格式为 Word 版,下载可任意编辑
占空比的调整。
LED 采纳动态显示方式,通过四位数码管显示电机的实际转速,
2.1 直流电机调速的设计方案
方便系统的监控,系统用四位共阳数码管、采纳 9012 三极管开关电路
驱动电路用光耦隔离爱护电路,掌握部分由单片机和外围电路组
驱动、掌握数码管的显示。
成,实现各种掌握要求,外围电路主要完成对输入信号的采集、操作、
来转变平均电压的大小,从而掌握电动机的转速。因此,PWM 又
能单一,调试困难。本方案采纳单片机掌握系统,使得很多掌握功能及
被称为“开关驱动装置”.PWM 的`占空比确定输出到直流电机的平均
算法可以采纳软件技术来完成,为直流电动机的掌握提供了更大的敏捷
电压。所以通过调整占空比,可以实现调整输出电压无级连续调整。
0 引言
在 PWM 驱动掌握的调整系统中,按一个固定的频率来接通和断开电源,
直流电机是工业生产中常用的驱动设备,具有良好的起动、制动性
并依据需要转变一个周期内“接通”和“断开”时间的长短。通过转
能。早期直流电动机的掌握均以模拟电路为基础,采纳运算放大器、非
变直流电机电枢上电压的“占空比”
线性集成电路以及少量的数字电路组成。掌握系统的硬件部分冗杂、功
转速,并且能实时监控直流电动机的速度。由于采纳的是 PWM 掌握技

基于单片机的直流电机调速系统设计

基于单片机的直流电机调速系统设计

直流电机转速 :
根据基尔霍夫第二定律,得到电枢电压电动势平衡方程式 U=Ea+Ia(Ra+Rc)……………式1
式1中,Ra为电枢回路电阻,电枢回路串联保绕阻与电刷 接触电阻的总和;Rc是外接在电枢回路中的调节电阻
由此可得到直流电机的转速公式为:
n=(Ua-IR)/CeΦ ………………………式2
式2中, Ce为电动势常数, Φ是磁通量。 由1式和2式得
n=Ea/CeΦ ……………………………式3
由式3中可以看出, 对于一个已经制造好的电机, 当励磁电压和 负载转矩恒定时, 它的转速由回在电枢两端的电压Ea决定, 电 枢电压越高, 电机转速就越快, 电枢电压降低到0V时, 电机就 停止转动;改变电枢电压的极性, 电机就反转。
PWM脉宽调速
PWM(脉冲宽度调制)是通过控制固定电压的 直流电源开关频率, 改变负载两端的电压, 从 而达到控制要求的一种电压调整方法。在PWM 驱动控制的调整系统中, 按一个固定的频率 来接通和断开电源, 并且根据需要改变一个 周期内“接通”和“断开”时间的长短。通 过改变直流电机电枢上电压的“占空比”来 达到改变平均电压大小的目的, 从而来控制 电动机的转速。也正因为如此, PWM又被称为 “开关驱动装置”。
, 软件简单。但每个按键需要占用一个输入口线, 在 按键数量较多时, 需要较多的输入口线且电路结构复杂, 故此种键盘适用于按键较少或操作速度较高的场合。
数码管显示部分 本设计使用的是一种比较常用的是四位数码 管, 内部的4个数码管共用a~dp这8根数据线, 为使用提供了方便, 因为里面有4个数码管, 所以它有4个公共端, 加上a~dp, 共有12个引 脚, 下面便是一个共阴的四位数码管的内部 结构图(共阳的与之相反)

直流电机测速系统课程设计

直流电机测速系统课程设计

西安邮电学院单片机课程设计报告书题目:电机测速系统院系名称:自动化学院学生姓名:专业名称:自动化班级:自动XXXX班时间:20XX年X月X日至 X月XX日电机测速系统一、设计目的随着科技的飞速发展,计算机应用技术日益渗透到社会生产生活的各个领域,而单片机的应用则起到了举足轻重的作用。

在工程实践中,经常会遇到各种需要测量转速的场合,例如在发动机、电动机、机床主轴等旋转设备的试验运转和控制中,常需要分时或连续测量、显示其转速及瞬时速度。

为了能精确地测量转速,还要保证测量的实时性,要求能测得瞬时转速。

因此设计一种较为理想的电机测速控制系统是非常有价值的。

二、设计要求1.用按键控制电机起停;2.电机有两种速度,通过按键来改变速度;3.通过数码管显示每分钟或每秒的转速。

四、设计方案及分析(包含设计电路图)1. STC89C52单片机介绍STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programmable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处理器,俗称单片机。

该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

(1)单片机最小系统单片机最小系统电路如图所示,由主控器STC89C52、时钟电路和复位电路三部分组成。

单片机STC89C52作为核心控制器控制着整个系统的工作,而时钟电路负责产生单片机工作所必需的时钟信号,复位电路使得单片机能够正常、有序、稳定地工作。

图单片机最小系统(2)晶振电路(3)复位电路复位是单片机的初始化操作。

其主要功能是把PC 初始化为0000H ,使单片机从0000H 单元开始执行程序。

除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。

2. ST151光电转速传感器是根据光敏二极管工作原理制造的一种感应接收光强度变化的电子器件,当它发出的光被目标反射或阻断时,则接收器感应出相应的电信号。

【设计】自动控制系统课程设计转速单闭环直流电机调速系统设计与仿真

【设计】自动控制系统课程设计转速单闭环直流电机调速系统设计与仿真

【关键字】设计东北大学秦皇岛分校控制工程学院《自动控制系统》课程设计设计题目:转速单闭环直流电机调速系统设计与仿真学生:张海松专业:自动化班级学号:指导教师:王立夫设计时间:2012年6月27日东北大学秦皇岛分校控制工程学院《自动控制系统》课程设计任务书专业:自动化班级:509 学生姓名:设计题目:转速单闭环直流电机调速系统设计与仿真一、设计实验条件实验设备:PC机二、设计任务直流电机额定电压,额定电枢电流,额定转速,电枢回路总电阻,电感,励磁电阻,励磁电感,互感,,允许过载倍数。

晶闸管装置放大系数:,时间常数:,设计要求:对转速环进行设计,并用Matlab仿真分析其设计结果。

目录绪论--------------------------------------------------------------------------------11.转速单闭环调速系统设计意义-----------------------------12.原系统的动态结构图及稳定性的分析-----------------------22.1 转速负反应单闭环控制系统组成-----------------------22.2 转速负反应单闭环控制系统的工作原理-----------------33.调节器的选择及设计-------------------------------------33.1调节器的选择- --------------------------------------33.2 PI调节器的设计--- ---------------------------------44.Mat lab仿真及结果分析----------------------------------74.1 simulink实现上述直流电机模型-----------------------74.2 参数设置并进行仿真---------------------------------74.3结果分析--------------------------------- ---------155.课设中遇到的问题--------------------------------------166.结束语- ---------------------------------------------17参考文献- ---------------------------------------------17转速单闭环直流电机调速系统设计与仿真绪论直流电动机由于调速性能好,启动、制动和过载转矩大,便于控制等特点,是许多高性能要求的生产机械的理想电动机。

直流电机速度PID控制系统设计毕业论文(设计).doc.doc

直流电机速度PID控制系统设计毕业论文(设计).doc.doc

序号(学号〉: 161240303长春大学 毕业设计(论文)直流电机速度PID 控制系统设计李一丹国际教育学院自动化1612403曹福成2016 年 5 月 30 0姓 名 学 院 专 业 班 级 指导教师直流电机速度PID控制系统设计摘要:针对现有的直流电机控速难的问题,本文设计了一种基于ATmegal6L单片机的直流电机速度控制系统。

本系统以ATinegal6L单片机为主控制器,搭载了L298n为电机驱动,通过霍尔元件进行测速,通过按键控制电机的转动方向和转动速度,并配以温度传感器DS18B20对温度进行监测,通过PID算法调节PW\1 进行对速度控制。

该系统包括的模块主要有单片机为主体的控制模块、电机的驱动模块、对电机速度进行监测的模块、由LCD1602构成的显示ky r模块、电源模块和按键控制模块等。

本系统可以通过PID算法实现可编程脉宽波形对直流电机的速度进行控制,并且可以显示出当前电机的转速。

关键词:单片机;PID算法;直流电机The design of DC motor speed control system with PID Abstract: According to the existing DC motor speed control problem, this paper describes the design of a DC motor speed control system based on ATmegal6L MCU. To ATMEGA16L microcontroller as the main controller for the system, equipped with a L298n for motor drive, through the hall element of speed, through the buttons to control the motor rotation direction and the rotation speed, and the temperature sensor DS18B20 the temperature monitoring, PID algorithm is used to adjust the PWM control of the speed. The system includes the following modules display microprocessor control module, as the main body of the motor drive module, monitoring module, the speed of motor is composed of LCD1602 module, power supply module and key control module.This system can realize through PID algorithm to control the speed of the programming pulse waveforms of DC motor, and can display the current motor speed.Keywords: single chip microcomputer, PID algorithm, DC motor ky r戈ml ml ——II —In —In | * 11—I 1111 ml 1111目录Bit (1)l.i选题背景及意义 (1)1.2国内外研宄现状 (2)1.3木文主要研究的内容 (3)第2章总体方案论述 (4)ky r2.1系统主要传感器介绍 (4)2.1.1温度传感器 (4)2.1.2转速检测模块 (5)2.2系统总体功能及方案选择 (6)2.2.1系统所需模块及功能 (6)2.2.2主控制器选择 (8)第3章系统总体硬件设计 (10)3.1单片机最小系统 (10)3.1.1ATmegal6L单片机的引脚分布 (10)3.1.2最小系统的硬件电路 (13)3.2电机驱动电路 (14)3.3温度检测电路 (15)3.4光电管提示电路和按键控制电路 (15)3.5LCD1602 显示电路 (16)3.6电源电路 (17)3.7本章小节 (18)第4章系统软件设计 (19)4.1系统总体流程图 (19)4.2 PID算法简介 (19)4.2.1PID算法介绍 (20)4.2.2HD算法结果 (21)4.3系统调试步骤 (21)4.4误差分析即改进方法 (22)给论 (23)致谢 (24)参考文献 (25)隱 (26)附录I系统总体硬件电路图 (26)附录II系统中部分程序 (27)ky r In—ml ml ml ml | , I af—.第1章绪论1.1选题背景及意义电动机简称电机,俗称马达,在现实生活中,我们处处都可以见到电机的身影,小到小学生玩的电动四驱车,大到炼钢厂用的滚动罐,这些都是电机家族的成员。

基于STM32的直流电机PID调速系统设计

基于STM32的直流电机PID调速系统设计

《计算机控制技术课程设计》题目:基于STM32的直流电机PID调速学院:计算机与电子信息学院专业:电气工程及其自动化班级:电气12-5 学号:姓名:任课教师:完成时间:——基于STM32的直流电机PID调速摘要电机转速控制在运动控制系统中占有至关重要的地位,本设计将电机转速控制作为研究对象;以PID为基本控制算法,STM32F103单片机为控制核心,产生受PID算法控制的PWM脉冲实现对直流电机转速的控制。

同时利用光电传感器将电机速度转换成脉冲频率反馈到单片机中,实现转速闭环控制,达到转速无静差调节的目的。

在系统中采320×240TFTLCD显示器作为显示部件,通过4个按键通过界面切换方式设置P、I、D、V四个参数和正反转控制,启动后可以通过显示部件了解电机当前的运行状态和系统的CPU温度。

该系统控制精度高,具有很强的抗干扰能力。

关键词:PID 直流电机反馈调节Based on the STM32 PID speed control of dc motorAbstractMotor speed control occupies a crucial position in the motion control system, the design of the motor speed control for the study; in the basic PID control algorithm, STM32F103 microcontroller core, by the PID control algorithm generates a PWM pulse to achieve DC speed control. At the same time the use of photoelectric sensors to convert the motor speed to pulse frequency feedback to the microcontroller to achieve closed-loop speed control, to speed static error adjustment purposes. Mining 320 × 240TFTLCD monitor as a display unit in the system, through four key settings P, I, D, V four parameters and reversing control through the interface switching mode, start to understand the current state of the motor and the system through the display unit CPU temperature. The system control and high precision, has a strong anti-jamming capability.Keywords: PID DC motor feedback regulation目录1. 绪论 (1)研究背景与意义 (1)本文主要研究方法 (1)2. 设计方案与论证 (2)系统设计方案 (2)控制器模块设计方案 (2)3. 系统硬件电路设计 (3)整体电路设计 (3)整体理论 (3)整体简单结构图和资源分配图 (3)最小单片机系统设计 (4)STM32F103复位电路 (6)电源电路 (6)电机驱动电路设计 (7)光电码盘编码器电路设计 (7)显示电路设计 (8)按键电路设计 (10)4. 系统软件设计 (10)PID算法 (10)PID参数整定方法 (11)电机速度采集算法 (12)程序流程图 (12)5. 系统调试 (13)软件调试 (13)系统测试与分析 (14)6. 总结与展望 (15)参考文献 (16)附录一部分程序源程序 (17)附录二系统界面实物图和PCB图 (20)1.绪论1.1研究背景与意义电动机在现代的工业中,是主要的驱动设备,尤其是直流电动机,由于它的平滑调速性和结构上的简单,使其成为许多电器,如洗衣机,电梯等的驱动。

单片机课程设计PWM直流电动机调速控制系统方案

单片机课程设计PWM直流电动机调速控制系统方案

单片机原理及应用—— P W M直流电机调速控制系统概括直流电动机具有良好的启动性能和调速特性。

具有起动转矩大、调速平稳、经济大范围、调速容易、调速后效率高等特点。

本文设计的直流电机调速系统主要由51单片机、电源、H桥驱动电路、LED 液晶显示器、霍尔测速电路和独立按键组成的电子产品组成。

电源采用78系列芯片,采用PWM波方式实现电机+5V、+15V调速,PWM为脉宽调制,通过51单片机改变占空比实现。

通过独立的按键实现电机的启停、调速和转向的手动控制,LED实现测量数据(速度)的显示。

电机转速采用霍尔传感器检测输出方波,通过51单片机统计1秒内方波脉冲个数,计算电机转速,实现直流电机的反馈控制。

关键词:直流电机调速; H桥驱动电路; LED显示屏; 51单片机目录摘要2摘要错误!未定义书签。

目录3第 1 章引言41.1 概述41.2 国外发展现状41.3 要求51.4 设计目的及6第 2 章项目论证与选择72.1 电机调速模块72.2 PWM调速工作模式72.3 PWM脉宽调制方式错误!未定义书签。

2.4 PWM 软件实现错误!未定义书签。

第三章系统硬件电路设计83.1 信号输入电路83.2 电机PWM驱动模块电路9第 4 章系统的软件设计104.1 单片机选型104.2 系统软件设计分析10第 5 章 MCU 系统集成调试135.1 PROTEUS 设计与仿真平台错误!未定义书签。

18传统开发流程对比错误!未定义书签。

第一章简介1.1 概述现代工业的电驱动一般要求部分或全部自动化,因此必须与各种控制元件组成的自动控制系统相联动,而电驱动可视为自动电驱动系统的简称。

在这个系统中,生产机械可以自动控制。

随着现代电力电子技术和计算机技术的发展以及现代控制理论的应用,自动电驱动正朝着计算机控制的生产过程自动化方向发展。

以实现高速、高质量、高效率的生产。

在大多数集成自动化系统中,自动化电力牵引系统仍然是不可或缺的组成部分。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XI`AN TECHNOLOGICAL UNIVERSITY课程名称直流电机测速调速实验专业:电气工程及其自动化班级:姓名:学号:指导教师:秦刚成绩:2016年7月11日计算机控制系统课程设计——直流电机测速调速系统一、选定题目:电机速度控制系统二、设计目的和要求:计算机控制技术的课程设计是一个综合运用知识的过程,它不仅需要微型机控制理论、程序设计方面的基础知识,而且还需要具备一定的生产工艺知识。

课程设计包括确定控制任务、系统总体方案设计、硬件系统设计、控制软件的设计等,以便使学生掌握计算机控制系统设计的总体思路和方法。

三、功能需求:1、基本功能:(1)该系统使用实验箱的直流电机、1602 液晶、 DA、键盘等模块完成设计;(2)直流电机通过DA模块使用PWM方式进行驱动及调速;(3)能够通过 1602 液晶显示当前转速及 PWM占空比;(4)通过按键控制电机的启动和停止。

2、扩展功能:(1)能够通过按键手动输入目标转速(转/秒),启动电机后控制电机稳定在目标转速;(2)使用 1602 液晶实时显示目标转速、当前转速及启停状态(on/off )。

四、实验思路:本直流电机调速系统以单片机系统为依托,根据 PWM调速的基本原理,控制电动机的转速为依据,实现对直流电动机的调速,并通过单片机控制速度的变化。

本设计的直流电机调速系统主要是由硬件和软件两大部分组成。

硬件部分是前提,是整个系统执行的基础,它主要为软件提供程序运行的平台。

而软件部分,是对硬件端口所体现的信号,加以采集、分析、处理,最终实现控制器所要实现的各项功能,达到控制器自动对电机速度的有效控制。

用51 来产生 PWM波就必须要用软件编程的方法来模拟。

方法大概可以分为软件延时和定时器产生两种方法。

本次课程设计我们采用定时器产生PWM方波。

定时器产生PWM:这种方法利用了定时器溢出中断,在中断服务程序改变电平的高低,在程序较复杂、多操作时仍能输出较准确的pwm波形。

五、实验设备:单片机开发实验仪一台;AT89C51;LCD1602;DA数模转换;按键;光电开关六、实验原理:1、硬件框图:硬件部分主要由电位器、模数转换模块、51 单片机、显示模块、驱动电路和无刷直流电机组成。

其功能框图如下:2、硬件介绍:1)1602 液晶显示模块电路1602C字符型液晶: CS:片选信号,低电平有效;RS:选择读写的是指令或数据, L:指令, H:为数据。

RW:读写控制端, L:写操作, H:读操作。

12864J 图形点阵液晶: CS:片选信号,低电平有效; CS1/2:左右半屏使能选择, H:左半屏, L:右半屏; RS:选择读写的是指令或数据,L:指令, H:为数据。

RW:读写控制端, L:写操作, H:读操作。

12864M图形点阵液晶: JP6 的 16 脚是空脚, JP6 的 15 脚是 PSB:PSB接高电平,CPU与液晶使用并行接口连接,连接方法与 12864J 完全相同; PSB接低电平,CPU与液晶使用串行接口连接,此时,RS、RW、E 与 CPU的 I/O 管脚相连(STAR ES59PA才有该功能)。

西安工业大学课程设计(论文)用纸R4VCC DS1470R31W2WR110K10K35RD246U5ACS U3BRSRWJP921(1602C 字符型液晶 )R4VCC DS1470R31W2WR110K10K35RD24U5A6CS U3BRS(1602C 字符型液晶 ) RWJP61VSS2VDD3V04RS5RW6ED07DB0D18DB1D29DB2D310DB3D411DB4D512DB5D613DB6D714DB715LED+16LED-1602CJP61VSS2VDD3V04RS5RW6ED07DB0D18DB1D29DB2D310DB3D411DB4D512DB5D613DB6D714DB7CS1/22115CS1 16CS23U3A2117RST18VOUT19LED+20LED-JP912864J西安工业大学课程设计(论文)用纸(12864J 图形点阵液晶)2) DAC0832 数模转换R71DS23VCC470CSU20R781 CSVDD202510WR118 -12VWRWR2W5D5C3319ILE170.1uFR151XFER1KD0 7 DI0 N VREF8VCCD1 6 CDI1 L+12V4D2 5 29DI2 3 RFB7R162U26CD3 4 8U23 89DI3 0D4 16 C IOUT1 112R1508Q7 D5 15 DI4 A 126CC2655DI5 DIOUT210D6 14 3DI6LM324ND713LM741CN1DI75OUT14W6 13R149AGND-12V10DGND10KR794.7KOUT1-12VCS :片选,低有效;OUT :转换电压输出;OUT1:经功放电路的电压输出;电位器 W5:调整基准电压。

3)发光管、按键、开关12西安工业大学课程设计(论文)用纸JP6512345 6 78VCCJP63AR10712 LED1470LED2DS32LED3LED4123456781111111111111111R R R R R R R R000000001111111155555555DS35 DS36 DS37 DS38 DS39 DS40 DS41 DS42B1JP65:发光管控制接口, 0-灯亮, 1-灯灭JP74VCC1 2 3 4 5 6 78R11910K1 A23456789CS29S30S31S32S33S34S35S36 B按键电路原理图12西安工业大学课程设计(论文)用纸JP80VCC1 2 3 4 5 6 78R124 10K1A2K5 K6 K7 K83456789S21S22S23S24S25S26S27S28B开关电路原理图CJP74:按键控制接口;按下-0 信号,松开- 1 信号JP80:开关控制接口;闭合-0 信号,断开- 1 信号4) AT89C51本课题中控制芯片的作用主要是与ADC0809相连接,采集模数转换后得到的8位二进制码,过公式计算后得到电压值,同时连接四位数码管进行显示。

综合考虑,选用 AT89C51即满足要求。

简介:AT89C51是一种带 4K 字节 FLASH存储器的低电压、高性能CMOS 8 位微处理器。

单片机的可擦除只读存储器可以反复擦除1000 次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8 位 CPU和闪烁存储器组合在单个芯片中,ATMEL的 AT89C51是一种高效微控制器。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

AT89C51引脚图如下:主要特性:与 MCS-51 兼容 ·;4K 字节可编程 FLASH 存储器;寿命: 1000写 /擦循环; 数据保留时间: 10 年 全静态工作: 0Hz-24MHz ; 三级程序存储器锁定; 128×8 位内部 RAM ; 32 可编程 I/O 线;两个 16 位定时器 /计数器; 5个中断源;可编程串行通道; 低功耗的闲置和掉电模式;片内振荡器和时钟电路;直流电机转速测量 / 控制5)使用光电开关测速VCC JP4R8DS41R18 DS10CTRLVCC4702330R17DS9330 LIGHTR16 R20R19DS8330 OP1 4.7K MQ4330 直流电机13855024U7AU7BR281234GP2S054.7KREVSN74LS14NSN74LS14NCTRL :控制电压 (DAC0832经功放电路提供 ) 输入;REV :光电开关脉冲输出 ( 用于转速测量 ) ;LIGHT :低电平点亮发光管。

3、软件设计主程序设计:主程序是一个循环程序,其主要思路是,先设定好速度初始值,这个初始值与测速电路送来的值相比较得到一个误差值,然后用 PID 增量式算法输出控制系数给 PWM发生电路改变波形的占空比,进而控制电机的转速。

主程序流程图如下:五、实验总结:计算机控制技术的课程设计相比硬件的课程设计,简直难了不止一个档次,作为主要的编程人员,当我实际要去控制一个物体的时候,我才知道自己以前学的知识有多么的不牢固,不过真真正正的去做一个实物控制程序的时候,才能真切的体会到以前书本上学的知识是如何运用到实际的,我基本上可以说是为了应付考试勉勉强强学了一些,这次实际做到项目设计后,才理解其真正的含义。

还有本次项目,我们采用了LCD显示屏作为显示单元,比LED数码管复杂,LCD液晶显示屏这也是以前没有运用到过的,所以总体来说,这次课程设计带给我的不仅仅是旧知识的复习,还有新的探索。

本课程设计得以完成,首先要感谢秦刚老师,因为课程设计在他的悉心指导下才能顺利完成。

他渊博的专业知识,严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,严以律己、宽以待人的崇高风范、朴实无华、平易近人的人格魅力对我的影响非常深远。

本设计从选题到完成,每一部步是在老师的指导下完成的,倾注了老师大量的心血。

通过此次的课程设计,我学到了很多知识,跨越了传统方式下的教与学的体制束缚,在课程设计的写作过程中,通过查资料和搜集有关的文献,培养了自学能力和动手能力。

并且由原先的被动的接受知识转换为主动的寻求知识,这可以说是学习方法上的一个很大的突破。

在以往的传统学习模式下,我们学会了如何将学到的知识转化为自己的东西,学会了怎么更好地处理知识和实践相结合的问题。

在课程设计的写作过程中也学到了做任何事情所要的态度和心态,对于发展过程中出现的任何问题和偏差都不要轻视,,要通过正确的途径去解决,在做事情的过程中要有耐心和毅力,不要一遇到困难就打退堂鼓,只要坚持下去就可以找到思路去解决问题的。

再次感谢给我鼓励的老师、同学和朋友,谢谢!!六、附件:程序#include<reg52.h>#include<math.h>/*******************以下硬件连线设置 **************/sbit key0=P1^0;// 占空比(设定值)增按键;且rev 接 int0sbit key1=P1^1;// 占空比(设定值)减按键sbit power = P1^7;//启停按键sbit auto_run=P1^5;//自动运行按键sbit set=P1^4;//set 按键sbit left=P1^2;//左移光标sbit right=P1^3;//右移光标sbit LCD_RS=P3^0;//1602 的 RSsbit LCD_RW=P3^1;//1602 的 RWsbit sys_data=P3^4;//继电器控制脚,用于切换DA 功率输出方向(电机 or 加热电阻)xdata unsigned char dac0832_addr _at_ 0xd000;//DA的地址xdata unsigned char LCD_DATA _at_ 0x8000;//LCD1602的地址/*******************以下为系统的状态量设置**************/bit rps_triger=0;//转速(温度)刷新显示控制, 1 为需要刷新显示, 0 为不需要刷新显示bit scale_triger=0;//占空比刷新显示控制bit power_triger=0;//电源指示刷新显示控制bit power_data=0;//电源状态, 0 为关断, 1 为运行bit set_triger=0;//设置状态, 0 为正常运行, 1 为设置模式bit auto_triger=0;//auto(自动调整)状态,0 为正常模式,1 为自动调整模式bit auto_triger_triger=0;//auto 标志刷新显示控制,当auto 状态被被改变时才需刷新显示/*******************以下为系统的数据量 *****************/char set_data=0;//设置模式下设置的是第几位, 0~ 3(转速设定为 4 位),0~2(温度设定为 3 位)unsigned int scale=10;//占空比数据( 2 倍关系,可以控制到0.5%),初值为 5%unsigned int rps=0;//转速计数变量unsigned int rps1=0;//目标值变量unsigned int rps_data=0;//转速值unsigned int time=0;// 每秒计数变量(计数周期为250u 秒,故4000 次为 1 秒)unsigned int time2=0;//检测插值计数变量( 0.05 秒检测 1 次,实时调整比例系数)unsigned int time3=0;//比例系数控制(若当前值和目标值差值值大,则调整迅速,反之则缓慢调整)unsigned char time_scale=0;//占空比总周期计数变量,一个周期 200次,可以精确到0.5%unsigned int time_check[4]={1000,3000,6000,10000};//转速调整时间系数表格unsigned char check=0;//检测周期等级,分为 0~4 共 5 个等级,0 为极小时间系数, 4 为稳定不变void _nop_(void);/*******************延时函数 *****************/void delay(int a){while(a--);}/*******************外部中断初始化 *****************/void init_int0(){IT0=1;EA=1;}/*******************计数器 0 初始化 *****************/void T0_init(){TMOD = 0x01;TH0 = 0xff;//计数周期为 250u 秒TL0 = 0x1a;ET0=1;EA=1;TR0=1;}/*******************LCD1602相关函数 *****************/void LCD_write_com(unsigned char com){LCD_RS=0;LCD_RW=0;LCD_DATA=com;delay(80);}void LCD_write_data(unsigned char dat){LCD_RS=1;LCD_RW=0;LCD_DATA=dat;delay(80);}/*************LCD1602在电机调速系统下的初始化函数*************/{LCD_write_com(0x38);LCD_write_com(0x0c);LCD_write_com(0x06);LCD_write_com(0x01);LCD_write_com(0x80);LCD_write_data('R');LCD_write_data('P');LCD_write_data('M');LCD_write_com(0x88);LCD_write_data('S');LCD_write_data('e');LCD_write_data('t');LCD_write_com(0xc8);LCD_write_data('R');LCD_write_com(0xcd);LCD_write_data('.');LCD_write_com(0xcf);LCD_write_data('%');LCD_write_com(0x8b);LCD_write_data(rps1/1000+0x30);LCD_write_data(rps1%1000/100+0x30);LCD_write_data(rps1%100/10+0x30);LCD_write_data(rps1%10+0x30);}/***************光标闪烁开 ***************/ void flash_on(void){LCD_write_com(0x0f);/***************光标闪烁关 ***************/ void flash_off(void){LCD_write_com(0x0c);}/************显示当前转速或温度 **************/ void display_rps(void){flash_off();LCD_write_com(0x80);LCD_write_data('R');LCD_write_data('P');LCD_write_data('M');LCD_write_data(rps_data/1000+0x30);LCD_write_data(rps_data%1000/100+0x30);LCD_write_data(rps_data%100/10+0x30);LCD_write_data(rps_data%10+0x30);rps_triger=0;}/************显示当前占空比 **************/ void display_scale(void){flash_off();LCD_write_com(0xcb);LCD_write_data(scale/2/10+0x30);LCD_write_data(scale/2%10+0x30);LCD_write_com(0xce);LCD_write_data(scale%2*5+0x30);scale_triger=0;/************显示 auto 模式的状态 **************/void display_auto(void){flash_off();if(auto_triger==1){LCD_write_com(0xc3);LCD_write_data('a');LCD_write_data('u');LCD_write_data('t');LCD_write_data('o');}else{LCD_write_com(0xc3);LCD_write_data(' ');LCD_write_data(' ');LCD_write_data(' ');LCD_write_data(' ');}auto_triger_triger=0;}/************显示 power 的状态( on 或 off )*************/ void display_power(void){flash_off();LCD_write_com(0xc0);if(power_data==0){LCD_write_data('f');LCD_write_data('f');power_triger=0;auto_triger=0;}else{LCD_write_data('o');LCD_write_data('n');LCD_write_data(' ');power_triger=0;auto_triger=0;}}/************调整输出占空比函数 **************/ void check_rps(void){if(power_data==0) return;if(rps1<rps_data){scale--;if(scale<=1) scale=1;}else if(rps1>rps_data){scale++;if(scale>=199) scale=199;}}/************显示电机调速系统下set 模式函数 **************/void display_set(void){switch(set_data){case0:flash_on();LCD_write_com(0x8b);LCD_write_data(rps1/1000+0x30);LCD_write_ com(0x8b);delay(1000);break;case1:flash_on();LCD_write_com(0x8c);LCD_write_data(rps1%1000/100+0x30);LCD_ write_com(0x8c);delay(1000);break;case2:flash_on();LCD_write_com(0x8d);LCD_write_data(rps1%100/10+0x30);LCD_writ e_com(0x8d);delay(1000);break;case3:flash_on();LCD_write_com(0x8e);LCD_write_data(rps1%10+0x30);LCD_write_c om(0x8e);delay(1000);break;default:flash_off();break;}}/************以下为各个按键的函数 **************//************power电源键 **************/void fn_power(){if(power==1) return;elsedelay(20);//按键去抖if(power==0){while(power!=1);power_data=~power_data;power_triger=1;set_triger=0;auto_triger_triger=1;}else return;}}/************自动调整模式键 **************/ void fn_auto(){if(auto_run==1) return;else{delay(20);//按键去抖if(auto_run==0){while(auto_run!=1);if(power_data==0) auto_triger=0;else auto_triger=~auto_triger;auto_triger_triger=1;set_triger=0;}else return;}/************set设置模式键 **************/void fn_set(){if(set==1) return;else{delay(20);//按键去抖if(set==0){while(set!=1);set_triger=~set_triger;auto_triger=0;auto_triger_triger=1;}else return;}}/************减键( set 模式为调整目标值,运行模式调整占空比)**************/void fn_key0(){if(key0==1) return;else{delay(20);//按键去抖if(key0==0){while(key0!=1);if(set_triger==1)switch(set_data){case 0:if(rps1/1000>=1) rps1=rps1-1000; break;case 1:if(rps1%1000/100>=1) rps1=rps1-100; break;case 2:if(rps1%100/10>=1) rps1=rps1-10; break;case 3:if(rps1%10>=1) rps1=rps1-1; break;}}else{if(scale<=1) scale=1;else scale--;scale_triger=1;}}else return;}}/************加键( set 模式为调整目标值,运行模式调整占空比)**************/void fn_key1(){if(key1==1) return;else{delay(20);//按键去抖if(key1==0){while(key1!=1);switch(set_data){case 0:if(rps1/1000<9) rps1=rps1+1000; break;case 1:if(rps1%1000/100<9) rps1=rps1+100; break;case 2:if(rps1%100/10<9) rps1=rps1+10; break;case 3:if(rps1%10<9) rps1=rps1+1; break;}}else{if(scale>=199) scale=199;else scale++;scale_triger=1;}}else return;}}/************光标左移键( set 模式下有效) **************/void fn_left(){if(left==1) return;else{delay(20);//按键去抖if(left==0){while(left!=1);if(set_data>=3) set_data=3;else set_data++;}else return;}else return;}}/************光标右移键( set 模式下有效) **************/ void fn_right(){if(right==1) return;else{delay(20);//按键去抖if(right==0){while(right!=1);if(set_triger==1){if(set_data<=0) set_data=0;else set_data--;}else return;}else return;}}/************转数计数(外部中断0) **************/void int0() interrupt 0//外部中断 0 处理程序{rps++;//对转数计数器进行累加计数}/****************定时器 0 中断服务函数 *****************/void timer0(void) interrupt 1{unsigned int t;TH0 = 0xff;//重新装载计时常数TL0 = 0x1a;if(time_scale>=200) time_scale=0;//占空比计数控制if(time>=4000)//如果计满 1 秒,计秒变量归零,并将rps 的转数数据送到转速(温度)数据变量中保存{time=0;time_scale=0;if(sys_data==1) rps_data=rps*60/4;//在电机调速模式下:每转有 4 个脉冲,所以除以 4rps=0;//rps 归零rps_triger=1;//rps 显示开关有效if(check==4)//跳出稳态的判断{if(sys_data==1){if(abs(rps_data-rps1)>80) check=1;//如果在电机调速系统下,跳出稳态的条件是转速差超过80rpm}}}else{time_scale++;time++;//如果没计满 1 秒,则继续计数}if(power_data==1)//PWM 信号输出{if(time_scale<=scale) dac0832_addr=0xff;//PWM 信号输出else dac0832_addr=0x00;//PWM 信号输出}else dac0832_addr=0x00;//PWM 信号输出if(time2>=200)//数据差值检测, 0.5 秒 1 次{time2=0;t=abs(rps_data-rps1);//电机调速系统下的参数调整等级划分if(t>1200) check=0;else{if(t>500) check=1;else{if(t>200) check=2;{if(t>80) check=3;else check=4;//差值小于80rpm 进入稳态模式,不再调整输出占空比}}}}else time2++;if(check!=4)//在非稳态的情况下查表确定时间参数{if(time3>=time_check[check])//不同的系统查不同的表{time3=0;if(auto_triger==1) check_rps();}else time3++;}}/****************主函数 *****************/void main(){key0=1;//读引脚之前要写 1key1=1;power=1;set=1;T0_init();//T0 初始化init_int0();//外部中断 int0 初始化while(1){fn_switch();//按键查询函数fn_power();//按键查询函数fn_set();//按键查询函数fn_key0();//按键查询函数fn_key1();//按键查询函数fn_auto();//按键查询函数if(power_triger==1) display_power(); //当电源状态有改变时刷新显示电源状态if(rps_triger==1) display_rps();//当系统实时数据需要刷新时,刷新实时数据if(scale_triger==1) display_scale();//当占空比发生改变时刷新占空比数据if(auto_triger_triger==1) display_auto();// 当 auto 状态发生改变时刷新auto 状态显示if(set_triger==1)//当进入 set 状态时{fn_left();//查询左移右移按键fn_right();if(sys_data==1) display_set();//不同的系统(电机调速、温度控制)不同的 set 状态显示}}。

相关文档
最新文档