《嵌入式系统课程设计基于ARM微处理器和μCLinux的嵌入式温度控制系统的设计.doc》由会员分享,可在线阅读,更多相关《嵌入式系统课程设计基于ARM微处理器和μCLinux的嵌入式温度控制系统的设计.doc(29页珍藏版)》请在三一办公上搜索。
1、湖南工业大学课 程 设 计资 料 袋 电气与信息工程 学院(系、部) 2009 2010 学年第 2 学期 课程名称 嵌入式系统 指导教师 职称 副教授 学生姓名 专业班级 学号 题 目 基于ARM微处理器和CLinux的嵌入式温度控制系统的设计 成 绩 起止日期 2010 年 5 月 10 日 2010 年 5 月 21 日目 录 清 单序号材 料 名 称资料数量备 注1课程设计任务书2课程设计说明书3课程设计图纸张456 湖南工业大学课程设计任务书2009 2010 学年度第 2 学期 电气与信息工程 学院(系、部) 电子信息科学与技术 专业 班级课程名称: 嵌入式系统课程设计 设计题目:
2、 基于ARM微处理器和CLinux的嵌入式温度控制系统的设计 完成期限:自 2010 年 5 月 10 日至 2010 年 5月 21 日共 2 周内容及任务设计一个基于ARM微处理器和CLinux的嵌入式温度控制系统,要求采用PID增量算法实现对电烤箱的温度控制,并且在达到温度控制要求的同时使用44小键盘和触摸屏作为输入,使用了LCD、串口、网口和音频等作为输出,使得系统具有友好的人机界面。系统工作的基本原理为:温度传感器把电烤箱的温度转换成电信号经过测量电路、滤波器和放大器,输入到ARM微处理器的A/D输入端口AIN。然后ARM微处理器执行PID控制程序,根据从AIN输入的电压值,经过PI
3、D算法得出输出值。通过PWM脉宽可调功能,把控制量转换成占空比可调的脉宽,经过放大器和功率放大器后驱动电阻,达到控制功能。具体设计任务如下: (1)系统总体设计;(2)系统硬件电路的设计;(3)操作系统的分析与移植;(4)系统应用软件的设计;(5)系统硬件和软件的调试。进度安排起止日期工作内容2010512课程设计任务讲解;开发平台的安装构建;2010514开发平台的安装构建;系统总体设计;硬件电路的设计;2010517操作系统的分析、移植、烧写与测试;2010519系统应用开发工具的使用;系统应用软件的设计和调试;2010521系统应用软件的设计和调试;其它时间学生自行查找资料,进行硬件、软
4、件的设计和调试,撰写报告。 主要参考资料1卢灵,高岩基于S3C44B0X的温度控制系统J 微计算机信息,2006,22(05-2):0113-01152姜京梅基于 ARM 微处理器和C/OS-II 实时操作系统的嵌入式数字温度计的设计D,长春:吉林大学,20043徐晶嵌入式温度实验系统的PID控制D南京:南京理工大学,20054马维华嵌入式系统原理与应用M北京邮电大学出版社,20065TQ2440开发板配套资料,20106田泽嵌入式系统开发与应用M. 北京: 北京航空航天大学出版社,20057田泽嵌入式系统开发与应用实验教程M北京: 北京航空航天大学出版社,2004指导教师(签字): 2010
5、 年 5 月 8 日系(教研室)主任(签字): 年 月 日附件三嵌入式系统课程设计说明书基于ARM微处理器和CLinux的嵌入式温度控制系统的设计起止日期:自 2010 年 5 月 10 日至 2010 年 5月 21 日共 2 周学生姓名 班级 学号 成绩指导教师(签字)电气与信息工程学院2010年5 月 日设计说明书的主要内容1课程设计目的2课程设计要求3系统总体设计4系统硬件电路的设计5操作系统的移植6系统应用软件的设计7系统软件的调试8课程设计收获和体会本课程设计的目的(1)使学生掌握嵌入式开发板(实验箱)各功能模块的基本工作原理;(2)培养嵌入式系统的应用能力及嵌入式软件的开发能力;
6、(3)使学生较熟练地应用嵌入式操作系统及其API开发嵌入式应用软件;(4)培养学生分析、解决问题的能力;(5)提高学生的科技论文写作能力。设计要求:设计一个基于ARM微处理器和CLinux的嵌入式温度控制系统,要求采用PID增量算法实现对电烤箱的温度控制,并且在达到温度控制要求的同时使用44小键盘和触摸屏作为输入,使用了LCD、串口、网口和音频等作为输出,使得系统具有友好的人机界面。系统工作的基本原理为:温度传感器把电烤箱的温度转换成电信号经过测量电路、滤波器和放大器,输入到ARM微处理器的A/D输入端口AIN。然后ARM微处理器执行PID控制程序,根据从AIN输入的电压值,经过PID算法得出
7、输出值。通过PWM脉宽可调功能,把控制量转换成占空比可调的脉宽,经过放大器和功率放大器后驱动电阻,达到控制功能。具体设计任务如下: (1) 系统总体设计;(2)系统硬件电路的设计;(3)操作系统的分析与移植;(4)系统应用软件的设计;(5)系统硬件和软件的调试。Fedora 10的安装修改系统文件,在终端中获取root用户的权限由于FEDORA自带网络设置程序不能正确设置网络信息,所以通过修改网络配置文件来实现网络设置,设置完成后重启linux系统虚拟机工具的安装,可以更方便于widows和Linux的数据交换,打开终端,解压虚拟机工具的安装包:虚拟机工具安装完后,设置共享目录,以实现从wid
8、ows传递文件到Linux或从Linux传递文件到windows中,设置共享目录操作如下:在window建立两个目录放置测试文件,通过LS命令可以访问到这些测试文件测试Linux网络设置在windows中使用ping命令可以在windows中ping到Linux的IP地址到这里就完成的Fedora的安装和设置交叉编译器的安装:Uboot的编译Qtopia-2.2.0编译:Qt-4.5的编译:Linux内核的编译:Busybox的编译:Linux应用程序编译:温度控制系统程序如下:#include #include #include #include struct PID unsigned in
9、t SetPoint; / 设定目标 Desired Value unsigned int Proportion; / 比例常数 Proportional Const unsigned int Integral; / 积分常数 Integral Const unsigned int Derivative; / 微分常数 Derivative Const unsigned int LastError; / Error-1 unsigned int PrevError; / Error-2 unsigned int SumError; / Sums of Errors ; struct PID s
10、pid; / PID Control Structure unsigned int rout; / PID Response (Output) unsigned int rin; / PID Feedback (Input)unsigned char flag,flag_1=0; unsigned char high_time,low_time,count=0;/占空比调节参数 unsigned char set_temper=35; unsigned char temper; unsigned char i; unsigned char j=0; unsigned int s; int ma
11、in(void) SystemInitialization();/初始化系统 LCD_printf(系统正在初始化,请稍候,25,8,0);LCD_Refresh(); OSInit();/初始化uC/OS-II / OSTimeSet(0); / LCD_printf(create task.,7,1);LCD_Refresh(); OSTaskCreateExt(Main_Task,(void*)0,&Main_Task_StackSTA CKSIZE*4-1,Main_Task_Prio,Main_Task_Prio ,&Main_Task_Stack0,1024,(void*)0,OS
12、_TAS K_OPT_STK_CHK+OS_TASK_OPT_STK_CLR);/创建主任务 OSTaskCreateExt(Key_Scan_Task,(void*)0,&Key_Scan_Stack STACKSIZE-1,Key_Scan_Prio,Key_Scan_Prio ,&Key_Scan_Stack0,256,(void*)0,OS_TASK _OPT_STK_CHK+OS_TASK_OPT_STK_CLR);/创建键盘扫描任务 OSTaskCreateExt(Lcd_Fresh_Task,(void*)0,&Lcd_Fresh_Stac kSTACKSIZE*2-1,Lcd_
13、Fresh_Prio,Lcd_Fres h_Prio,&Lcd_Fresh_Stack0,512,(void*)0, OS_TASK_OPT_STK_CHK+OS_TASK_OPT_STK_CLR);/创建显示刷新 任务 initOSGUI();/初始化图形界面 LCDFresh_MBox=OSMboxCreate(NULL);/创建显示刷新邮箱 ADFresh_MBox=OSMboxCreate(NULL);/创建AD数据采集邮箱 /Para_Sem=OSSemCreate(1); Lcd_Disp_Sem=OSSemCreate(1);/创建刷新显示缓存的信号量 /OSDC_Ctrl_me
14、m=OSSemCreate(1); OSStart();/启动操作系统 return(0);/获取温度子程序/ void get_temper() unsigned char i,j; do i=reset(); /*复位*/ while(i!=0); /*1为无反馈信号*/ i=0xcc; /*发送设备定位命令*/ write_byte(i); i=0x44; /*发送开始转换命令*/ write_byte(i); delay(180); /*延时*/ do i=reset(); /*复位*/ while(i!=0); i=0xcc; /*设备定位*/ write_byte(i); i=0xbe; /*读出缓冲区内容*/ write_byte(i); j=read_byte(); i=read_byte(); i=(i4; temper=i|j; /*获取的温度放在temper中*/ /*Initialize PID Structure*/ void PIDInit (struct PID *pp) memset ( pp,0,sizeof(struct PID); 设计体会: