1、2013年山东省大学生电子设计竞赛设计报告简易旋转倒立摆及控制装置(C题)论文编号:008C*参赛题目:简易旋转倒立摆及控制装置参赛学校:曲阜师范大学学 院:计算机科学学院参赛队员:姓名1 手机号 姓名2 手机号 姓名3 手机号指导教师:姓名 手机号 邮箱简易旋转倒立摆及控制装置摘要:本设计系统根据题目要求,采用MC9S12XS128单片机作为核心控制单元,实现了*功能。关键词: 1方案论证与设计根据题目要求,本系统主要完成小车在预定时间内完成在规定跑道内的行驶、避让、并在无刮擦碰撞的条件下到达道路终点的任务。为完成相应任务,本系统可分为以下模块:电源模块、MC9S12XS128单片机模块、图
2、像采集模块、电机模块、舵机模块、超声波传感器模块。系统的整体模块如图1所示。实时位置速度反馈转向控制信号输出速度控制信号输出舵机电机小车路径识别MCU图1 系统整体模块1.1主控制模块经过以上分析论证,得出主控模块的设计方案如下:方案一:采用传统MCS-51单片机作为主控芯片。51单片机具有8位代码指令、8位数据总线、16位地址总线、6个中断源、4KB RAM、寻址范围16位地址宽度、不能预取指、1种工作模式、不支持协处理器、不支持JTAG调试,是一款具有价格低廉、使用简单、应用广泛、知识基础较好的芯片。方案二:采用MC9S12XS128单片机最小系统。该芯片采用5V供电,功能强大,总线频率高
3、达40MHz。芯片含有丰富的片内设备,包括128K的Flash存储器,8K的RAM,8K的EEPROM,两路串行通信接口(SCI),一路串行外围接口(SPI),八路定时器通道,两个(80引脚为一个)八路可调转换精度的A/D口,八路PWM输出,91(80引脚为59)个离散数字I/O口,一个MSCAN模块。可靠性好,低功耗,具有多种引脚数和封装选择,可以用较为简单的电路实现相对复杂的功能。综合上述两种方案,我们选择方案二。利用MC9S12XS128单片机作为主控制块。 1.2 电源模块1.4 电机驱动模块1.5 传感器模块方案一:采用红外收发对管。红外线传感器测量时不与被测物体直接接触,因而不存在
4、摩擦,并且有灵敏度高,响应快等优点。但受外界干扰较大。方案二:采用超声波传感器。超声波传感器用来测量物体的距离。当声波遇到物体时,高频声波会被反弹回来,通过计算就可以获得物体相对于传感器的距离值。使用超声波传感器进行测量简单、经济、可靠,测得数据的误差比较小。通过比较以上两种方案,我们选择第二种作为测距避障传感器。方案选取:通过对以上模块的论证分析,为实现题目的基本要求和功能,我们的设计方案规划为:(1)采用MC9S12XS128单片机最小系统为小车的控制器。(2)采用由7.2V、2A/h的可充电镍镉电池为各模块供电。(3)采用CCD摄像头采集图像信息为小车的路径识别模块。(4)采用BTS79
5、60芯片实现电机驱动。(5)采用超声波传感器实现测距避障功能。2系统理论分析与计算2.1 赛道检测理论分析。2.2 系统总体方案如图2箭头所示,红色代表B车,绿色代表A车。(1)当A、B两车同时相向而行时,首先使A车在号会车区通过黑白线检测传感器按照箭头所示路线进行行驶延时,等B车行驶过号会车区的时间后A车停止延时,加速前进至B车发车区,当检测到停车标志黑线时停止。(2)当A、B两车同时相向而行,B车通过传感器测量到A车的距离,B车及时调整舵机使之后退到号会车区并延时,会车结束后继续前行,达到停车标志线停止。如图2所示。图2 赛道3 系统硬件电路详细设计图3 硬件电路总体组成结构框图3.1 微
6、控制器最小系统单片机最小系统板使用MC9S12XS128单片机。该芯片采用5V供电,功能强大,总线频率高达40MHz。芯片含有丰富的片内设备,在对小车各个模块进行逐一分析后,确定了单片机的引脚分配。MC9S12XS128单片机最小系统如附图1所示。3.2 电源电路本系统全部硬件电路的电源由7.2V、2A/h的可充电镍镉电池提供。由于电路中的不同电路模块所需要的工作电压和电流容量不相同,因此电源模块应该包含多个稳压电路,将充电电压转换成各个模块所需的电压。图5以5V电源为例,原理图如附图2所示。3.4 电机驱动电路采用两块BTS7960的电机驱动控制芯片,利用芯片输出的PWM信号对电路进行控制,
7、通过软件调节占空比以达到调节车轮转速的不同。从而使两侧车轮相互配合,转弯时调节外侧车轮速度增大,内侧车轮速度减小,前进时两侧车轮保持较高速度运行,控制方便,缩短进程时间。BTS7960电机驱动原理图如附图4所示。4 系统软件设计4.1 软件实现的功能为完成小车的基本要求,系统软件实现了小车摄像头自主循迹,识别停车、转弯标志线,会车延时,超声波测距避障,倒车避让的功能。开始4.2 软件流程图正常循迹否是否检测到A(B)车是否检测会车标志线否是是循迹延时调整舵机倒车否检测会车是否完成否避让是否完成是是正常循迹检测停车标志线结束图8 软件流程图5 调试、测试结果及分析5.1 测试结果(数据)数据一:
8、小车跑完赛道一趟的时间表1 分别跑完赛道的测试结果类型 次数第一次第二次第三次第四次平均值A(s)1312101512B(s)1112101112数据二:两车会车后到达终点的时间表2 会车后A、B 两车到达终点的测试结果次数 类型A(s)B(s)W(s)第一次38105第二次35136第三次37126第四次35126注:W(s)为等待延时时间。5.2 测试分析与结论(1)根据以上测试结果可以得出,A、B两车分别从各自发车区正常行驶至对方发车区停止。两车分别能在50秒之内到达终点,完成任务。(2)两车同时发车,以对方的发车点为终点行进。A车首先进入会车区,能等待B车通过后再继续前进。且两车能够保
9、证在60秒之内到达各自的道路终点。6 总结经过我们几天的艰苦奋战,完成了本次电子设计竞赛车辆会车的题目基本要求。在小组讨论设计方案、准备材料、设计程序、焊接电路板及组装小车、制作跑道、调试测试后的过程中,锻炼了我们团结合作,不畏挫折的精神,更激发了我们大学生科技创新的动力,使我们在知识上和精神上得到了充实。在本次电子设计中,我们还存在很多欠缺的地方,还有很多发展创新的空间等我们开发探索。最后感谢大赛组委会给我们这次锻炼的机会!7参考文献1全国大学生电子设计竞赛组委会.第五届全国大学生电子设计竞赛获奖作品选编(2001)M.北京:北京理工大学出版社.2003.1第一版.2王威等.HCS12微控制
10、器原理及应用M.北京:北京航空航天大学出版社,2007.3胡杰.基于16位单片机MC9S12XS128智能模型车系统开发研究D.武汉:武汉理工大学,2008.4吴红星.电机驱动与控制专用集成电路应用M.北京:中国电力出版社,2006.12附录:附录1:电路图附图1 MC9S12XS128单片机最小系统附图2 5V电源电路图附图3 摄像头电路图附图4 BTS7960电机驱动附图5 主板附图6 超声波传感器原理图附录2:程序代码#include /* common defines and macros */#include derivative.h /* derivative-specific d
11、efinitions */#include main.hunsigned char pwm_temp; /正转占空比的影子 int car_info_old=150; /记录上次车的中心位置。int car_info_new=58; unsigned int G_CAR_SPEED=0;unsigned int G_CAR_SPEED_temp=0;/char pn(int pos_)if(pos_0) return 1; else if(pos_0) return -1;elsereturn 0; /* 舵机控制 */void Car_Turn_Set_v14() int temp_pid,
12、dx1; if( PhotoLineInfoOldG_car_find_line.number != 0) if(abs(G_CAR_INFO_OLD_NUM-PhotoLineInfoOldG_car_find_line.number)=15|abs(car_info_old -(PhotoLineInfoOld G_car_find_line.center-IMAGE_COLUMN/2)=95) /线非常宽 / PWMDTY45 = straight;/* return;/保持不变 G_CAR_INFO_OLD_NUM = PhotoLineInfoOldG_car_find_line.n
13、umber ;/此列的黑点个数 car_info_new =(PhotoLineInfoOld G_car_find_line.center-IMAGE_COLUMN/2); /-滤波算法- dx1= (turn_step *abs(car_info_new)*23)/10;/简单的p控制 else /-如果是因为线少的问题 if(abs(G_CAR_INFO_OLD_NUM-PhotoLineInfoOldG_car_find_line.number)=15) G_CAR_INFO_OLD_NUM = PhotoLineInfoOldG_car_find_line.number ;/此列的黑
14、点个数 car_info_new =(PhotoLineInfoOld G_car_find_line.center-IMAGE_COLUMN/2); car_info_old= car_info_new ; dx1= (turn_step *abs(car_info_new)*23)/10;/p控制 return; car_info_new = car_info_old; dx1= (turn_step *abs(car_info_new)*11/2)/2;/p控制 / dx1= (turn_step *abs(car_info_new); else car_info_new = (car_
15、info_old); dx1= (turn_step *abs(car_info_new)*11/2)/2;/p控制 if(car_info_new =0) temp_pid = straight +(dx1);/2; /= straight+turn_max)/最大转角保护 PWMDTY45 = straight+turn_max;else if(temp_pid = straight-turn_max2)/最大转角保护 PWMDTY45 = straight-turn_max2;else PWMDTY45 = temp_pid; /PWMDTY45 = straight; car_info
16、_old= car_info_new; /* 速度调节 _02 (PID 控速)*/ int lasts_ek=0;/最新的速度偏差#define PWM_STEP 70 /目的是不让pwm增加的太多void set_speed_PD(void) int s_ek; /速度偏差 int s_dek; /速度偏差变化量 int ctrl_motor; g_car_speed_now =PACNT; /实际测量的速度值 PACNT = 0x0000; / / PORTB =g_car_speed_now; /此处可以测试编码器是否正常工作 s_ek=(G_CAR_SPEED- g_car_spee
17、d_now); /速度偏差 s_dek=s_ek-lasts_ek; /速度偏差变化量 ctrl_motor = pwm_temp; ctrl_motor=ctrl_motor+(MP*s_ek)/2+MI*s_dek; lasts_ek=s_ek; if(ctrl_motor 200) ctrl_motor= 200; if(abs(ctrl_motor-pwm_temp)=PWM_STEP)/偏差很大 if(ctrl_motor-pwm_temp=0) ctrl_motor = pwm_temp+PWM_STEP; else ctrl_motor =pwm_temp-PWM_STEP; if(ctrl_motor 200) ctrl_motor= 200; PWMDTY0 = ctrl_motor;/0;/ pwm_temp = ctrl_motor; /正转占空比的影子 G_CAR_SPEED