北京科技大学一队技术报告_第1页
北京科技大学一队技术报告_第2页
北京科技大学一队技术报告_第3页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.第一届飞思卡尔杯全国大学生智能汽车邀请赛技技 术术 报报 告告学 校:科技大学队伍名称:科技大学一队参赛队员:肖玮 艾宁 谭启寅带队教师:立.关于技术报告和研究论文使用授权的说明 本人完全了解第一届飞思卡尔杯全国大学生智能汽车邀请赛关保存、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关容编纂收录在组委会出版论文集中。参赛队员签名: 带队教师签名: 日 期: .引言首届飞思卡尔杯全国大学生智能汽车竞赛在清华大学的承办下终于落户中国,本届大赛采用邀请赛的方式

2、,邀请了国具有控制科学与工程学科博士授予点高校含港澳50 余所,我们科技大学作为参赛方,有幸参加了此次飞思卡尔智能汽车邀请赛。这份技术报告中,我们小组通过对整体方案、电路、算法、调试、车辆参数的介绍,详尽地阐述了我们的思想和创意,具体表现在电路的创新设计,以及算法方面的独特想法,而对单片机具体参数的调试也让我们付出了艰辛的劳动。这份报告凝聚着我们的心血和智慧,是我们共同努力后的成果。在准备比赛的过程中,我们小组成员涉猎控制、模式识别、传感技术、汽车电子、电气、计算机、机械等多个学科,这次磨练对我们的知识融合和实践动手能力的培养有极大的推动作用,在此首先要感清华大学,感他们将这项很有意义的科技竞

3、赛引入中国;更要感科技大学相关学院对此次比赛的关注及投入,我们能有今天这样的成果离不开学院的大力支持及指导教师悉心的教诲;还要感的是和我们一起协作的队员们,协助,互促,共勉使我们能够走到今天。.目录引言 1目录 2第一章、方案设计 4第二章、机械局部 52.1 传感器的设计安装 62.2 制动舵机传动机构设计 72.3 光电编码器的安装 72.4 系统电路板的固定和连接 8第三章、电路设计说明 93.1 主控板的设计 93.1.1 电源管理模块 93.1.2 电机驱动模块 103.1.3 控制模块 103.1.4 接口模块 113.1.5 信号采集模块 113.2 传感器电路设计说明 12第四

4、章、智能车控制软件设计说明 134.1 主程序流程图 134.2 程序的初始化 144.3 位置速度控制 154.4 中断处理程序 16-. z4.5 PID 控制程序 17第五章、开发工具、制作、安装、调试过程说明 185.1 开发工具 185.2 调试过程 18第六章、模型车的主要技术参数说明 196.1 智能车外形参数 196.2 电路局部参数 196.3 除了车模原有的驱动电机、舵机之外伺服电机数量 196.4 传感器种类及个数 19结论 20参考文献 21附录 22.第一章、方案设计系统采用主办方提供的飞思卡尔 16 位微控制器 MC9S12DB128 作为核心控制单元,信号由安装在

5、车前部的光电传感器采集,经过选频,滤波电路传入MCU,MCU 对信号进展处理后,由 PWM 发生模块发出三路 PWM 波,分别对转向主舵机,电机,伺服电机进展控制,完成智能车的转向,前进,制动的功能。在智能车后轮上安有光电编码器,采集关于车轮转速的脉冲信号,经由 MCU 进展PID 计算后自动调节对电机的 PWM 波的占空比,控制车速度。图 1 系统的总体控制框图MC9S12DG128传感器信号转向主舵机智能车前轮电机智能车后轮伺服电机机械制动装置光电编码器键盘33886 驱动电路.第二章、机械局部我们对机械构造的要:简单而高效。我们在不断的尝试后确定了以下的设计方案: 图 2.1 智能车器件

6、布局图2.1 传感器的设计安装为实现自动行驶中黑色标识线的跟踪,在车体前部安装了一排光电检测装置来判断车体相对于黑线的位置,作为反应信号提供应控制器;控制器再据此来调整左、右轮转速,使得车体处于黑线正中行进,传感器排列方式见图2.2。比赛的地面是白色的,为了尽可能防止比赛场地的灯光等影响,我们选择的光电传感器是用可见光做光源,对于白色地面和黑线的反射率有明显的区别。传感器排布我们选择主体为一字形排布的方法,共用 10 个传感器,两两距离如图 2.2 所示。图 2.2 传感器布局图实物如图 2.3 所示。.图 2.3 传感器成品示意图2.2 制动舵机传动机构设计车以高速进入弯道时容易冲出赛道,

7、PID 调速装置与 33886 的反向制动虽然可以使速度降下来,但还是不理想,所以我们用一个伺服电机进展刹车,如图 2.4 所示。图 2.4 伺服电机位置示意图2.3 光电编码器的安装在车的调试过程中,由于电源等原因,车的实际速度与程序所给的值往往有区别,于是,我们采用了光电编码器。光电编码器的安装如图 2.5。通过光电编码器,程序可以调整电机的 PWM 波来控制车速。图 2.5 光电编码器位置示意图-. z2.4 系统电路板的固定和连接在电路板的安装这局部,我们考虑到构造的稳定性,以及规则中对车辆尺寸的限制,最终决定采用高架、立体的搭接方法,用支架把主控板固定在电池正上方,并在底盘的空余地方

8、安放了一个输入参数用的小键盘,这种布局可以在高效利用空间的同时,保证车辆重心不会很高,行驶时更稳定。图 2.6 电路板的固定及安装.第三章、电路设计说明要实现我们的控制思想,硬件设计要满足以下要求:1、满足我们所需要的单片机控制系统。2、满足我们信息采集所需要的各种接口。3、保证我们数据传输时,传输通道的通畅。4、保证我们控制软件做小的改动的情况下,硬件部作改动就可以满足要求,即我们硬件的通用性。5、满足智能车的所有驱动电路。单片机的控制对象最终的都是电机,舵机等机械构造,他们要运动起来的所需的能量,不是单片机系统所能提供的,必须要有外部驱动电路,驱动电路要能够可靠的工作,要有与单片机系统可以

9、相互连接的接口。3.1 主控板的设计 电源管理模块图 3.1 电源管理模块原理图电源由 7.2V 电池提供,分别经过以下途径对其它模块进展供电:a 经过稳压芯片 2940-5 稳压后,输出 5V 电压以驱动单片机工作。b 接入 33886 驱动模块,以对电机进展驱动。c 接入传感器,对传感器供电。d 接入转向主舵机与伺服电机,驱动舵机进展转向及制开工作。f 接入风扇,对 33886 芯片进展散热。-. z 电机驱动模块图 3.2 电机驱动模块原理图电机驱动采用主办方提供的 33886 作为驱动芯片, MCU 通过 IN1 引脚输入PWM 波,以调节 33886 的 DNC 口的输出电压,调节电

10、机转速的快慢,并且在 IN2口输入电压以调节电机的反转和制动功能。 控制模块图 3.3 控制模块原理图.控制模块仅由 S12 构成, PORTA 口作为光电传感器信号的输入口,PORTB口作为键盘驱动口,PWM7 和 PWM5 作为控制电机与舵机的 PWM 波输出口。 接口模块图 3.4 接口模块原理图接口模块的作用即外部设备单片机的接口,分别有电机接口,转向主舵机接口,伺服电机接口,光电编码器接口,电源接口。 信号采集模块从简洁的设计角度,我们直接从微控制器的电源线上串联上限流电阻,再和光电传感串联使用。限流电阻既在光电传感器检测时起到了上拉电阻的作用。和微控制器共地,便可以省去了光电耦合器

11、,简化了电路构造。图 3.5 信号采集模块原理图-. z3.2 传感器电路设计说明作为智能车的眼睛,光电传感器对车辆行驶状态的影响很大,经过屡次试验,我们设计出一套高效,可行的方案。图 3.6 传感器电路原理图在一个高频信号发生器的作用下,产生一路上下频交变的信号电流,然后通过一个三极管放大后供应两路 LED 灯发光,并用两个电位器分别控制 LED 灯的光强,最后用一个与信号发生器频率同步的接收管接收光信号,并反应给单片机。在回路中,我们还添加了另一路 LED 发光二极管,用来实时检测传感器的工作情况。实际操作过程中,只要发射灯和接收管间距适当,并且离地高度不大时,可以满足智能车循线的需要。.

12、第四章、智能车控制软件设计说明智能小车的控制软件采用模块化的程序构造。从构造上看,系统程序主要包括一个主体循环程序,增量式 PID 速度控制程序,中断效劳程序,循线控制算法程序,速度控制算法程序以及其他一些控制程序。涉及到的单片机硬件资源如表 4.1 所示。表 4.1 控制模块说明程序实现的功能程序实现的功能使用的模块使用的模块电机速度控制电机速度控制PWM 发生模块舵机转角控制舵机转角控制PWM 发生模块PIDPID 反应脉冲计数反应脉冲计数定时器模块,脉冲累加器人机交互人机交互SCI 串口通信光电传感器信号处理光电传感器信号处理普通 I/O 端口调试信息记录调试信息记录EETS2K 模块4

13、.1 主程序流程图主程序流程图如图 4.1 所示。系统首先对设备进展初始化,然后选择进入参数修改程序。参数设定完之后翻开中断,最后循环执行位置速度控制程序。图 4.1 主程序流程图关键参数实时修改程序程序入口初始化是否进行参数修改?开中断读取光电传感器组的状态位置速度控制程序否是-. z4.2 程序的初始化初始化局部包括参数的读取、PID 初始化、定时器和脉冲计数器的初始化、I/O 端口的初始化、PWM 控制器的初始化和键盘显示控制器 7279 的初始化。图 4.2 初始化程序流程图程序入口初始化EEPROM从EEPROM里读出参数初始化PID初始化定时器和脉冲计数器初始化I/O口初始化PWM

14、初始化7279.4.3 位置速度控制程序首先读取前方传感器组的状态来判断赛车和黑线的位置关系,通过该位置关系给出相应的转向舵机的转角和电机的转速。具体程序流程图如图。图 4.3 位置速度控制程序程序入口判断赛车的当前位置转向舵机转角控制电机转速控制是否单向制动?制动舵机控制赛车状态实时显示否是-. z4.4 中断处理程序中断处理程序每 20 毫秒执行一次,中断处理函数的主要目的是定时读取脉冲计数器的值并把该值反应给 PID 控制程序,然后调用 PID 控制程序。图4.4 给出了程序流程图。图 4.4 中断处理程序进入中断清中断标志读取码盘脉冲值脉冲计数寄存器清零PID速度控制返回.4.5 PI

15、D 控制程序系统采用增量式的速度 PID,具体流程图如图 4.5 。图 4.5 PID 控制程序程序入口偏差计算设置调节死区增量式速度PID计算是否超过最大值?输出最大值是否低于最小值?输出最小值返回驱动电机占空比是否否是.第五章、开发工具、制作、安装、调试过程说明5.1 开发工具程序的开发是在组委会提供的 CodeWarrior IDE 下进展的,包括源程序的编写、编译和,并最终生成可执行文件。CodeWarrior for S12 是面向以 HC1 和 S12 为 CPU 的单片机嵌入式应用开发软件包。包括集成开发环境 IDE、处理器专家库、全芯片仿真、可视化参数显示工具、工程工程管理器、

16、C 穿插编译器、汇编器、器以及调试器。5.2 调试过程我们使用的单片机的 FLASH 中预先下载了监控程序,由 CodeWarrior 生成的可执行文件就是在这个监控程序的引导下,由计算机的串口下载到单片机的FLASH 中的。因为这种方法既方便快捷又平安可靠,所以我们选用了这种方法而放弃了用 S12 特有的 BDM 方法进展程序的调试。具体的操作方法如下:从 MC9SDG128 开发板开场,将 RS232-232 串口线接到 PC 的串口 1 上。使用 WINDOWS 下的超级终端通信软件:执行开场|程序|通信|超级终端命令。将 1 设置成 9600 波特率,8 位、无效验位,1 个停顿位,不

17、使用硬件流量控制。插上+5V 电源,按开发板上的复位按钮,在 PC 的超级终端上就会显示提示信息。在超级终端键入 E 擦除单片机的 FLASH,然后键入 F 将.S19 文件下载到单片机的 FLASH。这样,我们编写的程序就能在单片机中运行了。需要说明的是,开机后 4秒钟后才会自动运行用户程序。.第六章、模型车的主要技术参数说明6.1 智能车外形参数车长:36cm车宽:17cm车高:7cm车重:约 1.5kg6.2 电路局部参数我们小组所改造的智能车采用一块比赛标准 7.2V7.2V 电池供电,电路中共有 1616 个个电容,容量总计 142.099F142.099F。当模型车全功率开动时,功

18、耗约为 50W50W 。6.3 除了车模原有的驱动电机、舵机之外伺服电机数量除了车模原有的驱动电机、舵机之外使用了 1 个伺服电机。6.4 传感器种类及个数我们的智能车上使用光电振荡传感器,由一个振荡管发出高频信号,LED灯就会以很高频率闪烁,再使用配套的接收管接收信号反应给单片机。我们共使用 10 个传感器。.结论自三月初报名参加飞思卡尔杯智能车邀请赛以来,我们小组成员查找资料,设计机构,组装车模,编写程序,分析问题,最后终于完成了最初目标,定下了现在这个方案。在此份技术报告中,我们主要介绍了准备比赛时的根本思路,包括机械,电路,以及最重要的控制算法的创新思想。在机械方面,我们分析了 W 型

19、,A 型,V 型等排布方法,考虑到程序的稳定性、简便性,我们最后敲定了一字形排布,并通过反复实践决定了传感器的数量和位置。在电路方面,我们以模块形式分类,在电源管理,电机驱动,接口,控制,信号采集,传感器这六个模块分别设计,在查找资料的根底上各准备了几套方案;然后我们分别实验,最后以报告中所提到的形式决定了我们最终的电路图。在算法方面,我们使用 C 语言编程,利用比赛推荐的开发工具调试程序,经过小组成员不断讨论、改良,终于设计出一套比拟通用的,稳定的程序。在这套算法中,我们结合路况调整车速,做到直线加速,弯道减速,保证在最短时间跑完全程。现在,面对即将到来的大赛,在历时近五个月的充分准备之后,

20、我们有信心在比赛中取得优异成绩。也许我们的知识还不够丰富,考虑问题也不够全面,但是这份技术报告作为我们五个月辛勤汗水来的结晶,凝聚着我们小组每个人的心血和智慧,随着它的诞生,这份经历将永伴我们一生,成为我们最珍贵的回忆。.参考文献1邵贝贝. 嵌入式实时操作系统LCOS-(第 2 版)M. 清华大学20042邵贝贝. 单片机嵌入式应用的在线开发方法M 清华大学20043 王晓明. 电动机的单片机控制M. 航空航天大学20024 臧杰,阎岩. 汽车构造M. . 机械工业20055 安鹏,马伟S12 单片机模块应用及程序调试J. 电子产品世界.2006第 211期 162-1636 童诗白,华成英模

21、拟电子技术根底M. 高等教育2000 9 长生常用电子元器件使用一读通M. 人民邮电2004 10 宗光华机器人的创意设计与实践M. 航空航天大学2004 11 伟等Protel D*P 高级应用M. 人民邮电2002 12 文春. 汽车理论M 机械工业2005 .附录源程序:main.c*include /* mon defines and macros */*include /* derivative information */*include 7279.h*define ERR_OK 1*define ERR_BUSY 2*define ERR_NOTAVAIL 3*define ER

22、R_RANGE 4*define EEPROMStart 0*0400*define EEPROMEnd 0*1000*define MASS_ERASE 0*41*define ERASECMD 0*40 *define PROGCMD 0*20 *define SizeMsg 24 /has been changed *define ERROR 0*FF *define NOERROR 0*0uint a,b,c;unsigned int write_data14;unsigned int chuanganqi_data14;/初始化:void EepromInit(void)/INITE

23、E=17; /asm nop;/MISC=1;ECLKDIV = 94;/擦写:unsigned char EepromErase(unsigned int *pAddress, unsigned char size)if(ECLKDIV_EDIVLD = 1) if(ESTAT_ACCERR = 0) & (ESTAT_PVIOL = 0) while(size) if(ESTAT_CBEIF = 1) *pAddress = 0*FFFF; pAddress += 2; ECMD =ERASECMD; ESTAT_CBEIF = 1; if(ESTAT_ACCERR = 1) |

24、(ESTAT_PVIOL = 1) return ERROR;while (ESTAT_CCIF = 0); size-; .return NOERROR; else return ERROR; else return ERROR; unsigned char EepromProgram(unsigned int *pAddress, unsigned int *pData, unsigned char size) if(ECLKDIV_EDIVLD = 1) if(ESTAT_ACCERR = 0) & (ESTAT_PVIOL = 0) while(size) if(ESTAT_C

25、BEIF = 1) *pAddress+ = *pData+; ECMD = PROGCMD; ESTAT_CBEIF = 1; if(ESTAT_ACCERR = 1) | (ESTAT_PVIOL = 1) return ERROR;while (ESTAT_CCIF = 0); size-; return NOERROR; else return ERROR;else return ERROR;byte IEE1_GetWord(word Addr,word *Data) if (Addr (EEPROMEnd - 1) /* Is given address out of EEPROM

26、 area array */ return ERR_RANGE; /* If yes then error */ /* Store given address */ *Data = *(volatile word *) Addr; /* Return data from given address */ return ERR_OK; /* OK */static uint state;static uchar flag_zhidong;static uchar flag_kong;static byte flag;static byte key_numbers;static byte flag

27、_change;static uint pulse ;static uint speed1_2 ;static uint speed2_1 ;static uint speed23 ;static uint speed3 ;-. zstatic uint speed34 ;static uint speed4 ;static uint speed45 ;static uint speed5 ;static uint speed0 ;static uint speed_zhidong4 ;static uint speed_zhidong5 ;static uint speed_zhidong0

28、 ;*define turn_right1 9223*define turn_right12 9363*define turn_right21 9363*define turn_right2 9502*define turn_right23 9602*define turn_right3 9702*define turn_right34 9789*define turn_right4 9876*define turn_right45 10089*define turn_right5 10302*define turn_left1 8946*define turn_left12 8772*def

29、ine turn_left21 8772*define turn_left2 8598*define turn_left23 8474*define turn_left3 8349*define turn_left34 8240*define turn_left4 8131*define turn_left45 7865*define turn_left5 7598*define turn_mid 9100*define turn_left0 7300*define turn_right0 10600*define VV_KPVALUE 0*define VV_KIVALUE 60*defin

30、e VV_KDVALUE 0*define VV_MA* 24000 /1024=speed2_1) flag_angle=0; turn_count=0; turn_count+;void right1_turn() -. z PWMDTY67=turn_right1 ; if(flag_angle=2) flag_angle=1; if(turn_count=speed2_1) flag_angle=0; turn_count=0; turn_count+;void zhongjian_turn() PWMDTY67=turn_mid ; if(flag_angle=2) flag_ang

31、le=1; if(turn_count=speed2_1) flag_angle=0; turn_count=0; turn_count+; */void zhongjian_turn() PWMDTY67=turn_mid; sPID.vi_Ref=speed1_2; flag_zhidong=0; flag_kong=0;void left1_turn() PWMDTY67=turn_left1; sPID.vi_Ref=speed1_2; flag_zhidong=0; flag_kong=0; flag=11;void right1_turn() PWMDTY67=turn_right

32、1; sPID.vi_Ref=speed1_2; flag_zhidong=0; flag_kong=0; flag=21;void right4_turn()if(flag_kong=2)|(flag_kong=0) PWMDTY67=turn_right4; sPID.vi_Ref=speed4; PWMDTY01=18250; PWME_PWME5 = 1; flag=25; else;.void right45_turn()if(flag_kong=2)|(flag_kong=0) PWMDTY67=turn_right45; sPID.vi_Ref=speed45; PWMDTY01

33、=18250; PWME_PWME5 = 1; flag=25; else;void right5_turn()if(flag_kong=2)|(flag_kong=0) PWMDTY67=turn_right5; sPID.vi_Ref=speed5; PWMDTY01=18250; PWME_PWME5 = 1; abs_esp5(200,17750,18250); flag=25; else;void right0_turn() PWMDTY67=turn_right0 ; sPID.vi_Ref=speed0; abs_esp0(200,17750,18250); flag_zhido

34、ng=1; flag_kong=2;void left4_turn()if(flag_kong=1)|(flag_kong=0) PWMDTY67=turn_left4; sPID.vi_Ref=speed4; PWMDTY01=18250; PWME_PWME5 = 1; flag=15; else; void left45_turn()if(flag_kong=1)|(flag_kong=0) PWMDTY67=turn_left45; sPID.vi_Ref=speed45; PWMDTY01=18250; PWME_PWME5 = 1; flag=15;-. z else; void

35、left5_turn()if(flag_kong=1)|(flag_kong=0) PWMDTY67=turn_left5; sPID.vi_Ref=speed5; PWMDTY01=18250; abs_esp5(200,18700,18250); PWME_PWME5 = 1; flag=15; else; void left0_turn() PWMDTY67=turn_left0 ; sPID.vi_Ref=speed0; abs_esp0(200,18700,18250); flag_zhidong=1; flag_kong=1;unsigned int v_PIDCalc( PID

36、*pp )signed long error,d_error,dd_error; error = (signed long)(pp-vi_Ref - pp-vi_FeedBack);/ 偏差计算 d_error = error - pp-vi_PreError; dd_error = d_error - pp-vi_PreDerror;pp-vi_PreError = error;/存储当前偏差pp-vi_PreDerror = d_error;if( ( error -VV_DEADLINE ) );/设置调节死区else/速度 PID 计算 pp-vl_PreU+= (signed lon

37、g)( pp - v_Kp * d_error + pp - v_Ki * error + pp-v_Kd*dd_error);/ PTP_PTP0=0;/pp-vl_Pre+=pp-vl_PreU ;if( pp-vl_PreU = VV_MA* ) /速度 PID,防止调节最高溢出 pp-vl_PreU = VV_MA*;else if( pp-vl_PreU vl_PreU = 0;/ PTP_PTP0=1;.return (pp-vl_PreU);/ 返回预调节占空比void PIDInit ()sPID.vi_Ref = 0 ; /速度设定值sPID.vi_FeedBack = 0

38、;/速度反应值sPID.vi_PreError = 0 ; /前一次,速度误差,vi_Ref - vi_FeedBacksPID.vi_PreDerror = 0 ; /前一次,速度误差之差,d_error-PreDerror;/sPID.v_Kp = VV_KPVALUE;/sPID.v_Ki = VV_KIVALUE;sPID.v_Kd = VV_KDVALUE;sPID.vl_PreU = 0 ;/电机控制输出值void pulse_count_init() MCFLG_MCZF = 1; MCCTL_MODMC = 1; MCCTL_MCZI = 1; MCCTL_MCEN = 1;

39、MCT = 30000; MCCTL_MCPR = 3; MCCTL_FLMC = 1; TIOS_IOS0=0;TCTL4=0*01;PBCTL_PBEN=1;void PWM45_Init(void) PWME_PWME5 = 0; PWMT45 = 0; PWMDTY45 = 0; /* Store initial value to the duty-pare register */ PWMPER45 = 24000; /* and to the period register */ PWMCTL_CON45=1; PWMPRCLK = 0; /* Set prescaler regis

40、ter */ PWMSCLA = 1; /* Set scale register */ PWMCLK_PCLK5 = 1; /* Select clock source */ PWMPOL_PPOL5=1; PWME_PWME5 = 1; /* Run counter */void PWM67_Init(void) PWME_PWME7 = 0; PWMCTL_CON67=1; PWMPRCLK = 0; PWMSCLB = 2; PWMCLK_PCLK7 = 1; PWMPOL_PPOL7=1;-. z PWMT67 = 0; PWMDTY67 = 9000; PWMPER67 = 480

41、00; PWME_PWME7 = 1; void PWM01_Init(void) PWME_PWME1 = 0; PWMCTL_CON01=1; PWMT01 = 0; PWMDTY01 = 18450; /* Store initial value to the duty-pare register */ PWMPER01 = 60000; /* and to the period register */ PWMPRCLK = 0; /* Set prescaler register */ PWMSCLA = 1; /* Set scale register */ PWMCLK_PCLK1

42、 = 1; PWMPOL_PPOL1=1; /* Select clock source */ PWME_PWME1 = 1; /* Run counter */void port_init(void) DDRA_BIT6=0; DDRA_BIT7=0; DDRB = 0*00; DDRP_DDRP0=1; DDRP_DDRP2=1; DDRP_DDRP3=1; PTP_PTP0=0; PTP_PTP2=1; PTP_PTP3=0; DDRP_DDRP5=1;void mid_turn(void) switch(flag) case 11:PWMDTY67=turn_left12 ;delay

43、_speed_left12(); PWMDTY01=18250; break;/0000 0000 case 21:PWMDTY67=turn_right12;delay_speed_right12(); PWMDTY01=18250; break;/0000 0000 case 22:PWMDTY67=turn_right21;delay_speed_right21(); PWMDTY01=18250; break;/0000 0000 case 15:left0_turn(); break; case 25:right0_turn(); break; default: break; . v

44、oid main(void) uchar qianwei,baiwei,shiwei,gewei; word ii;EepromInit();IEE1_GetWord(0*0500,&speed1_2) ;IEE1_GetWord(0*0502,&speed2_1) ;IEE1_GetWord(0*0504,&speed23 ) ;IEE1_GetWord(0*0506,&speed3 ) ;IEE1_GetWord(0*0508,&speed34 ) ;IEE1_GetWord(0*050a,&speed4 ) ;IEE1_GetWord(0*

45、050c,&speed0 ) ;IEE1_GetWord(0*050e,&sPID.v_Kp ) ;IEE1_GetWord(0*0510,&sPID.v_Ki ) ;IEE1_GetWord(0*0512,&speed_zhidong4 ) ;IEE1_GetWord(0*0514,&speed_zhidong5 ) ;IEE1_GetWord(0*0516,&speed_zhidong0 ) ;IEE1_GetWord(0*0518,&speed45 ) ;IEE1_GetWord(0*051a,&speed5 ) ;PIDI

46、nit ();pulse_count_init();port_init();PWM67_Init();PWM45_Init() ;PWM01_Init();init_7279(); if(!key) write7279(DECODE0, 0); write7279(DECODE0+1,1); write7279(DECODE0+2,2); write7279(DECODE0+3,3); write7279(DECODE0+4,4); write7279(DECODE0+5,5); write7279(DECODE0+6,6); write7279(DECODE0+7,7); while(!(k

47、ey); send_byte(CMD_RESET); while(1)key_numbers=get_key7279();switch(key_numbers) case 1:send_byte(CMD_RESET);dis_data (4,7,12);dis_data (0,3,speed1_2);flag_change=key_numbers; break;-. z case 2:send_byte(CMD_RESET);dis_data (4,7,21);dis_data (0,3,speed2_1);flag_change=key_numbers; break; case 3:send

48、_byte(CMD_RESET);dis_data (4,7,23);dis_data (0,3,speed23) ;flag_change=key_numbers; break; case 4:send_byte(CMD_RESET);dis_data (4,7, 3);dis_data (0,3,speed3) ;flag_change=key_numbers; break; case 5:send_byte(CMD_RESET);dis_data (4,7,34);dis_data (0,3,speed34) ;flag_change=key_numbers;break; case 6:

49、send_byte(CMD_RESET);dis_data (4,7, 4);dis_data (0,3,speed4) ;flag_change=key_numbers;break; case 7:send_byte(CMD_RESET);dis_data (4,7,45);dis_data (0,3,speed45) ;flag_change=key_numbers;break; case 8:send_byte(CMD_RESET);dis_data (4,7, 5);dis_data (0,3,speed5) ;flag_change=key_numbers;break; case 9

50、:send_byte(CMD_RESET);dis_data (4,7, 0);dis_data (0,3,speed0) ;flag_change=key_numbers;break; case 0:send_byte(CMD_RESET);write7279(DECODE1+4,10);dis_data (0,3,sPID.v_Kp) ;flag_change=key_numbers;break; case 12:send_byte(CMD_RESET);write7279(DECODE1+4,11);dis_data (0,3,sPID.v_Ki) ;flag_change=key_nu

51、mbers;break; case 13:send_byte(CMD_RESET);write7279(DECODE1+4,12);dis_data (0,3,speed_zhidong4) ;flag_change=key_numbers;break; case 14:send_byte(CMD_RESET);write7279(DECODE1+4,13);dis_data (0,3,speed_zhidong5) ;flag_change=key_numbers;break; case 15:send_byte(CMD_RESET);write7279(DECODE1+4,14);dis_

52、data (0,3,speed_zhidong0) ;flag_change=key_numbers;break; default:break;if(key_numbers=0*0a)write7279(BLINKCTL,0*f0); qianwei=get_key7279();write7279(DECODE1+3,qianwei);write7279(BLINKCTL,0*f8);baiwei=get_key7279();write7279(DECODE1+2,baiwei);write7279(BLINKCTL,0*fc);shiwei=get_key7279();write7279(D

53、ECODE1+1,shiwei);write7279(BLINKCTL,0*fe);gewei=get_key7279();write7279(DECODE1+0,gewei); switch(flag_change) case 1:speed1_2=qianwei*1000+baiwei*100+shiwei*10+gewei;break; case 2:speed2_1=qianwei*1000+baiwei*100+shiwei*10+gewei;break; case 3:speed23 =qianwei*1000+baiwei*100+shiwei*10+gewei;break; c

54、ase 4:speed3 =qianwei*1000+baiwei*100+shiwei*10+gewei;break;. case 5:speed34 =qianwei*1000+baiwei*100+shiwei*10+gewei;break; case 6:speed4 =qianwei*1000+baiwei*100+shiwei*10+gewei;break; case 7:speed45=qianwei*1000+baiwei*100+shiwei*10+gewei;break; case 8:speed5=qianwei*1000+baiwei*100+shiwei*10+gew

55、ei;break; case 9:speed0 =qianwei*1000+baiwei*100+shiwei*10+gewei;break; case 0:sPID.v_Kp=qianwei*1000+baiwei*100+shiwei*10+gewei;break; case 12:sPID.v_Ki=qianwei*1000+baiwei*100+shiwei*10+gewei;break; case 13:speed_zhidong4=qianwei*1000+baiwei*100+shiwei*10+gewei;break; case 14:speed_zhidong5=qianwe

56、i*1000+baiwei*100+shiwei*10+gewei;break; case 15:speed_zhidong0=qianwei*1000+baiwei*100+shiwei*10+gewei;break; default:break; write7279(BLINKCTL,0*ff); if(key_numbers=0*0b) break; write_data0=speed1_2; write_data1=speed2_1; write_data2=speed23; write_data3=speed3; write_data4=speed34; write_data5=speed4; write_data6=speed0; write_data7=sPID.v_Kp; write_data8=sPID.v_Ki; write_data9=speed_zhidong4; write_data10=speed_zhidong5; write_data11=speed

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论