基于MSP430 循迹小车报告 源程序分享

时间:2024.4.14

智能循迹小车报告

摘要:本设计由寻迹信息采集电路,电机驱动电路以及MCU 控制模块四大部分构成。MCU 控制模块是本设计的核心部分,该部分以一片TI 公司的MSP430F149 为控制中心,实现对各个模块的控制。寻迹信息采集部分以反射式光电传感器和比较器组成,将采集到的数据处理后送至单片机。电机由以L298N 为核心部件的电路驱动。该小车具有自动寻迹起始点检测功能。基于稳定的硬件电路设计以及精确可靠的软件算法,小车能够实现预期功能。

关键词:MSP430,L298N,寻迹。

一、            循迹信息采集模块

小车在前进时,要实现寻迹功能,可以采用高灵敏度的反射式光电传感器

对地面进行扫描,再将采集到的数据经过比较器后输出高低电平,最后送入单片机处理。

经过对一只ST188 的测试,发现ST188 接收管输出端的低电平输出大致为0.78V,高电平的输出大致为2.85V,经过比较器后输出低电平为0.03V,高电平为3.26V,能够被单片机所识别。

小车在白色地面行驶时,红外发射管发出的红外信号被反射,接收管收到信号后,输出端为低电平。而当红外信号遇到黑色导轨时,红外信号被吸收,接收管不能接收到信号,输出端为高电平。单片机通过采集每个红外接收管的输出端电压,便可以检测出轨道的位置,从而控制小车的转向,使小车一直沿轨道前进。

ST188采用高发射功率红外光电二极管和高灵敏度光电晶体管组成。检测距离为4-13mm。本小车一共采用了5只ST188光电对管,一只位于黑线上方,两只位于黑线左右用于直走微调,最左最右端两只用于转弯。我们在光电对管的发射端串联的一个电位器来调节发射管的电压,以便在不同的环境下进行调节。

循迹模块原理如图所示:

注意:在实际制作中,光电对管应尽量靠近地面,以减少干扰。

二、    电压比较模块

电压比较模块我们采用了3块LM393芯片,一块LM393芯片上有两个电压比较模块,我们只用到了其中的5个电压比较。我们在LM393的同向输入给定一个参考电压,与在端光电对管的接收端的电压进行比较,若接收端电压比参考电压大,则输出一个  ,反之输出一个   。

三、电机驱动模块

本次小车采用了由两个减速电机和一个万向轮制作的三轮移动平台,在电机驱动方面采用了L298来控制两个减速电机 。 MSP430F149 为芯片提供驱动信号,传至PWM 控制各个电机的转速,从而调整小车的前进速度和转向。L298模块的原理图如图所示。

注意:制作L298模块时应注意在芯片后面留散热片的空间。

四、电源模块

采用了一块稳压芯片7805搭建的12V转5V的电路,如图:

五、控制模块

本次设计采用了一片MSP430F149为控制核心,主要用于循迹和电机PWM控制。

六、程序部分

程序开始运行便进入扫描状态,在直走时不断进行左右微调保证小车行走在线中间。走迷宫的程序必须要有优先级,可左转优先或直走优先,在T字口,十字口一律左转或右转。以左转优先为例,程序优先级顺序为:左转>直走>右转>左微调>右微调>原地转圈。

附录:

程序:

1初始化程序(具体PWM自己调):

#include "main.h"

/*******************************************

函数名称:CLK_Init()

功    能:时钟设置

参    数:无

返回值  :无

********************************************/

void Clk_Init(void)

{

uchar i;

BCSCTL1=0x00;             //XT2振荡器、不分频

BCSCTL2=SELM_2+SELS;     //选择MCLK\SCLK的时钟源为高速时钟,不分频

do

{

    IFG1&=~OFIFG;     //清除振荡失效标志

    for(i=0xff;i>0;i--); //等待

}

while ((IFG1&OFIFG)!=0); //等待振荡器工作正常

}

/*******************************************

函数名称:PWM_Init

功    能:初始化PWM

参    数:无

返回值  :无

********************************************/

void delay_us(uint time)

{

    uchar i=0;

 while(time--)

 {

   while((i++)!=8);

   i=0;

 }

}

//延时MS

void delay_ms(uchar time_1) 

{

   while(time_1--)

     delay_us(1000);

}

void PWM_Init()

{

  P4DIR=0xff;              // P4  PWM输出

  P4SEL=BIT1+BIT2+BIT3+BIT5;

  P4DIR=BIT1+BIT2+BIT3+BIT5;

  TBCCTL1|=OUTMOD_7;                //捕获/比较控制寄存器,输出为模式7

  TBCCTL2|=OUTMOD_7;                //PWM RESET/SET模式

  TBCCTL3|=OUTMOD_7;                //TBCCRn--复位

  TBCCTL5|=OUTMOD_7;                 //TBCL0--置位

  TBCCR1 =0;             //P4.1     L298N IN1

  TBCCR2 =0;             //P4.2           IN2

  TBCCR3 =0;             //P4.3           IN3

  TBCCR5 =0;             //P4.5           IN4

  TBCCR0 =1000;

  TBCTL |= TBSSEL_1+MC_1;    //TIMER_B工作于增计数方式

}

void all_init(void)

{

  PWM_Init();

  Clk_Init();

  P2DIR=0x00;              // P2.0---P2.4电压比较结果输入

  P1DIR|=BIT0+BIT1;        //将P3口切换为输出状态

  P1OUT|=BIT0+BIT1;        //ENA,ENB

}

void STRAIGHT(void)  //------------全速前进         

    {

      TBCCR2=400; 

      TBCCR1=0;

      TBCCR5=350;

      TBCCR3=0;

    }

void LEFT(void)     //--------------左转         

    {

      TBCCR2=0;

      TBCCR1=250;

      TBCCR5=250;

      TBCCR3=0;

    }

void RIGHT(void)    //---------------右转         

    {

      TBCCR2=250;

      TBCCR1=0;

      TBCCR5=0;

      TBCCR3=250; 

    }

void LEFTS(void)    //---------------左转微调        

    {

      TBCCR2=100;

      TBCCR1=0;    

      TBCCR5=250;

      TBCCR3=0;

    }

void RIGHTS(void)     //-------------------右转微调       

    {

      TBCCR2=250;

      TBCCR1=0;

      TBCCR5=100;

      TBCCR3=0;   

    }

void STOP(void)     //---------------------停止      

    {

      TBCCR1=0;

      TBCCR2=0;

      TBCCR3=0;

      TBCCR5=0;   

    }

void circle(void)

     {

      TBCCR2=250; 

      TBCCR1=0;

      TBCCR5=0;

      TBCCR3=200;

      

     }

//////////////////////////////////////////////////////////////////

2逻辑判断程序:

#include "main.h"

void judge(void)

{

while(1)

{

  if((data&0x01)==0x01)          //左优先

  {

       delay_us(100);

        if((data&0x01)==0x01)

        {

          //LEFT();

          //delay_ms(10);

          STRAIGHT();        //冲出一段距离

            delay_ms(10);

            LEFT();          //左转到中间灯离开黑线

            delay_ms(35);        //时间自己微调

         

               while(1)

               {

                

                

                  LEFT();

                 

                 if((data&0x04)==0x04)

                 {

                   delay_us(100);

                 if((data&0x04)==0x04)    //转到中间的灯在线上

                   break;

                 }

               }

               //STRAIGHT();

              break;

           }

        break;

     }

    

    

 if((data&0x04)==0x04)       //优先级2  2黑    直走 

  {

    delay_us(100);

    if((data&0x04)==0x04)

    {

   STRAIGHT();

    break;

    }

    break;

  }

 

 

    

   if((data&0x10)==0x10)                        //优先级3 右转  5黑

   {

 delay_us(100);

    if((data&0x10)==0x10)

    {

     STRAIGHT();

 delay_ms(5);

     while(1)

               {

                RIGHT();

                 if((data&0x04)==0x04)

                 {

                  delay_us(10);

                 if((data&0x04)==0x04)

                   break;

                 }

               }

     //STRAIGHT();

    break;

    }

    break;

  }

 if((data&0x02)==0x02)            //左转微调  2黑

  {

   delay_us(100);

    if((data&0x02)==0x02)

   

    LEFTS();

   

 break;

 }

     

   

 

    if((data&0x08)==0x08)            //右转微调    4黑 

  {

     delay_us(100);

    if((data&0x08)==0x08)

   

     

                 RIGHTS();

                 

      

             

    break

   

  }

 

 

 

 

 

 if((data&0x1f)==0x00)                       //优先级4 原地转圈°   12345白

  {

     delay_ms(10);

    if((data&0x1f)==0x00)

    {

   

    while(1)

               {

                 circle();

                 if((data&0x1f)!=0x00)

                 {

                   delay_us(100)           //转到不为全白;

                 if((data&0x1f)!=0x00)

                   break;}

               }

    break;

    }

    break;

 }

 

 

 

  else                         

  {

    STOP();

    break;

  }

       

}

}


第二篇:循迹小车报告


循迹小车设计报告

学校:定西师范高等专科学校 产品名称:循迹小车

日期:二〇一一年八月十八日

摘要:

本设计是一种基于单片机控制的简易自动寻迹小车系统,包括小车系统构成软硬件设计方法。小车以AT89C51 为控制核心, 用单片机产生PWM波,控制小车速度。利用红外光电传感器对路面白色轨迹进行检测,并将路面检测信号反馈给单片机。单片机对采集到的信号予以分析判断,及时控制驱动电机以调整小车转向,从而使小车能够沿着白色轨迹自动行驶,实现小车自动寻迹的目的。

循迹小车的电路系统包括电源模块、单片机模块、传感

器模块、电机驱动模块。

一、工作原理:

1.利用红外采集模块中的红外发射接收对管检测路面上的轨迹

将轨迹信息送到单片机

2.单片机通过输入的信息分别控制小车左右两个电机的转速,用来控制小车的方向

3.最终完成智能小车可以按照路面上的白色轨迹运行

二、设计方案

该车采用红外传感器对白色路面进行道路检测,把采集到的信号传给AT89C51单片机,AT89C51单片机根据收到的信号判断小车当前状态,通过电机驱动芯片L298N发出控制命令,控制电机的工作状态以实现对小车姿态的控制。

三、硬件模块设计:

3.1 电源模块:

电源采用自制直流稳压电源,通过对220V的交流电压的变压,整流、滤波、稳压,分别输出12V和5V的直流电压。用来给小车各模块供给所需电压。 - 1 -

电源电路如图:

循迹小车报告

3.2电机驱动模块:

电机驱动芯片L298N是SGS公司的产品,内部包含4通道逻辑驱动

电路。是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。其引脚排列如图1中U4所示,1脚和15脚可单独引出连接电流采样电阻器,形成电流传感信号。L298可驱动2个电机,OUT1、OUT2和OUT3、OUT4之间分别接2个电动机。5、7、10、12脚接输入控制电平,控制电机的正反转,ENA,ENB接控制使能端,控制电机的停转。也利用单片机产生PWM信号接到ENA,ENB端子,对电机的转速进行调节。

L298N的逻辑功能:

循迹小车报告

- 2 -

外形及封装:

循迹小车报告

循迹小车报告

L298N电路原理图:

循迹小车报告

3.3 传感器模块:

主要器件简介:

1.红外线发射管也称红外线发射二极管,属于二极管类。它是可以将电能直接转换成近红外光(不可见光)并能辐射出去的发光器件,主要应用于各种光电开关及遥控发射电路中。

- 3 -

2.红外线接收管是将红外线光信号变成电信号的半导体器件,它的核心部件是一个特殊材料的PN结,和普通二极管相比,在结构上采取了大的改变,红外线接收管为了更多更大面积的接受入射光线,PN结面积尽量做的比较大,电极面积尽量减小,而且PN结的结深很浅,一般小于1微米。红外线接收二极管是在反向电压作用之下工作的。没有光照时,反向电流很小,称为暗电流。当有红外线光照时,携带能量的红外线光子进入PN结后,把能量传给共价键上的束缚电子,使部分电子挣脱共价键,从而产生电子-空穴对。它们在反向电压作用下参加漂移运动,使反向电流明显变大,光的强度越大,反向电流也越大。红外线接收二极管在一般照度的光线照射下,所产生的电流叫光电流。如果在外电路上接上负载,负载上就获得了电信号,而且这个电信号随着光的变化而相应变化。

3.CD4069是一个六非门电路,就是在一个集成电路中有六个非门,非门的功能是(反相):输入1则输出为0,输入0则输出1。本寻迹为7组非门,共用了三个CD4069。其中:第一路为13输入12输出和9输入8输出;第二路1输入2输出和5输入6输出;第三路为13输入12输出和9输入8输出;第四路为1输入2输出和5输入6输出;第五路为9输入8输出和5输入和6输出;第六路为13输入12输出和11输入10输出;第七路为1输入2输出和3输入4输出;7脚是VSS,14脚是VCC。

原理:光有反射的特性,当前方的红外发射出来的光线遇到物体时,就会形成反射的光线,而这个经反射的红外光线刚好被红外接收探头接收到。当红外接收探头接收到信号后,再将信号送到单片机由单片机内部的程序来控制电动车的运行情况。红外发射管发出红外线,当发出的红外线照射到白色的平面,光线将被反射,若红外接收管接收到反射回的光线则检测出白线继而输出低电平,若接收不到发射管发出的光线则检测出黑线继而输出高电平。

电路设计:如下图所示的寻迹电路,经过施密特触发器CD4069整形放大,当检测不到白线时,发射管发出的光将不能被接收管接收,接收管截至,后级CD4069将输出高电平,当检测到白线时,发射管发出的光经过板面反射后被接收管接收,接收管导通,后级CD4069输出低电平。单片机通过读取由CPLD检测 - 4 -

的高低电平来判断电机的运动方向。

传感器电路图:

循迹小车报告

四、软件设计:

;*************************************************

;P1为电机控制信号输出端

;P2为循迹信号输入端,P2.7不连接导线,循迹灯1连接P2.0,2连P2.1…… ;*************************************************

org 0000h ajmp main

main:

mov 60h,#1 mov 61h,#50 - 5 -

mov 62h,#100

mov 63h,#150 mov 64h,#200 mov 70h,#200 mov 71h,#150 mov 72h,#100 mov 73h,#50 mov 74h,#1

setb P1.0 setb P1.1 setb P1.2 setb P1.3 acall zhizou jiance:

mov P3,P2 mov a,P2

jb P2.0,jiance3 jb P2.6,jiance3 ajmp zhidong jiance3:

jnb P2.2,jiance0 jnb P2.3,jiance0 jnb P2.4,jiance0 ajmp zhidong

jb P2.2,jiance0 jb P2.3,jiance0 jb P2.4,jiance0 ajmp zhizou jiance0: 电机左使能信号输出端 电机左速度控制信号输出端电机右使能信号输出端 电机右速度控制信号输出端边上两个全白则制动 中间三个全黑则制动 中间三个全白则直走

- 6 - ;; ;; ; ; ;

jnb P2.1,jiance1 jb P2.2,jiance2 jiance1:

jb P2.4,zuozhuan jiance2:

jnb P2.5,youzhuan ajmp zhizou ajmp jiance

zhizou:

setb P1.0

setb P1.1

setb P1.2

setb P1.3

ajmp jiance

zhidong:

setb P1.0

clr P1.1

setb P1.2

clr P1.3

ajmp jiance

zuozhuan:

setb P1.0

clr P1.1

setb P1.2

setb P1.3

mov r0,#64h

- 7 -

mov r1,#74h acall delay1 clr P1.3

acall delay2 setb P1.3 ajmp jiance

youzhuan:

setb P1.0 setb P1.1 setb P1.2 clr P1.3 mov r0,#64h

mov r1,#74h acall delay1 clr P1.1

acall delay2 setb P1.1 ajmp jiance

delay1:

mov a,@r0 mov r4,a d1:

mov r5,#2 d2:

djnz r5,d2 djnz r4,d1 ret

- 8 -

delay2:

mov a,@r1 mov r6,a

d3:

mov r7,#2

d4:

五、总结与体会:

根据本次设计要求,我们小组系统地阅读了大量的资料,并认真分析了设计课题的需求,还系统学习了51系列单片机的工作原理及其使用方法,并独自设计循迹小车的整个项目。

虽然条件艰苦,但经过不懈钻研和努力,进行了多次试验,最终做出了整个小车的硬件系统,然后结合课题任务和小车硬件进行了程序的编制,本系统能够满足设计要求,能够使小车沿引白色线路行驶,但由于经验能力有限,该系统还存在着许多不尽人意的地方有待于进一步的完善与改进。

通过本次设计,不仅是对我们课本所学知识的考查,更是对我的自学能力和收集资料能力以及动手能力的考验。使我们意识到了实验的重要性,在硬件制作和软件调试的过程中,出现了很多问题,最终都是通过实验的方法来解决的。还有以前对程序只是一个很模糊的概念,通过这次的课题设计使我对程序完全有了一个新的认识,并能使用汇编语言熟练的进行编程了。通过本次课题设计,极大的锻炼了我们的思考和分析问题的能力,并对单片机有了一个更深的认识。

总之,在课题设计的过程中,无论是对于学习方法还是理论知识,我们都有djnz r7,d4 djnz r6,d3 ret end - 9 -

了新的认识,受益匪浅,这将激励我们在今后再接再厉,不断完善自己的理论知识,提高实践运作能力。感谢指导老师在我们准备阶段的关怀和帮助以及对我们辛勤的指导。

- 10 -

更多相关推荐:
循迹小车实践报告

江西理工大学创新实验报告题目循迹小车的制作学院电气工程与自动化学院专业自动化班级学生黄学号113盼时间20xx年8月2号自动循迹小车目录目录摘要1任务及要求11任务2系统设计方案21小车循迹原理22控制系统总体...

智能循迹小车课程设计报告

青岛理工大学琴岛学院课程设计报告课题名称智能循迹机器人小车学院机电工程系专业班级电气工程及其自动化学号20xx020xx29学生许辉指导老师张岐磊青岛理工大学琴岛学院教务处20xx年12月14日

智能循迹小车设计报告

电子作品设计报告项目名称智能小车学院机电工程学院专业应用电子技术班级组别第三组姓名杨磊赖焕宁梁广生指导老师杨青勇玉宁1目录摘要3关键词3引言3一系统设计311设计要求412车体方案认证与选择4二硬件设计及说明5...

智能循迹小车报告

电子信息专业实验报告课程电子信息系统综合设计实验MCU部分实验题目智能机器小车设计实验总分学生姓名学号学生姓名学号学生姓名学号实验时间地点分组电子信息学院专业实验中心目录一摘要二题目要求三软硬件设计方案四各部分...

智能循迹小车设计报告

电子作品设计报告项目名称智能循迹小车1摘要本组的智能循迹小车是采用自主设计的车体以两个直流电机来驱动小车各个模块自行设计通过反射式红外光电传感器TCRT5000来采集跑道信息传送至主控芯片STC12C5A60S...

循迹小车实验报告

实践设计报告(嵌入式技术实践二)学院:电气工程与自动化学院题目:基于51单片机的循迹小车专业班级:自动化131班学号:19学生姓名:***指导老师:***20xx年6月30日第一章引言1.1设计目的通过设计进一…

循迹小车设计报告-精华51单片机智能小车

设计报告课程机器人工程设计名称智能循迹小车小组成员学号专业机械电子工程日期20xx25指导老师成绩智能小车设计1任务及要求11任务设计一个基于直流电机的自动寻迹小车使小车能够自动检测地面黑色轨迹并沿着黑色车轨迹...

智能循迹小车___设计报告

竞速智能循迹小车设计报告参赛队伍参赛人胡沁玫万超目录摘要引言设计方案报告内容安排技术方案说明一总体模块二设计思路硬件电路的设计一最小系统二电源电路设计三传感器电路四电机驱动电路小车调试小车循迹规则软件系统的实现...

基于51单片机的循迹小车设计

基于89s51单片机的循迹小车设计报告51单片机的循迹小车设计第一章引言11设计目的通过设计进一步掌握单片机的应用特别是在嵌入式系统中的应用进一步学习单片机在系统中的控制功能能够合理设计单片机的外围电路并使之与...

智能循迹小车

智能循迹小车设计专业自动化班级0804班姓名指导老师20xx年8月20xx年10月摘要本课题是基于AT89C52单片机的智能小车的设计与实现小车完成的主要功能是能够自主识别黑色引导线并根据黑线走向实现快速稳定的...

我的智能循迹小车报告

目录摘要31引言42方案选择与论证421循迹模块522车体设计523控制器模块624电源模块625循迹传感器模块626电机模块727电机驱动模块73硬件实现与单元电路设计731为控制器模块设计732光电对管电路...

智能小车循迹报告2

电子技术电子实习报告智能寻迹小车制作学院专业班级学生姓名学生学号指导教师完成时间成绩电子实习智能寻迹小车一实验目的1利用所学过的基础知识通过本次电子实习培养独立解决实际问题的能力2巩固本课程所学的理论知识和实验...

循迹小车报告(37篇)