计算机测控系统s.docx
- 文档编号:27630844
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:36
- 大小:250.85KB
计算机测控系统s.docx
《计算机测控系统s.docx》由会员分享,可在线阅读,更多相关《计算机测控系统s.docx(36页珍藏版)》请在冰豆网上搜索。
计算机测控系统s
计算机测量与控制系统(学时数:
54)
参考教材:
【1】陈涛,单片机应用及C51程序设计,机械工业出版社,2008.
【2】徐爱钧,智能化测量控制仪表原理与设计(第二版),北京航空航天大学出版社,2004。
【3】马忠梅,单片机的C语言应用程序设计(3/4版),北航版,2003/2007。
【4】李刚、林凌,现代测控电路,高等教育出版社,2004。
【5】韩九强、等,现代测控技术与系统,清华大学出版社,2007。
课程介绍:
本课程是在本科阶段学习了有关基础课程与专业课程的基础上,进一步了解和掌握计算机测量与控制系统的硬件与软件设计方法与过程,并通过实例分析与实际应用系统的设计制作掌握基本的设计、调试与操作技能。
学习的重点有三个方面:
第一,深入理解与掌握一种以上的单片机体系结构与基本应用技巧(目前以MCS-51兼容机为主),单片机的C语言程序设计、编程与调试方法。
第二,使用计算机实现基本物理量的测量(例如,电量测量、温度测量)。
第三,使用计算机实现基本物理量的控制(温度控制)。
主要内容与安排(18周*3课时):
1.绪论,本课程的安排等一般性介绍
2.智能化测控系统中的MCU/MPU,新型MCS-51兼容单片机;电量计算软件设计。
3.集成开发环境IDE/KeiluVision2/C51编译器;电量计算软件设计。
4.实验板硬件与功能介绍/安装与使用/入门程序
5.数字时钟程序设计与调试
6.同上
7.参数与操作面板
8.参数设置程序设计
9.机动安排
10.温度测量/数字温度传感器DS18B20
11.温度测量程序设计
12.温度控制及其算法
13.温度控制程序设计
14.同上
15.超声波测距的原理与实现
16.超声波测距(分体式)程序设计
17.同上
18.机动安排
课程设计题目及要求:
1.电量计算程序设计
编写一个计算交流电有效值、功率与功率因数的程序。
假设已经得到了电流与电压的采样数据(10位A/D转换结果),零点对应采样值为512。
先按照有效值的定义编写程序,然后进行标定。
标定采用峰-峰值为256的交流信号数据,对应的电流为10安培,电压为100伏特。
再用直流信号的数据进行验证。
进一步对电流与电压信号进行谐波分析,编写FFT程序,并用模拟的标准采样数据对结果进行验证。
2.数字时钟系统设计
在给定的硬件系统上实现基本的数字时钟功能(含时间设定功能)。
3.参数设置程序设计
设计一个参数设置功能的程序。
参数号为0-9,每个参数的缺省参数值、上限与下限均由表格给定,2位数值显示。
发挥部分:
参数号为0-99,4位数值显示,进一步实现参数的快速设定与15秒自动退出功能。
4.超声波测距系统设计
针对给定的超声波测距硬件系统编写相应的软件,实现基本的测距功能。
测量范围为10-200cm,动态显示结果。
发挥部分
(1):
进一步增加测量范围,提高测量精度。
(2):
实现基于测距原理的超声波主动目标定位。
5.温度测量与控制系统
针对给定的硬件系统编写相应的软件,实现基本的温度测量与显示功能,测量精度为0.1度。
在此基础上利用电阻加温进行温度控制。
利用键盘操作实现温度的设定(30-100度)。
发挥部分
(1):
用不同的方法进行温度控制,并比较优缺点。
(2):
在外界干扰下(小风扇吹风)能够尽快达到新的稳定点。
(3):
开机进入参数设置,退出后进行温度控制。
实现具有上下限幅、快速改变数值功能的参数设定(设定参数范围为0-800)。
设计报告要求:
(1)任务可行性分析(所需要的功能如何实现)。
(2)程序结构流程框图。
(3)C语言程序的关键程序段及说明。
(4)总结(对自己工作的评价、改进与提高的设想等)。
(5)源程序电子文档。
嵌入式系统设计过程与规范
一.以产品开发为目标的设计过程
1.技术可行性分析与论证
2.原理设计/总体规划
3.各个独立组成部分的设计
4.电路板设计/调试(一般需要经过多次反复才能完善)
5.软件/硬件联合调试(也要经过若干次反复修改)
6.出样机/产品试验(如果试验无法通过还要进行修改)
7.技术文件汇总/移交生产部门
整个过程少则几个月,多则几年时间才能完成。
二.硬件开发技术规范
1.安全性(一票否决)
2.可靠性(产品试验)EMC
3.实用性(标准功能/用户要求)
4.标准化(企业标准、行业标准、国家标准与国际标准)
三.软件开发技术规范
1.合理性(对于系统的各种资源如何充分合理地利用)
2.实用性(标准功能/用户要求/市场导向)
3.可靠性(评判标准)
4.标准化(软件标准)
其中,合理利用系统资源需要有对于系统各种功能的全面了解与使用经验的积累。
就CPU系统来说,系统的资源包括:
运行时间、存储器、中断以及所具有的各种功能模块(定时器/计数器、串行接口SPI、并行接口PPI、通信接口、信号控制接口、A/D与D/A接口等)。
举例来说,一个超声波测量距离的程序设计,可以不使用任何其它资源,完全利用程序的查询功能实现。
但是单片机本身已有的资源不用就明显是不合理的。
一般来说,中断是计算机测控系统的重要资源,一个应用系统没有使用中断就不是一个好的程序(除非很简单的程序)。
但是,过多地使用某一种资源肯定也是不合理的。
例如,在单片机应用系统中使用了3个以上的中断就很难保证系统的可靠性。
软件设计的标准化也是非常重要的方面,特别是对于大型和复杂程序的设计。
为了保证程序的维护性,必须遵循相应的设计规范和标准,包括流程框图和程序的注释。
很多人并不重视这方面的工作,实际上会对以后的工作造成很大影响。
流程框图的绘制应该是由粗到细,逐步细化,直到能够转化为程序(指令)。
四.典型实例
实际上软件流程框图中只有两个基本元素:
过程与分支。
其余的元素都是些辅助元素(如入口、出口、返回等)和组合元素(如循环、散转结构等)。
一个过程可以是一条语句(操作),也可以是多条语句直至一个很大的子程序。
例如一个初始化过程,可以是:
x=0;//参数初始化
也可以是:
TMOD=0x01;//定时器T0初始化
TL=0x00;//定时器T0计数初值
TH=0xcc;
还可以是:
display();//调用显示子程序
如此等等。
分支是由判断语句和相应的操作共同组成的,其结构如下:
if(条件)过程(操作)一;
else过程(操作)二;
有时语句中无else过程(操作)二;这实际是简化的分支。
多个分支语句连续使用,就形成了散转。
为了简化编程,使用switch语句,实际上最终的机器语言是一样的。
各种循环语句最终也还是利用分支语句实现的。
入口
以下是动态显示程序的框图和相应的C语言程序。
voiddisplay();
{
重新设置初值
TH0=0xee;//5mS
TL0=0x00;
if(dpt<3)dpt++;
显示指针处理
elsedpt=0;//动态显示计数器
P0=tab[dpbuf[dpt]];
输出显示内容
显示第0位
dpt=0?
if(dpt==0)
{dp1=dp2=dp3=1;
dp0=0;
dpt=1?
}
if(dpt==1
显示第1位
)
{dp0=dp2=dp3=1;
dp1=0;
dpt=2?
}
显示第2位
if(dpt==2)
{dp0=dp1=dp3=1;
dp2=0;
显示第3位
}
else
{dp0=dp1=dp2=1;
dp3=0;
出口
}
}
其中的入口与出口所对应的就是函数名与括号。
多重分支语句也可以用switch语句代替,使程序更为简洁:
switch(dpt)
{case0:
dp1=dp2=dp3=1;dp0=0;
break;
case1:
dp0=dp2=dp3=1;dp1=0;
break;
case2:
dp0=dp1=dp3=1;dp2=0;
break;
case3:
dp0=dp1=dp2=1;
dp3=0;
}
从事计算机开发的人需要有一定的悟性(基础反倒不是问题),更需要有“三心”:
细心--一丝不苟;耐心--孜孜不倦;恒心--持之以恒(积累)。
有志者事竟成,大家共勉!
嵌入式系统设计——电量计算程序设计
一.技术要求:
利用单片机进行基本的电量计算(电流与电压的有效值、功率与功率因数,进一步再深入进行谐波分析)。
假设已经得到电流与电压的10位A/D采样数据DI[32]和DV[32]。
计算SI、SV、SW、SP以及PHAI(所有结果用16位整数表示,功率因数放大100倍)
二.功能实现:
首先给出有关的公式如下:
有效值计算:
;
;
视在功率:
S=I×V;
有功功率:
;
功率因数:
;注意一般情况下
。
然后对上面的公式进行离散化,得到离散化的计算公式。
;
;
;
由于最后的计算结果涉及到电路和传感器的增益,因此可以将所有的系数归并后再统一进行标定处理。
系数KP与KI、KV之间具有一定关系。
三.软件设计:
这一类的程序显然应该利用循环语句实现,具体形式为:
for(k=0;k {……//累加计算} 程序中需要仔细考虑变量的类型定义,这是初学者最容易出现的问题。 从应用的角度考虑,应该尽量不使用浮点计算。 而定点数计算很容易出现类型转换信息丢失与数值溢出问题。 将计算程序写成函数形式,以便主程序调用。 四.程序调试: 熟悉利用调试工具观察计算结果及排查软件错误的方法。 程序的调试是任何软件设计不可避免的过程。 具体又分为纯软件调试和软件与硬件的联合调试。 纯软件的调试不涉及硬件,主要是解决程序本身的正确性。 程序编写完成后,一般可以用一些标准数据进行结果的验证。 验证数据要足够多且具有代表性,例如电量计算应该有不同的采样数据大小,而且应该包含特殊情况(例如恒定的直流信号)。 即使验证数据计算正确,仍然可能出现意想不到的问题。 软件与硬件的联合调试是在纯软件调试后进行的,主要是解决系统整体的功能正确性与协调一致性。 其中的难度和复杂性远远高于纯软件的调试,将在以后的课题中进一步深入。 %用MATLAB编写的有效值计算程序,用于验证程序的正确性与确定比例系数 clear; A=128; t=0: 2*pi/32: 2*pi-pi/16;%32点采样数据 ua=A*sin(t);%产生正弦波形 sgm=sum(ua.*ua);%计算平方和 rms=sqrt(sgm/32);%计算有效值 disp(sgm);disp(rms);%sgm=262144;rms=90.5097 % F=fft(ua);%F (1)=-0.0000-2.0480i //33点DFT计算程序----------------------------------------------- //离散傅里叶变换的计算公式: ; //分离实部与虚部后有: ;k=0,1,2,……32 // ;k=0,1,2,……32 //为了计算方便,将正弦余弦数值事先做成一张表,其中的数值放大1000倍。 intSINTAB[33]={1000,982,……}; intCOSTAB[33]={0,189,……}; //------------------------------------------------------------- voidDFT33(intDR[],longDY[]) {Uint16k,n,t;//实部放在DY[0]-DY[15]中; for(k=0;k<16;k++)//虚部放在DY[16]-DY[31]中; {DY[k]=0;DY[k+16]=0; for(n=0;n<33;n++) {t=n*k; while(t>=33)t-=33; DY[k]+=(long)DR[n]*COSTAB[t]; DY[k+16]-=(long)DR[n]*SINTAB[t]; } DY[k]=DY[k]/16500;//正弦余弦表系数及采样点系数 DY[k+16]=DY[k+16]/16500; } DY[32]=sqrt(DY[1]*DY[1]+DY[17]*DY[17]);//基波幅值 } //------------------------------------------------------------- 嵌入式系统设计——数字时钟设计(动态显示) 一.技术要求: 利用单片机实验箱实现数字时钟显示分: 秒的数值。 进一步利用键盘实现时钟的设定功能(只使用4个建即可实现设定,即: 设定/返回,分/秒切换,增量和减量。 设定时相应的内容闪动显示)。 二.功能实现与系统结构: 利用单片机的定时器中断实现5毫秒的定时(动态显示处理),再利用软件对5毫秒定时进行计数。 计数值为TCT,满200时即为1秒,秒计数器SCT加1,同时TCT清零。 满60秒则分计数器MCT加1,同时秒计数器清零。 秒计数器改变同时刷新显示。 三.硬件设计: 见实验指导书电路图。 四.软件设计: 主程序初始化后即进入等待循环,所有时钟的处理均在定时器中断中完成。 动态显示频率为5*4=20毫秒(50Hz),这是比较合适的频率。 每次定时中断需要更新显示位,因此需要设置一个显示位计数器(0-3)。 LED数码管显示需要使用字模查表的方法实现。 先建立一个字模表: codeuchartab[]={0x18,……}; 定时器中断函数需要使用中断函数的说明,具体内容见教材108页。 voidtimer0(void)interrupt1// 参考程序流程框图见附图。 五.系统调试: 利用系统提供的调试工具实现所需要的功能。 具体程序可以参考教材中的例子(实验Y2与Y3)。 无设置功能的程序流程框图: 入口 开始 动态显示处理 TCT+1 时钟初始化 TCT>=200? 定时器初始化 SCT+1,TCT=0 原地踏步(停机) SCT>=60? MCT+1,SCT=0 MCT>=60? MCT=0 返回 程序中的一些细节需要仔细分析和调试。 程序的功能越多,发生问题(bug)的几率也越高, 因此需要通过调试发现和解决问题(Debug)。 开始 增加设置功能的程序流程框图: 时钟初始化 定时器初始化 键按下? 键抖动处理 设置? 设置切换 为了实现时钟设置功能,需要设置若干标志: 设置/运行标志,分/秒设置标志, 分/秒切换? 切换操作 以及闪烁显示的标志(位变量set,ms,df) 为了简化程序设计,在定时中断服务程序 增量? 中利用设置/运行标志实现分支处理。 增量操作 当该标志为0时,进行正常的时钟计数处理。 减量? 当该标志为1时,利用原来的5毫秒计数器 实现0.5秒闪烁处理。 减量操作 入口 中断服务程序流程框图如下: 动态显示处理 设置? 设置闪烁显示正常时钟显示 TCT+1 TCT=0,切换df TCT+1 TCT>=200? TCT>=100? 返回 SCT+1,TCT=0 分/秒? MCT+1,SCT=0 SCT>=60? df=1? df=1? 分消隐 MCT=0 MCT>=60? 秒消隐 分显示 秒显示 返回 单片机应用系统软件的开发过程与工具 单片机应用系统软件的开发过程大致如下: 1.编写程序,排除语法错误。 2.纯软件调试(无需仿真器)。 3.与硬件联合调试(需要仿真器)。 4.将程序写入CPU。 5.独立运行测试。 单片机应用系统的调试需要一些开发环境与工具的支持,如下图所示。 目标板 其中,目标板就是用户所设计的完整的单片机应用系统硬件电路板。 用户在开发工作站上完成程序的编辑、编译、软件仿真等工作,然后将程序下载到调试工具内,由调试工具操纵目标板运行程序。 同时将有关的运行信息传送到开发工作站,使用户能够看到有关的运行结果。 经过反复交互,完成DEBUG的过程。 调试工具(仿真器)有低档简易型和高档完整型之分。 前者需要占用目标板的部分资源,且一般无法对单片机的所有内部功能模块进行完整的仿真。 后者则不占用目标板的任何资源,且能够对单片机的运行是实现完整的仿真。 正因为如此,后者的成本也要高得多。 随着电子技术和计算机技术的进步,许多微处理器已经具有了ISP(InSystemProgramming)的功能。 在这个功能的支持下,配合一定的软件,可以使一些微处理器具备简单仿真器的功能。 在这样的系统中,可以不使用专用的调试工具完成一般系统的调试。 我们所设计的单片机实验系统就是这样的一个装置。 目标板 单片机 在这个系统中,在单片机的内部事先已经驻留了 一个监控软件(Monitor)。 这个监控软件能够通过 通信接口与上级计算机进行通信,接收上级计算机 发出的命令与数据(程序),并将单片机中的有关 信息传送回来。 这个监控软件需要占用单片机的存 储器空间,并占用单片机的某些内部资源: 程序ROM: BLOCK1的0000-0FFFH; BLOCK0的FC00-FFFFH; 内部数据RAM: 8字节堆栈空间。 串行通讯接口SPI及定时器T2。 SST系列单片机所具有的看门狗和软件复位功能。 大家在理解了这个应用系统的工作原理后,就应该明白一些简单的操作规程: 在调试状态时必须保证目标板的供电与联机正常;程序连续运行时不能在上级计算机上停止程序的运行;等等。 嵌入式系统设计——参数设置程序设计 智能化测控系统经常需要设置一些参数,例如前面的数字时钟就需要设置时间和日期、闹钟等。 参数的设置是通过人机接口实现的,显示器件为数码管或液晶屏。 为了减少操作按键的数量,通常采用按键复用以及增量调整的方法。 具体来说,不管多少个参数需要设置,通常情况下只要4个按键就可以实现。 这4个按键的功能(名称)为: 设置/取消、确认/转移、增量、减量。 通过一些实例(例如变频器)可以清楚地了解这4个按键是如何配合工作的。 参数设置程序需要解决几个方面的问题: 第一,正确识别按键,包括消除按键抖动和重键,有时还要识别组合键和超时未按键(空键)。 同时,还要兼顾不同操作者的操作习惯(按键速度)。 第二,不同的参数修改时有不同的上下限和缺省值。 第三,要能够快速修改参数,以便再短时间内完成参数数值的大范围变化修改。 第四,重要的参数进入设置界面需要输入密码,参数修改完成后需要确认操作才能认可。 键盘处理的程序设计要根据具体的应用和要求进行。 例如一个数字秒表,启动和停止秒表的按键处理就完全可以由主程序完成,且无需消除抖动处理。 前面的数字时钟程序键盘的处理也比较简单,可以在主程序中完成。 但是由于牵涉到动态显示,比较合理的处理方法是由主程序和中断服务程序共同完成键盘处理的所有功能。 而要实现象变频器这样复杂的功能,则需要仔细规划和分配主程序与中断服务程序的功能,并进行仔细和全面的调试,才能避免出现不希望的结果。 一.基本要求 设计一个参数设置功能的程序。 参数号为0-9,每个参数的缺省参数值、上限与下限由表格给定(可以如下设置)。 缺省值: 为参数号乘以10+5: 5,15,25,,,,; 参数上限: 100,110,120,,,。 参数下限: 0,10,20,30,,,,。 主程序为数字时钟程序。 按下设置键后进入设置状态,此时最左位显示参数号(带小数点),右边三位显示参数值。 按下增量及减量键后参数号变化,相应的参数值也随即显示出来。 按下确认键后参数值闪烁,此时再按下增量及减量键则参数值改变。 再次按下确认键后参数修改成功,参数值停止闪烁。 若此时按下设置键则参数不修改(取消修改),并返回原来的状态(参数值不闪烁)。 再次按下设置键则返回主程序(数字时钟)。 进一步的功能是实现参数值的快速修改。 在参数值修改状态下,按下增量及减量键超过2秒,参数值要能够快速变化(连续加减),直至上限或下限。 每次按键只要在2秒之内,数值只能变化1。 同时,若15秒未按键,则自动退出当前状态,直至返回主程序。 再进一步,将参数号增加到0-99,参数值的范围增加到4位数。 进入参数设置时先显示“Pr.+参数号”,按下确认键后再显示参四位参数数值(闪烁)。 快速增减时各位数变化达到10后,十位数快速增减;再次达到10后,百位数快速增减;直至最高位。 二.系统结构 这个程序的基本结构与数字时钟基本相同,只是键盘处理需要利用中断来实现(键盘扫描)。 考虑到人手的按键操作每秒钟不会超过10次,因此键盘扫描的频率可以确定为10Hz。 两次键盘扫描的间隔为100毫秒,这样也就顺便解决了消除按键抖动的问题。 为了实现键盘扫描的所有功能,必须设置相应的状态与变量: 1.状态标志、指针: 运行/设置/修改。 2.键盘处理的输入与输出变量,中间暂存变量 3.空键与长键的识别,必须增加相应的键盘扫描计数器。 4.各个按键的代码,空键与长键也有相应的键值代码。 程序的设计分为定时器中断与主程序两个部分。 键盘扫描与识别在中断服务程序中完成,然后将键值代码传送给主程序。 主程序根据键值代码再进行相应的操作与处理,这样两者相互配合完成参数设置的功能。 三.程序框图 开始 主程序流程框图: 时钟初始化 定时器初始化 键操作? 注意: 此处是判断中断服务程序是否 传送过来键值信息,并非直接判断按键。 操作1 键值1? 键值2? 操作2 ………… 操作N 键值N? 以上仅仅是粗略的框图,实际上每个操作还要根据情况再进行细化。 注意在每个操作完成后必须将传送键值的变量清除,否则会重复执行操作。 键盘扫描程序与动态显示时钟程序统一使用5毫秒的定时器中断,在100毫秒时执行键盘扫描即可。 在程序中采用的符号定义如下: kin: 键盘输入变量,能够表示所有按键状态的数值。 kout: 键盘输出变量,将识别后的键值传送给主程序。 ktmp: 中间暂存变量。 Kcnt: 键盘扫描计数器,用于空键与长键的识别。 按键代码如下: 设置/取消: KSET,确认: KENT,增量: KINC,减量: KDEC,空键: KEMP。 中断服务程序流程框图如下(仅表示出键盘扫描部分,需要仔细分析与理解): 键盘处理入口 kin=空? 无键按下YN有键按下 ktmp=空? ktmp=空? YNY 无按键N ktmp=kin kcnt=0 kcnt+1 kcnt+1 键在2秒内松开 kout=ktmp ktmp=空 kcnt=0 Kcnt>40? Kcnt>200? Kout=KEMP kcnt=0 Y 是否+/-? kout=KINC/KDEC; kc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 测控 系统