收藏 分销(赏)

电动车跷跷板本科毕业设计.doc

上传人:胜**** 文档编号:2147653 上传时间:2024-05-20 格式:DOC 页数:23 大小:263KB
下载 相关 举报
电动车跷跷板本科毕业设计.doc_第1页
第1页 / 共23页
电动车跷跷板本科毕业设计.doc_第2页
第2页 / 共23页
电动车跷跷板本科毕业设计.doc_第3页
第3页 / 共23页
电动车跷跷板本科毕业设计.doc_第4页
第4页 / 共23页
电动车跷跷板本科毕业设计.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、电动车跷跷板摘要本方案以msp430(MSP430F22X4)单片机、直流电机驱动电路、倾角传感器、反射式红外传感器、LED、蜂鸣器等电路构成。小车采用前后两对反射式红外传感器,能沿着黑线在跷跷板上往返行驶,并始终保持在跷跷板上;同时,利用倾角传感器对小车当前所在位置的倾斜角进行测量。小车控制程序主要对采集信号分析转换,结合PWM调速控制电机转速和转向,从而使小车快速在跷跷板上取得平衡;小车通过LED和蜂鸣器来实现平衡指示以及实时显示,从而完成整个设计过程。关键词:MSP430F22X4 闭环控制 倾角传感器 PWM调速 AbstractThe programme to msp430 (MSP

2、430F22X4) microcontroller, motor drive circuit, angle sensor, reflecting infrared sensors, LED, buzzer, and other circuit. Vehicles used before and after the two pairs of reflecting infrared sensors, along the black line in the can on the seesaw from travelling, and always maintain the seesaw on the

3、 same time, using angle sensor on the current location of the car tilt angle measurement. Trolley control procedures for collecting the main signal of conversion, with PWM speed control motor speed and steering, thus making the car fast to strike a balance on the seesaw; car through the LED and buzz

4、er to achieve balanced instruction and real-time display, thus completing the entire design process .Key word:MSP430F22X4 Closed-loop control Angle sensor PWM Speed 一、方案比较与论证整个系统可划分为控制模块、AD转换模块、电源模块、显示模块,测量模块,驱动模块。系统框图如图1所示:图1 系统框图为实现各模块的功能,设计了几种不同的方案进行论证。1.控制模块采用msp430单片机作为系统控制的方案。该单片机具有高速的运算能力以及含有

5、丰富的功能模块,例如:多通道1014位AD转换器,双路12位DA转换器,比较器,看门狗定时器和多个16位,8位定时器(可进行捕获,比较,PWM输出)以及FALASH存储器,他可以在运行过程中由程序控制写操作和段擦除(In system programmable),不需要额外的高电压等,软件编程灵活,自由度大,可用软件编程实现各种算法和逻辑控制。 2.电源模块采用两个干电池供电。将电机驱动电源与单片机以及其他电路完全隔离开,利用光电耦合器传输信号,这样可将电机的干扰消除,提高系统的稳定性。3.驱动模块方案一:采用由大功率达林顿管组成的H型驱动电路。该电路承载电流大,但电路复杂,体积大。方案二:采

6、用L298N组成的驱动电路,驱动芯片L298N是驱动二相或四相步进电机的专用芯片,电路实现容易,与单片机接口方便,控制比较简单。考虑到我们选用的是直流电机,工作稳定,且小车不宜过重,故选择方案二。4.测量模块寻迹系统方案一:用光敏电阻组成光敏探测器。光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到跷跷板上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。因此光敏电阻在跷跷板和黑线上方时,阻值会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。但是这种方案受光照影响很大,并且不能够稳定的工作。因此我们考虑其他更加稳定的方案。方案二:用红外光电对管寻迹传感器。现有的封装

7、好的红外对管应用电路简单,工作稳定,再加上控制芯片的电压比器功能模块处理采集信号,容易实现题目要求。经比较,本系统选择方案二。在平衡系统中,根据要求,只要跷跷板两端与地面的距离差小于40mm即可认为平衡,本设计通过倾角传感器检测跷跷板水平倾角,所以只要水平倾角保持在0附近的某个角度范围之内即认为跷跷板达到平衡状态。其闭环结构框图如图2所示。图2 闭环控制系统结构图该系统的工作原理是:小车驶上跷跷板后,通过倾角传感器不断测量跷跷板的倾角(即实际倾角),该实际倾角与给定倾角作比较,形成倾角偏差,通过直流电机控制小车前后微移,不断修正该倾角偏差,最终使倾角保持在给定范围之内,此时跷跷板便达到平衡状态

8、。二、主要电路设计分别在小车的四个角位置上安装反射红外光电传感器,在跷跷板的四周距离板边贴上34厘米的黑胶线,一旦车底遇到黑线便开始寻迹,使小车保持在跷跷板上运动。电机驱动模块采用L298N,其内部集成两个桥式电路驱动器,OUTl、OUT2和OUT3、OUT4之间分别接2个电动机。5、7、10、12脚接输入控制电平,控制电机的正反转,ENA,ENB接控制使能端,控制电机的启停。如下图所示,单片机P4.0、P4.1输出的信号控制右边直流电机,P4.2、P4.3输出的信号控制左边直流电机。信号包括二组PWM波,每一组PWM波用来控制一个电机的转速。因此结合PWM波就能控制电机的转速和方向了。为了防

9、止由于电机部分大电流对单片机的影响,我们改善了电路,在单片机和L298N之间加上了光电耦合器,将控制部分电路和电动机电路隔离,使电机在转动和调制过程中稳定正常。小车上跷跷板寻找平衡点,测得平衡时倾角传感器输出的模拟量,以此来作为一个平衡校验的基准。当小车被放置于跷跷板一端时,倾角传感器与地面产生了一个角度,且随着小车的行驶不断地变化。小车内部单片机对传感器输出的模拟量进行采样,然后与基准值进行比较。接着单片机采用预先设定好的算法对电机进行控制,使其小车在平衡点徘徊,维持平衡。三、系统软件设计1、软件流程图: 通过对单片机的编程,利用它的中断定时功能,由外部采集的数据,实现软件对小车行驶时间的计

10、算,以及对电机一系列动作的控制等。主要是软件编程达到对硬件控制的目的。主要程序流程图4所示:图4 程序流程图2、软件所实现的功能: 检测小车的行驶状态并及时纠正行驶路径; 控制小车的行驶速度(PWM调速); 显示小车的行驶时间并储存; 控制小车寻找平衡点; 在平衡状态时产生声光报警;四、数据测试1.测试设备自制跷跷板:长1600mm、宽300mm,秒表,卷尺。2.测试结果1.不加配重情况下表1:从A点到C点的时间测试测试项目第1次第2次第3次第4次AC所用时间/s6666表2:平衡点测试测试项目第1次第2次第3次第4次寻找平衡点时间/s3475375634753567d=dA-dB/mm12.

11、320.512.814.7表3:平衡点到B的时间测试测试项目第1次第2次第3次第4次平衡点B所用时间/s9888车头到B点的距离/mm15201931表4:平衡点倒退回A点的时间测试测试项目第1次第2次第3次第4次B点停止时间/s5555BA所用时间/s151515152.加配重情况下表5:从地面指定位置驶上跷跷板测试测试项目第1次第2次第3次第4次时间/s19201920表6:加重后寻找平衡点时间测试测试项目第1次第2次第3次第4次平衡时间/s29344518d=dA-dB/mm20.510.69.515.8表7:加另一重物后平衡点测试测试项目第1次第2次第3次第4次平衡时间/s113291

12、6d=dA-dB/mm14.615.811.212.5根据测量,完成全过程的总时间均小于180秒。五、总结在本次课题训练中,我们基本完成了题目各项要求。从本次设计中我们体会到,对小车实施控制不仅是电子控制问题,其中也涉及到了力学和光学等方面的知识。在有限的时间里未能完美的解决小车寻找平衡点的的问题。在对直流电机的调速和精确控制上还不是很灵活,在以后的训练中应该多加学习和锻炼。参考文献 1 魏小龙.MSP430系列单片机接口技术及系统设计实例.北京航空航天大学出版社.2002.11 2 全国大学生电子设计竞赛组委会.全国大学生电子设计竞赛获奖作品选编(2005).北京理工大学出版社.2007.0

13、2 3 康华光.电子技术基础(模拟部分).高等教育出版社.2006.01 4 谢自美.电子线路设计实验测试(第三版).华中科技大学出版社.2007.08附录:1、总电路图2、源程序/* 电动车跷跷板软件设计主控程序功能描述:(1)主程序调度所有消息,初始化系统;(2)电机驱动模块包含所有与电机驱动有关的函数,接受不同的控制命令及速度控制,并付诸实施;(3)轨迹采样模块包含所有与轨迹采样有关的函数,并进行相关处理,输出结果;(4)平衡测量模块包含小车在跷跷板上寻找平衡的所有函数,并进行相关处理,出入单片机中,最终用来控制小车的前进和后退,达到跷跷板平衡。(5)显示模块 -分阶段显示电机行驶所用的

14、时间;(6)报警提示模块 -在小车起步、平衡、到达终点及返回原点停止时做出提示;*/主函数部分:“main.c”#include #include SYSTEMS.Hunsigned char StartDisplay,Count,DaojishitimeFlag;unsigned int RunTime,ChongJi;unsigned char table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /数码管用变量unsigned char Ge,Shi,Bai,Qian;main( void ) unsigned int n; W

15、DTCTL=WDTPW+WDTHOLD; /关看门狗 BCSCTL1 =CALBC1_1MHZ; /设定DCO为1MHZ DCOCTL =CALBC1_1MHZ; do /等待晶振稳定 IFG1 &=OFIFG; for(n=5000;n0;n-); while(OFIFG&IFG1); initsystems(); /系统初始化 xianshi_daojishi();/*第一阶段A-C*/while(1)GoForward();if(P4IN&0x60)=0x0) /到达C点 P2OUT&=BIT3; P2OUT&=BIT2; for(ChongJi=5000;ChongJi0;ChongJ

16、i-); P2OUT &=BIT0; /方向直流电机停止 P2OUT &=BIT1;break;/*第二阶段C点平衡*/ Balance();P2OUT |=BIT2; /电机正转前进 P2OUT &=BIT3; for(ChongJi=50000;ChongJi0;ChongJi-);/*第三阶段C-B*/while(1)GoSlowForward();if(P4IN&BIT3)!=BIT3) /到达B点 P2OUT|=BIT3;P2OUT&=BIT2; for(ChongJi=40000;ChongJi0;ChongJi-); P2OUT&=BIT3; P2OUT&=BIT2;xiansh

17、i_daojishi();break;/*第四阶段B-A*/while(1)/number=AYFilter();BackForward();if(P4IN&0x60)=0x0) /从上坡到下坡转换 P2OUT&=BIT3; P2OUT&=BIT2; for(ChongJi=10000;ChongJi0;ChongJi-);P2OUT|=BIT3; P2OUT&=BIT2; for(ChongJi=20000;ChongJi0;ChongJi-); while(1) BackSlowForward(); if(P4IN&BIT4)!=BIT4) break; break; /*完成停车*/St

18、op(); while(1) StartDisplay=0; chuli(); xianshi(); P2OUT&=BIT3; P2OUT&=BIT2; void initsystems() P2DIR |=BIT0+BIT1+BIT2+BIT3; /接电机 P2OUT =0x00; P3DIR =0xff; /P3口接数码管 P3OUT =0x00; P1DIR =0xff; /P1口低4位接数码管段选 P4DIR =0X07; /P4.7接MISO P4.3P4.6红外输入 /定时器初始化部分 TACTL=TASSEL1+TACLR; /定时器A时钟源为SMCLK,并清TAR CCTL0

19、|=CCIE; /CCR0中断使能 CCR0 =50000; /计数值为50000个SMCLK周期,50ms TACTL |=MC0; /启动定时器A为增计数模式 _BIS_SR(GIE); /打开总中断/*数码管显示倒计时*/void xianshi_daojishi() unsigned char daojishi_time=6; StartDisplay=0; /在显示倒计时时,路程行驶时间停止 P1OUT &=BIT0; /选通个位 P1OUT |=BIT1+BIT2+BIT3; /防止其他位被选 Count=0; while(daojishi_time0) P3OUT=tableda

20、ojishi_time; /数据给数码管 if(DaojishitimeFlag) daojishi_time-; DaojishitimeFlag=0; P1OUT=0x0f; StartDisplay=1;/*定时器中断服务*/#pragma vector = TIMERA0_VECTOR /ccr0中断服务_interrupt void ta0_isr(void)Count+; /秒计数 if(Count=20) DaojishitimeFlag=1; Count=0; if(StartDisplay=1) RunTime+; if(RunTime=999) RunTime=0; /*路

21、程显示部分函数*/void chuli() Ge= RunTime%10; Shi= RunTime%100/10; Bai= RunTime%1000/100; Qian= RunTime/1000;void xianshi() P1OUT=0x0e; /P1.0用作个位显示 P3OUT=tableGe; delay(); P1OUT=0x0d; /P1.1用作十位选择 P3OUT=tableShi; delay(); P1OUT=0x0b; /P1.2用作百位选择 P3OUT=tableBai; delay(); P1OUT=0x07; /P1.3用作千位选择 P3OUT=tableQia

22、n; delay();void delay() /数码管延时 unsigned i; for(i=100;i0;i-);/*Name: SYSTEMS.HDescription: 主函数main.c包含.h文件。*/#ifndef _SYSTEMS#define _SYSTEMS#include void initsystems();void xianshi_daojishi() ;void chuli();void xianshi();void delay() ;extern Stop();extern BackForward();extern BackSlowForward();exter

23、n AYFilter();extern AXFilter();extern GoSlowForward();extern GoForward();extern Balance();#endif电机驱动部分:“motor.c”#include #include MOTORCONTROL.H/*小车前进上坡*/void GoForward() P2OUT|=BIT2; /电机正转前进 P2OUT&=BIT3; if(P4IN&BIT5)!=BIT5)|(P4IN&BIT6)!=BIT6) /偏离位置 if(P4IN&BIT5)=BIT5) /左方传感器接P4.5 P2OUT |=BIT1; /右边

24、偏离,向左转 P2OUT &=BIT0; if(P4IN&BIT6)=BIT6) /右方传感器接P4.6 P2OUT |=BIT0; /左边偏离,向右转 P2OUT &=BIT1; else /未偏离位置 P2OUT &=BIT0; /方向直流电机停止 P2OUT &=BIT1; /*小车前进下坡*/void GoSlowForward() unsigned int pwm_count; P2OUT&=BIT2; /电机反转 P2OUT |=BIT3; for(pwm_count=10000;pwm_count0;pwm_count-); P2OUT|=BIT2; /电机正转前进 P2OUT&

25、=BIT3; for(pwm_count=12000;pwm_count0;pwm_count-); if(P4IN&BIT5)!=BIT5)|(P4IN&BIT6)!=BIT6) /偏离位置 if(P4IN&BIT5)=BIT5) /左方传感器接P4.5 P2OUT |=BIT1; /右边偏离,向左转 P2OUT &=BIT0; if(P4IN&BIT6)=BIT6) /右方传感器接P4.6 P2OUT |=BIT0; /左边偏离,向右转 P2OUT &=BIT1; else /未偏离位置 P2OUT &=BIT0; /方向直流电机停止 P2OUT &=BIT1; /*小车倒退上坡*/voi

26、d BackForward() P2OUT &=BIT0; /方向直流电机停止 P2OUT &=BIT1; P2OUT|=BIT3; /电机反转后退 P2OUT&=BIT2; /* if(P4IN&BIT5)!=BIT5)|(P4IN&BIT6)!=BIT6) /偏离位置 if(P4IN&BIT5)=BIT5) /左方传感器接P4.5 P2OUT |=BIT1; /右边偏离,向左转 P2OUT &=BIT0; if(P4IN&BIT6)=BIT6) /右方传感器接P4.6 P2OUT |=BIT0; /左边偏离,向右转 P2OUT &=BIT1; else /未偏离位置 P2OUT &=BIT

27、0; /方向直流电机停止 P2OUT &=BIT1; */*小车倒退下坡*/void BackSlowForward() unsigned int pwm_count,pwm_loop; P2OUT&=BIT3; /电机正转前进 P2OUT|=BIT2; for(pwm_count=10000;pwm_count0;pwm_count-); P2OUT|=BIT3; /电机反转 P2OUT&=BIT2; for(pwm_count=13000;pwm_count0;pwm_count-); if(P4IN&BIT5)!=BIT5)|(P4IN&BIT6)!=BIT6) /偏离位置 if(P4IN&BIT5)=BIT5) /左方传感器接P4.5 P2OUT |=BIT1; /右边偏离,向左转 P2OUT &=BIT0; P2OUT |=BIT2; P2OUT &=BIT3; for(pwm_loop=5;pwm_loop0;pwm_loop-)

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服