嵌入式控制实验报告_第1页
嵌入式控制实验报告_第2页
嵌入式控制实验报告_第3页
嵌入式控制实验报告_第4页
嵌入式控制实验报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、嵌入式控制系统及应用实验报告小组成员:912110200231.1 最小系统设计一、实验目的(1)熟悉Proteus与Keil for ARM的使用;(2)掌握Proteus与Keil for ARM联合调试方法;(3)掌握嵌入式系统最小系统的设计与调试方法;(4)掌握嵌入式系统的仿真设计技术。二、实验内容本次实验利用电路仿真软件Proteus与嵌入式开发环境Keil for ARM进行嵌入式系统的仿真。在Proteus中进行嵌入式系统最小系统的硬件电路设计,并在Keil for ARM中完成最小系统测试程序的编写和编译,最后将编译成的可执行代码装载到嵌入式微处理器中进行电路的仿真运行。三、预

2、备知识C语言的基础知识,Proteus与Keil for ARM软件的基本使用方法和设置。四、实验设备硬件:PC机(或笔记本电脑)软件:Windows xp以上操作系统,Proteus 7.8以上版本,Keil for ARM 3.0以上版本。五、实验步骤(1)安装Proteus及Keil for ARM 软件(2)在Proteus中建立嵌入式最小系统电路图1.1.1 嵌入式最小系统原理图(3)在Keil for ARM中编写最小系统测试程序测试程序源代码如下:#include<stdio.h>#include <LPC21xx.h> void delay()int i

3、;int j;for(i=0;i<100;i+)for(j=0;j<1000;j+);int main(void)int i;IO0PIN=0;for(i=7;i<=10;i+)/*IO0DIR=1<<7|1<<8|1<<9|1<<10|;*/*IO0CLR=1<<7|1<<8|1<<9|1<<10|;*/IO0DIR=1<<i;IO0CLR=1<<i;delay();IO0DIR=1<<7|1<<8|1<<9|1<

4、<10;IO0CLR=1<<7|1<<8|1<<9|1<<10;for(i=10;i<=7;i-)IO0SET=1<<i;(4)下载调试结果记录下图所示。 1.2 串行通信设计一、实验目的(1)掌握UART部件的使用与接口扩展方法;(2)掌握嵌入式系统的仿真设计技术。二、实验内容本次实验利用电路仿真软件Proteus与嵌入式开发环境Keil for ARM进行嵌入式系统的仿真。在Proteus中进行嵌入式系统的UART接口硬件电路设计,并在Keil for ARM中完成串行通信程序的编写和编译,最后将编译成的可执行代码装载

5、到嵌入式微处理器中进行电路的仿真运行。三、预备知识C语言的基础知识,Proteus与Keil for ARM软件的基本使用方法和设置。四、实验设备硬件:PC机(或笔记本电脑)软件:Windows xp以上操作系统,Proteus 7.8以上版本,Keil for ARM 3.0以上版本。五、实验步骤(1)在Proteus中建立嵌入式系统电路图1.2.1 嵌入式系统原理图(2)在Keil for ARM中编写系统测试程序测试程序源代码如下:#include<LPC21xx.h>#include<stdio.h>char string="We are studen

6、tsn"int send(int ch) if(ch=n) while (!(UOLSR & 0x40); return (UOTHR=ch);void delay(void) unsigned volatile long i; for(i=0;i<400000;i+);void sendstr(char *p)while(*p!=0) send(*p+); int main (void) PINSEL0 = 0x0000005; U0LCR = 0x83; U0DLL = 122; U0LCR = 0x03; I00DIR = 0x000001;while (1) s

7、endstr(string); delay(); 2.2 多线程应用程序设计一、实验目的(1)了解多线程程序设计的基本原理。(2)学习pthread库函数的使用。二、实验内容熟悉几个重要的PTHREAD库函数的使用,掌握共享锁和信号量的使用方法。进入/arm2410s/exp/basic/02_pthread目录,运行make产生pthread程序,使用NFS方式连接开发主机进行运行实验。三、预备知识􀂾 有C语言基础􀂾 掌握在Linux下常用编辑器的使用􀂾 掌握Makefile的编写和使用􀂾 掌握Linux下的程序编译与交

8、叉编译过程。四、实验设备硬件:UP-NETARM2410-S 嵌入式实验平台,PC机。软件:PC机操作系统REDHAT LINUX 9.0ARM-LINUX开发环境。五、实验步骤(1)编写并编译简单的多线程示例程序(2)阅读源代及编译应用程序(3)下载和调试(4)在任意一个示例程序中,加入一个新的线程用于处理键盘的输入,并在按键为ESC时终止所有线程。该线程的流程图及关键代码如下。#include <studio.h>#include <studlib.h>#include <time.h>#include "pthread.h"#inc

9、lude <unistd.h>#define BUFFER_SIZE 16struct prodconsint bufferBUFFER_SIZE;pthread_mutex_t lock;int reapdpos,writepos;pthread_cond_t notempty;pthread_cond_t notfull;void init(struct prodcons*b)pthread_mutex_init(&b->lock,NULL);pthread_cond_init(&b->notempty,NULL);pthread_cond_init

10、(&b->notfull,NULL);b->reaapos=0;b->writepos=0;void put(struct prodcons*b,int data)pthread_mutex_lock(&b->lock);while(b->writepos+1)%BUFFER_SIZE=b->readpos) printf("wait for not fulln"); pthread_cond_wait(&b->notfull,&b->lock);b->bufferb->writep

11、os=data;b->writepos+;if(b->writepos>=BUFFER_SIZE)b->writepos=0;pthread_cond_signal(&b->notempty);pthread_mutex_unlock(&b->lock);int get(struct prodcons*b)int data;pthread_mutex_lock(&b->lock);while(b->writepos=b->readpos) printf("wait for not emptyn")

12、; pthread_cond_wait(&b->notempty,&b->lock);data=b->bufferb->readpos;b->readpos+;if(b->readpos>=BUFFER_SIZE)b->readpos=0;pthread_cond_signal(&b->notfull);pthread_mutex_unlock(&b->lock);return data;#define OVER(-1)struct prodcons buffer;void*producer(void*

13、data)int n;for(n=0;n<1000;n+)printf("put->%dn");put(&buffer,n);usleep(1);put(&buffer,OVER);printf("producer stopped!n");return NULL;void*consumer(void*data)int d;while(1) usleep(1); d=get(&buffer);if(d=OVER)break;printf(" %d->getn",d);printf("c

14、onsumer stopped!n");return NULL;void *th_me(pthread_t a,pthread_t b)char c;while(1)c=getchar();if(c=27)pthread_cancal(a);pthread_cancal(b);pthread_exit(0);int main(void)pthread_t th_a,th_b,th_c);void*retval;init(&buffer);pthread_create(&th_a,NULL,producer,0);pthread_create(&th_b,NUL

15、L,consumer,0);pthread_create(&th_c,NULL,th_me(th_a,th_b),0);pthread_join(&th_a,&retval);pthread_join(&th_b,&retval);pthread_join(&th_c,&retval);return 0;2.3 A/D接口实验一、实验目的了解在linux环境下对S3C2410芯片的8通道10位A/D的操作与控制。二、实验内容学习A/D接口原理,了解实现A/D系统对于系统的软件和硬件要求。阅读ARM芯片文档,掌握ARM的A/D相关寄存器的功

16、能,熟悉ARM系统硬件的A/D相关接口。三、预备知识􀂾 有C语言基础􀂾 掌握在Linux下常用编辑器的使用􀂾 掌握Makefile的编写和使用􀂾 掌握Linux下的程序编译与交叉编译过程。四、实验设备硬件:UP-NETARM2410-S 嵌入式实验平台,PC机。软件:PC机操作系统REDHAT LINUX 9.0ARM-LINUX开发环境。五、实验步骤(1)阅读理解源代码(2)编译应用程序(3)下载与调试 (4)实验结果如下:运行程序:/host/exp/basic/04_ad./ad终端显示:a0= 3.2968 a1=

17、 1.4438 a2= 3.2968 旋转电位器旋钮,再次运行程序终端显示:a0=2.7812 a1=1.3406 a2=3.2968 旋转电位器旋钮,再次运行程序终端显示:a0=2.0174 a1=1.1054 a2=2.71032.5 直流电机实验一、实验目的􀂾 熟悉ARM本身自带的PWM,掌握相应寄存器的配置。􀂾 Linux下编程实现ARM系统的PWM输出,从而控制直流电机。􀂾 了解直流电机的工作原理,学会用软件的方法实现步进电机的脉冲分配。􀂾 掌握带有PWM的CPU编程实现其相应功能的主要方法。二、实验内容学习直流

18、电机的工作原理,了解实现电机转动对于系统的软件和硬件要求。学习ARM PWM的生成方法。使用Redhat Linux 9.0 操作系统环境及ARM 编译器,编译直流电机的驱动模块和应用程序。运行程序,实现直流电机的调速转动。三、预备知识􀂾 C 语言的基础知识、􀂾 程序调试的基础知识和方法􀂾 Linux 的基本操作􀂾 Linux关于module的必要知识。四、实验设备硬件:UP-NETARM2410-S 嵌入式实验平台,PC机。软件:PC机操作系统REDHAT LINUX 9.0ARM-LINUX开发环境。五、实验步骤(1)

19、编译直流电机模块(2)编译应用程序(3)下载调试 实验结果如下:在未修改程序前,在运行程序后,发现显示电机实时转速不断在-512到512r/s不断循环变化,此时调节电位器旋钮是无法改变电机转速的。(4)使用实验箱上的电位器旋钮控制直流电机的转速。 流程图及关键代码如下。#include <studio.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/ioctl.h>#include

20、 <pthread.h>#include <fcntl.h>#include "s3c22410-adc.h"#define DCM_IOCTRL_SETPWM#define DCM_TCNTB0#define ADC_DEV "/dev/adc/0raw"static int adc_fd=-1;static int dcm_fd=-1;char *DCM_DEV="/dev/dcm/0raw"static int init_ADdevice(void)if(adc_fd=open(ADC_DEV,O_RDW

21、R)<0) printf("Error opening %s adc devicen",ADC_DEV); return -1;static int GetADresult(int channel)int PRESCALE=0XFF;int data=ADC_WRITE(channel,PRESCALE);write(adc_fd,&data,sizeof(data);read(adc_fd,&data,sizeof(data);return data;void Delay(int t)int i;for(;t>0;t-) for(i=0;i&l

22、t;400;i+);int main(int argc,char*argv)int setpwm=0;float d;int factor=DCM_TCNTB0/1024if(dcm_fd=open(DCM_DEV,O_WRONGLY)<) printf("Error opening %s devicen,DCM_DEV); return 1;if(init_ADdevice()<0)printf("Error opening %s devicen"); return -1;for(:)d=(float)GetADresult(1)*3.3/1024.

23、0;d=d*200;setpwm=d-330;if(setpwm=0)printf("DCmotor stoppedn");else if(setpwm<0)print("clockwisen");else printf("anticlockwishn");ioctl(dcm_fd,DCM_IOCRTL_SETPWM,setpwm*factor); Delay(500); /printf("setpwm=%dn",setpwm);close(dcm_fd);return 0;程序分析:当电位为0V时,电机转速

24、为0;当电位为3.3V时,电机转速达到最大。可以边旋转边显示边显示瞬时转速。2.6 步进电机实验一、实验目的􀂾 了解直流电机和步进电机的工作原理􀂾 学会Linux下用软件的方法实现步进电机的脉冲分配,用软件的方法代替硬件的脉冲分配器。二、实验内容学习步进电机的工作原理,了解实现电机转动对于系统的软件和硬件要求。学习ARM 知识,要掌握I/O 的控制方法。Linux 下编程实现ARM 的四路I/O 通道实现环形脉冲分配用于控制步进电机的转动。三、预备知识􀂾 C 语言的基础知识、􀂾 程序调试的基础知识和方法􀂾

25、 Linux 的基本操作􀂾 Linux关于module的必要知识。四、实验设备硬件:UP-NETARM2410-S 嵌入式实验平台,PC机。软件:PC机操作系统REDHAT LINUX 9.0ARM-LINUX开发环境。五、实验步骤(1)编译步进电机模块(2)编译应用程序(3)下载调试 实验结果如下:在未修改程序前,运行程序后, 步进电动机随意转动,旋转电位器旋钮无法控制步进电动机转动相应的角度(4)使用实验箱上的电位器旋钮控制步进电机转动相应的角度。 流程图及关键代码如下。#include <studio.h>#include <string.h>#

26、include <unistd.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/ioctl.h>#include <pthread.h>#include <fcntl.h>#include "s3c22410-adc.h"#define STEPMOTOR_IOCTRL_PHASE#define ADC_DEV "/dev/adc/0raw"static int adc_fd=-1;static int step_fd=-1;char *STEP_DEV="/dev/exio/0raw"char stepdata=0x10,0x30,0x20,0x60,0x60,0x40,0xc0,0x80,0x90;void Delay(int t)int i;for(

温馨提示

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

评论

0/150

提交评论