ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:85.36KB ,
资源ID:6763656      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6763656.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(遥控智能小车课程设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

遥控智能小车课程设计.docx

1、遥控智能小车课程设计 嵌入式系统原理 课程设计说明书题 目: 遥控智能小车 院 (系): 计算机与电子系 专业班级: 电子科学与技术0902班 学生姓名: 黄 占 威 学 号: 20091185045 指导教师: 黄 向 宇 20 11 年 12 月 30 日至20 12 年 1 月 13 日华中科技大学武昌分校制 嵌入式系统原理 课程设计任务书一、设计题目遥控智能小车二、设计主要内容(1) 广泛查找文献资料,认真研究,反复论证,精心设计技术方案。(2) 严格遵守各项纪律,勤奋学习,认真思考,敢于挑战困难并勇于创新。(3) 较为深入的掌握ARM处理器的体系结构、指令系统、编程方法,初步了解AR

2、M应用系统的软硬件开发方法及手段,较熟练地掌握ARM处理器几种重要的片内外设(定时器、PLL、I2C、RTC等)的基本原理及编程方法,初步掌握ARM处理器外围电路的扩展方法。(4) 在现有车模的基础上,以嵌入式ARM微处理器构成小车控制核心,同时加装声光电、红外线、超声波传感器、LED显示等外围设备,实现对小车的速度、位置、运行状况的实时测量,并将测量数据传送至处理器进行处理,然后由处理器根据所检测的各种数据实现对电动车的智能控制;(5) 设计的智能小车应该能够实时显示时间、速度、里程,具有自动寻迹、寻光、避障功能,可程控行驶速度、准确定位停车。并有相应的声光电设备发出相关的提示或警示信息。(

3、6) 遥控方式可自选,系统通过遥控器可以控制小车的行驶方向、速度、起停等运行状态,要求要达到一定的控制精度、距离及范围,小车行驶速度应达到3m/s以上。(7) 分析结果,独立撰写设计总结报告陈述自己的观点,格式应严格遵守学校规范。内容尽量翔实,其中必须要有自己独立的见解和认识。三、原始资料硬件资源:四驱小车车模、STM32系统板、用于ARM处理器的JTAG仿真器、PC机Pentium100以上。设计指导书:STM32系统板配套光盘四、要求的设计成果(1)在现有车模的基础上,以嵌入式ARM微处理器构成小车控制核心,同时加装声光电、红外线、超声波传感器、LED显示等外围设备,实现对小车的速度、位置

4、、运行状况的实时测量,并将测量数据传送至处理器进行处理,然后由处理器根据所检测的各种数据实现对电动车的智能控制。(2)撰写课程设计说明书,要求简洁、通顺,格式规范,设计方案正确,实现技术路线明确,论述内容完整、清楚、规范,数据、资料真实可靠,软件程序运行良好。(3)要求有完整的电路设计原理图及软件源代码。五、进程安排(1)第 1 天:任务布置及相关知识讲解(2)第2-3天:资料查阅与方案制定(3)第4-8天:硬件设计、程序编制与调试阶段(4)第 9 天:撰写设计报告(5)第 10 天:答辩与考核阶段六、主要参考资料1 田泽. 嵌入式系统开发与应用实验教程. 北京航空航天工业大学出版社,2005

5、.2 郭荣佐,王霖. 嵌入式系统原理.北京航空航天大学出版社,.2008.3 周根林.嵌入式系统原理与应用.南京大学出版社, 2006.4 谭浩强. C语言程序设计(第2版).清华大学出版社,20085 丁峰. ARM系统开发从实践到提高. 中国电力出版社,2007.6 游雨云. 单片机PWM信号控制智能小车的实现方法.技术与市场, 2009,(12)7 袁新娜,余红英,超声波传感器在智能小车避障系统中的应用. 大众商务教育版(民办教育研究),2009,(8)指导教师(签名): 20 年 月 日目 录1. 总体思想 12. 电机驱动 22.1 简介 22.2 具体实现 22.3 功能函数设计

6、23 遥控系统 73.1 遥控器简介 73.2 接收探头与解码 73.3 红外控制 84. 超声波 124.1 简介 124.2 超声波测距具体实现 124.3 超声波程序设计 125. 红外寻迹 145.1 反射式红外传感器 145.2 具体实现方法 145.3 寻迹程序设计 156. 总结 171.总体思想图 1.1 设计全局图本次课程设计,我们小组采用stm32作为主控芯片,L298N模块作为电机驱动芯片。在小车车头放置三个反射式红外传感器,由于红外光易于被黑线吸收,利用这个原理,来检测黑线,当检测到黑线时,发射出去的红外光被吸收,红外传感器接受不到反射信号,通过输出信号反馈给STM32

7、,产生中断,作出相应的调整,详细介绍见下文第12页。车头部分采用一个US-100超声波模块,用于检测前方障碍物,我们小组设置的安全距离为25cm,当小车与前方障碍之间的距离小于25cm时,小车蜂鸣器报警,stm32控制电机,作出相应的调整。关于超声波工作详情,请见下文第11页。小车尾部安装一枚HS0038红外接收探头,配合一块遥控器,实现遥控小车的功能。我们小组选用的遥控器编码为NEC协议。红外遥控功能详情,请见下文第7页。我们在小车的车身上放置一块3.2寸TFT液晶显示器。用于显示时间,车速。车速通过霍尔元件测得。2.电机驱动2.1简介电机运转需要大电流,而stm32驱动能力达不到电机正常运

8、转的要求,故我们小组采用L298N模块驱动电机,L298N拥有4个输入端口,由stm32直接输入,4个输出端,可以驱动两个直流电机。 stm32输出端口的电平变换,可以控制电机的方向。PWM脉宽调制信号,可以控制电机的转速。实现加速减速的功能。2.2 具体实现通过stm32的PA0,PA1,根据TIM2产生的不同占空比的PWM波,控制电机的速度,以及正反转。PA3,PA4控制小车前轮,前轮采用舵机控制,在转向方面,不能大幅度转弯,所以,在小车转弯上,我们采用转一段时间,然后倒退一段距离,然后再转,如此反复几次。通过这种方式实现小车的900C转弯。2.3 功能函数设计1.void Front()

9、 GPIOD-BRR = 0X03; GPIOA_Conf(); /配置A端口 GPIOA-BRR = 0x0f;GPIOA-BSRR = 0X01; 调用这个函数,实现小车全速向前形式。PD端口的D0,D1位,是控制小车后面两个尾灯。当小车前进时,尾灯关闭。2.void Back() GPIOD-BSRR = 0x03;GPIOA_Conf();GPIOA-BRR = 0x0f;GPIOA-BSRR = 0X02;调用这个函数,实现小车全速后退。同时开启车身后面的尾灯。 3 . void LeftSlideFront() GPIOD-BSRR = 0X01; GPIOD-BRR = 0X02

10、; GPIOA-BRR = 0X04; GPIOA-BSRR = 0X08; Time_Configuration(350,0,500,7199); 调用此函数,实现小车前进,左转弯。同时开启尾部左边的尾灯,关闭右边的尾灯。Time_Configuration(350,0,500,7199)为占空比调制函数。通过输入不同的值,改变电机的转速。4.void Time_Configuration(uint16_t CCR1_Val,uint16_t CCR2_Val,uint16_t periodValue,uint16_t PrescalerValue) /*开启TM2定时器时钟*/RCC_AP

11、B1PeriphClockCmd(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.

12、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; TI

13、M_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_OutputS

14、tate_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波形直接输出。上面功能函数,为T

15、IM2定时器的配置情况。我在使用时,开启了TIM2定时器的通道1和通道2。分别为PA0,PA1,这两个端口控制小车的后轮电机。由于前轮为舵机。所以,没有采用PWM波形。而是直接给高低电平调整小车的方向。stm32定时器采用预分频处理,即将系统时钟分频后给定时器,这个预分频值,由传入的参数PrescalerValue决定。系统时钟为72MHz,设分频后的频率为F,则:F = 72MHz/(PrescalerValue+1)定时器的计数周期为传入参数periodValue的值决定。PWM占空比值由传入参数CCR1_Val和CCR2_Val决定,分别控制PA0,PA1的占空比值。占空比 = CCR1

16、_Val/periodValue。4. void LeftSlideBehind() GPIOD-BSRR = 0X01; GPIOD-BRR = 0X02; GPIOA-BRR = 0X04; GPIOA-BSRR = 0X08; Time_Configuration(0,350,500,7199);调用此函数,控制小车后退并左转弯。同时开启左边尾灯,关闭右边尾灯。5void RightSlideFront() GPIOD-BSRR = 0X02; GPIOD-BRR = 0X01; GPIOA-BRR = 0X08; GPIOA-BSRR = 0x04; Time_Configuratio

17、n(350,0,500,7199); 调用此函数,控制小车前进并右转弯。同时关闭左边尾灯,开启右边尾灯。6. void RightSlideBehind() /后退,右转弯 GPIOD-BSRR = 0X02; GPIOD-BRR = 0X01; GPIOA-BRR = 0X08; GPIOA-BSRR = 0X04; Time_Configuration(0,350,500,7199); 调用此函数,控制小车后退并右转弯。同时关闭左边尾灯,开启右边尾灯。7. void Upshift() uint16_t i; GPIOD-BRR = 0x03; for(i = 100;i = 180;i

18、= i + 10) Delay(200); Time_Configuration(i,0,500,7199); while(i BSRR = 0X03; while(i 200) Time_Configuration(i,0,500,7199); i = i-50; Delay(70); for(;i 170; i = i - 5) Time_Configuration(i,0,500,7199); Delay(80); 调用此函数,实现小车的减速,减速过程,我们也分为两级。第一级为快速减速,第二级为慢速减速。使小车平稳减速。9void Brake() GPIOD-BSRR = 0x03; G

19、PIOA_Conf(); GPIOA-BSRR = 0x0f;调用该函数,小车将停止。同时后面尾灯开启。3.遥控系统3.1 遥控器简介我们小组使用的遥控器发射编码为NEC协议, NEC编码协议中,遥控器每发送一个8位数据,可以分为5个部分:图 3.1 NEC协议编码规则当按下遥控器上的任意一个键时,遥控器将发送一个38KHz的载波信号,根据NEC编码协议,如果发送数据位为1,则向外发送38KHz的载波信号,持续发送0.56ms.然后停止发送1.685ms后继续发送下一位。如果发送数据位为0,则红外遥控向外发送38KHz的载波信号,持续发送0.56ms,然后停止发送0.565ms后继续发送下一位

20、。3.2 接收探头与解码接受红外信号部分,我们采用HS0038接收探头,HS0038共三个引脚,分别为,OUT、VCC、GND。通电后,当没有收到红外信号时,OUT端口默认为高电平。接受端口信号与红外遥控发送信号电平相反。在解码方面,接收探头接受到38KHz的载波后,输出端OUT电平拉低。由于NEC发射编码中,采用的是38KHz载波表示高,无发射表示低。所以在接受探头部分的电平高低,与发射部分刚好相反。解码部分,数据1,0的电平宽度为别是:图 3.2 NEC协议1、0电平宽度由于每个数据位开始低电平均为0.56ms,所以,我们使用TIM3定时器,准确捕获到每位数据高电平持续时间。通过捕获到的值

21、,来确认1和0.通过软件解码时,首先接受到引导码,9ms的低电平和4.5ms的高电平,然后是地址码和地址反码,最后是数据码和数据反码。在程序设计上,我们定义个unsigned char型数组,分别记录下地址码、地址反码、数据码、数据反码。取出数组下标为2和3的值,将下标为3的数组数据取反,判断是否相等,如果不相等,表示解码数据有误;如果相等,表示解码正确。3.3 红外控制将stm32的外部中断3端口与红外探头的输出端相连,捕捉红外遥控发射来的信号。外部中断端口程序配置如下:1.void EXTI3_Configration()/*配置PC3端口,作为外部中断触发端口*/ RCC_APB2Per

22、iphClockCmd(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);/*外部中断线配置,设置为上

23、升沿触发*/ 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_InitStru

24、cture.NVIC_IRQChannelPreemptionPriority = 0x01;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);配置好外部中断后,当stm32上电后,便会实时监控PC3端口,当接受到红外信号后,便产生一个中断信号,调用中断处理函数,处理该事件,下面为中断处理函数,主要是解码红外信号:2.void EXTI3_IRQHandler(void)int i,j

25、,Counter = 0;char IR4 = 0;char ch1=0,ch2=0;if(EXTI_GetITStatus(EXTI_Line3) != RESET) TIM3-CNT = 0; TIM_Cmd(TIM3,ENABLE); while(TIM_GetCounter(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_G

26、etCounter(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 CNT = 0; TIM_Cmd(TIM3,ENABLE); while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3); Counter = TIM_GetCounter(TIM3); TIM_Cmd(TIM3,DIS

27、ABLE); ch1 = ch11; if(Counter 840) ch1 = ch1|0x80; else ch1 = ch1|0; Counter = 0; IRi = ch1; ch1 = IR2; ch2 = IR3; ch2 = ch2; if(ch1 = ch2) switch(ch1) case 0x07:LeftSlideFront();break; case 0x09:RightSlideFront();break; case 0x40:Front();break; case 0x19:Back();break; case 0x16:LeftSlideBehind();br

28、eak; case 0x0d:RightSlideBehind();break; case 0x0c:Upshift();break; case 0x5e:SlowDown();break; case 0x15:Brake();break; default :Brake();break; Delay(500); EXTI_ClearITPendingBit(EXTI_Line3); 这个函数为中断处理函数,在中断处理函数中,我们又用到了一个TIM3定时器,该定时器主要是解码红外信号,根据上文所述的0,1编码规则,用TIM3定时器,所捕获到的值,来判断信号0,1,实现软件解码红外信号。下面为TIM3定时器的配置:3. void TIM3_Configuration() TIM_DeInit(TIM3);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);TIM_TimeBaseStructure.TIM_Period = 50000; TIM_TimeBaseStructure.TIM_Prescaler

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1