当前位置:首页 >> 电子/电路 >>

全国大学生电子设计竞赛论文


2007 年全国大学生电子设计竞赛

设计论文

题目: 电动车跷跷板( 题目: 电动车跷跷板(F 题) 编号: 编号: F 甲 1203 参赛学生: 参赛学生: 董瑞国 刘杰 苑洪宇 指导老师: 指导老师: 张吉卫 所属学校: 所属学校: 山东交通学院 专业: 专业: 电子信息工程 参赛时间: 参赛时间: 2007 年 9 月 3 日—6 日

目 录
摘要………………………………………………………………………………2 摘要………………………………………………………………………………2 ……………………………………………………………………………… 1.系统设计方案及控制策略………………………………………………………3 系统设计方案及控制策略……………………………………………………… 1.系统设计方案及控制策略………………………………………………………3 1.1 系统方案设计………………………………………………………………3 1.2 控制策略……………………………………………………………………4 2. 系统硬件设计…………………………………………………………………… 系统硬件设计…………………………………………………………………… 2.1 光电检测传感器……………………………………………………………… 2.2 角度传感器…………………………………………………………………… 2.3 步进电机驱动电路…………………………………………………………… 2.4 显示按键电路………………………………………………………………… 3.软件设计………………………………………………………………………… .软件设计………………………………………………………………………… 4.测试结果………………………………………………………………………… . 测试结果………………………………………………………………………… ……………………… 5. 系统程序流程图…………………………………………………………………… 系统程序流程图…………………………………………………………………… 参考文献………………………………………………………………………… 6.参考文献…………………………………………………………………………



摘要: 摘要:电动车跷跷板由电动车和跷跷板组成。本系统是基于自动控制原理, 针对多通道多样化传感器综合控制;采用 PWM 技术动态控制电机的转速和转向; 利用光电检测器检测道路上的标志。 系统的控制部分以凌阳单片机 SPCE061A 精 简开发板(61 板)为核心,通过步进电机对电动车和跷跷板的可移动配重进行 运动控制,实现电动车在跷跷板上自动往返行驶,自动寻找平衡位置,同时利用 LED 动态显示行驶时间及语音播报平衡位置,使得本设计更趋智能化、人性化。 另外,本系统采用两套控制系统分别控制电动车的行驶和配重物块的指定移动, 以便容易方便控制,实现了具有一定自适应能力的控制系统。 关键词: 关键词:电动车,跷跷板,配重,平衡,显示.



1.系统设计方案及控制策略 本系统以参赛题目的要求为目的,利用光电检测器检测道路上的引导线,控 制电动车的正反向行驶、快慢速行驶以及停车的位置,并记录往返时间。为了使 电动车在整个行驶过程中,始终在跷跷板上,采用在跷跷板上铺上白纸中间有一 条宽为 5cm 的黑带跑道以便使小车沿引导线行驶, 在跷跷板的末端再加一条黑带 防止小车滑下以便立即返回。在平衡位置给出指示,采用在行驶过程中自动播报 平衡位置。 1.1 系统方案设计 本系统为典型的实时 控制系统,易用单片 机控制来实现。这里 以凌阳 SPCE061A 单片机为主控元件,根据题目要求,设计了两套控制系统即电动车智 能行驶控制系统和配重物块移动系统。 1.1.1 电动车行驶控制系统 电动车智能行驶控制系统如图 1 所示。

语音模块

LED 显示模块 平衡模块

SPCE061A 单片机

路面引导模块

电源模块

电机驱动模块

步进电机

图 1 小车系统框图 1)小车电机模块 小车前轮两个电机均为步进电机驱动.采用脉冲宽度调节(PWM)方式控 制,通过驱动模块驱动电机,满足小车调速、变向的需要。 2)路面引导模块 利用光电检测器检测道路上的引导线使小车准确的沿引导线行驶。 3)平衡模块 运用角度传感器,测量车辆平衡位置,根据传感器数据的变化做出对小车行 驶情况的控制, 最终达到平衡。 在平衡位置给出指示, 采用在平衡位置自动播报。 4)显示模块 采用 HD7279 LED 显示驱动芯片,实现行驶时间及平衡时间显示。 5)语音模块 由于本设计采用的凌阳 SPCE061A 单片机, 其芯片内部已具有专门语音功能, 因此语音要求不是很高的本设计,完全能够利用 SPCE061A 单片机自身实现语音 功能。


6)电源模块 本系统电源需要 24V、12V、5V 多个电源。 1.1.2 配重块移动系统 配重块移动系统控制模块如图 2 所示:

LCD 液晶显示模块

SPCE061A 单片机

电 源

步进电机驱动模块

图 2 配重块移动系统框图 1)LCD 液晶显示模块 采用凌阳自身带的液晶模块,可实现显示配重的移动距离,形象、直观。 2)步进电机驱动模块 采用脉冲宽度调节(PWM)方式控制电机,通过驱动电路来驱动电机,到 达电机旋转速度的控制,利用电机转的圈数来控制距离的调整,从而满足配重移 动到所需要的距离。 1.2 控制策略 1.2.1 电动车自动寻迹控制策略

图 3 自动寻迹原理图 本系统小车前轮两个电机均为步进电机,采用的是左右轮分开控制的策略, 后轮是一个万向轮有利于自由转向,使用步进电机可以实现稳定行驶上坡,其优 点是容易控制。为实现电动车自动寻迹,我们设置路面引导线如图 2 黑线所示, 在小车上放置四只光电检测器, 利用光电检测器检测道路上的引导线使小车准确 的沿引导线行驶。为了检测到跑道上的黑线,采用 CDD 光电检测器,当光电检 测器检测到黑线,其信息传给单片及作为外部中断源,产生一个中断,通过对中 断的计数确定小车位置,并对行驶状态做出相应的反应。图中中间黑线用于控制 小车直行,跷跷板两端黑线用于控制小车位于板上。 1.2.2 平衡控制策略 角度传感器采用精密导电塑料传感器,在角度传感器上悬挂一重锤,当小车 所处坡度变化时,重锤带动角度传感器转动,角度传感器的输出电压发生变化,


电压信号经放大, A/D 变换后, 系统做出对小车行驶情况的控制, 最终达到平衡。 并在平衡位置给出指示,采用在平衡位置自动播报。 2. 系统硬件设计 2.1 光电检测传感器 本系统采用的光电传感器每只有两个红外发射接收对管。 该传感器不但价格 便宜,容易购买,而且处理电路(如图 3 所示) ,简单易行,实际使用效果很好, 能很顺利地引导小车寻迹。 在该电路中,加比较器 LM311 的目的,是使模拟量转化为开关量,便于处 理。为使发射有一定的功率,发射回路要求不小于 20mA 的电流。 根据
I= 5 ? 1 .7 > 20mA R1 ,故可选择 R1=150Ω。

启动时,小车跨骑在黑线上。四个红外发射接收对管,分别安装在小车的四 角,当处于白色区域,传感器输出低电压。当小车走偏,位于黑线上时,输出为 高电压。因黑线较窄(2cm) ,为及时调整车的方向,选择比较器的阈值为 2.5v, 即黑白相间的位置,即开始调整。实验表明,效果较理想
+5v +5v +5v R1 150 CNY70 R2 10k 8 6 5 R5 10k
P1.3

2 7 3 LM311 C7 4 1 104

R3 10k

r4 10k

+5v

图4 2.2 角度传感器
+5

光电检测电路

+5

图 5 角度传感器电路 SPCE061A 角度传感器采用精密导电塑料传感器 WDJ36,其阻值为 5k。在角度传感器 上悬挂一重锤,当小车所处坡度变化时,重锤带动角度传感器转动,角度传感器 的输出电压发生变化。由于跷跷板上角度较小() ,利用图 5 电路,传感器滑动 触点输出电压变化约为 0.3V,数值太小,而采用运算放大放大后,达到了 2V, 满足了测试要求。 2.3 步进电机驱动电路 由于小车采用了后面使用万向轮,两个前轮各一个步进电机驱动的驱动方


+ IOA0 IOA1 IOA2 IOA3 IOA4 IOA5 IOA6 IOA7 -

式, 所以可使电动车自由旋转。 由于小车需要爬坡, 我们选用力矩较大的 42BYG 步进电机,同时选用与之配套驱动模块 WZM-2H042M,这样控制方便、灵活。 其电路如图 6 所示。
+24V + IOB8 IOB9 IOB10 IOB11 IOB12 IOB13 IOB14 IOB15 +5V SPCE061A

CWA+ AB+ BCPCW+ CP+

图 6 步进电机驱动电路 2.4 显示按键电路
MCU
+5

HD7279A
6 7 8 9
+5

DS?
a

DS?
DPY a b f c g d e e d f [LEDgn] g

DS?
a b c DPY a b f c g d e e d f [LEDgn] g

DS?
a b c DPY a b f c g d e e d f [LEDgn] g

Vcc /EA
30PF

X1
12MHz 30PF

P3.7 P3.6 P3.5 P3.4

/CS CLK DATA KEY Vcc Vcc

25

b c

1 2 3 4 5 6 7 *

1 2 3 4 5 6 7 *

1 2 3 4 5 6 7 *

a b c

g

DPY a b f c d e e d f [LEDgn] g

1 2 3 4 5 6 7

DIG7 DIG6 DIG5 DIG4 DIG3 DIG2

24 23 22 21 20 19 18

*

X2
10uF
+5

RESET R
100

RESET

DIG1 DIG0

10K

RC C Vss Vss SD 12 SE 11 SF SG 10
13
S03H S02H S01H S00H

8.2k

图7

键显电路

3.软件设计 本程序主要实现以下几项功能: 1) 控制小车的行驶方向,防止小车驶离跷跷板; 2) 2)寻找平衡点,通过采集模拟数据,调整小车位置,达到跷跷板平衡的 目的; 3)显示每阶段行驶的时间,以确定其在要求范围内;4)确定小车的行驶轨 迹,以便其能在到达跷跷板一端后能自动返回。系统的主程序流程框图如图 8 所 示。 4. 测试结果 按照题目给定的尺寸,在实验室自做场地,对小车行驶时间及平衡状态进行 多次测试,试验结果显示,数值基本满足甚至小于题目要求。 5. 系统程序流程图



开始 系统初始化

按键启动小车

N 判断是否平衡

Y
语音提示

继续前进 N 是否到达末端

Y
逆向行驶

N
是否到达始发端

Y
结 束

图 8 程序流程图 6。参考文献 [1] 余永权. Flash 单片机原理及应用. 北京:电子工业出版社,1997 [2] 王福瑞等编著。单片微机测控系统设计大全。北京航空航天大学出版社, 1999 [3] 李华。MCS-51 系列单片机使用接口技术。北京航空航天大学出版社,1990 [4] 何立民。单片机应用系统设计。北京航空航天大学出版社,1993 [5] 方佩敏。新编传感器原理应用电路详解。北京:电子工业出版社,1994
[6] 黄继昌等。传感器工作原理及应用实例。北京:人民邮电出版社,1998。

[7] 纪宗南。单片机外围器件实用手册 输入通道器件分册。北京航空航天大 学出版社,1998

附录一



//============================================================ === //文件名称: main.c //功能描述:WZM-2H042M 步进电机转半圈 c=200 //程序记录: 2007-9-6 //实现功能:小车跷跷板程序 //============================================================ === #include "SPCE061V004.H" #include "7279a.h" extern second; extern second1; extern flag_dao; extern transform(); main() {int flag_time=0; int flag_balnc=0; unsigned int ADValue = 0,Value=0; unsigned char ci=0xffff,cy=1; unsigned int flag_sip=0; unsigned int flag_qian=0; unsigned int flat=0; second=0; *P_IOA_Dir=0xff00; *P_IOA_Attrib=0xffff; *P_IOA_Data=0xff00; *P_IOB_Dir=0xc300; *P_IOB_Attrib=0xc300; *P_IOB_Data=0x4300; ////设置 A 口

//设置 B 口 //83 正向 43 反向 c3 旋转 03 旋转

*P_ADC_MUX_Ctrl = 0x0002; //模拟电压信号通过 LINE_IN1 输入 *P_ADC_Ctrl |= 0x0001; //允许 AD 转换 *P_TimerA_Data=0xfff8; //TIMA 初值 *P_TimerA_Ctrl=C_SourceA_8192Hz+C_SourceB_1+C_Duty8; //计时中断



*P_TimerB_Data=0xfff8; //TIMB 初值 *P_TimerB_Ctrl=C_SourceC_8192Hz+C_Duty8; *P_INT_Ctrl=C_IRQ5_2Hz;//+C_IRQ3_EXT1+C_IRQ3_EXT2 ; 断 asm("IRQ ON"); *P_Watchdog_Clear=1; //开中断 //开 2Hz 中

while (!(*P_ADC_MUX_Ctrl & 0x8000)); Value =*P_ADC_LINEIN_Data; while (!(*P_ADC_MUX_Ctrl & 0x8000)); i=*P_ADC_LINEIN_Data; Value =transform(i)/10;

while(1) { *P_Watchdog_Clear=1; while (!(*P_ADC_MUX_Ctrl & 0x8000)); i=*P_ADC_LINEIN_Data; ADValue =transform(i)/10;

if(second>15&&flag_time==0) { *P_Watchdog_Clear=1; flag_time=1; *P_TimerA_Data=0xfff0; *P_TimerB_Data=0xfff0; *P_TimerA_Ctrl=C_SourceA_4096Hz+C_SourceB_1+C_Duty1; *P_TimerB_Ctrl=C_SourceC_4096Hz+C_Duty1; flag_qian=1; } if(flag_sip==0&&flag_time==1&&flat==0) { *P_Watchdog_Clear=1; if(ADValue>Value+80) { *P_IOB_Data=0x4300;


*P_TimerA_Ctrl=C_SourceA_8192Hz+C_SourceB_1+C_DutyOff; *P_TimerB_Ctrl=C_SourceC_8192Hz+C_DutyOff; *P_TimerA_Data=0xfff8; *P_TimerB_Data=0xfff8;

second1=0; while(1) {if(second1<=5)*P_Watchdog_Clear = 0x0001; xianshi(13,0FH,0FH,second1); else if(second1>5) break; } flag_qian=0;

*P_TimerA_Data=0xfff8; *P_TimerB_Data=0xfff8; *P_TimerA_Ctrl=C_SourceA_8192Hz+C_SourceB_1+C_Duty8; *P_TimerB_Ctrl=C_SourceC_8192Hz+C_Duty8; flag_sip=1; } } /*行使轨迹*/ if((IOB2|IOB3)&&(flag_qian==0)) { if(IOB3==0&&IOB2==1) { while(1) {*P_Watchdog_Clear = 0x0001; if(IOB3==0&&IOB2==1) { *P_TimerA_Ctrl=C_SourceA_4096Hz+C_SourceB_1+C_Duty4; } else break;} *P_TimerA_Ctrl=C_SourceA_8192Hz+C_SourceB_1+C_Duty8; } else if(IOB2==0&&IOB3==1) { while(1) {*P_Watchdog_Clear = 0x0001;
10

if(IOB2==0&&IOB3==1) { *P_TimerB_Ctrl=C_SourceC_4096Hz+C_Duty4; } else break;} *P_TimerB_Ctrl=C_SourceC_8192Hz+C_Duty8; } }

if((IOB2==0&&IOB3==0)&&(flag_qian==0)) { if(IOB2==0&&IOB3==0) { *P_TimerA_Ctrl=C_SourceA_0+C_SourceB_1+C_DutyOff; *P_TimerB_Ctrl=C_SourceC_0+C_DutyOff; *P_Watchdog_Clear=1; } second1=0; while(1) {if(second1<=5)*P_Watchdog_Clear = 0x0001; else if(second1>5) break; } *P_IOB_Data=0x8300; *P_TimerA_Ctrl=C_SourceA_8192Hz+C_SourceB_1+C_Duty14; *P_TimerB_Ctrl=C_SourceC_8192Hz+C_Duty14; flag_dao=1; flag_qian=1 ; }

if(flag_dao==1) {if(IOB0||IOB1) { if(IOB1==0&&IOB0==1) { while(1) {*P_Watchdog_Clear = 0x0001; if(IOB1==0&&IOB0==1) { *P_TimerA_Ctrl=C_SourceA_4096Hz+C_SourceB_1+C_Duty4; } else break;}
11

*P_TimerA_Ctrl=C_SourceA_8192Hz+C_SourceB_1+C_Duty8; } else if(IOB0==0&&IOB1==1) { while(1) {*P_Watchdog_Clear = 0x0001; if(IOB0==0&&IOB1==1) { *P_TimerB_Ctrl=C_SourceC_4096Hz+C_Duty4; } else break;} *P_TimerB_Ctrl=C_SourceC_8192Hz+C_Duty8; } }

if(IOB0==0&&IOB1==0) { while(1) {if(IOB0==0&&IOB1==0) { *P_TimerA_Ctrl=C_SourceA_0+C_SourceB_1+C_DutyOff; *P_TimerB_Ctrl=C_SourceC_0+C_DutyOff; *P_Watchdog_Clear=1; } else break; } } }

*P_Watchdog_Clear=1; } *P_Watchdog_Clear=1; } transform(unsigned int cc)//AD 数据转换 {unsigned int sum=0; cc=cc>>6; cc=cc*0x0020; if((cc&0x0001)==0x0001) sum+=1; cc=cc>>1;
12

if((cc&0x0001)==0x0001) sum+=2; cc=cc>>1; if((cc&0x0001)==0x0001) sum+=4; cc=cc>>1; *P_Watchdog_Clear=1; if((cc&0x0001)==0x0001) sum+=8; cc=cc>>1; if((cc&0x0001)==0x0001) sum+=16; cc=cc>>1; if((cc&0x0001)==0x0001) sum+=32; cc=cc>>1; if((cc&0x0001)==0x0001) sum+=64; cc=cc>>1; if((cc&0x0001)==0x0001) sum+=128; cc=cc>>1; if((cc&0x0001)==0x0001) sum+=256; *P_Watchdog_Clear=1; cc=cc>>1; if((cc&0x0001)==0x0001) sum+=512; cc=cc>>1; if((cc&0x0001)==0x0001) sum+=1024; cc=cc>>1; if((cc&0x0001)==0x0001) sum+=2048; *P_Watchdog_Clear=1; cc=cc>>1; if((cc&0x0001)==0x0001) sum+=4096; cc=cc>>1; if((cc&0x0001)==0x0001) sum+=8192; cc=cc>>1; if((cc&0x0001)==0x0001)
13

sum+=16384; cc=cc>>1; if((cc&0x0001)==0x0001) sum+=32768; cc=cc>>1; if((cc&0x0001)==0x0001) sum+=65536; return(sum); }

/*中断子程序*/ //*******************************************************************// //Interrupt Service Routine For C language //*******************************************************************// #include "SPCE061V004.H" #include "7279a.h" unsigned char time=0,d=0xaa00; char second; char second1; char second2; int flag_dao; int time1; int time2; flag_dao=0; void BREAK(void) __attribute__ ((ISR)); void BREAK(void) { } void FIQ(void) __attribute__ ((ISR)); void FIQ(void) { } void IRQ0(void) __attribute__ ((ISR)); void IRQ0(void) { } void IRQ1(void) __attribute__ ((ISR)); void IRQ1(void) { }
14

void IRQ2(void) __attribute__ ((ISR)); void IRQ2(void) { } void IRQ3(void) __attribute__ ((ISR)); void IRQ3(void) { } void IRQ4(void) __attribute__ ((ISR)); void IRQ4(void) { } void IRQ5(void) __attribute__ ((ISR)); void IRQ5(void) { if(*P_INT_Ctrl&C_IRQ5_2Hz) { *P_INT_Clear=C_IRQ5_2Hz; time++; if(time%2==0) { second++; *P_Watchdog_Clear=1; second1++; if(second1!=1)xianshi(14,second/100,(second/10)%10,second%10); if(second1==1) xianshi(14,second/100,(second/10)%10,second%10); if(second2==1) xianshi(14,second/100,(second/10)%10,second%10); }

} else *P_INT_Clear=C_IRQ5_4Hz; } void IRQ6(void) __attribute__ ((ISR)); void IRQ6(void) { } void IRQ7(void) __attribute__ ((ISR)); void IRQ7(void) { }
15

/*显示子程序*/ //======================================================== // 文件名称: 7279a.c // 功能纪录: 7279a.h // 维护记录: 2007-8-7 v1.6 // IOA8~CS IOA9~CLK IOA10~DATA IOA11~KEY //======================================================== #include "7279a.h" #include "SPCE061V004.h"

void xianshi(unsigned int Bai,unsigned int Shi,unsigned int Ge,unsigned int Shi_d) {write7279(0x80,Bai); write7279(0x81,Shi); write7279(0x82,Ge); write7279(0x83,Shi_d); } /*7279 发送*/ void write7279(unsigned char cmd,unsigned char ta) {send_byte(cmd); send_byte(ta); } void send_byte(unsigned char out_byte) { unsigned char i; // cs=0;//cs=P1^0; long_delay(); for(i=0;i<8;i++) { if(out_byte&0x0080) dat=1; else dat=0;//dat=p1^2; clk=1; short_delay(); clk=0; short_delay(); out_byte=out_byte*2; } dat=0; } void long_delay (void) { unsigned char i; for(i=0;i<0x0015;i++);
16

} void short_delay (void) { unsigned char i; for(i=0;i<2;i++); } /*7279 子程序*/ unsigned char read7279(unsigned char command) { unsigned char i; send_byte(command); *P_IOA_Dir=0xf3f1; i=receive_byte(); // *P_IOA_Dir=0xf7f0; return(i); } unsigned char receive_byte (void) { unsigned char i,in_byte; dat=1; long_delay(); for (i=0;i<8;i++) { clk=1; short_delay(); in_byte=in_byte*2; if(dat) { in_byte=in_byte|0x01; } clk=0; short_delay(); } dat=0; return(in_byte); }

17


赞助商链接
相关文章:
全国大学生电子设计大赛比赛论文(获奖论文)
全国大学生电子设计竞赛 2012 年大学生电子设计 TI 杯竞赛论文 设计报告 题学指导 目: 校: 老师: 微弱信号检测装置(A 题) *** *** *** 2012 年 8 月 ...
全国大学生电子设计竞赛论文模板
全国大学生电子设计竞赛论文模板 - 2017 年全国大学生电子设计竞赛 XXXXXXXXXXXXX(X 题) 【本科组】 2017 年 9 月 7 日 摘 要 本系统以飞思卡尔单片机...
2016年电子设计竞赛论文
2016 年全国大学生电子设计竞赛降压型直流开关稳压电源(A 题) 论文编号: 参赛学校: 参赛学院; 参赛队员: 联系方式: 2016 年 7 月 28 日 摘要为实现将 16V ...
全国大学生电子设计竞赛论文
全国大学生电子设计竞赛论文_电子/电路_工程科技_专业资料。国家一等奖2007 年全国大学生电子设计竞赛 设计论文 题目: 电动车跷跷板( 题目: 电动车跷跷板(F 题) 编...
全国大学生电子竞赛论文格式规范
全国大学生电子竞赛论文格式规范_高等教育_教育专区。全国大学生电子竞赛论文格式规范全国大学生电子设计竞赛论文要求《设计报告》正文的图文篇幅限制为 6 页,第一页含...
2015全国大学生电子设计大赛论文报告格式
全国大学生电子设计大赛 论文报告格式 **设计报告内容: 1.封面:单独 1 页(见样件) 2.摘要、关键词:中文(150~200 字)、英文;单独 1 页 3.目录:内容必要...
2015年全国大学生电子设计竞赛A题论文
2015年全国大学生电子设计竞赛A题论文_电子/电路_工程科技_专业资料。2015年“瑞萨杯”全国大学生电子设计竞赛A题论文 2015 年全国大学生电子设计竞赛 双向 DC-DC...
全国大学生电子设计竞赛论文写作指导
全国大学生电子设计竞赛论文写作指导 电设电设隐藏>> 全国电子设计竞赛论文写作指导——电子竞赛设计与总结报告 [书写格式] ×××设计与总结报告摘 要 一:方案设...
2015全国大学生电子设计大赛论文报告格式
全国大学生电子设计大赛 论文报告格式 **设计报告内容: 1.封面:单独 1 页(见样件) 2.摘要、关键词:中文(150~200 字)、英文;单独 1 页 3.目录:内容必要...
2015全国大学生电子设计竞赛论文模板 附四旋翼论文
2015全国大学生电子设计竞赛论文模板 附四旋翼论文_工学_高等教育_教育专区。2015全国大学生电子设计竞赛论文模板 附四旋翼论文一篇 ...
更多相关标签: