遥控电动小车装置电赛国一(2)

 

6显示模块的选择

方案一 采用LCD12864液晶显示

LCD12864液晶显示器具有汉字、英文显示的功能;控制简单、显示清晰、美观、耗能低、分辨率较好。

方案二 采用LED数码管显示

LED数码管显示器亮度高、清晰;但是不能显示汉字图形,而且控制较复杂。 6


由于本题要求显示实时坐标,我们考虑到显示信息的可读性和信息的清晰度,我们选择方案一。

三 单片机供电、电机供电供电模块

采用锂电池供电。利用LM2596稳压芯片控制电路,将锂电池电压降至凌阳61单片机可用的5V稳定电压。LM2596稳压模块可以提供5V稳定电压和持续电流,使单片机供电持续稳定(LM2596稳压模块电路见附录图三)。

四 系统软件流程

遥控器单片机程序框图 小车单片机程序框图

7


五 理论分析与计算

坐标定位的计算

行走示意图

小车车轮内侧贴有黑色胶带,将白色圆盘平均分为八份。利用光电对管检测黑线的个数,利用两个外部中断对其计数,并取其平均值。并通过单片机内部自能计算、处理,得到小车的实际坐标。

计算中要用到的量:小车两车轮间的距离为A;小车车轮的半径R;周长L;每两个黑线的路程M;车轮上贴的黑色线条数N;液晶上显示X坐标X;液晶上显示Y坐标Y;沿Y轴行走时测得的黑线条数Y0;沿X轴行走时测得的黑线条数X0;设定自动行走时的X坐标为X1;设定自动行走时的Y坐标为Y1,设定形式为(X1,Y1),液晶上显示的坐标形式为(X,Y),沿Y轴行走需要中断的次数Zy,沿X轴行走需要中断的次数Zx。

具体的计算如下:

(1)小车两后轮连线中点设定为小车中心点。

(2)L=2πR;M=L/N。当遥控器按下时,小车沿Y轴平行方向前进,Y=M×Y0,小车右转后Y=M×Y0+9,控制小车左转或右转后,小车沿X轴平行方向前行,Y轴坐标自动保持显示,X=M×X0+9。

(3)设定坐标自动行走时,单片机根据设定的(X1,Y1),首先沿Y平行方向前进,计算需要中断的次数Zy=Y1/M。转弯后小车沿X轴平行方向前进,计算需要中断的次数Zx=X1/M。最终显示到液晶上的数据X=M×Zx+A/2(需取整),最终显示到液晶上的数据Y=M×Zy+A/2(需取整)。

8


六 测试方案与测试结果

七 总结

通过参加TI杯电子设计大赛,我们懂得了团队协作的重要性,体会到了科技的发展;我们发挥了自己的优点,同时又发现了与别人的差距。我们在项目制作中遇到了各种困难,然后去克服困难。一路走下来我们学会了坚持,学会了努力奋斗,学会了成功不自是一个人的。

设计过程中我们遇到了很多困难,但从中也学会了喝很多东西。比如说小车两轮电机不同速度的问题,导致程序运行与小车实际行走不匹配。苦苦寻找了很久才找到问题。这件事我们体会到:即便是相同型号的东西也会存有差异。这也更加要求我们在以后的工作学习中全面透彻的考虑问题。

9


附录1:

系统主要电路图

图一 L298电机驱动原理图

图二 NRF2401无线通信模块

10


图三 LM2596单片机供电模块

图四 光电耦合模块

附录2:

部分源程序代码:

(1)小车遥控器部分主程序

#include<spce061a.h>

#include"nRF2401.h"

#include"key.h"

#include "SPLC501User.h"

#include"Word.h"

unsigned int Address[5] = {0x00,0x00,0x00,0x00,0x02}; char shuzi[]={'0','1','2','3','4','5','6','7','8','9'};

11


unsigned int i,j=0,jianzhi,high,highpy,low,sheding,num1,shu=0,RxBuf[25],Rhigh,Rlow;

int word[5];

int zhuangtai;

unsigned int num=20;

void display(void);

void send(void);

void diszhuangtai(int zt);

int main()

{

*P_IOA_Dir = 0x0f00; //设置IOA口高8口为矩阵按键接口

*P_IOA_Attrib = 0x0f00;

*P_IOA_Data = 0x0000;

LCD501_Init(0);

nRF2401_SetAddress(Address,5);

nRF2401_Initial();

nRF2401_Mode(0);

// *P_INT_Ctrl=C_IRQ4_1KHz;

// __asm("INT IRQ");

LCD501_Bitmap(0,0,(unsigned int *)encoding_00);//状

LCD501_Bitmap(16,0,(unsigned int *)encoding_01);//态

LCD501_Bitmap(0,16,(unsigned int *)encoding_02);//设

LCD501_Bitmap(16,16,(unsigned int *)encoding_03);//定

LCD501_Bitmap(0,32,(unsigned int *)encoding_04);//当

LCD501_Bitmap(16,32,(unsigned int *)encoding_05);//前

while(1)

{

*P_Watchdog_Clear = 0x1;

display();

num1=keyscan_high();

if(num1!=20)

{

nRF2401_Mode(1);

send();

nRF2401_Mode(0);

}

if((nRF2401_RxStatus()) == 1) // nRF2401A有数据请求,且无按键按下

12


{

nRF2401_ReceiveWord(RxBuf); // 接收数据1111001 11001101

shu=RxBuf[0];

Rhigh=shu&0xff00;

Rhigh>>=8;

Rlow=shu&0x007f;

}

Delay_Us(500);

}

}

(2)小车主程序:

#include <spce061a.h>

#include "nRF2401.h"

#include"key.h"

#include"dianji.h"

#include"supercheck.h"

#define uint unsigned int

unsigned int shu=0,data,Flag;

unsigned int RxBuf[25];

unsigned int zuolun,youlun,luchengL,luchengR,biaozhi=0,Ybaochi;

//zuozhuan,youzhuan 计算检测到得信号次数

//luchengL,luchengR 计算两轮的路程

//biaozhi 检

测按下向哪转,1左转,2右转

//Ybaochi 当

转向时,保持走过的距离,为了显示

int main()

{

init();

nRF2401_Initial(); // nRF2401A初始化 nRF2401_SetAddress(Address,5);

nRF2401_Mode(0); // 设置nRF2401A

工作方式:接收

while(1)

{

getkey();

switch(shu)

{

13


case 0x000a: //前进101 Flag=1;qianjin();break;

case 0x000b:

Flag=2;houtui();break;

case 0x000c:

Flag=3;zuozhuan();break;

case 0x000d:

Flag=4;youzhuan();break;

case 14:

Flag=5;tingzhi();break;

default:break;

}

data=shu;

data=data&0x0080;

标数据

if(data==0x0080) //走坐标

{

// __asm("int off");

zuobiao();

}

tingzhi();

*P_Watchdog_Clear = 0x0001;

}

}

//后退 011 //左转 110 //右转转 110 //停止 //检测是不是接收的坐 //调用函数。自动 //函数结束,停止 14

bbs.99jianzhu.com内容:建筑图纸、PDF/word 流程,表格,案例,最新,施工方案、工程书籍、建筑论文、合同表格、标准规范、CAD图纸等内容。


TOP最近更新内容

    江苏省盱眙县都梁中学高中数学第2章平面向
    绿豆蛋花是怎样制作及具有什么样的功效?
  • 上一篇:市政工程造价管理中存在的问题及改进建议
  • 下一篇:市政路桥施工项目成本管理的实施与研究