8-点光源跟踪系统报告黄冈师范学院第三组.doc

上传人:本田雅阁 文档编号:2507480 上传时间:2019-04-04 格式:DOC 页数:20 大小:364.02KB
返回 下载 相关 举报
8-点光源跟踪系统报告黄冈师范学院第三组.doc_第1页
第1页 / 共20页
8-点光源跟踪系统报告黄冈师范学院第三组.doc_第2页
第2页 / 共20页
8-点光源跟踪系统报告黄冈师范学院第三组.doc_第3页
第3页 / 共20页
8-点光源跟踪系统报告黄冈师范学院第三组.doc_第4页
第4页 / 共20页
8-点光源跟踪系统报告黄冈师范学院第三组.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《8-点光源跟踪系统报告黄冈师范学院第三组.doc》由会员分享,可在线阅读,更多相关《8-点光源跟踪系统报告黄冈师范学院第三组.doc(20页珍藏版)》请在三一文库上搜索。

1、 2010年“TI杯”湖北省大学生电子设计大赛 点光源跟踪系统(B题)设计报告徐国楚 袁利才 刘俊芳黄冈师范学院 物理科学与技术学院2010年8月22日点光源跟踪系统(B题)设计报告 摘要 本设计以TI公司的超低功耗MCU MSP430处理器为核心,设计并制作一个检测并跟踪白光LED点光源位置的光源跟踪系统。通过利用感光元件(光敏二级管),将光强转换为电压信号并进行放大,送AD转换,然后通过MSP430单片机进行计算和分析,并利用分析结果控制步进电机带动光笔运转,准确跟踪光源的运动。 系统由430单片机系统(含按键和液晶显示)、光电检测和放大、AD转换、步进电机驱动控制电路等组成。 为了克服环

2、境光的影响和测量过程中的干扰,系统中采用了8个廉价光电传感器(分为2组)进行测光。其方法是,首先对每组光电传感器进行多次测量和转换,在进行平均值滤波后,对滤波后的两组结果求差值,确定光源偏离方向,产生步进电机控制信号,从而控制激光笔的移动,达到跟踪光源进行准确定位的目的。 本课题所采用的电路简单,算法合理。经过实际制作和测试,完全达到了题目基本部分和发挥部分的所有要求,效果很好。关键词:MSP430 白光LED点光源跟踪 感光元件 步进电机 点光源跟踪系统(B题)设计报告一、系统方案设计论证1.1 感光器件选用方案 感光部分是整个设计的基础,它对整个系统的工作尤为重要。 方案一:选用光敏电阻作

3、为感光器件。光敏电阻器是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器;入射光强,电阻减小,入射光弱,电阻增大。光照特性曲线及伏安特性曲线如下图: 光敏电阻的光照特性曲线 光敏电阻的伏安特性曲线 方案二:选用红外接收管作为感光器件。红外接收二极管广泛用于各种家用电器的遥控接收器中。红外接收二极管能很好地接收红外发光二极管发射的波长为94Onm的红外光信号,而对于其他波长的光线则不能接收,保证了接收的准确性和灵敏度。其方向性强,受外界干扰小,精度高,特别适合红外成分较多的光线。 方案三:选用光敏二极管作为感光器件。光敏二极管与半导体二极管在结构上是类似的,其管芯是一个具有光敏特

4、征的PN结,具有单向导电性,因此工作时需加上反向电压,其检测范围宽。其光照曲线及伏安特性曲线如下图所示:光敏二极管的光照曲线 光敏二极管的伏安特性曲线 考虑到光源照射到感光元件侧面时光照较弱,灵敏度较高,可利用光敏二极管具有较宽的检测范围,将其作为粗调。故选择方案三。 1.2 光源检测方案 下图为光源照射光敏器件示意图: 光敏二极管组A(四个) 激光笔圆形转台 光敏二极管组B(四个) 光源源 方案一:直流电机带动激光笔转台 直流电机是将直流电能转换为机械能的转动装置,电动机定子提供磁场,直流电源向转子的绕组提供电流,换向器使转子电流与磁场产生的转矩保持方向不变。其调速性能好,调速范围宽,可以均

5、匀地实现转速调节。但其换向困难,会产生火花,寿命短,且其转动角度不能精确控制。IN1IN2 光敏二极管组A感应电压H桥单片机驱动电路求差采样20次求和 光敏二极管 组B感应电压 逻辑1、0直流电机M 求平均值求平均值采样20次求和 方案二:步进电机带动激光笔转台 步进电机是一种将电脉冲转化为不连续的机械运动的机电装置。当施加适当的电脉冲指令时,电机转子的出轴或外转子将会以不连续的步进增量旋转。所加脉冲的顺序直接决定着电机转轴旋转的方向。电机转轴旋转的速度取决于所加脉冲的频率,而旋转的角度或者圈数和所加的脉冲数成正比。其方案如下:IN1IN2IN3IN4驱动电路M步进电机采样20次求和求平均值

6、求平均值 光敏二极管 组B感应电压 采样20次求和求差单片机 光敏二极管组A感应电压 方案三:用减速步进电机带动激光笔转台 假定选用精度较高的1.8度的步进电机,在200cm的距离情况下,电机每转动一个步距,激光笔在光源位置行走的距离约为6cm,误差大,形成震荡状态,控制困难,达不到题目规定的要求。 因此,我们根据需要,选择了运用减速步进电机带动激光笔转台。减速步进电机步距更小,控制精度更高,根据实验情况,该方案完全满足题目要求,故选择方案三。二、系统实现2.1 硬件设计 2.1.1 系统框图光源光电传感器放大A/D转换单片机显示步进电机键盘 2.1.2 单元电路设计2.1.2.1 感光及放大

7、电路 感光电路中将8个光敏二极管呈弧形且对称固定在激光笔转台上,将光电传感器感应到的光信号转化为电信号并进行放大。 2.1.2.2 步进电机驱动电路 L298N是恒压恒流桥式2A驱动芯片内部包含4通道逻辑驱动电路。其可接受标准TTL逻辑电平信号VSS,VSS可接4.57 V电压。4脚VS接电源电压,VS电压范围VIH为2546 V。输出电流可达2.5A。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298可驱动步进电机。 2.1.2.2 MSP430单片机最小系统板2.2 软件设计2.2.1 软件流程 ADC12中断存数据,count+采样次数Count=20?

8、Cyflag=1关中断并清count结束YN 定时器A中断Cyflag=?正转函数反转函数结束=1=2开始关闭看门狗时钟初始化端口初始化LCD初始化ADC12初始化定时器A初始化 手动模 式扫描?采样完成?确定正反转标志进行数据采集 打开中断 结束NYYN 三、系统整体测试及分析3.1 测试步骤 如图所示,光源中心线与支架间的夹角约为60,光源距地面高约100cm,在光源后3 cm距离内、光源中心线垂直平面上设置一直径不小于60cm暗色纸板。光源跟踪系统A放置在地面,通过使用光敏器件检测光照强度判断光源的位置。测试时在正常室内光照,跟踪系统A不正对直射阳光和强光源。 步骤一:光源跟踪系统中的指

9、向激光笔可以通过现场设置参数的方法尽快指向点光源。 步骤二:将激光笔光点调偏离点光源中心30cm,观察光点偏离光源中心的距离。 步骤三:在激光笔基本对准光源时,支架用手动方式沿着以A为圆心、半径r约173cm的圆周在不大于45的范围内缓慢平稳移动,观察光点偏离光源中心的距离。 步骤四:在激光笔基本对准光源时,支架用手动方式沿着以A为圆心、半径r约为173cm的圆周切线LM缓慢平稳移动,观察光点偏离光源中心的距离。 步骤五:将支架旋转20,观察光点偏离光源中心的距离。 步骤六:改变点光源的亮度时,再按照步骤四测试。 3.2 测试结果 在有日光灯照射下和正午时分运用上述步骤对系统进行测试,将数据记

10、录于下表。 在日光灯条件下测试结果:偏差 (cm) 次数 步骤第一次第二次第三次第四次第五次第六次步骤一0.80.70.60.70.50.8步骤二1.00.80.70.80.91.1 偏差 (cm) 次数 步骤第一次(移动10cm)第二次(移动20cm)第三次(移动30cm)第四次(移动40cm)第五次(移动50cm)第六次(移动60cm)步骤三1.51.81.71.41.21.2步骤四1.20.81.00.91.31.2步骤六2.21.51.81.62.02.0 偏差 (cm) 组别 步骤第一次(移动 5)第二次(移动 10)第三次(移动 15)第四次(移动 20)步骤五2.02.22.52

11、.4 在正午时分测试结果:偏差 (cm) 次数 步骤第一次第二次第三次第四次第五次第六次步骤一0.71.00.80.60.81.0步骤二1.21.01.51.01.41.5 偏差 (cm) 次数 步骤第一次(移动10cm)第二次(移动20cm)第三次(移动30cm)第四次(移动40cm)第五次(移动50cm)第六次(移动60cm)步骤三2.02.52.73.02.22.8步骤四1.31.41.61.41.81.6步骤六2.32.12.22.42.02.5 偏差 (cm) 组别 步骤第一次(移动 5)第二次(移动 10)第三次(移动 15)第四次(移动 20)步骤五2.22.22.32.4 四、

12、作品部分设计亮点 由于作品采用了光电传感器,外界的环境光线对实验的影响较大,因此在单片机的算法中,采取对所采集的两个光敏二极管组(各含4个光敏二极管)的20次采样电压进行求和、取平均值(取到滤波的作用),再求差值,单片机根据差值结果判断步进电机转动方向,如分析结果为向左转,单片机保留此项数据并不立刻执行命令,再对光电传感器的20次采样电压进行求和、取平均值、求差值,再判断步进电机转动方向,保留此数据,如此在重复一次,直至三次判断结果均为向左转,单片机在输出控制步进电机左转的控制信号。如果有两次的判断结果不同,则清除判断结果,再进行判断,直至有连续三次判断结果相同,单片机才输出控制步进电机转动方

13、向的信号。 另外,还用一种思路,初始状态下不打开LED灯时,单片机先对环境光进行采样,对八路采样电压分两组进行求和、取平均值及求差值,将差值a保留,在打开LED灯时,再对八路采样电压分两组进行求和、取平均值,将两者中的较大者减去差值a后再与另一个平均值求差值,根据差值输出控制步进电机转动的信号。此种方法可以更好的避免外界环境光的干扰,但由于时间关系,此次系统设计未能采用,但此次采用的方案也能达到。 五、结论及设计感想 综上所述,在光源跟踪系统中,光电感应器和电机的选取,以及单片机的算法在实现点光源跟踪的精确度上取到了决定性的作用,实验可以达到题目基本部分和发挥部分的所有要求,效果良好。附录:程

14、序代码:/*/#include msp430x14x.h#define uint unsigned int#define uchar unsigned char#define ulong unsigned long int#define RS_HIGH P4OUT|=BIT0 /lcd指令数据选择信号#define RS_LOW P4OUT&=BIT0 #define RW_HIGH P4OUT|=BIT6 /lcd读写信号#define RW_LOW P4OUT&=BIT6#define E_HIGH P4OUT|=BIT7 /lcd使能信号#define E_LOW P4OUT&=BIT7

15、#define BUSY_OUT P2DIR|=BIT7#define BUSY_IN P2DIR&=BIT7#define BUSY_DATA P2IN&BIT7/AD采样电压比较部分uint ADCBuf020=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;/保存采集到的数据uint ADCBuf120=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;/保存采集到的数据uint ADCBuf220=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;/保存采集到的数据uint ADCBuf320=

16、0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;/保存采集到的数据uint ADCBuf420=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;/保存采集到的数据uint ADCBuf520=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;/保存采集到的数据uint ADCBuf620=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;/保存采集到的数据uint ADCBuf720=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;/保存采

17、集到的数据ulong Sum0=0;/20个数据的和ulong Sum1=0;ulong Sum2=0;ulong Sum3=0;ulong Sum4=0;ulong Sum5=0;ulong Sum6=0;ulong Sum7=0;ulong VBuf0=0;/电压扩大10000000的值ulong VBuf1=0;ulong VBuf2=0;ulong VBuf3=0;ulong VBuf4=0;ulong VBuf5=0;ulong VBuf6=0;ulong VBuf7=0;uchar Count=0;ulong sum41=0;ulong sum42=0;long sum40=0;u

18、long sum410=0;/显示的初值变量ulong sum420=0;long sum400=0;uchar xsflag=0;/转动部分uchar rightrun14=0x8f,0x2f,0x4f,0x1f;uchar leftrun14=0x1f,0x4f,0x2f,0x8f;uchar djflag=0; /步进电机转动状态 正/反/停止 uchar rightnum,leftnum;/步进电机内部自调节参数uchar cyflag=0;/0时采样,1时关采样/显示部分uchar Data116= ;uchar Data216= ;/手动自动切换部分uchar flagm=0;/0

19、时手动部分uchar count1=0;uchar count2=0;/*时钟初始化函数*/void InitClock(void) BCSCTL1=RSEL2+RSEL1+RSEL0;/XT2开启 LFXT1工作在低频模式 ACLK不分频 最高的标称频率 DCOCTL=DCO2+DCO1+DCO0;/DCO为最高频率 doIFG1&=OFIFG;/清除振荡器失效标志 for(uint i=255;i0;i-); while(IFG1&OFIFG);/判断XT2是否起振 BCSCTL2=SELM1+SELS;/MCLK SMCLK时钟源为TX2CLK不分频 /*端口初始化*/void Init

20、Port(void) P1SEL=0x00;/设为一般IO口 P1DIR=0x00; P1OUT=0x00; P1IE=0x03;/1.0有中断 P1IES=0x03;/1.0下降沿 其他不管 P2SEL=0x00;/P2口所有引脚设置为一般的IO口 P4SEL=0x00;/P4口所有引脚设置为一般的IO口 P2DIR=0xFF;/P2口所有引脚设置为输出方向 P4DIR=0xFB;/P4口所有引脚设置为输出方向 P5SEL=0x00;/P5口所有引脚设置为一般的IO口 P5DIR=0xFF;/P5口所有引脚设置为输出方向 P5OUT=0x00;/P5口初值为0 /*延时子程序*/DelayM

21、S(uint ms) uint i; while(ms-)for(i=0; i800;i+);/*电机控制部分*/void rightrun()/步进电机正转 P5OUT=rightrun1rightnum; rightnum+; if(rightnum=4)rightnum=0; void leftrun()/步进电机反转 P5OUT=leftrun1leftnum; leftnum+; if(leftnum=4)leftnum=0; /*按键处理部分*/void KeyProcess() if(P1IFG&BIT0) DelayMS(20); if(P1IFG&BIT0) if(flagm

22、=0)flagm=1; else if(flagm=1)flagm=0;djflag=0;/手动模式先定电机 if(P1IFG&BIT1) DelayMS(20); if(P1IFG&BIT1) xsflag=1; /端口1中断处理程序#pragma vector=PORT1_VECTOR_interrupt void Port1INT(void) KeyProcess(); P1IFG=0x00;/清除中断标志位 /*LCD显示部分*/ 测试LCD忙碌状态void LcdBusy() RS_LOW; RW_HIGH; E_HIGH; _NOP();_NOP(); BUSY_IN; while

23、(BUSY_DATA); BUSY_OUT; E_LOW;/写入指令到LCDWriteCommand(uchar Command) LcdBusy(); RS_LOW; RW_LOW; E_HIGH; _NOP();_NOP(); P2OUT=Command; _NOP();_NOP(); E_LOW;/写入字符数据到LCDWriteData(uchar Data) LcdBusy(); RS_HIGH; RW_LOW; E_HIGH; _NOP();_NOP(); P2OUT=Data; _NOP();_NOP(); E_LOW;/LCD初始化设定LcdInit() WriteCommand

24、(0x38);/8位数据端口,2行显示,5*7点阵 DelayMS(5); WriteCommand(0x0c);/开启显示, 无光标 DelayMS(5); WriteCommand(0x06);/AC递增, 画面不动 DelayMS(5); WriteCommand(0x01);/清屏 DelayMS(5);/*ADC12部分*/ADC12初始化void InitADC12(void) P6SEL=0xff;/P6.0为模拟输入 ADC12CTL0&=ENC;/ENC设置为0从而修改ADC12寄存器 ADC12CTL0=MSC+ADC12ON;/采样信号由SHI仅首次触发,打开ADC12模

25、块 ADC12MCTL0=INCH_0+SREF_2;/参考电压为VeREF+和AVss 输入通道A0 ADC12MCTL1=INCH_1+SREF_2;/参考电压为VeREF+和AVss 输入通道A1 ADC12MCTL2=INCH_2+SREF_2;/参考电压为VeREF+和AVss 输入通道A2 ADC12MCTL3=INCH_3+SREF_2;/参考电压为VeREF+和AVss 输入通道A0 ADC12MCTL4=INCH_4+SREF_2;/参考电压为VeREF+和AVss 输入通道A1 ADC12MCTL5=INCH_5+SREF_2;/参考电压为VeREF+和AVss 输入通道A

26、2 ADC12MCTL6=INCH_6+SREF_2;/参考电压为VeREF+和AVss 输入通道A0 ADC12MCTL7=INCH_7+SREF_2+EOS;/通道A3 ADC12CTL1=CSTARTADD_0+SHP+CONSEQ_3+ADC12SSEL_0+ADC12DIV_0;/起始地址ADCMEM0,采样脉冲由采样定时器产生,单通道多次转换,内部时钟源不分频 ADC12IE=0x80;/比赛完了好好想想 ADC12CTL0|=ENC+ADC12SC;/开始新一轮转换void getv() for(uchar i=0;i600) count1+; count2=0; if(coun

27、t1=3)djflag=1;count1=0; if(sum400)&(sum40600)/测试补偿电压0.06v djflag=0; if(sum400)&(-sum40)600) djflag=0; if(sum40600) count1=0; count2+; if(count2=3)djflag=2;count2=0; Data12=VBuf0/1000+48;/v1:0.000v Data13=VBuf0%1000/100+48; Data14=VBuf0%100/10+48; Data16=VBuf1/1000+48; Data17=VBuf1%1000/100+48; Data1

28、8=VBuf1%100/10+48; Data110=VBuf2/1000+48; Data111=VBuf2%1000/100+48; Data112=VBuf2%100/10+48; Data113=VBuf3/1000+48; Data114=VBuf3%1000/100+48; Data115=VBuf3%100/10+48;/ADC12中断#pragma vector=ADC_VECTOR_interrupt void ADC12ISR(void) if(cyflag=0) ADCBuf0Count=ADC12MEM0; ADCBuf1Count=ADC12MEM1; ADCBuf2

29、Count=ADC12MEM2; ADCBuf3Count=ADC12MEM3; ADCBuf4Count=ADC12MEM4; ADCBuf5Count=ADC12MEM5; ADCBuf6Count=ADC12MEM6; ADCBuf7Count=ADC12MEM7; Count+; if(Count=20) cyflag=1;/采集完了,关采集 ADC12IE=0x00; Count=0; /*定时器部分*/定时器A初始化void InitTimerA(void) TACTL=TASSEL1+ID1+ID0+MC0+TACLR;/选择1/8SMCLK 增计数 清除TAR CCTL0=CC

30、IE;/CCR0中断允许 比较模式 CCR0=5000;/时间间隔5ms/定时器A中断#pragma vector=TIMERA0_VECTOR_interrupt void TimerAINT(void) if(djflag=1) rightrun(); if(djflag=2) leftrun();/主函数main() WDTCTL=WDTPW+WDTHOLD;/关闭看门狗 InitClock(); InitPort(); LcdInit(); _EINT(); InitADC12(); InitTimerA(); while(1) if(flagm=0) /自动手动模式在主程序里面一直扫

31、描 if(P1IN&0x04)=0) djflag=1; else if(P1IN&0x08)=0) djflag=2; else djflag=0; if (cyflag=1)/值读完去采集 getv(); WriteCommand(0x80);/定位在第一行第一个位置 for(uchar i=0;i16;i+) if(flagm=1)Data11=a; Data12=u; Data13=t; Data14=o; else Data11=s; Data12=h; Data13=o; Data14=u; if(djflag=1)Data17=r; Data18=i; Data19=g; Data110=h; Data111=t; if(djflag=2)Data17=l; Data18=e; Data19=f; Data110=t; else Data17=s; Data18=t; Data19=o; Data110=p; WriteData(Data1i); WriteCommand(0x80|0x40); for(uchar i=0;i16;i+) WriteData(Data2i); cyflag=0; ADC12

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1