北航机电系嵌入式实验报告_第1页
北航机电系嵌入式实验报告_第2页
北航机电系嵌入式实验报告_第3页
北航机电系嵌入式实验报告_第4页
北航机电系嵌入式实验报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、组别嵌入式系统实验报告项目名称:巡线、直线轨迹智能车学号姓名主要工作指导老师:助教:2014年6月17目录1 选题思路11.1 创意来源11.1.1 助教指导12 实现方案22.1硬件分配22.1.1 红外传感器ADC22.1.2 TIM计数和PWM输出控制电机22.1.3码盘22.1.4 EXTI中断处理22.1.5 运行状态指示22.2 USART串口23 程序流程图34 关键代码注解44.1 巡线44.1.1 main函数循环while(1)44.2直线轨迹54.2.1Main函数while(1)54.2.2中断处理子程序64.2.3核心算法:电机PID控制65 调试问题86 现象及输出

2、97 实验课感想107.1课上的收获107.2意见与建议10参考资料11 第 组 嵌入式实验报告 巡线、直线轨迹智能车1 选题思路1.1 创意来源1.1.1 助教指导1.1.2 主题确定近十周的学习,让我们初步掌握了STM32的应用方法,初步拟定小车工作的三种方式:巡线、避障、走直线轨迹。在实际的小车结构改造、代码编写过程中,我们发现巡线和避障的原理、代码编写等过程存在很大的重叠性,于是就放弃了避障功能,仅保留巡线和走直线轨迹两个功能,重点放在提高小车行走精度,降低失误率上。在最后的展示环节,智能车也没让我们失望,过急转弯时敏锐的巡线功能和地面行走所画出笔直的轨迹也得到了老师的高度赞扬!2 实

3、现方案2.1硬件分配2.1.1 红外传感器ADC1. 传感器排列顺序:在小车车头,从右往左依次是AD0 AD3。 2.数据检测:当检测到黑线时,采样的AD值变大(AD0变小)。使用AD0、AD1、AD2和AD3四个传感器进行巡线,便于应对各种复杂路况,提高小车的适应性。2.1.2 TIM计数和PWM输出控制电机TIM1每隔10ms对脉冲信号进行采样累加。TIM2通道2对小车右轮进行码盘脉冲信号的计数。TIM3通道3和通道4输出PWM控制两个电机。TIM4通道1对小车左轮进行码盘脉冲信号的计数。2.1.3码盘从直流伺服电机引出的 6 根线中,Output1 和 Output2 用于控制电机的转速

4、和正反转,VDD 用于给码盘供电,Encoder1A 和 Encoder1B 用于输出脉冲信号。2.1.4 EXTI中断处理EXTI中断为外部按键中断,按键中断功能分配如下:S1切换至方式0(无IPD算法的直线轨迹行走),S2切换至方式1(有IPD算法的直线轨迹行走)。在按键中断响应的过程中,加入防抖动处理,使切换更加准确高效。2.1.5 运行状态指示通过LED的亮灭来指示小车走直线轨迹时的运行状态。LED1亮小车运行方式是方式0,LED2亮小车运行方式是方式1。2.2 USART串口用串口调试助手显示AD值,便于程序的调试。3 程序流程图4 关键代码注解4.1 巡线 4.1.1 main函数

5、循环while(1) while (1) ADC_Ch0_Res = ADC_RegularConvertedValueTab0 - ADC_Calibration_DR; ADC_Ch1_Res = ADC_RegularConvertedValueTab1 - ADC_Calibration_DR; ADC_Ch2_Res = ADC_RegularConvertedValueTab2 - ADC_Calibration_DR; ADC_Ch3_Res = ADC_RegularConvertedValueTab3 - ADC_Calibration_DR; /AD值采集完毕 if(ADC

6、_Ch3_Res>10000&&ADC_Ch0_Res<600) /优先考虑两侧的AD采集数值来控制小车前进方向 Forward_Cmd(); /前进直行 else if(ADC_Ch3_Res>10000) SetSpeed(RightWheel, 90); /右轮正转 SetSpeed(LeftWheel, -60); /左轮反转 Delayb(0x111111); /延时处理,急转弯更充分 else if(ADC_Ch0_Res<600) SetSpeed(LeftWheel, 90); /左轮正转 SetSpeed(RightWheel,-60)

7、; /右轮反转 Delayb(0x111111); /延时处理,急转弯更充分 else if(ADC_Ch1_Res>30000&&ADC_Ch2_Res>30000) Forward_Cmd(); /直行前进 else if(ADC_Ch2_Res>30000) SetSpeed(RightWheel, 80); /右轮正转 SetSpeed(LeftWheel, 0); /左轮不转 else if(ADC_Ch1_Res>30000) SetSpeed(RightWheel,0); /右轮不转 SetSpeed(LeftWheel, 80); /左轮

8、正转 else Forward_Cmd(); /前进直行 4.2直线轨迹4.2.1Main函数while(1)/定义PID的比例系数Kp,积分系数Ki和微分系数Kd(其参数值为实验多次得出)double Kp=0.5;double Ki=0.05;double Kd=9;while (1) if(flag=1) /方式1,进入PID算法控制的直线轨迹行走 if(step=10000)/PID采样时间 in_value=Pulse_A+Pulse_B;/A脉冲数为正,B脉冲数为负,相加得脉冲差值 Ek=in_value;/脉冲差值记录 if(Ek<50&&Ek>-50

9、) SumErr+=Ek;/脉冲差值累加,积分 else SumErr=0; out_value=Kp*Ek+SumErr*Ki+Kd*(Ek-Ek-1);/IPD算法控制 Ek-1=Ek; printf("rn e %d",Ek);/串口调试助手显示两轮脉冲数差值,便与调试参数 vl=out_value/5.022+vl; /输出脉冲数转化为左轮速度 step=0; step+; SetSpeed(RightWheel,50); SetSpeed(LeftWheel,vl); /使左轮速度逼近右轮速度,完成直线行走 else Forward_Cmd(); 4.2.2中断处

10、理子程序 *按键0中断处理 flag=0; GPIO_SetBits(GPIOC,GPIO_Pin_13); /LED2灭 GPIO_ResetBits(GPIOA,GPIO_Pin_8); /LED1 亮 Delay(500);EXTI_ClearITPendingBit(EXTI_Line2); /清除中断标志*按键1中断处理 flag=1; GPIO_SetBits(GPIOA,GPIO_Pin_8); /LED1灭 GPIO_ResetBits(GPIOC,GPIO_Pin_13); /LED2 亮 Delay(500); EXTI_ClearITPendingBit(EXTI_Lin

11、e11); /清除中断标志*脉冲采样TIM1中断处理TIM1_ClearFlag(TIM1_FLAG_Update); TIM1_ITConfig(TIM1_IT_Update,ENABLE); /使能定时器TIM1中断 TIM1_Cmd(ENABLE); /TIM1用于10ms的定时器4.2.3核心算法:电机PID控制if(step=10000)/延时反馈更准确 in_value=Pulse_A+Pulse_B;/A脉冲数为正,B脉冲数为负,相加得脉冲差值 Ek=in_value;/脉冲差值记录 if(Ek<50&&Ek>-50) SumErr+=Ek;/脉冲差值

12、累加 else SumErr=0; out_value=Kp*Ek+SumErr*Ki+Kd*(Ek-Ek-1);/IPD算法控制 Ek-1=Ek; printf("rn e %d",Ek); vl=out_value/5.022+vl; step=0;5 调试问题1. 小车巡线时遇到急转弯会方向选择错误。解决办法:ADC信息采集后,优先处理小车两边的感应信号,既传感器0和3的信号,传感器1、2的采集信息用来辅助进行缓弯和直线行进。2. 串口软件无法使用解决办法:串口软件使用时,尽量先关闭烧写软件,每次观察信号前要先将前面得到的数据清零;先点击“采集数据”再启动小车,方能得

13、到更全面的数据。 3. 小车直线行走时,开始直线性可以,远了之后开始走弧线。解决办法:累积误差导致直线性失真。可以通过加入PID算法的反馈机制,解决误差累计问题,从而实现直线行走。4. 小车直线行走时,无法看出具体的行走轨迹。解决办法:在小车上固定彩色中性笔,让小车在白纸上行走,通过笔尖记录小车的运行轨迹。5. 按键中断响应后,小车运行状态转变不及时。解决办法:加入防抖动环节。6 现象及输出1.巡线: 现象:小车沿着黑线行进。遇到缓弯,通过顺利;遇到急转弯,车头转弯速度会加快,可能会出现轻微抖动。2.直线轨迹 现象:按下按键0,进入方式0,加入PID算法的直线轨迹行走,同时LED1亮,小车在白纸上画出一条笔直的直线;按下按键1,进入方式1,未加入PID算法的直线轨迹行走,同时LED2亮,小车在白纸上画出。7 实验课感想7.1课上的收获在本学期嵌入式系统的实验课上,通过以STM32处理器为控制核心的智能车平台,同时在助教的指导和帮助下,我们初步掌握了嵌入式系统的开发流程,在了解嵌入式处理器的架构和开发的基础上,进行相关功能算法的编写与实践。嵌入式系统的理论课比较抽象,有些知识点难于

温馨提示

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

评论

0/150

提交评论