当前位置:文档之家› 点光源跟踪系统光敏三极管步进电机激光笔点光源跟踪

点光源跟踪系统光敏三极管步进电机激光笔点光源跟踪

摘要:本设计以TI的LM3S1138处理器为核心设计并制作一个能够检测并指示点光源位置的光源跟踪系统,当LED光源在圆弧或直线上运动时,检测模块检测信号后经过放大滤波送入LM3S1138进行处理,用电机驱动模块控制检测模块在水平和竖直方向上的旋转使激光笔指示光源位置,即实现点光源跟踪。

系统主要由四个模块构成:LED驱动模块、检测及其转换模块、LM3S1138处理模块和电机控制模块。

其中用TPS61087驱动LED,光敏三极管检测光照强度,由两个步进电机分别控制激光笔水平和竖直方向上的旋转。

关键字:LM3S1138 TPS61087 光敏三极管步进电机激光笔点光源跟踪一系统方案根据题目的要求,设计任务是通过使用光敏器件检测光照强度来判断光源的位置并用激光笔指示光源的位置。

为了完成上述功能,将整个系统设计为两个模块,点光源模块和指示光源模块。

整个系统的总体框图如图1-1所示:图1-1 系统总体框图1.1 LED驱动模块方案选择与论证方案一:采用LM317做LED驱动模块。

LM317是三端可调正稳压器集成电路,它的输出电压X围是1.2V至37V,负载电流最大为1.5A。

由LM317构成的驱动电路简单,但功耗较大,而且要注意散热问题。

方案二:采用TPS61087做LED驱动模块。

TPS61087是具有强制PWM模式的650kHz/1.2MHz升压DC-DC转换器,输入电压X围为2.5~6V,输出电压可高达18.5V。

采用TPS61087的驱动电路的输出电流可达500mA以上,足够用来驱动150~350mAX围的白光LED。

因此本设计采用方案二。

1.2 光敏传感器的选择与论证方案一:采用光敏电阻检测光照强度。

它在强光照射下光电转换线性较差,频率响应很低。

方案二:采用光敏二极管检测光照强度。

当反向电流增大时,但容易受温度变化的影响。

方案三:采用光敏三极管检测光照强度。

光敏三极管还有电流放大作用,它的集电极电流不只是受基极电路和电流控制,同时也受光辐射的控制。

光敏二极管和光敏三极管是光电转换半导体器件,与光敏电阻器相比具有灵敏度高、高频性能好,可靠性好、体积小、使用方便等优点。

而光敏三极管与光敏二极管相比,具有很大的光电流放大作用,即很高的灵敏度。

因此本设计采用方案三。

1.3 光源检测模块布局方案选择与论证方案一:采用八个光敏三极管按照菱形分布。

该方案需比较的数据较多,误差很大。

方案二:将八个光敏三极管按照矩形分布。

该布局比较数据量相对较少,但由于只有两排且没有光敏三极管与激光笔在同一水平线上,因此上下调节时误差很大,难以微调。

方案三:将六个光敏三极管按照十字形排列。

该方案实现在水平方向上粗调和微调,且数据比较是通过软件实现,更灵活且精度高。

因此本设计采用方案三。

1.4 电机驱动模块方案选择与论证方案一:采用直流电机控制激光笔旋转。

直流电机控制方法简单,但不易受单片机控制,旋转角度无法用程序有效控制,对于固定角度旋转比较困难。

方案二:采用步进电机控制激光笔旋转。

步进电机只有周期性的误差而无累积误差等特点,使得在速度、位置等控制领域用步进电机来控制变得非常的简单。

因此用步进电机驱动可使光源定位精确、稳定、可靠,故该设计采用方案二。

二 理论分析与计算2.1 检测信号的滤波及放大参数计算由于光敏三级管的射极电流为μA 级,故在它的射极串联一个10K 的电阻,如图3-3所示。

该电路中有两级滤波,第一级为C 和R2,第二级为R4和C3,用来滤除电路的纹波。

另外C 和R2还与R1一起决定电压增益的值,在输出和电源之间还接有IN4148.,用来保护电路,防止进入LM3S1138的管脚电压过大。

TLC085的增益为:11R zA +=其中:122+=jwcR R z该设计中需要放大10倍,即A=10。

取R2为50k Ω,则R1的值约为5 k Ω, 所以这里取R1为5.1 k Ω。

根据滤波频率公式:cR f π21=为满足第二级滤波频率为1KHz ,取R4为6.8 k Ω,则可算得电容C3=23.417μF , 所以取C3为22μF 。

2.2 LED 驱动回路电阻的选取如图3-2所示,1W 白光LED 与一12Ω的电阻串联,再与电阻R1、R3,电位器R2并联。

LED 的管压降为3.3V ,流过LED 的电流X 围为150mA~350mA ,电位器R2的可变接点接至TPS61087的反馈输入脚FB ,且V V FB 24.1= 所以有:电压: I V U ⨯+=123.3 故电压X 围为:5.1V~7.5V由图可得:24.15.73321=++R R R R ① ;24.11.532321=+++R R R R R ② 由式①②得:1.55.7332=+R R R 取R2为20 k Ω,则有Ω==k R R 5.42152.223,Ω=k R 56.1941 所以取R1阻值为200k Ω ,R3阻值为47k Ω。

2.3 步进电机的步距角的计算本设计中采用的是两个同种型号的四相步进电机,分别控制检测模块在水平方向和竖直方向上的旋转。

由于步进电机应用于低速场合,需要加上减速装置来细分步数以提高定位精度并减少噪声。

电机的位置和速度由导电次数(脉冲数)和频率成一一对应关系,因此要想控制旋转的位置和速度必须先算出步进电机的步距角。

步距角的算法如下: ①先测出圆形底盘的周长,为26.1cm②取一段弧长并测出该弧长为5.1cm ,则该弧长对应的角度为θ根据 1.261.5360=︒θ可得 θ=70.34˚③通过编程测到跑完该弧长所需的步数为400 ④根据公式得到步距为:︒=︒176.040034.70三电路与程序设计3.1 辅助电源模块设计用稳压器AMS1117-5.0和AMS1117-3.3提供固定输出电压5.0V和3.3V作为辅助电源,电路如图3-1所示:图3-1 辅助电源模块3.2 LED驱动模块电路设计该模块采用TPS61087实现1W白光LED的电流在150mA~350mAX围内可调,电路如图3-2所示:图3-2 LED驱动模块电路3.3 检测模块电路设计先用光敏三极管检测光照强度,然后采样光敏三极管的射极电压信号送入TLC085进行放大,用C和R2进行第一级滤波,再用R4和C3进行第二级滤波,最后将信号送入LM3S1138的ADC通道。

电路如图3-3所示:图3-3 检测模块电路四系统软件设计本系统中LM3S1138的主要作用是比较六路输入电压的大小并控制激光笔的旋转。

启动后先判断PD0,然后进入手动调节或者自动调节,软件流程图见附录图四。

五测试方案与测试结果1测试仪器直流稳压电源:RXN-303D-II函数信号发生器:EE1411C双踪数字示波器:TDS 10022 测试方法和测试结果①一定的光照条件下,通过调节光敏三极管与白光LED灯的角度和距离,用双踪数字示波器测量光敏三极管的发射级电压,输出电压在30~250mV之间,记录每个角度对应电压幅值。

②再测量经过TLC085放大后的电压值,再次纪录每个角度对应的输出电压幅值,并将输出电压值稳定在800~1000mV之间。

③固定LED灯和每个光电三极管的距离和角度,测试每个光电管对LED的敏感程度,并拟合出六个光电三极管各自的曲线,制表,便于程序里面控制激光管方向。

④经测试,电压放大倍数在10倍左右为佳,可以被理器较好的采集到。

3测试结果分析在右边的区域里,我们的检测电路接收不是很理想.所以数据不是很好。

这是我们在测试中出现了很多的问题,有些问题解决了,但是还是有些我们没有解决,这说明了我们还有很多的东西要学习。

在美中不足的是我们测试过程不是很顺利。

我们会在以后的学习中扩大自己的知识面。

六总结本设计在硬件和软件方面均要求较高,为了保证激光笔能正确指示,必须要有很高的精度,该设计中采用了步进电机加减速装置和光敏三级管等高精度元件来处理微小信号。

经过为期四天的竞赛,我们不但增强了实践能力和协作精神,更深刻领会了理论联系实际的重要性,对我们以后的学习和工作都有重要意义。

七参考文献:[ 1 ] 全国大学生电子设计竞赛组委会编《2009年全国大学生电子设计竞赛TI 优秀作品精选集》[ 2 ] 康华光编著《电子技术基础模拟部分》华中理工大学[ 3 ] 周航慈编著《单片机应用程序设计》航空航天大学[ 4 ] 王晓明编著《电动机的单片机控制》航空航天大学八附录原理图一:LM3S1138的最小系统ADC01ADC12VDDA 3GNDA 4ADC25ADC36LDO 7VDD 8GND 9PD010PD111PD2/U1Rx 12PD3/U1Tx 13VDD2514GND 15PG316PG217PG1/U2Tx 18PG0/U2Rx 19VDD 20GND 21PC7/C2-22PC6/C2+/C2o 23PC5/C1+24PC4/CCP525P A 0/U 0R x 261U 0T x 27P A 2/S S I 0C l k 28P A 3/S S I 0F s s29P A 4/S S I 0R x30P A 5/S S I 0T x31V D D 32G N D33P A 6/I 2C 1S C L34P A 7/I 2C 1S D A35N C 36N C 37V D D 2538G N D 39P G 540P G 4/C C P 341P F 7/C C P 442P F 6/C C P 143V D D 44G N D45P F 5/C 1o 46P F 047O S C 048O S C 149W A K E50HIB51XOSC052XOSC153GND 54VBAT 55VDD 56GND 57C0o/PF458PF359PF260PF161VDD2562GND 63RST 64CMOD065CCP0/PB066CCP2/PB167VDD 68GND 69I2C0SCL/PB270I2C0SDA/PB371SSI1Clk/PE072SSI1Fss/PE173SSI1Rx/PE274SSI1Tx/PE375C M O D 176S W O /T D O /P C 377T D I /P C 278S W D I O /T M S /P C 179S W C L K /T C K /P C 080V D D 81G N D 82N C 83N C 84N C 85N C 86G N D 87V D D 2588T R S T /P B 789C 0+/P B 690C 1-/P B 591C 0-/P B 492V D D 93G N D 94A D C 795A D C 696G N D A 97V D D A 98A D C 599A D C 4100U2LM3S11381234567891011121314151617181920212223242526J3CON261234567891011121314151617181920212223242526J4CON261234567891011121314151617181920212223242526J6CON261234567891011121314151617181920212223242526J5CON26123456789J2LINKU3BUZZERY16MHz Vin 1G N D2Vout3U1AMS1117D4LEDR144.7k+C147uF +C247uFD1LED D2LED D3LEDR111.2k R121.2kR134.7k R310k R410kR182.2kR1010kQ10805R1775D6IN4148S1SW SPST S2SW SPSTC2122pFC2022pF C11100nF C14100nF C15100nFC18100nFC17100nFC16100nFC13100nFC12100nFC10100nFC9100nFC5100nF C6100nFC7100nFC8100nF+C192.2uF R510kR910kR810k R710k R610k S3SW SPSTC242.2uFR151.5kD5IN4148R160C2322pFC2222pFC30.33uFC410412J1+5V5VGND3.3V3.3V3.3V5V3.3V3.3VPD1PG5P G 5PD1PD0PD0PG2PG2PG3PG3PG4P G 4OSC0OSC1XOSC0XOSC1O S C 0O S C 1XOSC0XOSC1RSTRSTTCK T C K TMSTDI TDOT D OT D I T M S 3.3V 3.3V 3.3V 3.3V 3.3V 3.3V 3.3V3.3V2.5V2.5V 2.5V 2.5V 2.5V3.3V 3.3V GND GND GND GND G N D G N D G N D GNDGNDGNDGNDG N D G N D G N D G N D T R S TT R S T 3.3V3.3V3.3V3.3V 3.3V 3.3V3.3V 3.3V3.3V3.3V2.5V2.5V2.5V 2.5V 2.5V5V 3.3V PG0PG1GND TCK TDI TDO TMSPG0PG1GNDR110k R210k3.3VPG0PG1不接原理图二:光敏三极管的三种分布图图1-4原理图三:软件流程图图四软件流程图主程序:/* 2010-8-20 */// 包含头文件#include "systemInit.h"#include "status_switch.h"#include "motor.h"#include "ad.h"#define FLAG_PERIPH SYSCTL_PERIPH_GPIOG #define FLAG_PORT GPIO_PORTG_BASE#define FLAG_PIN GPIO_PIN_0unsigned long standred[4] = {0};unsigned char flag = 0;void FlagInit(void){SysCtlPeriEnable(FLAG_PERIPH); GPIOPinTypeIn(FLAG_PORT, FLAG_PIN);}unsigned char FlagRead(void){unsigned char back;if (!(GPIOPinRead(FLAG_PORT, FLAG_PIN)))back = 0;elseback = 1;return (back);}//【功能】主函数(程序入口)//【参数】无//【返回】无void main(void){unsigned char i = 0;unsigned char num = 0; //采样AD基准时记录采样次数unsigned long s[4] = {0}; //算AD基准电压的每次采样瞬时值unsigned long add[4] = {0}; //算AD基准电压的累积值char r[30];unsigned char flag_1 = 0;systemInit();KeyInit(); //按键初始化,用于手动调整FlagInit();LedInit(); //led初始化,用以指示手动调整状态Motor_Init(); //电机初始化TimerInit();AdcInit(); //ADC初始化for (;;){flag = FlagRead();if(flag){HandAdjust(); //手动调整状态}else{if (flag_1 == 0){flag_1 = 1;for (num=0; num<50; num++) //采样对准时的基准值{AdcSample(s);for (i=0; i<4; i+=3){s[i] = (s[i]*3000/1024);add[i] = add[i] + s[i];}if (49 == num){for (i=0; i<4; i+=3){standred[i] = add[i]/50; //采样10次,取平均值add[i] = 0;standred[i] = (standred[i]+5)/10; //软件滤波(利用整除,四舍五入)sprintf(r, "standred[%d]=%ld(mV)\r\n", i,standred[i]);uputs(r);}}}}AutoAdjust(); //自动调整状态}}}。

相关主题