1、2.1、控制模块 62.2、电机驱动模块 62.3、传感器模块 7三、软件设计 8前言本小组的只能小车结构简单,并且认为题目为画线而非寻线,因此传感器只有一个,为霍尔传感器用于测量小车走过的距离,然后通过单片机控制,以及小键盘的输入使其实现各种的绘图。单片机运用的是新手最普遍用的51单片机,该单片机经典,较为简单,其功能也不弱,性价比比较高。一、 设计思路题目为用小车画出指定的图案,并且只有指定长度的支线,或指定边长的矩形等指定形状的且只有直角的转弯。本这从最简单的方案出发,即,每次用小键盘对单片机输入每次需要画图的要图,如“画一个边长100的矩形”即按“1”“0”“0”“右转”“1”“0”“
2、0”“右转”“1”“0”“0”“右转”“1”“0”“0”“确认”,那么在单片机的控制下,并且通过霍尔传感器对距离的测量,实现100的行走,但由于人工放置的小磁铁精度不太够,所以这100肯定是有偏差,在目前的条件下,使得本小车的精度不足。至于左、右的转弯,由于本小车是由两个马达的后轮以及单个前万向轮组成,并且笔安装在后轮对轴的正中心,所以直角转弯只需用单片机来控制一个轮向前,另一个轮向后,并且速度一致,再用霍尔传感器使得轮子转动特定的距离即可,当然,还是精度的问题,依旧是个大问题。所以总得来说,本小车就有,控制模块,传感模块以及电机驱动模块。原理图设计: (1)51单片机控制模块 (2)霍尔传感
3、器模块 (3)电机驱动模块 (4)电源供电模块二、 硬件设计2.1、控制模块 因为这次画画小车的动能需求不大,只是画一些基本的图形。因此选择比较容易操作的51单片机系统。51单片机是基础入门的一个单片机,还是应用最广泛的一种。运用51单片机p1.0p1.7控制键盘输入,p0.0p0.3,p2.0p2.1控制电机驱动,XTAL1,XTAL2控制晶振模块,RET控制复位模块。2.2、电机驱动模块 采用LM298控制电机驱动模块,电机驱动有2个直流电机,分别控制不同的轮使它有不同的转速以控制转弯。通过out1out3管脚控制电机的转动。L298N可接受标准TTL逻辑电平信号VSS,VSS可接457
4、V电压。4脚VS接电源电压,VS电压范围VIH为2546 V。输出电流可达25 A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动一台电动机。5,7,10,12脚接输入控制电平,控制电机的正反转。EnA,EnB接控制使能端,控制电机的停转。以下的是L298N功能逻辑图。2.3、传感器模块 小车的传感器一般选用红外线传感器或者霍尔传感器,因为这次小车的所需要的功能不多,因此采用霍尔传感器。一个霍尔元件一般有四个引出端子,其中两根是霍尔元件的偏置
5、电流IC的输入端,另两根是霍尔电压的输出端。如果两输出端构成外回路,就会产生霍尔电流。一般地说,偏置电流的设定通常由外部的基准电压源给出;若精度要求高,则基准电压源均用恒流源取代。为了达到高的灵敏度,有的霍尔元件的传感面上装有高导磁系数的坡莫合金;这类传感器的霍尔电势较大,但在0.05T左右出现饱和,仅适用在低量限、小量程下使用。 三、软件设计本小车使用51单片机,使用KevlC51编写程序。程序的分为,键盘输入数据的识别转化部分,以及霍尔传感器的输入部分以及电机的输出部分。总得来说,本者最简单小车的原则,本程序也是相当的简单,就不详细介绍。程序如下:#include #define ucha
6、r unsigned char code uchar k_tab=0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7, 0xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77; /键值uchar js=0;void delay(unsigned int cnt)/延时函数 while(-cnt); uchar nkey_s0(uchar y) uchar i,b; for(i=0;i,16;i+) b=k_tabi; if(b=y) return i; uchar nkey() uchar a,b; P1=0xf0; a=P1; b=a; P
7、1=0xf; a|=b; b=nkey_s0(a); return b;bit keys() uchar a; if(a=0xf0) return 1; else return 0;uchar keyi() while(1) if(keys()=0) delay(9000); if(keys()=0) a=nkey(); if(a0x10&keys()=1) return a; main()uchar x3,i=0,a10,j=0,ks=0,k=0;P0=0x2d; /电机关IE=0x85; /开外中断TCON=0x05; /下降沿触发while(1)/主循环 while(ks=0) if(k
8、eyi()=0) xi=1,i+; if(keyi()=1) xi=2,i+; if(keyi()=2) xi=3,i+; if(keyi()=4) xi=4,i+; if(keyi()=5) xi=5,i+; if(keyi()=6) xi=6,i+; if(keyi()=8) xi=7,i+; if(keyi()=9) xi=8,i+; if(keyi()=10) xi=9,i+; if(keyi()=12) aj=1000*x0+100*x1+10*x2+1,i=0,j+; /左转 if(keyi()=13) xi=0,i+; if(keyi()=14) aj=1000*x0+100*x1+10*x2+2,i=0,j+; /右转 if(keyi()=15) ks=1;aj=1000*x0+100*x1+10*x2+0; /确定delay(99999); for(k=0;k=j;k+) js=0; while(js!=(ak/10)/4) P0=0x36; /电机开 P0=0x2d;=3) if(ak%10=1)P0=0x33; /左转 if(ak%10=2)P0=0x1e; /右转 if(ak%10=0)break; j=0,ks=0;void int0(void) interrupt 0js+;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1