计算机控制技术实验指导书研究生部分V60剖析.docx
《计算机控制技术实验指导书研究生部分V60剖析.docx》由会员分享,可在线阅读,更多相关《计算机控制技术实验指导书研究生部分V60剖析.docx(60页珍藏版)》请在冰豆网上搜索。
计算机控制技术实验指导书研究生部分V60剖析
计算机控制系统
实验指导书
编者赵文龙彭洁
南昌航空大学
信息工程学院
前言
计算机由于具有强大的算术运算、逻辑判断、记忆等信息加工能力,使得它一诞生就被应用到控制领域。
随着计算机科学技术的发展,使60年代控制理论得到应用,而现代控制理论的发展,又为计算机控制的发展奠定了广阔的理论基础。
特别是微电子技术的发展给计算机控制提供了物质基础。
现在在工业生产等领域中,计算机控制正广泛深入地的得到应用,并取得了可喜的经济效益和社会效益。
本实验指导书是《计算机控制系统》课程的配套教材。
是理工科院校电类专业研究生学习《计算机控制系统》及自动化专业本科生《计算机控制系统》课程的实验教程,也是研究生《计算机控制系统》的实验教程(主要掌握12位A/D和12位D/A)。
通过实验可使学生进一步了解和掌握计算机控制理论的基本概念、控制系统的分析方法和设计方法以及控制算法的编程实现,学习和掌握系统模拟电路的构成和测试技术,提高应用计算机的能力及水平。
本书分为三章,第一章硬件资源,主要介绍实验的硬件组成。
第二章软件使用,主要介绍系统软件的操作以及计算机和实验箱的通讯设置。
第三章单片机实验部分,主要介绍围绕单片机控制系统开展的各个实验的电路组成,实验原理、实验步骤和控制程序。
在编写过程中,承蒙王长坤、吴国辉、邱玉兰老师的帮助和支持。
在此,向他们表示衷心的感谢。
由于时间仓促,且编者水平有限,书中难免有不足之处,敬请读者批评指正。
编者
2016年10月
目录
第一章硬件资源…………………………………………………………………………1
第二章软件使用………………………………………………………………10
第三章单片机系统实验………………………………………………………………24
实验一基于定时器定时中断的扫描显示与异步通信实验……………………24
实验二12位D/A转换实验……………………………………………………………34
实验三12位A/D转换实验……………………………………………………………40
实验四数字PID控制实验……………………………………………………………51
实验五数字PID参数整定及控制算法改进实验……………………………………56
第一章硬件资源
一、基于8位A/D、D/A的单片机控制系统实验的硬件原理图
基于8位A/D、D/A的单片机控制系统实验的硬件原理图如图1-1所示。
二、基于12位A/D、D/A的单片机控制系统实验的硬件原理图
基于12位A/D、D/A的单片机控制系统实验的硬件原理图如图1-2到如图1-7所示。
其中图1-2是单片机模块原理图,图1-3是12位A/D模块原理图,图1-4是D/A模块原理图,图1-5是显示模块原理图,图1-6是电源及信号转接模块原理图,图1-7是被控对象模块原理图。
图1-1基于8位A/D、D/A的单片机控制系统实验的硬件原理图
图1-2单片机模块原理图
图1-312位A/D模块原理图
图1-4D/A模块原理图
图1-5显示模块原理图
图1-6电源及信号转接模块原理图
1-7被控对象模块原理图
第二章软件使用
第1节KeilC软件使用
本书后文的所有教学项目例程都是在KeilC51软件下开发和调试的,因此有必要对KeilC51的使用进行简要介绍。
KeilC51是众多单片机应用开发的优秀软件之一,它集编辑、编译、仿真于一体,支持汇编、PLM语言和C语言的程序设计,界面友好,易学易用。
2.1.1启动KeilC51软件
下面介绍KeilC51软件(以版本6.12为例)的使用方法,启动KeilC51时的屏幕如图2-1所示。
图2-1启动KeilC51时的屏幕
几秒钟后出现编辑界面,屏幕如图2-2所示。
图2-2进入KeilC51时的编辑界面
2.1.2简单程序的调试
下面通过简单的编程、调试操作和演示,引导读者学习和掌握KeilC51软件的基本使用方法和基本调试技巧。
(1)、单击“Project”菜单准备建立一个新工程,在弹出的下拉菜单中选中“NewProject”选项(见图2-3)。
图2-3在KeilC51中建立一个新工程
(2)、选择要保存的路径,输入工程文件的名字,比如保存到d:
\STCproject目录下,项目名为P_STCproject,单击“保存”按钮即可,见图2-4。
图2-4将新工程保存到指定目录
(3)、系统弹出一个对话框要求选择单片机的型号,可以根据所使用的单片机来选择。
KeilC51几乎支持所有的MCS-51内核的单片机,虽然这里没有STC的单片机选项,但是选中Atmel中的89C52即可默认是STC89C52RC单片机。
如图2-5所示,选择89C52之后,
右边栏是对这个单片机的基本的说明,然后单击“确定”按钮。
图2-5单片机的选型(4)、完成上一步骤后界面如图2-6所示,到目前为止,在建好的项目中还没有编写一句程序,下面开始编写第一个程序。
图2-6KeilC51中的一个空项目界面
(5)、在图2-7中,单击“File”菜单再在下拉菜单中单击“New”选项;
图2-7准备新建一个文件
新建文件后屏幕如图2-8所示
图2-8新建文件界面
此时光标在编辑窗口中闪烁,这时可以键入用户编写的源程序了,此处建议保存该空白文件及其类型,单击菜单上的“File”,在下拉菜单中选中“Saveas”项者单击,屏幕如图2-9所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。
注意,如果用C语言编写程序则扩展名为.c;如果用汇编语言编写程序,则扩展名必须为.asm。
然后,单击“保存”按钮。
图2-9保存新建文件及其类型界面(6)、回到编辑界面后,单击“Target1”前面的“+”号,然后在“SourceGroup1”上单击右键弹出如图2-10所示菜单项;
图2-10在KeilC51中的一个空项目里加入文件
然后单击“AddFiletoGroup‘SourceGroup1’”屏幕如图2-11所示
图2-11C源程序被加入空项目里
选中Text1.c,然后单击“Add”屏幕如图2-12所示,
图2-12C源程序被加入空项目后的界面
此时‘SourceGroup1’文件夹中多了一个子项“Text1.c”,子项的多少与所增加的源程序的多少相同。
(7)、在光标闪烁的代码编辑区输入如下C语言源程序;#include#includevoidmain(void){SCON=0x52;//串口方式1,允许接收TMOD=0x20;//定时器T1工作在方式2TH1=0xF3;//选定波特率TR1=1;//启动定时器,此行及以上3行为printf函数所必须printf("HelloIamKEIL.\n");printf("Iwillbeyourfriend.\n");while
(1);}在输入上述程序时,Keilc51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。
程序输入完毕后,如图2-13所示
图2-13C源程序在项目中被编辑的效果
(8)、在图6-13所示界面中,单击“Project”菜单,再在下拉菜单中单击“BuiltTarget”选项(或者使用快捷键F7),编译成功后,再单击“Debug”菜单,在下拉菜单中单击“Start/stopDebugSession”选项(或者使用快捷键Ctrl+F5),界面如图2-14所示
图2-14C源程序在执行Ctrl+F5后的效果
(9)、键调试程序,在图2-14中,单击“Debug”菜单,在下拉菜单中单击“go”选项(或者使用快捷键F5),然后再单击“Debug”菜单,在下拉菜单中单击“StopRuning”选项(或者使用快捷键Esc);再单击“View”菜单,在下拉菜单中单击“SerialWindows#1”选项,就可以看到程序运行后的结果,其结果如图2-15所示
图2-15C源程序最后的执行结果
至此,在KeilC51中做了一个完整工程的全过程,但这只是纯软件的开发过程,必须在KeilC51中进行进一步设置才能将已编译好的程序下载到STC单片机中供其运行。
(10)、单击“Project”菜单,再在下拉菜单中单击“optionsforTarget‘Target1’”选项,在图2-16所示对话框中,在“Output”选项卡中选中“CreateHEXFile”前的复选框,再编译一次程序,在项目目录中就会产生HEX代码,本例会产生P_STCproject.hex供下载器软件使用。
下载器软件会把程序下载到STC89C52RC单片机中。
图2-16HEX代码产生的设置
第2节STC单片机的烧写
1.打开STC单片机的烧写软件,如图2-17所示。
这个界面中已经给出了操作步骤:
选择单片机型号(选择STC89C52RC即可)→点击OpenFile按钮出现open.hexorbinfile窗口,如图2-18所示→选择已经编译成功的shiyan.hex文件,点击打开按钮,出现图2-19的界面→选择使用的微机串口→选择倍速、增益等(使用STC89C52RC单片机采用默认选项即可)→点击Download/下载→出现图2-20的界面后给单片机上电→开始烧写,烧写进行中如图2-21所示,烧写完成如图2-22所示。
图2-17STC单片机烧写界面
图2-18选择hex文件
图2-19打开hex文件
图2-20开始上电
图2-21烧写进行中
图2-22烧写成功
第三章
基于12位A/D、D/A的单片机控制系统实验
本套实验系统一共提供了6个围绕单片机系统开展的实验:
基于定时器定时中断的扫描显示与异步通信实验、12位D/A转换实验、12位A/D转换实验、数字滞后-超前校正实验、数字PID控制实验、数字PID参数整定及控制算法改进实验、模糊控制实验。
该单片机系统如图1-1到图1-7所示。
本系统算法完全开放,系统结构组合灵活,可以自行修改和添加新的实验。
实验一 基于定时器定时中断的扫描显示与异步通信实验
一、实验目的
1.掌握单片机内部定时器的使用和C51编程方法;
2.掌握异步通信的工作原理和C51编程方法;
3.掌握扫描显示的工作原理和C51编程方法。
二、实验仪器
1.51SKJXSJ单板实验板1块(附12V1A的AC/DC开关型电源模块1个,RS232标准串行通信电缆1根),做步骤9、步骤10和步骤11时还要实验盒1个。
2.带DB9串口的台式PC机1台(装有KeilμVision3编译软件、STC-ISPV29Beta5下载软件、DOSBOX软件)。
3.如果不用截屏,还要具有照相功能的手机或数码照相机(自备)。
实验一图1扫描显示电路原理图
实验一图2单片机部分原理图
三、实验内容
利用定时器定时中断,在中断服务程序中完成八段数码管的显示,在主程序中实现有限范围的秒的加、减计数,并且根据加、减计数值更新显示缓冲区的数据,秒的加法计数从-100~100周期性计数,秒的减法计数从100~-100周期性计数。
秒加法计数值在左边4位数码管显示,秒加法计数值在右边4位数码管显示。
通过改变SW3SW2SW1拨码开关位置改变时间常数,从而可以改变扫描显示周期,并且关注没有闪烁感的最大扫描显示周期是多少?
规定每次秒计数值更新时,要把秒的加、减计数值通过异步串行通信口COM1发送给PC机进行显示,PC机运行shiyan1a.exe,则PC机屏幕上会显示当前通信数据的帧信息图和具体数据,包括空闲、1个起始位、8个数据位、1个停止位、空闲、1个起始位、8个数据位、1个停止位、空闲,其中8个数据位是从D0开始,到D7结束。
为了提高通信效率,采用最简单的2字节报文包通信方式,命名秒的加计数值为奇字节,秒的减计数值为偶字节。
在秒计数值更新时发送奇字节,利用奇字节发送结束申请串行中断,在串行中断服务程序中发送偶字节,并且偶字节发送结束不申请串行中断。
规定波特率为19200bps,当晶体频率11.0592MHz时,用定时器T1产生波特率为
方式1和方式3波特率=
(T1溢出率)/32(1-1)
注意定时器T1应禁止溢出中断。
T1的溢出率又和它的工作方式有关,为确保波特率准确,选择T1工作在方式2——即8位时间常数自动重装,波特率的计算公式为
19200=
fosc/[32*12(256-(TH1))](1-2)
则计算结果为(TH1)=253=0xfd。
要实现STC89C52与PC机串行通信,还要求电平转换,转换后的电平要符合RS232标准,因此需要扩展电平转换电路,如图实验一图3所示。
实验一图3TTL与RS232电平转换电路
四、实验电路连线和实验原理
本实验连线实验板无需另外接线,扫描显示电路原理图如图实验一图1所示,单片机部分原理图如图实验一图2所示,RS232通信电平转换电路原理图如图实验一图3所示,只须将通信线接到PC机的COM1口。
地址译码采用线选法译码,显示段码端口地址由写信号/WR和地址线A15,显示位码端口地址由写信号/WR和地址线A14,其余地址线无效,我们假设为1。
故显示段码端口地址为0111,1111,1111,1111B,即0x7FFF,进行写操作,即可输出显示段码,锁存于U4这个8位锁存器中。
显示位码端口地址为1011,1111,1111,1111B,即0xBFFF,进行写操作,即可输出显示段码,锁存于U5这个8位锁存器中。
采用8段共阴数码管,则扫描显示需要锁存8位段码,选用74HC273芯片能够实现,其中段码的LSB位对应段A,段码的MSB位对应段H,则小数点不亮时数符0~9的段码如实验一表1所示。
程序中可以用如下方法定义端口:
#defineDisplaydataXBYTE[0x7FFF]//数码管段码锁存器端口地址
实验一表1小数点不亮时共阴数码管段码表
数符
0
1
2
3
4
5
6
7
8
9
段码
0x3f
0x06
0x5b
0x4f
0x66
0x6d
0x7d
0x07
0x7f
0x6f
可以考虑用查表的方法实现数字到段码的查表法,具体表格定义如下:
ucharcodeDisptab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
涉及到符号时,+号段码为0x00;-号段码为0x40;小数点单独控制,需要小数点的位,对应段码获得后,再或上0x80即可。
为了显示两个数,其中一个-100~100,另外一个100~-100,这里包括符号位,共计需要8个数码管,则扫描显示需要1个8位锁存器锁存8位数码公共端信息,选用SN74ABT273芯片能够实现,其中位码的LSB位对8号数码管,段码的MSB位对1号数码管,编号从1到8对应功能和位码如实验一表2所示。
实验一表2编号从1到8数码管对应功能和位码
数码管编号
显示内容
二进制位码
十六进制
M
1
加法符号位
01111111B
0x7f
7
2
加法百位
10111111B
0xbf
6
3
加法十位
11011111B
0xdf
5
4
加法个位
11101111B
0xef
4
5
减法符号位
11110111B
0xf7
3
6
减法百位
11111011B
0xfb
2
7
减法十位
11111101B
0xfd
1
8
减法个位
11111110B
0xfe
0
程序中可以用如下方法定义端口
#defineDisplaybitXBYTE[0xBFFF]//数码管位码锁存器端口地址
可以考虑用查表的方法实现扫描位控到位码的查表法,具体表格定义如下。
ucharcodeDispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共阴位码表
扫描显示中经常需要考虑每位要显示一定的时间,经常使用软件延时的方法,但这种方法不好,我们采用定时器定时的方法,在中断服务程序中执行显示操作,具体方法如下。
Displaydata=dispbuf[M];//查段码表送数显的段端口
Displaybit=Dispbit[M];//查位码表送数显的位端口
M++;//修改下一次的显示位
当晶体频率11.0592MHz时,用定时器T0并且使用方式1定时中断,每中断一次,显示1位,如果扫描显示周期为T,则8位数码管全不显示一遍,时间为T,显示一位的时间为T/8,则T0时间常数的计算方法如下:
(1-3)
当T=5ms=0.005s时,
即时间常数高字节为0xfd,低字节位0xc0,1秒需要中断次数为
(1-4)
当T=5ms=0.005s时,n=200,T为其它数据时,采用上述方法计算时间常数和中断次数。
时间常数高字节表、低字节表和1秒对应中断次数均采用表格提供,目前定义的拨码开关SW3SW2SW1无论在什么位置,均是扫描周期5ms。
ucharcodetHtab[8]={0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd};//定时器计数初值高字节表
ucharcodetLtab[8]={0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0};//定时器计数初值低字节表
ucharcodesecondtab[8]={200,200,200,200,200,200,200,200};//1秒中断次数计数值表
实验装置异步串行通信发送的数据是秒加计数值和秒减计数值,PC机屏幕绘图的截屏如实验一图4所示。
其中K表示空闲,Q表示起始,D表示数据,T表示停止。
实验一图4数据为帧信息
五、实验步骤
1.计算时间常数和中断次数,扫描周期分别为22ms、23ms、24ms、25ms、26ms、27ms、500ms,求出时间常数和1秒对应中断次数,填入实验一表3中。
实验一表3时间常数和1秒对应中断次数
扫描周期
5ms
22ms
23ms
24ms
25ms
26ms
27ms
500ms
T0定时周期
0.625ms
时间常数
0xfdc0
1秒对应
中断次数
200
2.编辑源程序,参考程序中的时间常数高字节表、低字节表和1秒对应中断次数均是5ms扫描周期的数据,利用计算好的实验一表3的数据,修改参考程序中的时间常数高字节表、低字节表和1秒对应中断次数。
3.用Keil集成开发环境建工程,然后编译该程序,得后缀名.HEX的可执行程序。
4.利用标准串行通信电缆从微机的COM1口连接到51SKJXSJ单板线路板的DB9插座,运行Ver:
2.9Beta5测试版STC-ISP.EXE,选择单片机型号:
STC89C52RC,打开你编译产生的HEX后缀名的文件,由于是晶体是24MHz,点击fullgain,点击下载按钮再MCU上电复位-冷启动(插上AC/DC开关型模块电源),这时会在下面窗口显示一些提示信息,正常在编程结束时在51SKJXSJ单板上扫描显示2个秒计数值,并且每秒钟会改变秒计时。
5.PC机上运行shiyan1a.exe。
6.给实验装置断电,依次设置SW3SW2SW1拨码开关位置,具体如实验一表4,其中首次OFF、OFF、OFF,每次设置后通电。
实验一表4SW3SW2SW1拨码开关与扫描周期的关系
查表偏移量
SW3
SW2
SW1
扫描周期(s)
有无闪烁感
7
OFF
OFF
OFF
0.5
6
OFF
OFF
ON
0.027
5
OFF
ON
OFF
0.026
4
OFF
ON
ON
0.025
3
ON
OFF
OFF
0.024
2
ON
OFF
ON
0.023
1
ON
ON
OFF
0.022
0
ON
ON
ON
0.005
7.观察实验装置数码管有无闪烁感,并且记录在实验一表4中。
8.观察PC机屏幕绘制的串行通信帧信息,用手机照两幅照片。
9.根据控制盒硬件平台(参考原理图1-2和图1-5,注意晶体是24MHz),利用8个数码管显示——即2个四位1组的数码管扫描显示,2个单独的数码管不显示,且实验一表3中的500ms改为250ms,设计程序,重做步骤2-步骤8。
10.如果改为10个数码管,2个单独的数码管仅做符号显示,2个四位1组的数码管各显示3位整数1位小数,每0.1秒进行一次加法计数和减法计数,实验一表3中扫描周期500ms改成50ms,又如何改造程序?
11.完成老师额外的要求。
六、实验报告
1.写出定量计算时间常数的方法,列写实验一表3的实验数据。
2.列写实验一表4的实验数据,没有闪烁感的最大扫描显示周期是多少?
3.贴上手机照片打印图2张,分析每幅照片通信数据帧格式。
4.绘图说明扫描显示规律。
5.画出主程序框图和定时中断服务程序框图。
七、预习要求
1.复习定时器、异步通信及中断有关知识;
2.复习扫描显示的有关软、硬件有关知识;
3.预习实验内容,看懂线路和参考程序。
4.按照控制盒的硬件原理图(重点参考原理图1-2和1-5)编写步骤9、步骤10和步骤11的程序,尤其注意单片机外接的晶体是24MHz。
八、参考程序
//SW1~SW8连P1^0~P1^7,ON位逻辑0,OFF为逻辑1
//SW3SW2SW1:
000=5ms;001=22ms;010=23ms;011=24ms;100=25ms;101=26ms;110=27ms;111=500ms
#include
#include
#defineucharunsignedchar//无符号字符型变量新表示方法定义
#defineuintunsignedint//无符号整型变量新表示方法定义
#defineDisplaydataXBYTE[0x7FFF]//数码管段码锁存器端口地址
#defineDisplaybitXBYTE[0xBFFF]//数码管位码锁存器端口地址
bitnew_cycle_flag=0;//有新采样数据位标志定义(1是有新数据)
chardispbuf[8];//显示缓冲区字符型数组定义
intAx_r1,Ax_m1,Ax;//给定量角度、反馈量角度整数定义
ucharM=0;//扫描显示位计数变量定义
ucharcounter_ms_s;//1秒中断次数计数器
ucharcodetHtab[8]={0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd