“探月小车”的设计与制作_毕业设计(编辑修改稿)内容摘要:

34 29 23 32 31 17 15 34 32 CON4 5 V GND GPF0 GPF1 GPF2 GPF3 GPF4 GPG3 GPG5 GPG2 GPE11 温度 GPG3 GPG10 TOUT1 TOUT0 GPG1 GPF6 TOUT1 ○ ○ ○ ○ ○ ○ ○电 机 驱 动红 黄 绿○ ○ ○○ ○ ○ ○ ○ ○ ○ ○○ ○○ ○ ○ ○ ○ ○ ○ ○○ ○ ○ ○ ○ ○ ○ ○ ○ ○电 压 比 较 电 路○ ○ ○○ ○ ○ ○ ○ ○ ○ ○ ○○ ○ ○灰 度 传 感 器5 VG P G2G N DGNDGNDGNDGNDGND5 VGNDGNDGND3 . 3 V3 . 3 VGNDGNDGNDGNDGNDGNDGND5 V输入1输入5输入4输入4输入3输入3输入2输入1输入2输入5GPF0GPF3GPF2GPF4GPF1备用备用备用备用备用备用主 板 芯 片 引 出 的 输 入 / 输 出光 电 开 关 传 感 器7 6 5 4 3 2 18信 号 输 出信 号 输 出红 黄 绿○ ○ ○G P F65 VG N D温 度 传感 器○ ○ ○5 VG N D3 4G P G1T O UT 0GPF1G P E1 3T O U T1G P E 11G PG 10光 电 开 关 传 感 器5 V5 V5 V5 V 小车具体引脚的接法: 主板 (CON4)芯片的输入输出 引脚 名称 功能 1 5V 5V 电源输出 工位号: 20xx029 22 2 5V 5 电源输出 3 GND 地 9 GPF0 循迹输入 5 10 GPF1 循迹输入 4 11 GPF2 循迹输入 3 12 GPF3 循迹输入 2 13 GPF4 循迹输入 1 18 GPG3 左电机正反转 20 GPG5 右电机正反转 28 GPG2 光电开关传感器 15 GPF6 光电开关传感器 17 GPG1 电机驱动输入 25 GPE11 电机驱动输入 23 GPG10 电机驱动输入 22 GPG9 超声波 27 GPE13 电机驱动输入 31 TOUT0 左电机速度控制 pwm 34 温度传感器 32 TOUT1 右电机速度控制 pwm 循迹(电压比较电路) 引脚 功能 1 循迹模块 1 2 循迹模块 2 3 循迹模块 3 4 循迹模块 4 5 循迹模块 5 工位号: 20xx029 23 6 备用 7 备用 8 备用 5V 5V 电源输入 GND 接地 电机驱动模 块 引脚 功能 GPG3 左电机正、反转控制 TOUT0 左电机速度控制输出 pwm TOUT1 右电机速度控制输出 pwm GPG5 右电机正、反转控制 GPG1 电机驱动输入 GPE11 电机驱动输入 GPG10 电机驱动输入 GPE13 电机驱动输入 VCC 8V 电池直接为芯片提供电压 GND 接地 工位号: 20xx029 24 四、测试说明 测试前整个轮子组装完整,并且各个功能模块正常。 测试步骤: a) 测试灰度传感器 将小车放在模拟月球环境下的标志线上,从左边第一个,在白线附近左右移动 , 在白线上的 信号指示灯是否熄灭 , 灰线上是否点亮 若在白线上指示灯点亮 , 顺时针旋转模拟数字转换板上 对应的精密可调电阻,将调到指示灯熄灭即可 , 样一次把五个灰度传感器调整好 , 后启动循迹测试程序 , 照上述说明将循迹模块调整到最优状态。 b) 测试红外光电开关传感器 在红外光电传感器正前方 20cm 处放置一个物体,看传感器背部指示灯是否点亮,若没有 点亮 ,则顺时针旋转背部的旋钮,直到指示灯点亮为止, 反之逆时针旋转至熄灭状态即可。 说明:设置红外光电传感器的距离小于等于 20cm 是为了防止小车检测到模拟月球环境四周的挡板而引起小车的误判。 c) 测试 超声波传感器 在超级终端里面运行程序,将标志物放置在超声波传感器的正前方,通过改变标志物的距离,观察超声波测试的距离。 d) .测试温度传感器 在超级终端运行温度测试程序,观察显示的温度与环境温度是否相同。 e) .整体测试 将探月小车放在模拟月球的环境下的起始点,将电源打开,并随机放置三个标志物,在上位机的控制台上启动小车,同时观察小车传回来的数据。 附录一: 程序清单: define _turn_back_L1 700 define _turn_back_L2 700 define _turn_L1 0 define _run1 2500 define _other_turn1 400 define _run2 20xx define _other_turn2 520 define _run3 400 define _round 200 //1 is white line , 0 is black line define WHITE_LINE 1 define PWM_IOCTL_SET_FREQ 1 define PWM_IOCTL_STOP 0 工位号: 20xx029 25 define LCNT 5 define L0 0 define L1 1 define L2 2 define L3 3 define L4 4 define L5 5 define L6 6 define L7 7 define FL1 1 define FL2 7 define FR1 9 define FR2 10 define DIS 6 define STOPDIS 200 define MINDIS 300 define LOW 0 define HIGHT 1 define HIGHT2 0x18 define LOW2 0x03 define FWD 0 define BCK 1 define LEFT 1 define RIGHT 1 define NOTURN 0 define BIGLEFT 2 define BIGRIGHT 2 define LONGRUN 4 define GET_IMG 1 define NO_IMG 0 define TURE 1 define FALSE 0 工位号: 20xx029 26 extern char Color[20]。 extern char result。 //float TC=0。 char strings[4000]。 char start_check_way = FALSE。 int debug_flag = 1。 int OUTIO_fd。 int INIO_fd。 int last_turn=0。 int img_=0。 char Flag_END =0。 long len_way=0。 struct _freqs { int freq1。 int freq2。 }。 struct _freqs myfreqs。 static int PWM_fd = 1。 static void close_buzzer(void)。 void openINIO(void)。 int car_turn_degree(int x, int direct, int Fg)。 // m=1 1ms void delay(int m) { int i,j,k。 for (i=0。 im。 i++) for (j=0。 j34000。 j++)。 } void delayus(int m) { int i,j。 for (i=0。 im。 i++) 工位号: 20xx029 27 for (j=0。 j34。 j++)。 } static void open_buzzer(void) { PWM_fd = open(/dev/newpwm, 0)。 if (PWM_fd 0) { perror(open pwm_buzzer device)。 exit(1)。 } // any function exit call will stop the buzzer atexit(close_buzzer)。 return。 } static void close_buzzer(void) { if (PWM_fd = 0) { ioctl(PWM_fd, PWM_IOCTL_STOP)。 close(PWM_fd)。 PWM_fd = 1。 } } static void set_buzzer_freq(struct _freqs freqs) { // this IOCTL mand is the key to set frequency //printf( Set myfreqs1:%d, myfreqs2:%d. \n,)。 int ret = ioctl(PWM_fd, PWM_IOCTL_SET_FREQ, amp。 freqs)。 if(ret 0) { perror(set the frequency of the buzzer)。 exit(1)。 } } void forward() { ioctl(OUTIO_fd,0,FL1)。 ioctl(OUTIO_fd,1,FL2)。 ioctl(OUTIO_fd,0,FR1)。 ioctl(OUTIO_fd,1,FR2)。 } 工位号: 20xx029 28 void back() { ioctl(OUTIO_fd,1,FL1)。 ioctl(OUTIO_fd,0,FL2)。 ioctl(OUTIO_fd,1,FR1)。 ioctl(OUTIO_fd,0,FR2)。 } void turn_big_left() { ioctl(OUTIO_fd,1,FL1)。 ioctl(OUTIO_fd,0,FL2)。 ioctl(OUTIO_fd,0,FR1)。 ioctl(OUTIO_fd,1,FR2)。 } void turn_big_right() { ioctl(OUTIO_fd,0,FL1)。 ioctl(OUTIO_fd,1,FL2)。 ioctl(OUTIO_fd,1,FR1)。 ioctl(OUTIO_fd,0,FR2)。 } static void stop_buzzer(void) { int ret = ioctl(PWM_fd, PWM_IOCTL_STOP)。 if(ret 0) { perror(stop the buzzer)。 exit(1)。 } }。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。