西北农林科技大学智能小车实习总结(完整版)_图文内容摘要:

1300)。 P1_1=0。 P1_0=1。 delay_nus(1700)。 P1_0=0。 delay_nms(20)。 } } int main(void) { uart_Init()。 printf(Program Running!\n)。 int counter。 for(counter=1。 counter=1000。 counter++) { P1_4=1。 delay_nus(1000)。 P1_4=0。 delay_nms(1000)。 } while(1) 7 { if((P1_5state()==0)amp。 amp。 (P2_3state()==0)) { Backward()。 Left_Turn()。 Right_Turn()。 } else if(P1_5state()==0) { Backward()。 Right_Turn()。 } else if(P2_3state()==0) Backward()。 Left_Turn()。 } else Forward()。 } } ② 程序解释:舵机小车触须导航程序流程图如图 15所示: 图 15 舵机小车触须导航程序流程图 8 舵机小车的光敏电阻导航任务实现 ① 舵机小车的光敏电阻导航程序 include include int counter。 int P1_5state(void) /*获取 P1_5 口的状态 */ { return(P1amp。 0x20)?1:0。 } int P2_3state(void) /*获取 P2_3 口的状态 */ { return(P2amp。 0x08)?1:0。 } int main(void) { uart_Init()。 /*串口初始化 */ printf(Program Running!\n)。 for(counter=1。 counter=1000。 counter++) /*开始复位信号 */ { P1_4=1。 delay_nus(1000)。 P1_4=0。 delay_nus(1000)。 } while(1) { if((P1_5state()==0)amp。 amp。 (P2_3state()==0)) /*都探到阴影,向前运动*/ { P1_1=1。 delay_nus(1700)。 P1_1=0。 P1_0=1。 delay_nus(1300)。 P1_0=0。 } else if(P1_5state()==0) /*只有左边的探测到阴影,向左转 */ { P1_1=1。 delay_nus(1500)。 P1_1=0。 P1_0=1。 delay_nus(1300)。 P1_0=0。 } else if(P2_3state()==0)/*只有右边的探测到阴影,向右转 */ { P1_1=1。 delay_nus(1700)。 P1_1=0。 P1_0=1。 delay_nus(1500)。 9 P1_0=0。 } else /*没有探测到阴影,静止不动 */ { P1_1=1。 delay_nus(1500)。 P1_1=0。 P1_0=1。 delay_nus(1500)。 P1_0=0。 } delay_nms(20)。 } } ② 程序解释:将光敏电阻与 和 相连,分别获取 P1_5 口和 P2_3 口的状态,然后将信号复位。 若光敏电阻两侧都探到阴影,向前运动;只有左边的探测到阴影,向左转 ;没有探测到阴影,静止不动。 舵机小车的红外导航任务实现(避让悬崖) ① 舵机小车的红外导航程序 include include include define LeftIR P1_5 define RightIR P3_6 define LeftLaunch P1_4 define RightLaunch P3_5 void IRLaunch(unsigned char IR) { unsigned int counter。 if(IR==39。 L39。 ) for(counter=0。 counter1000。 counter++) { LeftLaunch=1。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 LeftLaunch=0。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 } else for(counter=0。 counter1000。 counter++) { RightLaunch=1。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 RightLaunch=0。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 } } void Forward(void) { 10 P1_1 = 1。 delay_nus(1700)。 P1_1 = 0。 P1_0 = 1。 delay_nus(1370)。 P1_0 = 0。 delay_nms(20)。 } void Left_Turn(void) { int i。 for( i=1。 i=23。 i++) { P1_1=1。 delay_nus(1300)。 P1_1=0。 P1_0=1。 delay_nus(1370)。 P1_0=0。 delay_nms(20)。 } } void Right_Turn(void) { int i。 for( i=1。 i=23。 i++) { P1_1=1。 delay_nus(1700)。 P1_1=0。 P1_0=1。 delay_nus(1700)。 P1_0=0。 delay_nms(20)。 } } void Backward(void) { int i。 for( i=1。 i=65。 i++) { P1_1=1。 delay_nus(1300)。 P1_1=0。 P1_0=1。 delay_nus(1700)。 P1_0=0。 delay_nms(20)。 } } int main(void) { int irDetectLeft,irDetectRight。 int counter。 uart_Init()。 for(counter=1。 counter=1000。 counter++) { P1_3=1。 delay_nus(1000)。 P1_3=0。 delay_nus(1000)。 } do { 11 IRLaunch(39。 R39。 )。 irDetectRight = RightIR。 IRLaunch(39。 L39。 )。 irDetectLeft = LeftIR。 if((irDetectLeft==0)amp。 amp。 (irDetectRight==0)) { Backward()。 Left_Turn()。 Left_Turn()。 } else if((irDetectLeft==0)amp。 amp。 (irDetectRight==1)) { Backward()。 Right_Turn()。 } else if((irDetectRight==0)amp。 amp。 (irDetectLeft==1)) { Backward()。 Left_Turn()。 } else Forward()。 } while(1)。 } 舵机小车的方案改进 将触须避障与红外蔽障程序融合,流程图如图 16 所示: 图 16 触须避障与红外蔽障程序融合流程图 舵机小车小结 这次的小车是舵机小车,对于舵机以前没有接触过,所以要先看舵机的原理。 通过此次的舵机小车实习,我 认识到基本实习的流程,掌握了舵机小车的组装,以及舵机小车 的基本工作原理,掌握了舵机小车的基本编程,并加强了团队 12 合作意识。 舵机 小车要先进行舵机的调零,调零之后我们又进行了小车的组装,在组装的时候接触了面包板, 了解了面包板的接线方法。 由于前面进行过步进 小车的实习 ,所以 这个小车的 组装连线很快就弄 好了。 下面就是舵机基本运动 的调试 (前进、后退、左右转弯) ,因为每个舵机的转速不同,当前进的时候不走直线,因此我们要不断地改写延迟的时间,在不断的实验下最后终于完成 了小车的基本运动。 然后进行触须导航的程序调试,我们遇到了触须导航不灵敏的问题,后来发现是两个触须接触短路造成的。 接下来是驱光导航的任务实现,我们遇到了光敏电路单方向不灵敏的问题,但是不清楚是单片机接线错误还是传感器失灵。 在老师的指导下,我们将两个光敏电阻对调接入,发现另一边出现问题而原来的一边可以实现驱光导航,所以我们确定了是传感器的损坏影响了驱光导航,随后就完成了此次项任务。 随后就是避障,我们仔 细看了电路图,明白了原理,开始程序的调试,在实验过程中,我们的红外蔽障起初没有成功,原因在于接线太多,导致短路。 由于小车是靠碰到快要接触到墙壁 的时候 有红外反射信号,使小车 转动,所以要有后退的过程,所以我们在 红外接收器检测到信号 的时候后退并且右转。 旋转角度是 90176。 避让悬崖的程序调试类似。 最后是舵机小车的寻迹 ,按照上次 步进 小车的寻迹经验,很快编号程序。 可是转弯的时候由于转弯延迟太大,小车不稳,只有改变小车转弯的延迟,经过几次实验完成了寻迹。 由于舵机小车的面包板容量有限,我们没有实现舵机小车的任务集成。 直流电机小车任务 、单电机在控制器作用下实现具体机械构件的控制; 熟练掌握控制器采集多类型、多数量传感器信息并通过复杂电路控制多电机实现对多机械构件的控制; 熟练掌握直流电机在控制器作用下,驱动机械构件实现复杂运动。 直流电机小车控制原理 直流电机小车基本运动控制原理 每个直流电机需要三个控制信号 EN IN IN2。 EN1 是使能信号。 选用一路 PWM 连接 EN1 引脚,通过调整 PWM 的占空比可以调整电机的转速, IN IN2 为电机转动方向控制信号。 IN IN2 分别为 1,0 时,电机正转;反之电机反转。 为节省单片机引脚,可只用一路 I/O 口,经反向器 74HC14 分别接 IN1 和 IN2 引脚, 13 控制电机的正反转。 电机正反转的逻辑如表 21所示。 表 21直流电机正反转逻辑表 IN1 IN2 EN1 电机 0 0 0 不转 0 1 0 不转 1 0 0 不转 1 1 0 不转 0 0 1 不转 0 1 1 正转 1 0 1 反转 1 1 1 不转 小车的四路直流电机,分别用 3个控制信号 EN IN IN2 控制,然后可实现小车的前进、后退、左转、右转。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。