1、电动车跷跷板 大学生电子设计竞赛一等奖电动车跷跷板大学生电子设计竞赛一等奖 摘要:本系统以凌阳SPCE061A单片机为主控制器,辅以寻迹、角度传感器、微调、时间、测量与显示、无线传输和语音等单元,实现小车自己登陆跷跷板,寻迹前进与后退,LED显示时间,自动寻找平衡点并语音提示等基本要求和发挥部分功能。此外,我们还扩展了路程测量与显示,上位机实时显示跷跷板状态的功能,可以在PC机上方便的观看系统状态,使其更加形象化。关键词:SPCE061A 寻迹 角度传感器 无线传输 Abstract: This system takes Surplus SPCE061A MCU as the main con
2、troller, assisted with seeking mark unit, angle sensor unit, tiny regulation unit, measuring and displaying time unit, lineless transmission, playing sound and so on, in order that it can land teeterboard by itself, run forward and backward according to the fixed route, measure and display the time
3、by LED, look for the balance point automatically and broadcast sound. On the base of achieving the essence request and the exert section, we also measure and display the distance, use computer to display the real state of the teeterboard separately. In this way, we can see the systems state convenie
4、ntly and visually on the PC.Keyword: SPCE061A Seeking mark angle sensor Lineless transmission 1系统方案1.1 系统设计与结构框图根据题目要求,本系统主要由电源模块,控制器模块,电机驱动模块,寻迹模块微调模块,语音模块,显示模块,平衡检测模块,计时模块等构成。系统的结构框图如图1所示:1.2 方案论证小车选择:本设计中小车要爬坡和自动登上跷跷板,购买玩具车不能很好的适应要求。又考虑到四轮车转弯受到限制,菱形车爬坡不方便,所以我们自己设计车体结构为三角形,灵活性大,适于爬坡,且尽量使小车重心低以便于制动
5、。控制器选择:方案一:采用可编程逻辑器件CPLD方案二:采用Atmel公司的AT89S52单片机方案三:采用凌阳公司的SPCE061板。CPLD可以实现各种复杂的逻辑功能、体积小、稳定性高,而价格也较高,适合作为大规模控制系统的控制核心。AT89S52低功耗,高性能, 但其本身功能较少,因此需要增加较多的外围电路来实现功能。SPCE061A体积小,易扩展,结构简单。从适用度和价格两方面考虑,我们决定采用61板作为主控制器。电源模块:小车为活动性机器,故最好采用电池供电。电机工作需要12V电压,且要求较大的电流,其它模块需5V供电,电流要求不高。这样,体积小,容量大,重量轻的锂电池结合12V5V
6、的DCDC芯片便成为我们的最佳选择。电机选择:方案一:采用步进电机方案二:采用直流减速电机步进电机可以准确定位,但输出力矩低,速度慢,且体积大,重量大,不适用于小车爬坡,也可能达不到时间上的要求。而直流减速电机转动力矩大,速度大,体积小,重量轻,因而成为我们的最终选择。考虑到要防止小车下坡时惯性过大而滑出跷跷板,在满足时间要求基础上,我们选择50转/min减速电机以求较大力矩。电机驱动模块方案一:采用晶体管构建H桥驱动方案二:采用专用芯片L298H桥由4个三极管组成,可方便实现直流电机的四象限运行,分别对应正转、正转制动、反转、反转制动。专用驱动芯片L298,响应频率高,一片可控制两个直流电机
7、,操作方便,稳定性好,性能优良。最终,我们选用L298作为电机驱动。平衡检测模块方案一:采用铅垂线+光折断器方案二:采用角度传感器根据题目要求,平衡的定义为A、B两端与地面的距离差d=|dAdB|不大于40mm,即跷跷板的倾角要小于1.43(arcsin(0.02/0.8)=1.43)才能判定为平衡。采用铅垂线+光折断器,通过判断垂线角度来判定平衡。但操作起来比较复杂,且误差较大。ZCT245AL485角度传感器直接输出角度值,精度为0.1,故我们采用方案二。寻迹模块方案一:通过开关型霍尔传感器方案二:采用光电传感器开关型霍尔传感器只能跟踪磁性物质组成的曲线,成本高,而反射式光电传感器采用一体
8、化结构,利用黑、白线反射光的强弱寻迹,灵敏度高,体积小,且结构紧凑,安装方便,故采用方案二。微调模块:在小车调节达到一定程度后,再对其进行微调很不方便,很难控制它的移动距离,故我们增加微调模块。即在小车上安装一舵机,由它来控制一重物前后运动,以此来调节小车一侧的力矩。计时模块:61单片机具有强大的中断功能。我们可以通过开2HZ中断进行计数,然后计算出时间。这样,无需外部硬件,程序也较简单。.显示模块:数码管显示速度快,亮度高,我们用其来显示路程、时间及角度等数字信息,且为节省端口,采用了串口通信芯片CH451作为驱动。语音模块:61单片机自带语音模块,且具有语音处理函数库供用户调用,功能强大,
9、应用方便。所以我们选择此方法来播报语音。路程测量模块:方案一:用霍尔开关。方案二:采用CCD鼠标。霍尔开关利用霍尔效应原理,受到磁块体积限制,不能进行高度细分。采用鼠标CCD摄像测距,安装方便,稳定性好,且精度高,可精确到0.1mm以内。所以,我们采用方案二。无线模块:通过无线来实现小车与上位机的通讯,我们采用常见的无线单片收发芯片nRF2401,它体积小、功耗少、外围元件少,有助于减轻小车重量。1.3 实现方法铝合金自制车体采用L298驱动直流减速电机实现行进,光电传感器结合寻迹算法完成电动车寻线功能。利用角度传感器的测量量作为被控量,实现电动车的闭环反馈控制,根据PID控制算法找到平衡点,
10、这是本系统的核心部分。同时LED显示模块和PC无线通信模块实现了良好的人机交互界面。我们确定的最终方案为:1. 小车模块:采用自制三角形车体结构2. 控制模块:采用凌阳公司的SPCE061A单片机3. 电源模块:采用锂电池结合DCDC芯片供电。4. 电机模块:采用直流减速电机,由L298来驱动。5. 测角模块:采用ZCT245AL485角度传感器。6. 微调模块:采用舵机控制一重物在车上平滑缓慢移动来实现。7. 寻迹模块:采用反射式光电传感器。8. 计时模块:采用开2HZ中断方式。9. 显示模块:采用LED显示时间、路程及角度,由CH451作为驱动。10. 语音模块:采用凌阳自带语音功能。11
11、. 测距模块:采用CCD鼠标测距。12. 无线模块:采用无线单片收发芯片nRF2401。2理论分析与计算2.1寻迹测量与控制:本系统中要考虑三种状态下的寻迹算法:第一,小车怎样实现自动驶上跷跷板;第二,前进过程寻迹算法;第三,逆向行驶时寻迹算法。其中,登陆跷跷板的控制最为复杂。为此,我们分别在车头、车体中央、车尾处安装了3、2、3个对管。寻迹线的铺设完全与算法相结合。然后根据读入的对管状态值,来调节小车的行驶状态。寻迹线的铺设如附录A图1示,对管安装如附录A图2示,真值表如附录A表1示。2.2时间测量与计算:本系统中对于时间的计量是通过开2HZ中断的形式实现的,不需要任何硬件设施。其具体实现方
12、法就是每进入一次中断,则计数值加一。通过该计数值,我们就可方便的计算出时间。2.3平衡位置判定、计算、及调节控制方法:判定:系统中,我们采用角度传感器来测量小车与地面的夹角。在小车由不平衡到平衡的过程中,跷跷板一定是处于振荡状态的。若在一段时间内所测量到的角度值均在1.43以内,则判定小车平衡。计算:设配重质量为Mp kg,重心距离转轴Sp m,距板面hp m;小车重为Mckg,重心距板面hcm;微调物为Mm kg, 重心距板面hm m旋转半径为R m。如附录A图3中A图所示,小车的最终理论平衡点距转轴S1的计算式为:,由此可得。但由于跷跷板存在倾角,使得物体重心偏移。如附录A中图1 B图所示
13、,在有倾角情况下,力矩平衡计算式变为:,从而可得。到达该点后,小车再稍向前移动,跷跷板开始振荡。控制:由上述计算过程可知,小车在超出了理论平衡点后跷跷板开始振荡,我们所应做的,就是使小车能够退至合适的位置从而令跷跷板平衡。综合分析各种常用控制算法和现有测试仪器:由于跷跷板的振荡为谐振式,且角度传感器的响应频率较低,在小车速度较高时,我们并不能得到实时准确的角度值,因而我们必须在调节平衡时,先减小车速。首先考虑采用二分法来调节小车移动方式,但实验之后发现这种方式不好控制。最终,我们的控制方法为:根据当前角度来控制小车下一步的步长,从而慢慢达到平衡。3电路与程序设计3.1 检测与驱动电路设计电机驱
14、动模块:一片L298N可控制两个直流电机,我们用PWM输出来调制车速,且为了防止电机模块对前级的干扰,我们加了光电耦合级,电路连接如附录A图4示。寻迹模块:我们采用反射式光电对管,其输出接比较器,由地面反射状况的不同而输出1,0信号予以反馈。其电路连接如附录A图5示。角度传感器模块:ZCT245AL485角度传感器为485接口,故应将其先与485转换电路连接,然后再与单片机相连。其电路连接如附录A图6示。显示模块:数码管用于显示时间、路程和角度,由串口通信芯片CH451来驱动,采用动态显示方式,其电路连接如附录A图7示。无线模块:nRF2401业界体积最小、功耗最少、外围元件最少的无线单片收发
15、芯片,编程很方便,实际传输距离在50-80米左右。其电路如附录A图8示。3.2总体电路图单元电路确定后,我们对单片机端口进行了合理的分配,整个系统的总体电路如附录A图9示,最终小车实物如附录图10示。3.3软件设计与工作流程图因为本系统中小车要进行前进、平衡调节、延时、语音播报、后退等一系列活动,所以对于程序的安排结构要求严格。在此,我们采用模块化设计方法,将整个程序分为以下几个模块:.主程序;电机驱动子程序;寻找平衡点子程序;LED显示子程序;无线通信子程序等。主程序代码见附录2。主程序流程图如下图2示。4功能测试与结果分析4.1基本功能测试表1 基本功能时间测试123实际时间(s)5s5s
16、5s显示时间(s)5s5s5s123平衡倾角值0.50.30.4平衡所需时间303733123实际时间(s)4s4s4s显示时间(s)4s4s4s123实际时间(s)9s9s9s显示时间(s)9s9s9s4.2发挥功能测试:表2 配重平衡测试左侧 右侧中间能否自动驶上跷跷板能能能第一次平衡平衡倾角0.60.70.6第二次平衡平衡倾角0.60.60.8表3 时间测试123登上跷跷板时间4s3s4s第一次平衡时间36s34s38s第二次平衡时间72s68s76s显示时间1:121:081:164.3创新发挥在完成基本要求和发挥部分的基础上,我们又扩展了以下功能:用CCD鼠标测量路程并由数码管实时显
17、示,精度可达0.01cm;通过无线收发芯片nRF2401与上位机实现通讯,从而在上位机上对跷跷板状态形象化显示。4.4结果分析:我们在软件上精心调试多次,硬件上注意每一个小细节,最终使得我们的小车在多次测试中都较好地完成了题目地基本要求和发挥部分。同时我们所扩展的路程测量与显示功能,上位机实时显示跷跷板状态功能也得以实现,效果良好。5结束语通过良好的寻迹,二分法与微调结合等算法,我们的小车可顺利完成各段行程,并较为快速的找到平衡点;通过鼠标测距、中断计时,可实时显示路程与时间;通过nRF2401,顺利实现小车系统与上位机的无线通讯,从而通过PC机直观、形象的显示跷跷板状态。6参考文献1 海成等
18、。MCUDSP型单片机原理与应用。北京航空航天大学出版社2 张培仁等。机器人控制系统设计与实现。北京:清华大学出版社3 谭浩强.。C语言程序设计(第二版)。北京:清华大学出版社4 于海生等。微型计算机控制技术。北京:清华大学出版社5 黄智伟等。全国大学生电子设计竞赛训练教程。电子工业出版社6 王鸿明.。电工技术与电子技术.。北京:清华大学出版社7 王成华。电子线路基础教程。科学出版社,附录A图1 寻迹线图2 对管安装图图3 平衡计算示意图B图4 电机驱动电路图图5 光电对管连接图图6角度传感器连接图图7 数码管驱动电路图图8 nRF2401连接图图9 系统总电路图表1 寻迹真值表1234567
19、8反应前进010前进100左转001右转111停止后退010前进100左转001右转111停止转弯10000000右转11000000右转010前进00100000左转01100000左转附录B#include SPCE061A.h/* 系统端口分配 IOA03 左右电机方向 IOB0、1 鼠标测距 IOA4 舵机 IOB25 NF2401 IOA57 CH451 IOB8、9 左右电机PWM调速 IOA815 光电对管 IOB7、10、11角度传感器 */sxw#define ZCT_FILT 0 /输出频率设定 (FILT*)#define ZCT_Z 1 /以当前位置为相对零度 (&Z)
20、#define ZCT_HE 2 /十六进制通信模式 (*HE)#define ZCT_P 3 /执行单次输出 (*P)#define ZCT_n 4 /连续输出模式 (*n)extern void UART_Init();extern void Init_CH451();extern void Write_Angle_Comm(unsigned int comm_number);extern void Read_Angle_Data();extern void Process_Data();extern void run();extern void run_slow(int motor_le
21、ft,int motor_right);extern void Follow_Line_Zheng();extern void Follow_Line_Fan();void Sys_Init();void Delay_16us(unsigned int us);void Delay_ms(unsigned int ms);int stop();extern int x_angle,y_angle,angle_begin;int isStop=0;int clock=0;int main(void) unsigned int mode=1,stop_flag=1; unsigned int A_
22、C=1,C_B=0,B_A=0,Seek_balance=0; unsigned int A_C1=1,C1_C2,C2_B=0; unsigned int car_line_flag=0; unsigned int angle_i=0; unsigned int car_balance_time=140,car_balance_time_demo=140; int mouse_distance=0,car_distance=10; /10cm /1英寸等于2.54cm,400个点,128为0.8128cm int mouse_distance_demo; Sys_Init(); UART_I
23、nit(); Write_Angle_Comm(ZCT_n); Write_Angle_Comm(ZCT_n); Write_Angle_Comm(ZCT_HE); Write_Angle_Comm(ZCT_HE); Init_CH451(); Mouse_Init(); Read_Angle_Data(); if(mode=1) /基本部分,模式1 /*for(;angle_i28) | (y_angle28) while(mouse_distancecar_distance) Follow_Line_Zheng_Slow(); Delay_ms(20); /速度慢,故可每隔50ms读取一次
24、数据 Show_Time(); /也需考虑时间 mouse_distance+=Read_Mouse(); /数据需另处理否? run_slow(0,0); Delay_ms(500); mouse_distance+=Read_Mouse(); /实际走的距离补偿 car_distance=mouse_distance; /更新数据 mouse_distance=0; else while(-mouse_distance)car_distance) Follow_Line_Fan_Slow(); Delay_ms(20); /速度慢,故可每隔50ms读取一次数据 Show_Time(); /
25、也需考虑时间 mouse_distance+=Read_Mouse(); run_slow(0,0); Delay_ms(500); mouse_distance+=Read_Mouse(); /实际走的距离补偿 car_distance=mouse_distance; /更新数据 mouse_distance=0; run_slow(0,0); Delay_ms(2000); Read_Angle_Data(); Show_Angle(y_angle); *P_Watchdog_Clear=1; if(C_B) /从C点到B点 Follow_Line_Zheng(); if(stop() /检测到C点的
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1