admin管理员组

文章数量:1532732

2024年1月4日发(作者:)

嵌入式系统实验报告

课程名称: 嵌入式系统

班 级:

姓 名:

学 号:

实验一. ARM 实验板卡资源及程序调试

1. 实验目的

熟悉嵌入式 Linux 开发环境,学会基于 IMX6UL 教学平台的 Linux 开发环境的配置和使 用; 利用 arm-poky-linux-gnueabi-gcc 交叉编译器编译程序,使用基于 NFS 的挂载方式进 行实验,了解嵌入式开发的基本过程

2. 实验内容

本次实验使用 ubuntu 操作系统环境,创建一个新目录,并在其中编写 hello.c 和

Makefile 文件。 学习在 Linux 下的编程和编译过程,以及 ARM 开发板的使用和开发环境的设置。将已 经编译好的文件通过 NFS 方式挂载到目标开发板上运行

2. 实验环境

硬件:IMX6 教学平台,PC 机酷睿 i3 以上, 硬盘 120G 以上,内存 2G 以上 软件:Vmware Workstation +Yocto 项目

3

硬件接线:电源线接到“12V电源线”,网线接到网口,串口线接到com1,

4. 实验原理

4.1 嵌入式开发方式

嵌入式开发当中通常会使用 2 种方式来运行应用程序:1、下载;2、挂载。

4.2下载的方式:

使用 FTP、TFTP 等软件,利用宿主机与目标机的网络硬件进行,此种方法通常是将宿 主机端编译好的目标机可执行的二进制文件通过网线或串口线下载固化到目标机的存储器 (FLASH)中。 在目标机嵌入式设备存储资源有限的情况下受到存储容量的限制,因此,在调试阶段通 常的嵌入式开发经常使用 NFS 挂载的方式进行。而在发布产品阶段才使用下载方式。

4.3 NFS 挂载方式:

利用宿主机端 NFS 服务,在宿主机端创建一定权限的 NFS 共享目录,在目标机端使用 NFS 文件系统挂载该目录,从而达到网络共享服务的目的。 这样做的好处是不占用目标机存储资源,可以对大容量文件进行访问。缺点是由于实际 并没有将宿主端文件存储到目标机存储设备上,因此掉电不保存共享文件内容。通常在嵌入 式开发调试阶段,采 NFS 挂载方式进行。

5. 实验步骤

5.1 实验目录

/IMX6/exp/basic/01_hello/

5.2 编译源程序

1、在宿主机端任意目录下建立工作目录 hello,实际光盘目录中已经给出本次实验所需全 面文件及代码,存放在 01_hello 目录下。

root@uptech-virtual-machine:/# mkdir hello

root@uptech-virtual-machine:/# cd hello

5.3 编写程序源代码

在 Linux 下的文本编辑器有许多,常用的是 vim 和 Xwindow 界面下的 gedit 等,我

们在开发过程中推荐使用 vim,用户需要学习 vim 的操作方法,请参考相关书籍中的关于 vim 的操作指南。 Kdevelope、anjuta 软件的界面与 vc6.0 类似,使用它们对于熟悉 windows 环境下开发的用户更容易上手。 实际的 helloworld.c 源代码较简单,如下:

#include

main()

{ printf(“hello world n”); }

我们可以是用下面的命令来编写 hello.c 的源代码,进入 hello 目录使用 vi 命令来 编辑代码: root@uptech-virtual-machine:/# vi hello.c 按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按 Esc 键进入命令 状态,再用命令“:wq”保存并退出。这样我们便在当前目录下建立了一个名为 hello.c 的文件。

5.4 编写 Makefile Makefile

文件是在 Linux 系统下进行程序编译的规则文件,通过 Makefile 文件来指 定和规范程序编译和组织的规则。 Makefile 文件的具体内容,用户可以参考本次实验目录下的

Makefile 中内容。

root@uptech-virtual-machine:/# cd /IMX6/SRC/exp/basic/01_hello/

root@uptech-virtual-machine:/IMX6/SRC/exp/basic/01_hello# ls

Makefile hello hello.c hello.o

Makefile 内容如下:

CC=arm-poky-linux-gnueabi-gcc -march=armv7-a -mthumb-interwork -mfloat-abi=hard

mfpu=neonmtune=cortexa9sysroot=/opt/fslimxwayland/4.9.882.0.0/sysroots/cortexa9hfneon-poky-linux-gnueabi

EXEC = hello

OBJS = hello.o

all: $(EXEC)

$(EXEC): $(OBJS)

$(CC) -o $@ $(OBJS)

clean:

-rm -f $(EXEC) *.elf *.gdb *.o

下面我们来简单介绍这个 Makefile 文件的几个主要部分:

CC 指明编译器

EXEC 表示编译后生成的执行文件名称

OBJS 目标文件列表

CFLAGS 编译参数

LDFLAGS 连接参数

all: 编译主入口

clean: 清除编译结果

注意:“$(CC) -o $@ $(OBJS)”和“-rm -f $(EXEC) *.elf *.gdb *.o”前空白由 一个 Tab 制表符生成,不能单纯由空格来代替。

与上面编写 hello.c 的过程类似,用 vi 来创建一个 Makefile 文件并将代码录入 其中

root@uptech-virtual-machine:/imx6/SRC/exp/basic/01_hello# vi Makefile

5.5 编译应用程序

在上面的步骤完成后,我们就可以在 hello 目录下运行 make 来编译我们的程序了。如 果进行了修改,重新编译则运行:

root@uptech-virtual-machine:/imx6/SRC/exp/basic/01_hello#source /opt/fsl-imxwayland/4.9.88-2.0.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi

root@uptech-virtual-machine:/imx6/SRC/exp/basic/01_hello# make clean

root@uptech-virtual-machine:/imx6/SRC/exp/basic/01_hello# make

make clean 命令在第一次编译程序时候无需使用,在多次编译程序的时候可以用该命 令来清除上次编译程序过程中生成的中间文件。这样做可以避免一些非改动的 make 编译错 误提示。

5.6 NFS挂载实验目录测试

1、启动IMX6 实验系统,连好网线、串口线。通过串口终端挂载宿主机实验目录。在宿主机上启动NFS服务,并设置好共享的目录,具体配置请参照前面章节中关于嵌入式Linux环境开发环境的建立。在建立好NFS共享目录以后,我们就可以进入ARM串口终端建立开发板与宿主 PC机之间的通讯了。

root@IMX6DLsabresd:~# mount -t nfs 192.168.5.157:/imx6 /mnt/

注意:IP地址(192.168.5.157)需要根据宿主机PC机的实际情况修改;

2、成功挂接宿主机的 imx6目录后,在开发板上进入/mnt目录便相应进入宿主机的/imx6目录,我们已经给出了编辑好的 helloworld.c和Makefile文件,它们在/imx6/SRC/exp/basic/01_hello目录下(用户可从光盘里自行拷贝)。用户可以直接在宿主PC上编译生成可执行文件,并通过上面的命令挂载到开发板上,运行程序察看结果。

进入串口终端的NFS共享实验目录。

进入/mnt目录下的实验目录,运行刚刚编译好的 he1lo程序,查看运行结果。

root@IMX6DLsabresd:~#cd /mnt/SRClexp/basic/01_hello/

root(@IMX6DLsabresd:/mnt/SRC/exp/basic/01_hello# ls

Makefile hello hello.c hello.o

3、执行程序。

执行程序用./表示执行当前目录下hello 程序。

root@IMX6DLsabresd:/mnt/SRC/exp/basic/01_hello#t ./hello

6.实验效果

root@IMX6DLsabresd:/mnt/SRC/exp/basic/01_hello#t ./myhello

实验二. 串行端口程序设计实验

1. 实验目的

2. 实验内容

读懂程序源代码,学习终端 I/O 函数的使用方法

学习将多线程编程应用到串口的接收和发送程序设计中

编写应用程序实现对 ARM 设备串口的读和写

3. 实验环境

硬件:IMX6 教学平台,PC 机酷睿 i3 以上, 硬盘 120G 以上,内存 2G 以上

软件:Vmware Workstation +Yocto 项目

4. 实验原理

4.1 硬件接口原理

串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是 RS- 232-C 接口(又称 EIA RS-232-C)它是在 1970 年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算 机终端生产厂家共同制定的用于串行通讯的标准。串口通讯指的是计算机依次以位(bit)为单位来传送数 据,串行通讯使用的范围很广,在嵌入式系统开发过程中串口通讯也经常用到通讯方式之一。

异步串行 I /O 方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同 位可以分时使用同一传输通道,因此串行 I/O 可以减少信号连线,最少用一对线即可进行。接收方对于 同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调 工作。在微型计算机中大量使用异步串行 I/O 方式,双方使用各自的时钟信号,而且允许时钟频率有一 定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符 和字符间还可能有长度不定的空闲时间,因此效率较低。

a) 软件接口介绍

Linux 对所有设备的访问是通过设备文件来进行的,串口也是这样,为了访问串口,只需打开其设备 文件即可操作串口设备。在 linux 系统下面,每一个串口设备都有设备文件与其关联,设备文件位于系统 的/dev 目录下面。如 linux 下的/dev/ttymxc0,/dev/ttymxc4 分别表示的是串口 0 和串口 4。 IMX6DL 处理器自带 5 个串行端口控制器,用户可以参考该处理器的 datasheet 进行分析

了解在 linux 环境下串行程序设计的基本方法

掌握终端的主要属性及设置方法,熟悉终端 I/O 函数的使用

学习使用多线程来完成串口的收发处理

Termios 结构体

Linux 系统下,用户应用程序很容易对串行端口设备进行属性设置,这些属性定义在结构体 struct termios 中。为在程序中使用该结构体,需要包含文件,该头文件定义了结构体

struct termios。 termios 函数族提供了一个常规的终端接口,用于控制非同步通信端口。

这个结构包含了至少下列成员:

struct termio {

unsigned short c_iflag; /* input mode flags */

unsigned short c_oflag; /* output mode flags */

unsigned short c_cflag; /* control mode flags */

unsigned short c_lflag; /* local mode flags */

unsigned char c_line; /* line discipline */

unsigned char c_cc[NCC]; /* control characters */ };

b) 关键代码分析

本实验的代码 term.c 如下:

}

void* send(void * data)

{ int c = 'a';

printf("send datarn");

while (1) {

c++;

if(c > 'z') { c = 'a'; }

pthread_mutex_lock(&mutex);

write(fd,&c,1); //循环发送字符 a~z 到串口 0 上

pthread_mutex_unlock(&mutex);

sleep(1); }

printf("rn");

return NULL; /* wait for child to die or it will become a zombie */

}

5. 实验步骤

5.1 实验目录:/imx6/SRC/exp/basic/03_tty

5.2 编译源程序

1、进入实验目录:

2、清除中间代码,重新编译

5.3 NFS 挂载实验目录测试

启动 IMX6 实验系统,连好网线、串口线。通过串口终端挂载宿主机实验目录。

root@IMX6DLsabresd:~# mount -t nfs 192.168.12.157:/imx6 /mnt/

进入串口终端的 NFS 共享实验目录。

执行程序。

root@IMX6DLsabresd:/mnt/SRC/exp/basic/03_tty# ./term

6. 实验效果

将串口线从 COM1 口换到 COM5 口上,超级终端上会打印 a~z 的字符。

实验五. 步进电机实验

1. 实验目的

了解 Ycoto 平台下了解步进电机工作原理。

2. 实验内容

实现 Yocto 项目的步进电机正反转

3. 实验环境

硬件:IMX6 教学平台,PC 机酷睿 i3 以上, 硬盘 120G 以上,内存 2G 以上

软件:Vmware Workstation +Yocto 项目

4. 实验过程

4.1 步进电机

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。在非超载的情况下,电 机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到 一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度。可以通过控制脉冲个数来控制角位 移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到 调速的目的。

4.2 步进电机工作原理

当电流流过定子绕组时,定子绕组产生一矢量磁场。该磁场会带动转子旋转一角度,使得转子的 一对磁场方向与定子的磁场方向一致。当定子的矢量磁场旋转一个角度。转子也随着该磁场转一个角度。 每输入一个电脉冲,电动机转动一个角度前进一步。它输出的角位移与输入的脉冲数成正比、转速与脉冲 频率成正比。改变绕组通电的顺序,电机就会反转。所以可用控制脉冲数量、频率及电动机各相绕组的通 电顺序来控制步进电机的转动。

通常见到的各类电机,内部都是有铁芯和绕组线圈的。绕组有电阻,通电会产生损耗,损耗大小 与电阻和电流的平方成正比,这就是我们常说的铜损,如果电流不是标准的直流或正弦波,还会产生谐波 损耗;铁心有磁滞涡流效应,在交变磁场中也会产生损耗,其大小与材料,电流,频率,电压有关,这叫 铁损。

铜损和铁损都会以发热的形式表现出来,从而影响电机的效率。步进电机一般追求定位精度和力矩输 出,效率比较低,电流一般比较大,且谐波成分高,电流交变的频率也随转速而变化,因而步进电机普遍 存在发热情况,且情况比一般交流电机严重。

4.3 代码分析

5. 实验步骤

实验目录 /IMX6/SRC/exp/module/05_motor

5.1 编译源程序

1、进入实验目录:

2、清除中间代码,重新编译

当前目录下生成可执行程序 demo。

5.2 NFS 挂载实验目录测试

3、启动 IMX6 实验系统,连好网线、串口线。通过串口终端挂载宿主机实验目录。

root@IMX6DLsabresd:~# mount -t nfs 192.168.12.157:/IMX6 /mnt/

4、进入串口终端的 NFS 共享实验目录。

5、执行程序

root@IMX6DLsabresd:/mnt/SRC/exp/module/05_motor# ./demo

6. 实验效果

0: 停止

1: 停止

2:逆时针转

3:顺时针转

实验四. 陀螺仪实验

1.实验目的

了解陀螺仪工作原理及使用方法

2实验内容

实现Yocto项目的陀螺仪三轴坐标显示

3. 实验环境

硬件:IMX6教学平台,PC机酷睿i3以上,硬盘120G 以上,内存2G以上

软件:Vmware Workstation +Yocto项目

4.实验过程

4.1陀螺仪

陀螺仪原理是指陀螺仪工作的原理,螺旋仪是一种用来传感与维持方向的装置,基于角动量守恒的理论设计出来的。陀螺仪主要是由一个位于轴心且可旋转的转子构成。陀螺仪一旦开始旋转,由于转子的角动量,陀螺仪有抗拒方向改变的趋向。

陀螺仪多用于导航、定位等系统常用实例如手机 GPS定位导航、卫星三轴陀螺仪定位。陀螺仪基本上就是运用物体高速旋转时,角动量很大,旋转轴会一直稳定指向一个方向的性质,所制造出来的定向仪器。不过它必需转得够快,或者惯量够大(也可以说是角动量要够大)。不然,只要一个很小的力矩,就会严重影响到它的稳定性。

工作原理

我们不用一个完整的轮框,我们用四个质点ABCD来表示边上的区域,这个边对于用图来解释陀螺仪的T作原理是很重要的。轴的底部被托住静止但是能够各个方向旋转。当一个倾斜力作用在顶部的轴上的时候,质点A向上运动,质点C则向下运动,如其中的子图1。因为陀螺仪是顺时针旋转,在旋转90度角之后,质点A将会到达质点B的位置。CD两个质点的情况也是一样的。子图2中质点A当处于如图的90度位置的时候会继续向上运动,质点C也继续向下。AC质点的组合将导致轴在子图2所示的运动平面内运动。一个陀螺仪的轴在一个合适的角度上旋转,在这种情况下,如果陀螺仪逆时针旋转,轴将会在运动平面上向左运动。如果在顺时针的情况中,倾斜力是一个推力而不是拉力的话,运动将会向左发生。在子图3中,当陀螺仪旋转了另一个90度的时候,质点C在质点A受力之前的位置。C质点的向下运动受到了倾斜力的阻碍并且轴不能在倾斜力平而上运动。倾斜力推轴的力量越大,当边缘旋转大的180 度时,另一侧的边缘推动轴向回运动。

4.2 MPU-6050 介绍

-6050 简介

MPU-60X0 是全球首例 9 轴运动处理传感器。它集成了 3 轴 MEMS 陀螺仪,3 轴

MEMS 加速度计, 以及一个可扩展的数字运动处理器 DMP(Digital Motion Processor),

可用 I2C 接口连接一个第三方的数 字传感器,比如磁力计。扩展之后就可以通过其 I2C 或

SPI 接口输出一个 9 轴的信号(SPI 接口仅在 MPU-6000 可用)。

MPU-60X0 对陀螺仪和加速度计分别用了三个 16 位的 ADC,将其测量的模拟量转化为可输出的 数字量。为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的,陀螺仪可测范围为±250, ±500,±1000,±2000°/秒(dps),加速度计可测范围为±2,±4,±8,±16g。

一个片上 1024 字节的 FIFO,有助于降低系统功耗。和所有设备寄存器之间的通信采用 400kHz 的 I2C 接口或 1MHz 的 SPI 接口(SPI 仅 MPU-6000 可用)。对于需要高速传输的应用,对寄存器的读取和中 断可用 20MHz 的 SPI。

特征

以数字输出 6 轴或 9 轴的旋转矩阵、四元数(quaternion)、欧拉角格式(Euler Angle

forma)的融合演算 数据。具有 131 LSBs/°/sec 敏感度与全格感测范围为±250、±500、±1000

与±2000°/sec 的 3 轴角速度感测器(陀螺仪)。 可程式控制,且程式控制范围为±2g、±4g、±8g 和±16g 的 3 轴加速器。移除加速器与陀螺仪轴 间敏感度,降低设定给予的影响与感测器的飘移。

电路原理图:

5. 实验步骤

实验目录 /IMX6/SRC/exp/module/07_gyroscope

5.2 编译源程序

1、进入实验目录:

2、清除中间代码,重新编译

当前目录下生成可执行程序 demo。

5.3 NFS 挂载实验目录测试

3、启动 IMX6 实验系统,连好网线、串口线。通过串口终端挂载宿主机实验目录。

root@IMX6DLsabresd:~# mount -t nfs 192.168.12.157:/IMX6 /mnt/

4、进入串口终端的 NFS 共享实验目录。

5、执行程序。

root@IMX6DLsabresd:/mnt/SRC/exp/module/07_gyroscope#./demo /dev/input/event2 1

6. 实验效果

本文标签: 实验目录陀螺仪