控制机本科论文_第1页
控制机本科论文_第2页
控制机本科论文_第3页
控制机本科论文_第4页
控制机本科论文_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图5.1所示,然后编译连接工程。选择Project->Debug,启动AXD进行JTAG仿真调试(需要正确设置仿真器)。图5.SEQ图5.\*ARABIC1全速运行程序,程序将会在BEEPCON.C文件的主函数中停止(因为main函数起始处默认设置有断点)。选择ProcessorViews->Variables打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。选择SystemViews->DebuggerInternals即可打开LPC2000系列ARM7微控制器的片内外设寄存器窗口。可以单步运行程序,可以设置/取消断点,或者全速运行程序,停止程序运行,观察变量的值,LED闪烁是否正确。当仿真调试通过后关闭AXD,在ADS1.2集成开发环境中选用RelOutChip生成目标,然后编译连接工程。选择Project->Debug,启动AXD进行JTAG仿真调试。此时EasyJTAG仿真器将会把程序下载到片外FLASH上。把LPC2131核心板上的ISP跳线断开,按下RST键,观察程序是否能脱机运行。运行结果可以通过键盘显示板的数码管显示来观察,也可在AXD的变量观察窗口中跟踪观察:5.3软硬件整体的调试硬件电路板的制作和程序软件编写完成后,按设计要求正确接线,检查无误后,启动程序开始运行。系统正常启动后,在测重部分加上已知重量的砝码,通过观察键键盘板上数码管的重量显示和AXD的变量观察窗口来验正A/D采样程序、数字滤波程序、数码管显示程序和采样电路是否正确,如果误差过大,应对相应部分加以修改完善,最终达到系统设计目标。检测和显示部分都正常后,就该调节部分了。连接上设备之后,可以通过人为加大或减小下料量来观察系统是否能自动调节,并最终稳定。若不能自动调节或无法稳定,在确认电路设计无误后,可通过修改程序来逐步完成设计任务,最终使系统稳定可靠运行。第六章结束语历经两个多月,毕业设计终于接近尾声了,从资料的搜集到最终的调试,在整个设计过程中,感觉自己学到了许多东西,虽然以前对配料系统有些了解,但是自己真正接触这个毕业设计课题时,还是感到有点茫然,但经过自己查阅资料和指导老师的指导,使自己从初步的认识到现在能结合实物进行具体的实践。本系统从设计之初就选择时下流行的嵌入式ARM微处理器为系统的核心,并配合键盘显示模块建立人机交互界面,增强了系统的实时监控能力和可操作性。在系统的设计过程中,仍然存在一些实际问题,如A/D采样电路及程序造成的一些误差导致配料精度有所降低等,仍需要进一步的努力,最终达成设计目标。参考文献[1]周立功、张华,等。《深入浅出ARM7——LPC213x/214x》(上册)北京:北京航空航天大学出版社,2005 [2]周立功公司。《ARM嵌入式系统基础教程(第二版)》北京:北京航空航天大学出版社,2007[3]周立功公司。《ARM嵌入式系统实验教程(三)》北京:北京航空航天大学出版社,2005[4]周立功公司。《ARM嵌入式系统实验教程(三)扩展实验》北京:北京航空航天大学出版社,2005[5]周航慈、吴光文。《基于嵌入式实时操作系统的程序设计技术》北京:北京航空航天大学出版社,2006[6]阎石。《数字电子技术基础》北京高等教育出版社2006.4[7]童诗白、华成英。《模拟电子技术基础》北京高等教育出版社2004.4[8]黄志伟编著.全国大学生电子设计竞赛系统设计.北京:北京航空航天大学出版社,2006.[9]JeanJ.Labrosse[美],邵贝贝,等,译.嵌入式实时操作系统uC/OS-II(第二版).北京:北京航空航天大学出版社,2003.[10]任哲.嵌入式实时操作系统uC/OS-II原理及应用.北京:北京航空航天大学出版社,2006.[11]佐藤一朗[日],韩健青译.集成运算运算放大器电路设计实用手册.北京:北京航空航天大学出版社,1989.[12]BonnieBaker[美],李喻奎译.嵌入式系统中的模拟设计.北京:北京航空航天大学出版社,2006.[13]brianW.KernighanandDennisM.Ritchie.C程序设计语言。北京:机械工业出版社2004.1[14]谭浩强。C程序设计。北京:清华大学出版社,1999[15]韩亚萍。ProtelDXP基础教程。北京:清华大学出版社,2004附录附录ALPC2131引脚连接图和功能框图附录B元件清单元件名称数量(个)元件参数H-JTAG接口1LPC2131系统板174HC164N2LM324N1GF-2桥式称重传感器1S1612NH1电容30.1uF电解电容1470uF/50V滑动变阻器210K电阻151K电阻22100K电阻3215K脉冲变压器1901424位数码管2LM78051LM78121按键8附录C程序清单/********************************************************************************************************Modifieddate: 2008-03**Version:**Descriptions: 配料采样与控制程序。**********************************************************************************************************/#include"config.h"#defineScr(1<<3)//可控硅脉冲信号#defineKEY (1<<2)//P0.2口(MISO)为按键输入脚#defineUtestCS[0]//测得电压#defineGtestCS[1]//测得皮带上物料的总重量#defineGsetCS[2]//设定皮带上物料的总重量uint8T0Flag=0,Display=0;uint16CS[6]={0,1,2,3,4,5}; //可以输入的参数数组uint8DATA[8]; uint8digitable[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //显示段码表uint8selectable[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //显示位码表uint8x=0,y=0,k=0;//变量,k对DATA0&DATA1&selectable;x&y对digitable;uint8w=0; //显示刷新时间计数器uint8SF=0; //闪烁标志位uint8TK=0x09; //按键按下记录位寄存器,有效数据位为0~7uint8M=0,R=0; //按键选项计数器uint32ADC_R1,ADC_Result=0,ADC_Ave=0,Count=30;floatG=0;uint32Gstart=0;//用于去皮/************************************************************************************************************函数名称:ADC_Init()**函数功能:ADC模块初始化**入口参数:无**出口参数:无**********************************************************************************************************/voidADC_Init(void){ uint32T; PINSEL1|=(1<<28); //P0.30连接到AD0.3 //引脚设置必须紧跟初始化程序,否则出错 AD0CR=(1<<3) | //SEL=0x0a,选择通道1.3 ((Fpclk/1000000-1)<<8) | //CLKDIV=Fpclk/1000000-1,转换时钟为1MHz (0<<16) | //BURST=0,软件控制转换操作 (0<<17) | //CLKS=0,使用11clock转换 (1<<21) | //PDN=1,正常工作模式 (0<<22) | //TEST1:0=00,正常工作模式 (1<<24) | //START=1,直接启动ADC转换 (0<<27); //直接启动ADC转换时,此位无效 while((AD0DR&0x80000000)==0); //等待转换结束 T=AD0DR; //读取ADC结果,并清除DONE标志位} /**********************************************************************************************************函数名称:ADC()**函数功能:AD转换程序**入口参数:无**出口参数:无*********************************************************************************************************/voidADC(void){ uint32ADC_R; AD0CR|=(1<<24); //START=1,直接启动ADC转换 while((AD0DR&0x80000000)==0); //等待转换结束 AD0CR=AD0CR|(1<<24);//再次启动A/D转换 while((AD0DR&0x80000000)==0); //等待转换结束 ADC_R=AD0DR; //读取AD0.3结果 ADC_R1=(ADC_R>>6)&0x3ff; ADC_R1=ADC_R1*2480/1024; //将AD结果转换为电压mv值(参考电压经过3/4分压) return;}/*********************************************************************************************函数名称:delays()**功能描述:软件延时**入口参数:无**出口参数:无*******************************************************************************************/voiddelays(void){uint8i,j;for(i=100;i>0;i--)for(j=50;j>0;j--);}/*********************************************************************************************函数名称:Timer0_Init()**功能描述:TIMER0初始化**入口参数:无**出口参数:无*******************************************************************************************/voidTimer0_Init(void){ T0TC=0; /*定时器设置为0 */ T0PR=0; /*时钟不分频 */ T0MCR=0x03; /*设置T0MR0匹配后复位T0TC,并产生中断标志 */ T0MR0=Fpclk/400; /*2.5毫秒定时 */ T0TCR=0x01; /*启动定时器 */}/*********************************************************************************************函数名称:IRQ_Timer0()**功能描述:TIMER0中断服务程序**入口参数:无**出口参数:无*******************************************************************************************/void__irqIRQ_Timer0(void){ T0Flag=1; //T0中断标志置位 T0IR=0x01; //清除中断标志 VICVectAddr=0;}/*********************************************************************************************函数名称:Timer1_Init()**功能描述:TIMER1初始化**入口参数:无**出口参数:无*******************************************************************************************/voidTimer1_Init(void){ T1TC=0; /*定时器设置为0 */ T1PR=0; /*时钟不分频 */ T1MCR=0x03; /*设置T1MR0匹配后复位T1TC,并产生中断标志 */ T1MR0=Fpclk/100; /*10毫秒定时,50Hz为20ms,10ms定时设置为中点时导通*/ T1TCR=0x01; /*启动定时器 */}/*********************************************************************************************函数名称:IRQ_Timer1()**功能描述:TIMER1中断服务程序**入口参数:无**出口参数:无*******************************************************************************************/void__irqIRQ_Timer1(void){T1TCR=0x00;//关闭定时器IO0SET=IO0SET|Scr;//使可控硅导通 T1IR=0x01; //清除中断标志 VICVectAddr=0;}/**********************************************************************************************************函数名称:EXT_Init()**函数功能:初始化外部中断**入口参数:无**出口参数:无********************************************************************************************************/voidEXT_Init(void){PINSEL0=(PINSEL0&0xFFFFFFF3)|0x0C;//设置P0.1为外部中断EINT0EXTMODE=EXTMODE|0x01;//边沿触发EXTPOLAR=EXTPOLAR&0x0E;//下降沿有效}/**********************************************************************************************************函数名称:IRQ_EINT0()**函数功能:外部中断服务程序**入口参数:无**出口参数:无********************************************************************************************************/void__irqIRQ_EINT0(void){IO0CLR=IO0CLR|Scr;//确保定时器1定时到之前可控硅不导通IO1CLR=IO1CLR|(1<<18);//观察变量if(Gtest<Gset)T1MR0=Fpclk/(100-10);//料不足时减小可控硅导通角以增大导通时间从而加大料斗振动if(Gtest>Gset)T1MR0=Fpclk/(100+10);T1TCR=0x01;//打开定时器EXTINT=0x01;//清除中断标志VICVectAddr=0x00;//中断返回}/*********************************************************************************************函数名称:IRQ_Init()**功能描述:设置定时器0中断IRQ**入口参数:无**出口参数:无*******************************************************************************************/voidIRQ_Init(void){ VICIntSelect=0x00; //所有中断通道设置为IRQ中断 VICVectCntl0=0x20|0x04; //设置定时器0中断通道分配最高优先级 VICVectCntl1=0x20|0x05; //设置定时器1中断优先级为1 VICVectCntl2=0x20|0x0e;//设置外部中断0为2级 VICVectAddr0=(uint32)IRQ_Timer0; //设置中断服务程序地址 VICVectAddr1=(uint32)IRQ_Timer1; VICVectAddr2=(uint32)IRQ_EINT0; VICIntEnable=1<<0x04; //使能定时器0中断 VICIntEnable=1<<0x05; VICIntEnable=1<<0x0e;//使能外部中断 }//二进制数转BCD码子程序0voidCONVBIT(uint16num,uint8hor){ DATA[hor+3]=num/1000; //计算千位DATA[hor+2]=num%1000/100; //计算百位DATA[hor+1]=num%100/10; //计算十位DATA[hor]=num%10/1; //计算个位return; }/**********************************************************************************************************函数名称:MSPI_Init()**函数功能:初始化SPI接口,设置为主机。**入口参数:无**出口参数:无*********************************************************************************************************/voidMSPI_Init(void){ PINSEL0=(PINSEL0&(~(0xFF<<8)))|(0x55<<8);SPI_SPCCR=0x52; //设置SPI时钟分频 SPI_SPCR=(0<<3)| //CPHA=0,数据在SCK的第一个时钟沿采样 (1<<4)| //CPOL=1,SCK为低有效 (1<<5)| //MSTR=1,SPI处于主模式 (0<<6)| //LSBF=0,SPI数据传输MSB(位7)在先 (0<<7); //SPIE=0,SPI中断被禁止}/**********************************************************************************************************函数名称:MSPI_SendData()**函数功能:向SPI总线发送数据。**入口参数:data待发送的数据**出口参数:返回值为读取的数据********************************************************************************************************/uint8MSPI_SendData(uint8data){SPI_SPDR=data;while(0==(SPI_SPSR&0x80)); //等待SPIF置位,即等待数据发送完毕return(SPI_SPDR);}/**********************************************************************************************************函数名称:main()**函数功能:使用硬件SPI,74HC595驱动控制7段数码管显示。********************************************************************************************************/uint8rcv_data;intmain(void){ inti;PINSEL0=PINSEL0&0xffffffcf;PINSEL2=PINSEL2&0xfffffff7;IO0DIR=IO0DIR|Scr;//设置为输出口,控制可控硅IO1DIR=1<<18;IO1SET=1<<18;//观察窗口IO0CLR=IO0CLR|Scr;MSPI_Init(); //初始化SPI接口Timer0_Init();Timer1_Init(); EXT_Init(); IRQEnable(); //IRQ中断使能 IRQ_Init(); ADC_Init(); while(1) { if(T0Flag) //中断定时到 { while(w==40) //显示数据刷新时间到,执行数据变换。 { if(M==0) //如果M=0表示运行态,显示运行参数。 { switch(Display) { case0: { CONVBIT(CS[2],4); CONVBIT(CS[1],0); } break; case1: { CONVBIT(CS[0],4); CONVBIT(CS[1],0); } break; } } w=0; //清除显示刷新计数器 if(SF) //闪烁标志取反 SF=0; else SF=1; } if(M==0) //显示扫描送运行参数 { x=DATA[k]; } else //否则送修改参数 { if(k==R) //如果当前显示位与键盘修改位相等,则根据闪烁标志送黑码。 { if(SF==0) x=10; else x=DATA[k]; } else x=DATA[k]; //否则直接送显示数 } w++; //显示刷新计数器+1。 T0Flag=0; //显示标志位清除。 rcv_data=MSPI_SendData(digitable[x]); //发送显示数据 rcv_data=MSPI_SendData(selectable[k]);//发送显示位码 if((IO0PIN&KEY)!=0) { if(TK==k) //如果键盘输入位=1且键盘记录位与当前输入位相等,执行键功能。 { switch(TK) //执行TK键盘号功能0~3。 { case0: //0#功能为模式键M+1。 { if(M==4) M=1; else M++; switch(M) //取出1~4#参数送显示,以便人机对话修改参数。 { case1: { CONVBIT(CS[0],0); CONVBIT(M-1,4); } break; case2: { CONVBIT(CS[1],0); CONVBIT(M-1,4); } break; case3: { CONVBIT(CS[2],0); CONVBIT(M-1,4); } break; case4: { CONVBIT(CS[3],0); CONVBIT(M-1,4); } break; } } break; case1: //1#功能为右移键标志位R+1。 { if(R==3) R=0; else R++; } break; case2: //2#功能为加键,当前闪烁位+1。 { if(DATA[R]==9) DATA[R]=0; else DATA[R]++; } break; case3: //3#功能为回车确认键操作,将修改好的参数送回参数区。 { while(!M==0) { CS[M-1]=DATA[0]+DATA[1]*10+DATA[2]*100+DATA[3]*1000; R=0; //R、M标志归零。 M=0; } } break; case4: //4#功能为换屏键,Display+1。 { if(Display==1) Display=0; else Display++; } break; case5: //5#功能为去皮键,保证所测重量为物料实际重量。 {Gstart=CS[1]; } break; }; TK=0x09; //键记录位清除。 } } elseif((IO0PIN&KEY)==0) //如果当前键盘位=0,则再读键盘、延时再读=0则记录键盘位TK=K。 { delays(); if((IO0PIN&KEY)==0) TK=k; } i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论