智能小车设计毕业论文 联系客服

发布时间 : 星期一 文章智能小车设计毕业论文更新完毕开始阅读

青岛理工大学毕业设计(论文)用纸

例如:小车的左直角拐弯的控制代码如下 void CRobot2Dlg::OnButton7() { }

通过运行程序,点击此按钮可以实现小车的左转弯的运动。

2.3.2 下位机程序介绍

A 主要功能及实现

本设计主要实现了只能小车在运动过程中的直行,后退,停止及转弯,下面详细介绍各功能的实现情况。

sbit input1=P1^3; sbit input2=P1^2; sbit input4=P1^0; sbit input3=P1^1; sbit en=P3^6;

分别定义input1,input2,input4,input3为P1口的第3,2,0,1位,以便进行位操作,定义en为p3口的第六位。

首先进行单片机的初始化。

TMOD=0x22; TH0=0x38;

// TODO: Add your control notification handler code here

CSerial ser;

char buf[1]; buf[0]=Rob_left_one; ser.Open(com,9600);

ser.SendData(buf,com);

ser.Close();

页 第13

青岛理工大学毕业设计(论文)用纸

TL0=0x38;

TH1=0xfd; TL1=0xfd; TR0=1; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1; ET0=1;

对定时器方式选择寄存器TMOD的操作,确定是按定时器的工作模式,TH0和TL0分别是定时器0的高低8位,赋初值为0x38,TH1和TL1分别是定时器1的高低八位,赋初值为0xfd。TR0=1,TR1=1表示分别启动T0和T1计数器REN为接收控制位,REN=1表示允许接收。SM0=0,SM1=1表示单片机的串行口的通信方式是10位异步收发方式,所用的波特频率则由定时器控制完成。在中断初始化方面,EA=1表示开单片机所有中断,ES=1开串行口中断,ET0=1开TO中断,初始化完毕,进入主程序循环。

主程序中,建立void carmov(uchar left,uchar right)函数,方便主程序循环语句while()的调用。

利用switch语句的判断,例如小车的右转: case 0x06: carmov(UF,US); case 0x07: carmov(UF,UL); case 0x08: carmov(UF,UM);

break;//小车原地

break;//小车右转弧形拐弯1级 break;//小车右转弧形拐弯2级

单片机对接收到的指令通过上述语句进行判断,若收到的为0x08,则执行第三条语句,调用carmov函数,函数的两个初始值分别为UF和UM,在程序中已定义#define UF 1,#define UM 2,运行carmov函数,首先进行左轮运动情况的判断,在此例中,我们选择左轮的初值为UF。 if(left==UF)

页 第14

青岛理工大学毕业设计(论文)用纸

{ input1=1; input2=0; }

input1和input2分别赋值为1和0,表示小车左轮全速前进。 继续运行程序进行小车的右轮运动情况的判断,此例中,我们选择右轮的初值为UM。 else if(right==UM)

{ if(num<60) }

首先判断num是否小于60,若小于,则将input4和input3分别赋值为1及0,既右轮前进,否则将二者赋值为1和1,右轮停止。

通过左右轮的单独控制,完成小车的向右2级弧形拐弯。在本程序设计中,巧用定时器中断模拟产生了PWM信号,以实现控制舵机。 void tim0() interrupt 1 {

num++; if(num>=90)

{

input4=1; } else { }

input4=1; input3=1; input3=0;

页 第15

青岛理工大学毕业设计(论文)用纸

}

num=0;

简单介绍单片机模拟产生PWM信号。单片机系统实现对电机的控制,必须首先完成两个任务:首先是产生基本的PWM周期信号;其次是脉宽的调整,即单片机模拟PWM信号的输出,并且调整占空比。

在此,我们设计num初值为0,num自加,如果num>=90时,则将num变为0继续中断程序运行,在此我们用定时器中断模拟出PWM波,将其分成90等份,在小车转动过程中,可以限制num值的大小而调整PWM波中高电平的占空比,从而实现小车电机在一个PWM周期波中的转数控制,达到小车拐弯角度的控制[1]。

具体的设计过程:例如想让小车转向左极限的角度,它的正脉冲为2ms,则负脉冲为脉冲周期20ms-2ms=18ms,所以开始时在控制口发送高电平,然后设置定时器在2ms后发生中断,中断发生后,在中断程序里将控制口改为低电平,并将中断时间改为18ms,再过18ms进入下一次定时中断,再将控制口改为高电平,并将定时器初值改为2ms,等待下次中断到来,如此往复实现PWM信号输出到电机。用修改定时器中断初值的方法巧妙形成了脉冲信号,调整时间段的宽度便可使小车运动。

为保证软件在定时中断里采集其他信号,并且使发生PWM信号的程序不影响中断程序的运行(如果这些程序所占用时间过长,有可能会发生中断程序还未结束,下次中断又到来的后果),所以需要将采集信号的函数放在长定时中断过程中执行,也就是说每经过两次中断执行一次这些程序,执行的周期还是20ms。

B 程序流程图

页 第16