![遥控智能小车课程设计报告_第1页](http://file4.renrendoc.com/view/ae521ff55c0cec3d7a36c0e8b6db5dd2/ae521ff55c0cec3d7a36c0e8b6db5dd21.gif)
![遥控智能小车课程设计报告_第2页](http://file4.renrendoc.com/view/ae521ff55c0cec3d7a36c0e8b6db5dd2/ae521ff55c0cec3d7a36c0e8b6db5dd22.gif)
![遥控智能小车课程设计报告_第3页](http://file4.renrendoc.com/view/ae521ff55c0cec3d7a36c0e8b6db5dd2/ae521ff55c0cec3d7a36c0e8b6db5dd23.gif)
![遥控智能小车课程设计报告_第4页](http://file4.renrendoc.com/view/ae521ff55c0cec3d7a36c0e8b6db5dd2/ae521ff55c0cec3d7a36c0e8b6db5dd24.gif)
![遥控智能小车课程设计报告_第5页](http://file4.renrendoc.com/view/ae521ff55c0cec3d7a36c0e8b6db5dd2/ae521ff55c0cec3d7a36c0e8b6db5dd25.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《嵌入式系统原理》课程设计阐明书题目:遥控智能小车院(系):信息与电气工程学院专业班级:通信二班学生姓名:周波学号:指导教师:罗朝辉嵌入式系统原理课程设计任务书一、设计题目遥控智能小车二、设计重要内容广泛查找文献资料,认真研究,重复论证,精心设计技术方案。较为进一步的掌握ARM解决器的体系构造、指令系统、编程办法,初步理解ARM应用系统的软硬件开发办法及手段,较纯熟地掌握ARM解决器几个重要的片内外设(定时器、PLL、I2C、RTC等)的基本原理及编程办法,初步掌握ARM解决器外围电路的扩展办法。在现有车模的基础上,以嵌入式ARM微解决器构成小车控制核心,同时加装声光电、红外线、超声波传感器、LED显示等外围设备,实现对小车的速度、位置、运行状况的实时测量,并将测量数据传送至解决器进行解决,然后由解决器根据所检测的多个数据实现对电动车的智能控制;设计的智能小车应当能够实时显示时间、速度、里程,含有自动寻迹、寻光、避障功效,可程控行驶速度、精拟定位停车。并有对应的声光电设备发出有关的提示或警示信息。遥控方式可自选,系统通过遥控器能够控制小车的行驶方向、速度、起停等运行状态,规定要达成一定的控制精度、距离及范畴,小车行驶速度应达成3m/s以上。三、原始资料硬件资源:四驱小车车模、STM32系统板、用于ARM解决器的JTAG仿真器、PC机Pentium100以上。设计指导书:STM32系统板配套光盘四、规定的设计成果(1)在现有车模的基础上,以嵌入式ARM微解决器构成小车控制核心,同时加装声光电、红外线、超声波传感器、LED显示等外围设备,实现对小车的速度、位置、运行状况的实时测量,并将测量数据传送至解决器进行解决,然后由解决器根据所检测的多个数据实现对电动车的智能控制。(2)撰写课程设计阐明书,规定简洁、通顺,格式规范,设计方案对的,实现技术路线明确,叙述内容完整、清晰、规范,数据、资料真实可靠,软件程序运行良好。(3)规定有完整的电路设计原理图及软件源代码。五、进程安排(1)第1天:任务布置及有关知识解说(2)第2-3天:资料查阅与方案制订(3)第4-8天:硬件设计、程序编制与调试阶段(4)第9天:撰写设计报告六、重要参考资料[1]田泽.嵌入式系统开发与应用实验教程.北京航空航天工业大学出版社,.[2]郭荣佐,王霖.《嵌入式系统原理》.北京航空航天大学出版社,..[3]周根林.嵌入式系统原理与应用.南京大学出版社,.[4]谭浩强.C语言程序设计(第2版).清华大学出版社,[5]丁峰.ARM系统开发——从实践到提高.中国电力出版社,.[6]游雨云.单片机PWM信号控制智能小车的实现办法.技术与市场,,(12)[7]袁新娜,余红英,超声波传感器在智能小车避障系统中的应用.大众商务教育版(民办教育研究),,(8)指导教师(签名):20年月日 1 2 2 2 2 6 6 7 7 11 11 11 12 13 13 14 14 15图1.1设计全局图通过stm32的PA0,PA1,根据TIM2产生的不同占空比的PWM波,控制电机的速度,以及正反转。PA3,PA4控制小车前轮,前轮采用舵机控制,在转向方面,不能大幅度转弯,因此,在小车转弯上,我们采用转一段时间,然后倒退一段距离,然后再转,如此重复几次。通过这种方式实现小车的900C转弯。2.3功效函数设计1.voidFront() {GPIOD->BRR=0X03;GPIOA_Conf();//配备A端口GPIOA->BRR=0x0f;GPIOA->BSRR=0X01; }调用这个函数,实现小车全速向前形式。PD端口的D0,D1位,是控制小车背面两个尾灯。当小车迈进时,尾灯关闭。2.voidBack() {GPIOD->BSRR=0x03;GPIOA_Conf();GPIOA->BRR=0x0f;GPIOA->BSRR=0X02;}调用这个函数,实现小车全速后退。同时启动车身背面的尾灯。3.voidLeftSlideFront() { GPIOD->BSRR=0X01; GPIOD->BRR=0X02; GPIOA->BRR=0X04; GPIOA->BSRR=0X08; Time_Configuration(350,0,500,7199);} 调用此函数,实现小车迈进,左转弯。同时启动尾部左边的尾灯,关闭右边的尾灯。Time_Configuration(350,0,500,7199)为占空比调制函数。通过输入不同的值,变化电机的转速。4.voidTime_Configuration(uint16_tCCR1_Val,uint16_tCCR2_Val,uint16_tperiodValue,uint16_tPrescalerValue){ /*启动TM2定时器时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); /*TIM2定时器复用管脚PA0,PA1,PA2,PA3*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure); /*配备定时器时基*/TIM_TimeBaseStructure.TIM_Period=periodValue;TIM_TimeBaseStructure.TIM_Prescaler=PrescalerValue;TIM_TimeBaseStructure.TIM_ClockDivision=0;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); /*配备定时器各通道状况*/TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse=CCR1_Val;TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;TIM_OC1Init(TIM2,&TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse=CCR2_Val;TIM_OC2Init(TIM2,&TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM2,ENABLE);TIM_Cmd(TIM2,ENABLE);} PWM脉宽调制波形输出,是stm32定时器功效的一大亮点,以往8位单片机输出PWM波形,均为模拟,或者借助外围芯片,而stm32内部定时器,实现了精确的PWM波形直接输出。上面功效函数,为TIM2定时器的配备状况。我在使用时,启动了TIM2定时器的通道1和通道2。分别为PA0,PA1,这两个端口控制小车的后轮电机。由于前轮为舵机。因此,没有采用PWM波形。而是直接给高低电平调节小车的方向。stm32定时器采用预分频解决,即将系统时钟分频后给定时器,这个预分频值,由传入的参数PrescalerValue决定。系统时钟为72MHz,设分频后的频率为F,则:F=72MHz/(PrescalerValue+1)定时器的计数周期为传入参数periodValue的值决定。PWM占空比值由传入参数CCR1_Val和CCR2_Val决定,分别控制PA0,PA1的占空比值。占空比=CCR1_Val/periodValue。 NEC编码合同中,遥控器每发送一种8位数据,能够分为5个部分:图3.1NEC合同编码规则当按下遥控器上的任意一种键时,遥控器将发送一种38KHz的载波信号,根据NEC编码合同,如果发送数据位为1,则向外发送38KHz的载波信号,持续发送0.56ms.然后停止发送1.685ms后继续发送下一位。如果发送数据位为0,则红外遥控向外发送38KHz的载波信号,持续发送0.56ms,然后停止发送0.565ms后继续发送下一位。3.2接受探头与解码接受红外信号部分,我们采用HS0038接受探头,HS0038共三个引脚,分别为,OUT、VCC、GND。通电后,当没有收到红外信号时,OUT端口默认为高电平。接受端口信号与红外遥控发送信号电平相反。在解码方面,接受探头接受到38KHz的载波后,输出端OUT电平拉低。由于NEC发射编码中,采用的是38KHz载波表达高,无发射表达低。因此在接受探头部分的电平高低,与发射部分刚好相反。解码部分,数据1,0的电平宽度为别是:图3.2NEC合同1、0电平宽度由于每个数据位开始低电平均为0.56ms,因此,我们使用TIM3定时器,精确捕获到每位数据高电平持续时间。通过捕获到的值,来确认1和0.通过软件解码时,首先接受到引导码,9ms的低电平和4.5ms的高电平,然后是地址码和地址反码,最后是数据码和数据反码。在程序设计上,我们定义个unsignedchar型数组,分别统计下地址码、地址反码、数据码、数据反码。取出数组下标为2和3的值,将下标为3的数组数据取反,判断与否相等,如果不相等,表达解码数据有误;如果相等,表达解码对的。3.3红外控制将stm32的外部中断3端口与红外探头的输出端相连,捕获红外遥控发射来的信号。外部中断端口程序配备以下:1.voidEXTI3_Configration(){/***************配备PC3端口,作为外部中断触发端口***********/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOC,&GPIO_InitStructure);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource3);/****************外部中断线配备,设立为上升沿触发****************/EXTI_InitStructure.EXTI_Line=EXTI_Line3;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);/********************中断向量表配备*****************/NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);}配备好外部中断后,当stm32上电后,便会实时监控PC3端口,当接受到红外信号后,便产生一种中断信号,调用中断解决函数,解决该事件,下面为中断解决函数,重要是解码红外信号:2.voidEXTI3_IRQHandler(void){inti,j,Counter=0;charIR[4]={0};charch1=0,ch2=0;if(EXTI_GetITStatus(EXTI_Line3)!=RESET){ TIM3->CNT=0; TIM_Cmd(TIM3,ENABLE); while(TIM_GetCounter(TIM3)<7000); TIM_Cmd(TIM3,DISABLE); TIM3->CNT=0; if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)==0) { while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)); TIM3->CNT=0; TIM_Cmd(TIM3,ENABLE); while(TIM_GetCounter(TIM3)<3500); TIM_Cmd(TIM3,DISABLE); if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)==1) { while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)); for(i=0;i<4;i++) { for(j=0;j<8;j++) { while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)); TIM3->CNT=0; TIM_Cmd(TIM3,ENABLE); while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)); Counter=TIM_GetCounter(TIM3); TIM_Cmd(TIM3,DISABLE); ch1=ch1>>1; if(Counter>840) { ch1=ch1|0x80; } else { ch1=ch1|0; } Counter=0; } IR[i]=ch1; } ch1=IR[2]; ch2=IR[3]; ch2=~ch2; if(ch1==ch2) { switch(ch1) { case0x07:LeftSlideFront();break; case0x09:RightSlideFront();break; case0x40:Front();break; case0x19:Back();break; case0x16:LeftSlideBehind();break; case0x0d:RightSlideBehind();break; case0x0c:Upshift();break; case0x5e:SlowDown();break; case0x15:Brake();break; default:Brake();break; } } } }Delay(500);EXTI_ClearITPendingBit(EXTI_Line3); }} 这个函数为中断解决函数,在中断解决函数中,我们又用到了一种TIM3定时器,该定时器重要是解码红外信号,根据上文所述的0,1编码规则,用TIM3定时器,所捕获到的值,来判断信号0,1,实现软件解码红外信号。下面为TIM3定时器的配备:3.voidTIM3_Configuration(){TIM_DeInit(TIM3);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);TIM_TimeBaseStructure.TIM_Period=50000;TIM_TimeBaseStructure.TIM_Prescaler=0;TIM_TimeBaseStructure.TIM_ClockDivision=0;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); TIM_PrescalerConfig(TIM3,71,TIM_PSCReloadMode_Immediate); TIM_ARRPreloadConfig(TIM3,DISABLE); TIM_Cmd(TIM3,DISABLE);} 设立预分频值为71,通过分频后,计数器的频率为1MHz。周期为50000.计数方式为向上计数。即使stm32普通定时器的时钟为36MHz,如果将TIM_ClockDivision的值设立为0,则采用预分频时,时钟值应选72MHz进行分频。4.超声波4.1介绍 通过超声波发射装置发出超声波,根据接受器接到超声波时的时间差就能够懂得距离了。超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传输,途中碰到障碍物就立刻返回来,超声波接受器收到反射波就立刻停止计时。(超声波在空气中的传输速度为340m/s,根据计数器统计的时间t,就能够计算出发射点距障碍物的距离(s),即:s=340t/2)4.2超声波测距具体实现 我们在小车的前端放置一种超声波模块,采用查询法,每隔1s,发射一种10us以上的脉冲信号,超声波模块便自动发送8个40Khz的信号。当模块接受到返回信号时,输出端会输出一种高电平,这个高电平的持续时间,就是超声波模块达成障碍物,声速的来回时间。如果测得前方障碍物距离不大于设立距离,则小车后退,并发出报警蜂鸣声。4.3超声波程序设计1.floatDistance(){ floatdistance; inttime; TIM3->CNT=0; //非常重要,不清零,没成果 GPIOB->BSRR=0X01; while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0);//等待接受到反回信号 GPIOB->BRR=0X01; TIM_Cmd(TIM3,ENABLE);//启动定时器,记下电平持续时间 while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==1); TIM_Cmd(TIM3,DISABLE); time=TIM_GetCounter(TIM3); distance=(float)time*0.017;//cm数量级 returndistance;} 程序中的TIM3定时器,在上文3.3.3已经具体的描述。我们将stm32的PB0作为发送10us以上高电平的端口,将PB1作为接受超声波模块馈送的时间信号电平端口。该高电平的时间,为超声波来回障碍物的时间。该函数返回值,即为小车到障碍物的距离。2.voidKeepDistance() //超声波测距,距离控制函数{ GPIOB->BRR=0x100; if(Distance()<25.0) { GPIOB->BSRR=0x100; RightSlideBehind(); Delay(200); GPIOB->BRR=0x100; Delay(700); GPIOA->BSRR=0x0c; Time_Configuration(70,0,100,71); } } 调用这个函数,当小车查询到前方距离不大于25cm时,便进行某些列的调节,如蜂鸣器想起,小车向右后转。5.红外寻迹5.1反射式红外传感器图5.1反射式红外传感器 如图5.1所示,当红外发射管发射信号,经地面反射到接受管时,接受管部位电阻值很小;当红外传感器与地面距离拉大,接受管接受不到反射信号时,接受管部位电阻值很大。采用一种电压比较器LM393,LM393为两端输入,一端输出,比较两个输入信号的大小。我们将红外传感器接受管在接受到信号和没有接受到信号时,电阻两端的电压与一种固定的值相比,接受到信号时,LM393输出低电平;没有接受到信号时,LM393输出高电平。通过高低电平,判断红外管发出的信号与否被黑线吸取。5.2具体实现办法小车上的黑线检测设备,采用的中断触发方式是,下降沿。由于电机在转动过程中,不可避免的会发生忽然变向,减速等。这样会干扰电源电压,由于我我们组采用的stm32为3.3V供电,该电压有6个电池串联,通过稳压芯片稳压后,输出3.3V给stm32,当点击由于忽然变向,加速减速才生大电流,对电池电压产生较大的冲击,稳压芯片输出截止。黑线检测的模块与stm32并联,当稳压芯片输出的3.3V电压忽然截止时,寻迹模块输出电压为0.如果采用下降沿触发,这时,由于电压的不稳定而造成了一种有害的触发中断。通过修改硬件电路,采用上升沿触发,当红外对管检测到黑线时,输出信号为0,当小车没有检测到黑线时,输出信号为1。当稳压芯片忽然截止时,输出也0,这样能够有效的解决电机对寻迹模块的干扰。 我们小组采用3个寻迹模块,stm32采用3个外部触发端口分别与3个寻迹模块相连。左右两边寻迹模块用于检测跑到边沿,避免小车冲出跑到。中间寻迹模块用于检测小车转弯线。stm32分枪占式优先级和响应式优先级。如果抢占式优先级相似,则不能发生中断嵌套。小车通过转弯线时,三个寻迹模块均会检测到黑线。因此,我们设立中间寻迹模块的抢占式优先级最高,两边抢占式等级低于中间,当小车通过转弯线时,三个中断同时,或一次来临。中间中断等级打断两边,确保中间的中断执行程序能顺利执行。5.3寻迹程序设计我们采用三个外部中断,分别为PC0,PC1,PC3三个端口,分别监控三个寻迹模块。下面以外部中断0为例:1.voidEXTI0_Configration(){/************配备PC0端口,作为外部中断触发端口*******/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOC,&GPIO_InitStructure);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource0);/****************外部中断线配备,设立为下降沿触发****************/EXTI_InitStructure.EXTI_Line=EXTI_Line0;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);/********************中断向量表配备*****************/NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;NVIC_InitStructure.NVIC_IRQCha
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省日照市高三下学期3月模拟考试语文试题(含答案)
- 工程车运输简单合同
- 2025合同模板化工产品购销合同范本
- 洗煤厂承包合同
- 商铺个人租房合同
- 职称聘任合同书
- 演讲稿格式及范文二十-多篇
- 提升学习能力
- 农产品产销对接合作合同
- 二手房独家代理合同
- 《共情的力量》课件
- 2022年中国电信维护岗位认证动力专业考试题库大全-上(单选、多选题)
- 《电气作业安全培训》课件
- 水平二(四年级第一学期)体育《小足球(18课时)》大单元教学计划
- 《关于时间管理》课件
- 医药高等数学智慧树知到课后章节答案2023年下浙江中医药大学
- 城市道路智慧路灯项目 投标方案(技术标)
- 水泥采购投标方案(技术标)
- 医院招标采购管理办法及实施细则(试行)
- 初中英语-Unit2 My dream job(writing)教学设计学情分析教材分析课后反思
- 广州市劳动仲裁申请书
评论
0/150
提交评论