总体设计思路和步骤 寻线型电脑鼠不同于以前的走迷宫,是利用红外传感器进行路线探测并选择前进方向的小型智能机器人。其设计步骤包括:系统设计、利用Altium Designer软件绘制原理图和PCB图,电脑鼠硬件焊接组装、软件代码书写调试和总体调试。硬件部分主要由传感器,单片机,电机驱动组成。传感器采用红外传感器,由发射管和接收管组成,可探测黑线迷宫。单片机采用IAP15W413AS芯片,用于编写和实现程序。电机驱动由单片机产生的PWM以及L9110芯片进行驱动。软件部分主要由产生PWM函数,搜寻路径法则,记录信息,测速盘组成。此课程设计中电脑鼠按照左手法则进行路线搜索,根据测速盘的计数得到迷宫坐标并储存。第一次排除迷宫中的死路,第二次便可沿迷宫中最短路径走出迷宫。 、C51单片机的初始化及底层驱动 - 三、车体转弯控制(左手法则)
- *functionname :void leftMethod (void)
- *parament :none *return value :none
- *description :左手法则 优先级为: 右 -> 前 -> 左 并且存储即将行走的下一个格子的坐标
- voidLeftMethod4()
- {
- if(Left_Detector==0)
- {
- TurnLeft();
- }
- elseif(Front_Detector==0)
- {
- Go();
- }
- else
- if(Right_Detector==1&&Left_Front_Detector==1)
- {TurnRight();}
- elseif(Left_Detector==1&&Front_Detector==1&&Right_Detector==0)
- {
- TurnBack();
- }
- }
- 四、调整函数
- void adjust2()
- {
- if(Front_Detector==0)
- {
- if(Left_Front_Detector==0)
- {
- speed(1,0,0,1);
- }
- elseif(Right_Front_Detector==0)
- {
- speed(0,1,1,0); }
- else
- {
- speed(0,1,0,1);
- }
- }
- else
- {
- if(Left_Front_Detector==0)
- {
- speed(1,0,0,1);
- }
- elseif(Right_Front_Detector==0)
- {
- speed(0,1,1,0);
- }
- }
- }
- void Go()
- {
- speed(0,1,0,1);
- }
- //------------------小车右转函数-------------------//
- void TurnRight()
- {
- //u8 flg=1;speed2(0,1,1,0); //左轮前转,右轮后转
- //left_count=right_count=0;
- /* while(flg==1)
- {
- if(left_count==12|right_count==12)
- {
- speed(0,0,0,0); //两轮停转
- left_count=0;
- right_count=0;
- flg=0;
- }
- }
- for(flg=0;flg<100;flg++)
- {
- Delay(6000);
- }*/
- }
- //------------------小车左转函数-------------------//
- void TurnLeft()
- {
- //u8 flg=1;
- speed2(1,0,0,1); //左轮后转,右轮前转
- //left_count=right_count=0;
- }
- //------------------小车后转函数-------------------//
- void TurnBack()
- {
- u8 flg=1;
- //left_count=right_count=0;
- while(Front_Detector==1)
- {speed2(0,1,1,0);}
- //左轮前转,右轮后转
- }
- //------------------小车停止函数-------------------//
- void Stop()
- {
- // u8 flg=1;
- // left_count=right_count=0;
- speed(0,0,0,0);
- //左轮后转,右轮后转
- }
- 五、速度PWM 设置
- //------调整函数----f_pwm=PCA_clk/256-------//
- void speed(bit a,bit b,bit c,bit d)
- {
- I1=a;
- I2=b;
- I3=c;
- I4=d;
- PCA_PWM0 = 0X00;
- CCAP0H = CCAP0L =39;
- //修改此处数值[0~255]可以调节CCP2_0占空比
- CCAPM0 = 0x42;
- PCA_PWM1 = 0X00;
- CCAP1H = CCAP1L =40;
- //修改此处数值[0~255]可以调节CCP2_1占空比
- CCAPM1 = 0x42;
- }
- void speed2(bit a,bit b,bit c,bit d)
- {
- I1=a;
- I2=b;
- I3=c;
- I4=d;
- PCA_PWM0 = 0X00;
- CCAP0H = CCAP0L =90;
- //修改此处数值[0~255]可以调节CCP2_0占空比
- CCAPM0 = 0x42;
- PCA_PWM1 = 0X00;
- CCAP1H = CCAP1L =90;
- //修改此处数值[0~255]可以调节CCP2_1占空比
- CCAPM1 = 0x42;
- }
- void speed3(bit a,bit b,bit c,bit d)
- {
- I1=a;
- I2=b;
- I3=c;
- I4=d;
- PCA_PWM0 = 0X00;
- CCAP0H = CCAP0L =255;
- //修改此处数值[0~255]可以调节CCP2_0占空比
- CCAPM0 = 0x42;
- PCA_PWM1 = 0X00;
- CCAP1H = CCAP1L =255;
- //修改此处数值[0~255]可以调节CCP2_1占空比
- CCAPM1 = 0x42;
- }
- //-------------------PWM模式使能函数----------------//
- void PWM_Cmd(bit cmd)
- {
- if(cmd==ENABLE)
- CR=1;
- else if(cmd==DISABLE)
- CR=0;
- }
复制代码
|