基于Ucos的多通道数据采集系统DOC可编辑修改word版.docx
- 文档编号:13435044
- 上传时间:2023-06-14
- 格式:DOCX
- 页数:32
- 大小:400.71KB
基于Ucos的多通道数据采集系统DOC可编辑修改word版.docx
《基于Ucos的多通道数据采集系统DOC可编辑修改word版.docx》由会员分享,可在线阅读,更多相关《基于Ucos的多通道数据采集系统DOC可编辑修改word版.docx(32页珍藏版)》请在冰点文库上搜索。
基于Ucos的多通道数据采集系统DOC可编辑修改word版
课程设计(论文)任务书
信息工程学院物联网专业2014-2班
一、课程设计(论文)题目基于Ucos的多通道数据采集系统
二、课程设计(论文)工作自2017年06月26日起至2017年06月30日止。
三、课程设计(论文)地点:
嵌入式系统实验室
四、课程设计(论文)内容要求:
1.本课程设计的目的
(1)使学生掌握嵌入式开发板(实验箱)各功能模块的基本工作原理;
(2)培养嵌入式系统的应用能力及嵌入式软件的开发能力;
(3)使学生较熟练地应用嵌入式操作系统及其API开发嵌入式应用软件;
(4)
培养学生分析、解决问题的能力;
(5)提高学生的科技论文写作能力。
2.
课程设计的任务及要求
1)基本要求:
(1)分析所设计嵌入式软件系统中各功能模块的实现机制;
(2)
选用合适嵌入式操作系统及其API;
(3)编码实现最终的嵌入式软件系统;
(4)在实验箱上调试、测试并获得最终结果。
2)
创新要求:
在基本要求达到后,可进行创新设计,如改善嵌入式软件实时性能;扩展嵌入式软件功能及改善其图形用户界面。
3)
课程设计论文编写要求
(1)要按照书稿的规格打印誊写课程设计论文。
(2)论文包括目录、正文、小结、参考文献、谢辞、附录等(以上可作微调)。
(3)课程设计论文装订按学校的统一要求完成。
4)
课程设计评分标准:
(1)学习态度:
20分;
(2)
回答问题及系统演示:
30分
(3)课程设计报告书论文质量:
50分。
成绩评定实行优秀、良好、中等、及格和不及格五个等级。
不及格者需重做。
5)
参考文献:
(1)
罗蕾.《嵌入式实时操作系统及应用开发》北京航空航天大学出版社
(2)
JeanJ.Labrosse.《嵌入式实时操作系统uC/OS-II》北京航空航天大学出版社
(3)王田苗.《嵌入式设计与开发实例》.北京航空航天大学出版社
(4)北京博创科技公司.《嵌入式系统实验指导书》
6)
课程设计进度安排
(1)准备阶段(4学时):
选择设计题目、了解设计目的要求、查阅相关资料。
(2)
嵌入式软件设计分析阶段(4学时):
程序总体设计、详细设计。
(3)嵌入式软件代码编写调试阶段(8学时):
程序模块代码编写、调试、测试。
(4)撰写论文阶段(4学时):
总结课程设计任务和设计内容,撰写课程设计论文。
7)课程设计题目具体要求:
本题的具体任务是设计多任务的嵌入式软件——,通过分析、设计、编程、调试、测试等步骤,形成一个基于ucos可稳定运行的嵌入式多任务软件系统。
学生签名:
课程设计(论文)评审意见
2017年6月26日
(1)考勤(10分):
优()、良()、中()、一般()、差();
(2)系统设计(20分):
优()、良()、中()、一般()、差();
(3)编程调试(10分):
优()、良()、中()、一般()、差();
(4)回答问题(15分):
优()、良()、中()、一般()、差();
(5)论文撰写(35分):
优()、良()、中()、一般()、差();
(6)创新思想(10分):
优()、良()、中()、一般()、差();综合评定等级:
评阅人:
职称:
副教授
2017年6月30日
一、课设目的及内容
1.1课设目的
在二十一世纪的今日,人们生活在一个信息的的时代,各种各样不同的信息给予我们很多不同的选择。
对于信息的需求,各类人有着不同的需求,但是肯定的是,对于信息的重要性大家已经有了认识。
数据采集已经成为一种专业的技术,在各个领域得到了广泛的应用。
数据采集系统起源于20世纪50年代,并当
即就获得了初步的认可,在很多的地方得到了运用。
在60年代前后,国外就有了用于专业数据采集的系统。
20世纪70年代后期,随着微型机的发展,诞生了采集器、仪表同计算机溶为一体的数据采集系统。
由于这种数据采集系统的性能优良,超过了传统的自动检测仪表和专用数据采集系统,因而获得了惊人的发展。
到了现在,经过更长久的发展,嵌入式系统已经走进千家万户,嵌入式的数据采集系统不仅功耗低,而且操作简单,正适合应用于在家中,路上或者生活中的各处。
1.2课设内容
一、基本要求(必做)
(1)求出四路通道的平均值,并绘制在显示屏上(平均值应该象其他通道的值一样,可以根据实时采集值的变化而变化)。
(2)报警,在超出阈值时报警一次,如果此后此通道的值不变则不再报警,若此通道的值被调小为小于阈值而后又被调为大于阈值,则再次报警一次。
(3)设置时间和日期初值,并实时显示在LCD上(同各通道的值同屏显示)。
并能够在整点的时候发声提示。
二、提高要求(选做)
在一的基础上利用四路通道平均值的大小控制电机的转动速度,使电机实时转动。
二、设计的原理
2.1总体设计原理
本系统由硬件和软件两部分组成。
硬件以AT89C51和12位ADC芯片AD574A为核心,具有键盘控制和液晶显示功能,并有一路数模转换输出。
该系统还具有实时时间显示和看门狗功能,可以通过RS232和GPIB接口以便与外部(微机)通信。
系统的软件以实时嵌入式操作系统uc/os2为基础,采用多任务机制,通过任务调度和任务监视,系统具有较好的实时性和安全性。
uc/os2II是源码公开的实时嵌入式操作系统,采用优先级调度算法完成任务间的调度,并支持抢占式调度。
uc/os2II具有可裁减的体系结构,并具有内存管理、中断管理和任务控制块(TCB)扩展的功能。
uc/os2II还提供很多系统服务,例如邮箱、消息队列、信号量等等。
2.2A/D转换器原理
主要介绍以下三种方法:
逐次逼近法、双积分法、电压频率转换法
1)逐次逼近法
逐次逼近式A/D是比较常见的一种A/D转换电路,转换的时间为微秒级。
采用逐次逼近法的A/D转换器是由一个比较器、D/A转换器、缓冲寄存器及控制逻辑电路组成,如图所示。
2)双积分法
采用双积分法的A/D转换器由电子开关、积分器、比较器和控制逻辑等部件组成。
如图所示。
基本原理是将输入电压变换成与其平均值成正比的时间间隔,再把此时间间隔转换成数字量,属于间接转换。
双积分法
积分法A/D转换的过程是:
先将开关接通待转换的模拟量Vi,Vi采样输入到积分器,积分器从零开始进行固定时间T的正向积分,时间T到后,开关再接通与Vi极性相反的基准电压VREF,将VREF输入到积分器,进行反向积分,直到输出为0V时停止积分。
Vi越大,积分器输出电压越大,反向积分时间也越长。
计数器在反向积分时间内所计的数值,就是输入模拟电压Vi所对应的数字量,实现了A/D转换。
3)电压频率转换法
采用电压频率转换法的A/D转换器,由计数器、控制门及一个具有恒定时间的时钟门控制信号组成,它的工作原理是V/F转换电路把输入的模拟电压转换成与模拟电压成正比的脉冲信号。
电压频率转换法的工作过程是:
当模拟电压Vi加到V/F的输入端,便产生频率F与Vi成正比的脉冲,在一定的时间内对该脉冲信号计数,时间到,统计到计数器的计数值正比于输入电压Vi,从而完成A/D转换。
2.3基于uc/os2II的系统程序流程
基于uc/os2II的程序流程如图1所示。
程序中,每个模块对应一个任务,彼此之间是并行的,但每个模块都对应着一个不同的优先级,由操作系统进行调度运行。
系统可以通过监控模块对其他模块的工作进行监控,从而减少看门狗的复位次数。
而且通过uc/os2II内核的任务调度,系统的实时性会提高很多。
图1基于uc/os2II的程序流程
图2传统程序流程图
三、环境搭建及开发环境
系统的硬件组成框图如图3所示。
信号经前向处理后,通过多路模拟开关和采样保持器,输入到A/D转换芯片进行数据采集。
经A/D转换后的数字量被单片机读入,经处理后由通信接口读入微机进行进一步的处理和分析,同时也可由D/A芯片进行数/模转换得到一路模拟信号。
液晶有系统提示和实时时间显示,可以通过键盘进行选择和控制。
图3系统组成框图
系统信号前向处理电路包括自动增益控制和滤波电路,8路模拟开关CD4051。
A/D转换采用AD公司的12位逐次逼近式ADC,适合高精度数据采集,转换时间可达25us;D/A转换采用美国国民半导体公司的DAC0832芯片。
系统外部扩展32kROM和RAM,供缓存数据和存贮程序。
液晶采用日本DMC系列产品中的DMC24138,可以在一行上显示24个5×11点阵字符。
时间芯片采用的是M48T86,具有实时时间和日历显示功能。
整个系统采用全地址译码法,外部设备和存储器统一编址。
CPU访问外部存贮器的一切指令均可用于对I/O端口的访问,大大增强了CPU对外设端口信息的处理能力。
1、A/D转换器
在本设计所选用的LPC2138硬件系统中带有A/D转换器.特性:
(1)、10位逐次逼近式模数转换器
(2)、8个管脚复用为输入脚
(3)、掉电模式
(4)、测量范围:
0~3V
(5)、10位转换时间>=2.44US
(6)、一个或多个输入的Burst转换模式
(7)、可选择由输入跳变或定时器匹配信号触发转换(8)、2个转换器的全局启动命令
描述:
A/D转换器的基本时钟由VPB时钟提供。
每个转换器包含一个可编程分频器,可将时钟调整至逐步逼近转换所需的4.5MHZ。
完全满足精度要求的转换需要11个这样的时钟。
2、4X4键盘
键盘按与微控制器的连接方式,其结构可分为线性键盘和矩阵键盘两种形式。
线性键盘由若干个独立的案件组成,每个按键的一端与微控制器的一个I/O口相连。
有多少个键就要有多少根线与微控制器的I/O口相连,适用于按键少的场合。
矩阵键盘的按键按N行M列排列。
根据矩阵键盘的识键和译键的不同,矩阵键盘又可以分为非编码键盘和编码键盘两种。
非编码键盘主要用软件的方法识键和译键。
根据扫描方法的不同,可以分为行扫描法,列扫描法和反转法三种。
在本设计中,使用了节省口线的行扫描法来检测键盘,与4X4的矩阵键盘接口只需要8根口线,设置KEY1~KEY为输出扫描码的端口,KEYA~KEYB为键值读入口。
3、LCD显示模块
在这里应用了LCD显示模块来进行数据的输出。
GUI即图形用户接口,是操作系统和用户的人机接口。
GUI是一种嵌入式应用中的图形支持系统。
它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器和LCD控制器的图形用户接口,它适用单任务或是多任务系统环境,并适用于任意LCD控制器
和CPU下任何尺寸的真实显示或是虚拟显示。
它的设计结构是模块化的,由不同模块中的不同层组成,由一个LCD驱动层来包含所有对LCD的具体图形操作。
使用GUI来控制LCD的显示,不仅代码容易,简单,而且在任何的CPU上都能运行。
所以本人在这里选择了这样的方式。
四、主要程序代码设计
完成要求1:
求出四路通道的平均值,并绘制在显示屏上(平均值应该象其他通道的值一样,可以根据实时采集值的变化而变化)。
#include"..\ucos-ii\includes.h"/*uC/OSinterface*/#include"..\ucos-ii\add\osaddition.h"
#include"..\inc\drv.h"#include
#include"..\inc\drv\IIS-S3C44B0.h"#include"..\inc\drv\OSFile.h"
#defineID_ChannelTextCtrl101
#defineID_ValueTextCtrl102
#defineDraw_Wnd_ID104
PTextCtrlpChannelTextCtrl,pValueTextCtrl;
floatresult_AD0,result_AD1,result_AD2,result_AD3,average;
intWarnningData[5]={33,33,33,33,33};
intedit[2]={0,0};
intbuffer[AUDIO_IN_BUFFERSIZE*20];
///******************任务定义***************///
OS_STKMain_Stack[STACKSIZE*8]={0,};//Main_Test_Task堆栈voidMain_Task(void*Id);//Main_Test_Task#defineMain_Task_Prio12
OS_STKDisplay_Task_Stack[STACKSIZE*8]={0,};//Main_Test_Task堆栈
voidDisplay_Task(void*Id);//Main_Test_Task#defineDisplay_Task_Prio20
OS_STKAD0_Task_Stack[STACKSIZE*8]={0,};//Main_Test_Task堆栈
voidAD0_Task(void*Id);//Main_Test_Task#defineAD0_Task_Prio21
OS_STKAD1_Task_Stack[STACKSIZE*8]={0,};//Main_Test_Task堆栈
voidAD1_Task(void*Id);//Main_Test_Task#defineAD1_Task_Prio22
OS_STKAD2_Task_Stack[STACKSIZE*8]={0,};//Main_Test_Task堆栈
voidAD2_Task(void*Id);//Main_Test_Task#defineAD2_Task_Prio23
OS_STKAD3_Task_Stack[STACKSIZE*8]={0,};//Main_Test_Task堆栈
voidAD3_Task(void*Id);//Main_Test_Task#defineAD3_Task_Prio24
/**************已经定义的OS任务*************tcp监控任务11
以太网物理层监控任务8
触摸屏任务
9
键盘任务
10
lcd刷新任务
59
系统任务
1
*****************************************************/
///*****************事件定义*****************///
OS_EVENT*Nand_Rw_Sem;//Nand_Flash读写控制权旗语
//andyoucanuseitasfolloeing:
//Nand_Rw_Sem=OSSemCreate
(1);//创建Nand-Flash读写控制权旗语,初值为1
满足互斥条件//
//OSSemPend(Nand_Rw_Sem,0,&err);
//OSSemPost(Nand_Rw_Sem);
OS_EVENT*Uart_Rw_Sem;//Uart读写控制权旗语
//andyoucanuseitasfolloeing:
//Uart_Rw_Sem=OSSemCreate
(1);//创建Uart读写控制权旗语,初值为1满足互斥条件//
//OSSemPend(Uart_Rw_Sem,0,&err);
//OSSemPost(Uart_Rw_Sem);
//////////////////////////////////////////////////////////
voidinitOSGUI()//初始化操作系统的图形界面
{
initOSMessage();initOSList();initOSDC();initOSCtrl();initOSFile();
}
/////////////////////////////////////////////////////
//Mainfunction.//
////////////////////////////////////////////////////
intMain(intargc,char**argv)
{
ARMTargetInit();//开发板初始化
OSInit();//操作系统初始化uHALr_ResetMMU();//复位MMU
LCD_Init();//初始化LCD模块LCD_printf("LCDinitializationisOK\n");//向液晶屏输出数据LCD_printf("320x240TextMode\n");
initOSGUI();//初始化图形界面LoadFont();//调Unicode字库
LoadConfigSys();//使用config.sys文件配置系统设置
LCD_printf("CreatetaskonuCOS-II...\n");
OSTaskCreate(Main_Task,(void*)0,(OS_STK*)&Main_Stack[STACKSIZE*8-1],Main_Task_Prio);//创建系统任务
OSTaskCreate(Display_Task,(void*)0,(OS_STK*)&Display_Task_Stack[STACKSIZE-1],Display_Task_Prio);//20
OSTaskCreate(AD0_Task,(void*)0,(OS_STK*)&AD0_Task_Stack[STACKSIZE-1],AD0_Task_Prio);
OSTaskCreate(AD1_Task,(void*)0,(OS_STK*)&AD1_Task_Stack[STACKSIZE-1],AD1_Task_Prio);
OSTaskCreate(AD2_Task,(void*)0,(OS_STK*)&AD2_Task_Stack[STACKSIZE-1],AD2_Task_Prio);
OSTaskCreate(AD3_Task,(void*)0,(OS_STK*)&AD3_Task_Stack[STACKSIZE-1],AD3_Task_Prio);
OSAddTask_Init();//创建系统附加任务LCD_printf("StartinguCOS-II...\n");LCD_printf("Enteringgraphmode...\n");
LCD_ChangeMode(DspGraMode);//变LCD显示模式为文本模式
InitRtc();//初始化系统时钟
Nand_Rw_Sem=OSSemCreate
(1);//创建Nand-Flash读写控制权旗语,初值为1满足互斥条件//
OSStart();//操作系统任务调度开始
//不会执行到这里return0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
////////////voidWave();
//voidinit_ADdevice()
//{
//}
//rADCPSR=20;
//rADCCON=ADCCON_SLEEP;
U8onKey(intnkey,intfnkey)
{
staticBOOLEANinput=FALSE;staticintEditNumber=1;if(EditNumber==1)
{
switch(nkey)
{
case14:
//OK
if(!
input)
{
}
else
{
}
SetWndCtrlFocus(NULL,ID_ChannelTextCtrl);pChannelTextCtrl->text[0]=0;//清空文本框SetTextCtrlEdit(pChannelTextCtrl,TRUE);DrawTextCtrl(pChannelTextCtrl);
input=TRUE;edit[0]=1;
SetTextCtrlEdit(pChannelTextCtrl,FALSE);DrawTextCtrl(pChannelTextCtrl);input=FALSE;
edit[0]=0;EditNumber=2;
returnTRUE;case16:
//Cancel
SetTextCtrlEdit(pChannelTextCtrl,FALSE);input=FALSE;
edit[0]=0;EditNumber=2;returnTRUE;
}
}
elseif(EditNumber==2)
{
switch(nkey)
{
case14:
//OK
if(!
input)
{
SetWndCtrlFocus(NULL,ID_ValueTextCtrl);pValueTextCtrl->text[0]=0;//清空文本框SetTextCtrlEdit(pValueTextCtrl,TRUE);
}
else
{
DrawTextCtrl(pValueTextCtrl);input=TRUE;
edit[1]=1;
SetTextCtrlEdit(pValueTextCtrl,FALSE);DrawTextCtrl(pValueTextCtrl);input=FALSE;
edit[1]=0;EditNumber=1;
WarnningData[Unicode2Int(pChannelTextCtrl-
>text)]=Unicode2Int(pValueTextCtrl->text);
}
returnTRUE;case17:
//Cancel
SetTextCtrlEdit(pValueTextCtrl,FALSE);DrawTextCtrl(pValueTextCtrl);input=FALSE;
edit[1]=0;EditNumber=1;returnTRUE;
}
}
returnFALSE;
}
voidMain_Task(void*Id)//Main_Test_Task
{
POSMSGpMsg;
init_ADdevice(20,ADCCON_SLEEP);for(;;)
{
POS_CtrlpCtrl;pMsg=WaitMessage
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Ucos 通道 数据 采集 系统 DOC 编辑 修改 word