已阅读5页,还剩78页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章 软件设计技术,7.1 软件的总体功能,2,软件运行于微处理器,其功能由微处理器来决定。 微处理器功能由系统的功能结构、与微处理器相连的三个子系统和控制算法所决定。 这些功能也可以分成两部分:控制算法功能和一般控制功能,3,软件功能的实时性,意义:强调在规定的时间里执行相应的操作 ,误时操作会导致严重的后果。 软件的实时性要满足两方面的要求:一是实时动作响应。二是实时数据处理。,4,72 机电一体化系统软件的任务和任务管理,为了便于分析和编程,把各种软件功能化分为小的、单元式的子功能。软件功能是由子功能某种方式组合在一起的。 由此,从学术的角度,把子功能提练为任务(类似:进程),软件功能就是任务的组合。 软件的编程就包含两个技术,任务的编程和任务的管理。,5,任务的划分原则,1每个任务必须是独立的; 2 每个任务不再可分; 3 所有任务的集合能满足整个系统的功能要求。 4 划分得到的任务常常按程序运行方式来加以分类描述,如驱动程序、初始化程序、中断程序、控制算法程序、显示程序和键盘(或触摸)输入程序等。 5 还可以按分层结构来理解。,6,基于任务的编程方法,1 前后台编程方法:如果编程人员将全部程序都自行编制,即把任务和任务的管理看做后台程序,中断处理看做前台程序,就是前后台程序编程方法。这是初级的、然而应用很多的编程方法。 2.操作系统编程方法:如果任务的管理有通用的、现成的程序,即操作系统,而编程人员只编制任务程序,就称为操作系统编程方法。但是有时也需要 编写驱动程序。,7,3.设定式编程方法:这是一种近几年刚刚出现的编程方法,如联发科技推出的MTK平台的软件编程方法。任务和任务的管理均已完成,方便地提供给了开发人员。设定式编程方法编程简单、节省开发时间、程序系统稳定可靠和功能强大,是今后程序编制方法的发展方向。,73 机电一体化系统的程序设计方法,731 程序设计方法,9,1确定程序功能:根据控制系统设计方案确定控制软件功能,根据系统的功能结构确定前面没有提到的其它软件功能。 2划分任务:将各类软件功能划分成具体的任务。 3确定软件编程要素:任务的组合方式 和编程方法 使用和前边类似的产生和选择方法。(产生与选择),10,732 模块化编程技术,应用领域:单片机、操作系统和S7-300 分成不同的程序,即不同的模块 由单独的程序(头文件)组合到一起。有全局变量问题 优点:模块不用更改,结构清晰 区分:子程序在一个程序。,733 运水机器人编程实例,1 软件功能,12,运水机器人功能结构(用文字简单叙述),主要事件是将水装入容器、微处理器控制电机驱动轮式行走机构运输容器和从容器卸水。使用锂电池作为能源输入,分别为驱动电机和电控部分提供电能,有克服摩擦力和电气部件能耗等能量损失。有循迹和开关机等输入信号送微处理器处理,显示水量和时间等。,13,外围部件软件功能,使用C8051F020单片机。控制162字符点阵液晶显示器显示水容量和运水时间。以PWM方式控制电机驱动芯片L298N驱动两路直流减速电机,以开关方式控制微型继电器卸水。对循迹开关信号进行采集。,14,控制算法功能,对运水机器人行走轨迹进行闭环控制,采用比例(P)调节。,15,任务划分,任务划分为:初始化配置(config),延时(delay1ms),PCA初始化(PCA_Init ),产生PWM脉宽调制的两个任务(PWM0_set、PWM1_set),电机正反转及速度的控制的六个任务(L_FORD、R_FORD、L_BACK、R_BACK、L_BREAK、 R_BREAK),八路寻迹(Founding_Line),给lcd送命令(sendc),给lcd送数据(sendd),显示地址定位函数(lcd_pos),lcd初始化函数(lcd_ini),第一次水量显示(lcddisplay1),第二次水量显示(lcddisplay2),显示时间(lcddisplay3)。,16,任务的组合,在八路寻迹(Founding_Line)中根据取入的八路传感数字信号调用产生PWM脉宽调制的两个任务(PWM0_set、PWM1_set)和电机正反转及速度的控制的六个任务(L_FORD、R_FORD、L_BACK、R_BACK、L_BREAK、 R_BREAK),并按控制问题的要求调用第一次水量显示(lcddisplay1)、第二次水量显示(lcddisplay2)和显示时间(lcddisplay3)。,17,第一次水量显示(lcddisplay1)、第二次水量显示(lcddisplay2)和显示时间(lcddisplay3)中使用给lcd送命令(sendc)、给lcd送数据(sendd)和显示地址定位函数(lcd_pos)。 加入延时(delay1ms)以保证外围部件的响应。 任务管理进行初始化配置(config)、PCA初始化(PCA_Init )、电机正转(L_FORD、R_FORD)和调用八路寻迹(Founding_Line)。,18,编程方法,使用前后台编程方法。,19,5具体编程(1)资源分配,P00电机 1 PWM输出 左轮 P01电机 2 PWM输出 右轮 L_DIR1A=P22左轮电机方向控制 L_DIR1B=P21左轮电机方向控制 R_DIR1A=P25右轮电机方向控制 R_DIR1B=P26右轮电机方向控制,20,P10-水泵控制 P11蜂鸣器控制 PCA0CPM0 电机 1 PWM 输出,工作在8位定时器模式,允许比较器匹配中断,每次中断加载新的比较值,实现电机输出的脉宽控制。 PCA0CPM1 电机 2 PWM 输出,工作在8位定时器模式,允许比较器匹配中断,每次中断加载新的比较值,实现电机输出的脉宽控制。 P6.0-P6.7;传感器接口 lcdrw=P32;-读写控制5 lcdcs=P37;-E使能 6 lcdrs=P36;-命令数据选择控制 4,21,传感器规定,前四个传感器在低四位,后四个传感器在高四位 左右各两个传感器 不压黑线为低电平,头:低四位,尾:高四位,22,记录行走情况,遇垂直黑线次数:int fb=0 微偏:0100/0010 中偏:1100/0011 大偏:1000/0001,23,(2)引用与定义,#include #include #include typedef unsigned char uchar; typedef unsigned long ulong; typedef unsigned int uint; #define L_MOTO_BREAK L_DIR1A=L_DIR1B #define L_MOTO_BACK L_DIR1A=0;L_DIR1B=1 #define L_MOTO_FORD L_DIR1A=1;L_DIR1B=0 #define R_MOTO_BREAK R_DIR1A=R_DIR1B #define R_MOTO_BACK R_DIR1A=0;R_DIR1B=1 #define R_MOTO_FORD R_DIR1A=1;R_DIR1B=0,24,sbit L_DIR1A=P22; sbit L_DIR1B=P21; sbit R_DIR1A=P25; sbit R_DIR1B=P26; sbit P1_0=P10; sbit P1_1=P11; sbit P1_2=P12;,25,int fb=0;/控制前后方向 sbit lcdrw=P32;/5 sbit lcdcs=P37;/6 sbit lcdrs=P36;/4 void lcddisplay3(void); void lcddisplay1(void); void lcddisplay2(void);,26,此部分包括头文件的定义、宏定义、位定义等,例如定义#define L_MOTO_BREAK L_DIR1A=L_DIR1B,即表示在程序中以L_MOTO_BREAK来表示L_DIR1A=L_DIR1B;L_DIR1A代表P22口,表示左轮电机方向的控制;L_DIR1B代表P21口,亦表示左轮电机方向控制;当L_DIR1A=L_DIR1B,即L_DIR1A与L_DIR1B都为1或都为0时,即以L_MOTO_BREAK来表示。下面还有液晶显示屏的I/O配置以及液晶显示屏的显示等。,27,(3)初始化配置, 以保证单片机控制功能工作,void config (void) WDTCN = 0x07; WDTCN = 0xde; /看门狗禁止 WDTCN = 0xad; /看门狗禁止 XBR0 = 0x50; /配置交叉开关, XBR1 = 0x00; XBR2 = 0x40; /交叉开关允许 P0MDOUT=0x00; /p0.4p0.5为推挽输出,28,P1MDOUT=0xff; P2MDOUT=0xff; P3MDOUT=0xFF; P74OUT=0x00; /p4-p6 P6=0xff; OSCXCN = 0x00; OSCICN = 0x16; /采用内部晶振,频率为 8MHZ ,29,此部分主要进行初始化配置,以保证单片机的控制功能 WDTCN即为看门狗定时器控制寄存器,此处通过WDTCN各位的设置使看门狗禁止 XBR0、XBR1、XBR2 是用来配置交叉开关的特殊功能寄存器。XBR0 = 0x50即把XBR0的位6和位4置1,表示PCA0外部计数器输入连接端口引脚及CEX0和CEX1链接两个端口引脚;XBR1 = 0x00表示此特殊功能寄存器各位全置0,即各使能位不连接端口引脚;XBR2 = 0x40表示位6置1,即交叉开关使能。,30,P0MDOUT是端口0输出方式寄存器,P0MDOUT=0x00表示端口引脚的输出方式为漏极开路方式。 P1MDOUT、P2MDOUT、P2MDOUT分别是端口1、2、3输出方式寄存器,各端口设置为0xff表示端口引脚的输出方式为推挽方式。 P74OUT是端口47的输出方式寄存器,各位置0即表示输出方式配置为漏极开路输出方式 此处表示采用内部振荡器作为系统时钟,OSCICN = 0x16表示对内部振荡器使能,并使内部振荡器典型频率为8MHZ。,31,(4) 延时,void delay1ms(uint time)/延迟子程序0.5MS uint ii; uint jj; for (ii=0;iitime;ii+) for(jj=0;jj4000;jj+) ; ,32,(5)PCA初始化,void PCA_Init() PCA0MD=0x08; /PCA采用系统时钟,且PCA溢出中断禁止 PCA0CN=0x40; /启动PCA计数器 void PCA0_Init() PCA0CPM0=0x42;/CEX0为8位PWM输出模式 PCA0CPM1=0x42; /CEX1为8bit PWM输出模式 ,33,此部分即表示对PCA进行初始化 PCA0MD即为C8051F020内部集成的可编程技术阵列PCA0的方式选择寄存器,PCA0MD=0x08即表示选择系统时钟作为计数脉冲源且PCA0定时器/计数器溢出中断禁止。PCA0CN即为PCA控制寄存器,PCA0CN=0x40表示允许PCA0定时器/计数器。PCA0CPMn表示PCA0捕捉/比较寄存器,PCA0CPMn=0x42表示比较器允许,并使用8位PWM输出方式,34,(6) 产生PWM脉宽调制,void PWM0_set(uchar val) /高电平占空比为val/256 PCA0CPH0=val+1; void PWM1_set(uchar val) /高电平占空比为val/256 PCA0CPH1=val+1; ,35,此部分用来产生PWM脉宽调制 此语句表示对val按位取反再加1,val越大,则val越小,即PCA0CPH0也越小,所以高电平占空比就越大,即val与高电平占空比成正比;,36,(7)电机正反转及速度的控制,void L_FORD(uchar L_spe_ford) L_MOTO_FORD; PWM0_set(L_spe_ford);/电机速度 void R_FORD(uchar R_spe_ford) R_MOTO_FORD; PWM1_set(R_spe_ford);,37,void L_BACK(uint L_spe_back) L_MOTO_BACK; PWM0_set(L_spe_back); void R_BACK(uint R_spe_back) R_MOTO_BACK; PWM1_set( R_spe_back); void L_BREAK() L_MOTO_BREAK; void R_BREAK() R_MOTO_BREAK; ,38,(8)八路寻迹,void Founding_Line() if(P6,39,P6&0x0F进行按位与运算作用是屏蔽后四路寻迹,避免小车前进过程中后四路寻迹对小车路径的影响。按位与运算,即1&0=0&1=0&0=1,1&1=1,假如P6口的返回值为 00100100,与0x0F(即00001111)按位与的结果为00000100,即P6口前四路返回值不变,后四路返回值全变为0,也即屏蔽掉后四路寻迹的作用。然后判断(P6&0x0F)=0x0F,如果成立,则执行下面的程序,否则跳到后面的else语句。,40,if(fb=2) P1_0=1; lcddisplay1(); delay1ms(210);/延时4s P1_0=0; delay1ms(25); ,41,fb=2表示小车第二次遇到黑线停, P1_0=1表示水泵放水,然后进行第一次液晶显示屏显示,延时4s, P1_0=0表示放水停止,关闭水泵,然后再进行延时,42,if(fb=4) P1_0=1; lcddisplay2(); delay1ms(210);/延时4s P1_0=0; P1_1=1; lcddisplay3(); ,43,当满足fb=4时,执行下面的程序,先进行水泵放水,然后进行第二次液晶显示屏显示,延时4s,关闭水泵, P1_1=1表示蜂鸣器响,然后再进行延时,44,if(fb=1)|(fb=3) P1_2=1; delay1ms(600); P1_2=0; delay1ms(25); R_FORD(229); delay1ms(1); L_FORD(236); delay1ms(50);/延时0.5s ,45,当fb=1或者是fb=3时,小车回到起点位置, P1_2=1表示对小车进行注水,然后延时一段时间,注水停止,再延时25ms,小车前进,46,if(fb=2) L_BACK(240); R_BACK(249); delay1ms(50);/延时0.5s ,47,else if(fb=1)|(fb=3) if(P6=0x00) R_FORD(229); L_FORD(236); ,此语句与前面if(P6&0x0F)=0x0F)对应,当不满足条件时,执行下面的程序,48,P6=0x00,用二进制表示即为00000000,即各路传感器返回值均为0,表示8路传感器均未压黑线,小车前进未跑偏,49,if(P6 当P6=0x02,用二进制表示为00000010时,即前四路传感器的右边第二位压黑线,此种情况下即表示小车左小偏,然后重新调整PWM值对小车进行调整,50,if(P6 ,51,当P6=0x04,用二进制表示为00000100时,即前四路传感器的右边第三位压黑线,此种情况下即表示小车右小偏,然后重新调整PWM值对小车进行调整,52,if(P6 ,53,(P6&0x04)&(P6&0x08)即表示前四路寻迹的右边第三、四位寻迹压黑线,此种情况下即表示小车右中偏,然后重新调整PWM值对小车进行调整,54,if(P6 (P6&0x02)&(P6&0x01)即表示前四路寻迹的右边第一、二位寻迹压黑线,此种情况下即表示小车左中偏,然后重新调整PWM值对小车进行调整,55,if(P6 ,56,当P6=0x08,用二进制表示为00001000时,即前四路传感器的右边第四位压黑线,此种情况下即表示小车右大偏,然后重新调整PWM值对小车进行调整,57,if(P6 当P6=0x01,用二进制表示为00000001时,即前四路传感器的右边第一位压黑线,此种情况下即表示小车左大偏,然后重新调整PWM值对小车进行调整,58,if(fb=2) if(P6=0x00) L_BACK(240); R_BACK(250); if(P6 ,59,P6=0x00,用二进制表示即为00000000,即各路传感器返回值均为0,表示8路传感器均未压黑线,小车后退未跑偏 当P6=0x40,用二进制表示为01000000时,即后四路传感器的右边第三位压黑线,此种情况下即表示小车右小偏,然后重新调整PWM值对小车进行调整,60,if(P6 ,61,当P6=0x20,用二进制表示为00100000时,即后四路传感器的右边第二位压黑线,此种情况下即表示小车左小偏,然后重新调整PWM值对小车进行调整 (P6&0x40)&(P6&0x80)即表示后四路寻迹的右边第三、四位寻迹压黑线,此种情况下即表示小车右中偏,然后重新调整PWM值对小车进行调整,62,if(P6 ,63,(P6&0x20)&(P6&0x10)即表示后四路寻迹的右边第一、二位寻迹压黑线,此种情况下即表示小车左中偏,然后重新调整PWM值对小车进行调整 当P6=0x80,用二进制表示为10000000时,即后四路传感器的右边第四位压黑线,此种情况下即表示小车右大偏,然后重新调整PWM值对小车进行调整,64,if(P6 ,65,当P6=0x10,用二进制表示为00010000时,即前四路传感器的右边第一位压黑线,此种情况下即表示小车左大偏,然后重新调整PWM值对小车进行调整,66,循迹反馈形成分析,b=1,b=2,b=3,b=4,67,垂线 检测,偏移 检测,占空 比,L298 驱动,车轮,轨迹,TCRT 循迹,68,(9)LCD控制,void sendc(uchar c)/给lcd送命令 P4=c; lcdrs=0;/RS=L lcdrw=0;/RW=L EA=0;/关中断 delay1ms(1); lcdcs=0;/E的高脉冲 lcdcs=1;/E的高脉冲,69,delay1ms(1); lcdrw=1; P4=0xff;/先置1,后读取 delay1ms(1); EA=1; /开中断 ,70,void sendd(uchar c)/给lcd送数据 EA=0; P4=c; lcdrs=1; lcdrw=0; delay1ms(1); lcdcs=1; lcdcs=0; lcdcs=1; delay1ms(1);,71,lcdrw=1; P4=0xff;/先置1,后读取 lcdrs=0; delay1ms(1); while(P4=0x80); lcdcs=0; lcdcs=1; EA=1; /* if(c=c) delay1ms(3);*/ ,72,void lcd_pos(uchar pos)/显示地址定位函数 sendc(pos|0x80); ,73,void lcd_ini(void)/lcd初始化函数 delay1ms(100); lcdcs=1; delay1ms(5); lcdrs=0; delay1ms(5); lcdrw=0; delay1ms(5);,74,sendc(0x38);/8位,2行,5*7字体 delay1ms(30); sendc(0x38);/8位,2行,5*7字体 delay1ms(30); sendc(0x38);/8位,2行,5*7字体 delay1ms(30); sendc(0x08);/显示开,光标关;不闪 delay1ms(30); sendc(0x01);/清屏 delay1ms(30);,75,/ sendc(0x01);/清屏 / delay1ms(30); sendc(0x06);/ delay1ms(30); sendc(0x0C);/ delay1ms(30); ,76,(10)第一次显示,void lcddisplay1(void)/显示主函数 uchar i=0; uchar line1=“once:550ml“; uchar line2=“all:550ml“; sendc(0x01); i=0; lcd_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 租赁租房合同范本格式锦集五篇
- 公园项目可行性研究报告
- 粮仓房项目可行性研究报告
- 年产5000吨中药饮片生产线技改扩建项目可行性研究报告59
- 教师读书心得500字大全5篇
- 区域内行业保护合同
- 新生军训总结讲话稿5篇
- 青春梦想演讲稿格式(素材下载7篇)
- 安全心得100字简单(8篇)
- 法律事务所公文及督办管理流程
- GB/T 42455.2-2024智慧城市建筑及居住区第2部分:智慧社区评价
- 2024年认证行业法律法规及认证基础知识
- YYT 0653-2017 血液分析仪行业标准
- 刑事受害人授权委托书范本
- 《文明上网健康成长》的主题班会
- 框架结构冬季施工方案
- 医疗技术临床应用及新技术新项目管理制度考核试题及答案
- 装配式挡土墙施工方案(完整版)
- 防炫(AG工艺)玻璃屏项目可行性研究报告模版
- 既有玻璃幕墙安全性鉴定技术规程
- 小学汉语拼音字母表卡片自制(四线格版)Word编辑
评论
0/150
提交评论