微机控制技术项目教程教学课件作者汤平课件项目五微机控制算法应用

上传人:E**** 文档编号:90925549 上传时间:2019-06-20 格式:PPT 页数:99 大小:6.90MB
返回 下载 相关 举报
微机控制技术项目教程教学课件作者汤平课件项目五微机控制算法应用_第1页
第1页 / 共99页
微机控制技术项目教程教学课件作者汤平课件项目五微机控制算法应用_第2页
第2页 / 共99页
微机控制技术项目教程教学课件作者汤平课件项目五微机控制算法应用_第3页
第3页 / 共99页
微机控制技术项目教程教学课件作者汤平课件项目五微机控制算法应用_第4页
第4页 / 共99页
微机控制技术项目教程教学课件作者汤平课件项目五微机控制算法应用_第5页
第5页 / 共99页
点击查看更多>>
资源描述

《微机控制技术项目教程教学课件作者汤平课件项目五微机控制算法应用》由会员分享,可在线阅读,更多相关《微机控制技术项目教程教学课件作者汤平课件项目五微机控制算法应用(99页珍藏版)》请在金锄头文库上搜索。

1、项目五 微机控制系统算法应用,【项目导读】 算法(Algorithm) 是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。好的算法具有正确性、可读性、健壮性、高效率和低储存量需求等特点,在程序设计中采用好的算法,可以提高程序的执行效率。通过本项目,理解微机控制系统软件设计过程中常用的算法原理,初步学会在软件设计过程中应用常用的算法,提高程序运行的效率。 【项目任务单】 1、编写数字PID增量式控制程序。 2、编写数字PID位置式控制程序。,5.1 查表与排序,5.1.1查表 微机控制控制系统中,过程物理参数的变化是以数字量的形式反映到计算机中来的。每当采集到

2、一个新的数据时,如果要了解被控量的变化情况,则需要进行参数计算。 参数计算是比较复杂的。当用某种检测器件对某种物理参数进行检测时,如果参数的变化规律可以用数学表达式来表示,这时,参数的计算虽然可以用计算法进行,但由于工程实际中许多检测器件存在非线性特性,对参数进行在线计算,不仅会影响控制系统的实时性,而且当计算复杂时,计算法程序的编写也是非常麻烦的事情;特别是对一些难以找到计算公式描述的物理参数,计算法就显得无能为力,而这时,查表法就能够很好地解决这个问题。 所谓查表法,就是在计算机的存储单元内,存放反映输入(物理参数) 输出(检测信号或数字量)对应关系(或结合进一步计算)的数据表格;每当计算

3、机通过过程通道采集到一个新的数据时,通过对该数据表的快速查找,即可获得被控物理量的当前准确值,从而掌握其变化情况,以采取相应的控制措施。 在数据查找方法中,会用到关键字(keyword)这个术语。 关键字是唯一标识数据元素、记录的数值(或名字)。譬如每个人的身份证号码,就可以作为公民的关键字。因为利用身份证号码,可以查找这个人的性别、年龄、住址、单位、职业等情况。数据查找的过程,就是将待查关键字与实际关键字比较的过程。,5.1 查表与排序,5.1.1查表 查表法中,常用的有顺序查表法、折半查表法等,下面介绍这两种方法。 1、 顺序查表法 顺序查表是一种最简单的查找方法,对数据表的结构无任何要求

4、。查找过程如下: 从数据表开始,依次取出每个记录的关键字,再与待查记录的关键字比较。如果两者相等,就表示查到了关键字。如果整个表都查找完毕仍未找到所需记录,则查找失败。 顺序查找速度较慢。对于由n个记录所组成的表,平均查找次数为(n+1)/2。该法只适用于数据记录个数比较少的情况。 2、 折半查表法 对于按关键字大小顺序排列的数据表,可以采用折半查表法。 假设在一个按照关键字由小到大顺序排列的表中,要查一个关键字为Ki的记录。采用折半查表法,进行查找的过程如下: 首先,选取处于表中间的那个记录的关键字与Ki比较:如果Ki大于该关键字,那就再取处于表后半部分中间的那个记录的关键字,与Ki进行比较

5、;如果Ki小于该关键字,那就再取处于表前半部分中间的那个记录的关键字,与Ki进行比较。如此重复进行,直到找到所需记录。如果没有,则查找失败。,5.1 查表与排序,5.1.1查表 查表法中,常用的有顺序查表法、折半查表法等,下面介绍这两种方法。 例如,假设有8个数据,它们的关键字的依次排列为: 11 13 25 27 39 41 43 45 现要查找关键字为41的数据。 用符号L、H、M分别表示查找段的段首、段尾和中间关键字的序号。则查找过程如下: 折半查表法的查找速度比顺序查表法快,但其前提是:应事先按关键字的大小顺序将数据表排列好。,5.1 查表与排序,5.1.1查表,案例:折半查找程序 #

6、include void main() unsigned int a10= 0,6,12,16,23,56,80,100,110,115; int n,low,mid,high,found; low=0; high=M-1; found=0; n=56; while(lowamid) low=mid+1; else high=mid-1; if (found=1) printf(“The index of %d is %d“,n,mid); else printf(“Have not fund!%d“,n); ,5.1 查表与排序,5.1.1查表,程序调试: (1)打开Keil c软件,新建工

7、程项目,新建程序文件,输入以上程序,将程序存盘为seek.c,将程序加入项目中,编译。 (2)单击Debug菜单下的Start/stop debug session启动调试,按F11键单步运行。会看到如图5-1所示的局部变量(local)对话框中,各个变量的变化。当程序运行至if (found=1)语句。n=0x38,mid=5,found=1,表示找到变量56,位置数组下标5(数组的第6个元素)。 (3)如果要查找其它的数,则修改n值即可。,图5-1 折半查找法调试过程(显示局部变量值),5.1 查表与排序,5.1.1查表,5.1.2排序 在微机控制技术程序设计过程中,常常需要对数据进行排序

8、。所谓排序,就是对数据按照关键字的大小进行排列,由小到大排列为升序、由大到小为降序。排序的算法较多,选择排序、插入排序与气泡排序是三种基本排序方式,算法比较简单,但是排序效率不高,此外还有快速排序、堆排序等比较复杂的算法,排序效率较高。下面仅介绍选择排序算法,其它排序算法本书不介绍。 选择排序算法:将要排序的对象分作两部份,一个是已排序的,一个是未排序的,从后端未排序部份选择一个最小值,并放入前端已排序部份的最后一个,例如:,5.1 查表与排序,5.1.1查表,5.1.2排序 排序前:70 80 31 37 10 1 48 60 33 80 1 80 31 37 10 70 48 60 33

9、80 选出最小值1 1 10 31 37 80 70 48 60 33 80 选出最小值10 1 10 31 37 80 70 48 60 33 80 选出最小值31 1 10 31 33 80 70 48 60 37 80 1 10 31 33 37 70 48 60 80 80 1 10 31 33 37 48 70 60 80 80 1 10 31 33 37 48 60 70 80 80 1 10 31 33 37 48 60 70 80 80 1 10 31 33 37 48 60 70 80 80 ,5.1 查表与排序,5.1.2排序,案例:选择排序程序 #include unsi

10、gned int a10= 12,0,6,16,23,56,80,100,110,115; void main() unsigned int i,j,min,temp; for(i=0;iaj) /* 把剩下元素中最小的那个放到ai中 */ temp=ai; ai=aj; aj=temp; printf(“Select sort ok!“); ,5.1 查表与排序,5.1.2 排序,程序调试: (1)打开Keil c软件,新建工程项目,新建程序文件,输入以上程序,将程序存盘为sort.c,将程序加入项目中,编译。 (2)单击Debug菜单下的Start/stop debug session启动

11、调试,按F11键单步运行。运行到void main()之前,展开如图5-2所示的局部变量(local)对话框中,观察数组a各个元素被赋初值。 当程序运行至printf(“Select sort ok!“);语句,排好序的数据如图5-3所示(改变显示值的进制,右键单击数组值区域(D:0x22,在右键菜单Number Base中选择(Decimal)。,图5-2 排序前的数据(十进制形式)图5-3 排序后的数据(十进制形式),5.2 数据极性处理和字长预处理,在微机控制系统中,通过检测元件所检测到的被控信号,例如电压信号,有是单极性的,也有是双极性的;而在自动控制系统内,由设定值与该检测信号所构成

12、的偏差信号,又一定是双极性的。 在微机控制系统中微机通过A / D转换所采集到数字量,它除了反映对应信号的幅值外,也反映出信号的极性,因此,这些数据实际上也是带极性的。在计算机中,必须根据具体情况(是单极性输入或是双极性输入)对这些数据作适当处理,也就是要对数据进行“预处理”,才能保证偏差值的正确性。 1、对双极性输入信号的数据预处理 在计算机控制系统中,双极性信号经A / D转换后,所得到的数字量常用偏移二进制码表示。 假设信号的变化范围为-5V +5V,该信号经A / D转换后所得到的偏移二进制码为00H FFH 。其中,数字量的最高位D7表示信号的极性: 当D7=0时,表示负极性,即数字

13、量00H 7FH表示在 -5V, 0V 范围的模拟信号;当D7=1时,表示正极性,即数字量80H FFH表示 0V , +5V 范围的模拟信号。 设预处理规则为: 如果偏差值的绝对值大于80H,则偏差信号取最大值(信号极性为负,取00H ;信号极性为正,取FFH );否则,将运算结果直接作为偏差信号。,5.2 数据极性处理和字长预处理,2、对单极性输入信号数据的预处理 在有些控制系统中,输入信号和给定信号是单极性的,但相减之后所得的偏差值就是双极性信号。 单极性的信号常用无符号数值码表示。0 +5V的同极性信号,经8位A / D转换后,对应的数字量为00H FFH。 偏差值由于是双极性的,因此

14、,用偏移二进制码来表示它。例如,双极性信号- 5V +5V,对应的数字量为00 FFH 。 这类系统的数据预处理与双极性输入系统的方法相同,由于系统的输入是单极性的,因此不必判断极性,只需根据偏差值的大小和符号判断即可。,5.2 数据极性处理和字长预处理,3、 输入输出数据字长的预处理 在计算机控制系统中,各组成部分经常会出现数据字长不一致的情况。 例如,在有的计算机控制系统中,采用12位A / D转换器采样数据,而输出采用8位D/A转换器;又例如,在有的计算机控制系统中,使用8位A / D转换器进行采样,而为了提高计算的精度,却采用双字节运算程序计算, 而输出却采用10位D / A转换器。

15、为了满足不同的精度要求,采样数据在经数字滤波、标度变换和控制量计算之后,必须对数字量的位数加以处理。,5.2 数据极性处理和字长预处理,3、 输入输出数据字长的预处理 (1)输入位数大于输出位数 当输入器件精度比输出器件精度高时,例如采用10位A / D转换器采样,而把处理后10位二进制数通过8位D / A转换器输出,就会出现输入位数大于输出位数的情况。 输入位数大于输出位数的处理方法, 就是忽略10位数的最低两位。如:10位A / D转换器的输入值为0011111010,处理后的8位D/A转换器的输出值为 00111110 。 由于10位A/D转换器的采样精度要比8位A / D转换器高的多,

16、因此,虽然舍去了最低的两位数会产生一定的误差,但这一误差仍比采用8位输入8位输出的系统的误差小。 为了提高转换精度,我们可以用“四舍五入”的方法对最低的两位进行转换。转换的方法:将移位前的数据加上二进制数000000010再进行移位处理。这样,只有最低两位数为10和11时,才能改变最高8位的值。 当A / D转换后的10位数字量为1111111111和1111111110时,采用“四舍五入”方法处理后的结果为0000000,显然,这一结果是错误的。 解决这一问题的方法是:在加入数据0000000010后,再检查是否有溢出:如果有,则可将移位的结果减1,这就可保证转换结果的正确性了。,5.2 数据极性处理和字长预处理,3、 输入输出数据字长的预处理 (2)输出位数大于输入位数 当输入器件精度比输出器件精度低时,如采用8位A / D转换器采样,而通过10位D / A 转

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号