嵌入式系统技术实验报告
南 京 理 工 大 学
嵌入式系统实验报告
指导老师:
姓名: 学院(系): 班级:
学 号:
实验日期:
实验一:熟悉Linux 开发环境
一、实验目的
熟悉Linux 开发环境,学会基于S3C2410的Linux 开发环境的配置和使用。使用Linux 的armv4l-unknown-linux-gcc 编译,使用基于NFS 方式的下载调试,了解嵌入式开发的基本过程。
二、实验仪器
硬件:UP-NETARM2410-S 嵌入式实验平台、PC 机。
软件:PC 机操作系统REDHAT LINUX 9.0+MINICOM +ARM-LINUX 开发环境
三、实验内容
本次实验使用Redhat Linux 9.0操作系统环境,安装ARM-Linux 的开发库及编译器。创建一个新目录,并在其中编写hello 文件。学习在Linux 下的编程和编译过程,以及ARM 开发板的使用和开发环境的设置。下载已经编译好的文件到目标开发板上运行。
四、实验步骤
1、建立工作目录
[root@zxt smile]# mkdir hello [root@zxt smile]# cd hello
2、编写程序源代码
实际的hello.c 源代码较简单,如下:
#include void main(void) {
printf(“hello world \n”); }
用下面的命令来编写“hello.c ”的源代码,进入hello 目录使用vi 命令来编辑代码:[root@zxt
hello]# vi hello.c
按“i ”或者“a ”进入编辑模式,录入上面的代码,完成后按Esc 键进入命令状态,再用命令“:wq ”,保存并退出。这样在当前目录下建立了一个名为“hello.c ”的文件。 3、编译链接
要使上面的“hello.c ”程序能够运行,将其经过编译和连接,生成可执行文件。输入 gcc hello.c -o hello 进行编译,再输入 ./hello 运行程序,观察结果1。
4、在之前的基础上,进入hello 文件,输入armv4l-unknown-linux-gcc hello.c -o hello 和 cp hello /arm2410s 进行交叉编译,输入 ifconfig eth0 192.168.0.121设置IP ;输入telnet 192.168.0.115登入开发板,输入root 开始进行挂载:mount -o nolock 192.168.0.121:/arm2410s /mnt ;再通过cd mnt找到hello 文件,最后输入./hello 运行程序,观察结果2。
五、实验结果
观察实验结果1,屏幕上显示hello world 截图如图1所示:
图 1 运行程序观察结果的输出
六、思考题
1.请简述Makefile 的作用,分析其工作机理与流程?
makefile 关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile 就像一个Shell 脚本一样,其中也可以执行操作系统的命令。
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make 命令,整个工程完全自动编译,极大的提高了软件开发的效率
2. 试简述如何编写和编译可以在目标板上运行的可执行程序?
嵌入式开发是在windows 下装虚拟机,虚拟机里装Linux ,然后再与板子连,可以利用SMB 在linux 下创建文件,在windows 下编辑,然后再在虚拟机里用交叉编译器编译代码生成可执行文件,可执行文件可以通过NFS 方式运行,也可以做文件系统烧到板子上
实验二:多线程应用程序设计
一、实验目的
了解多线程程序设计的基本原理以及学习pthread 库函数的使用。
二、实验仪器
硬件:UP-NETARM2410-S 嵌入式实验平台,PC 机。
软件:PC 机操作系统REDHAT LINUX 9.0+MINICOM +ARM-LINUX 开发环境。
三、实验内容
熟悉几个重要的PTHREAD 库函数的使用,掌握共享锁和信号量的使用方法。
进入/arm2410s/exp/basic/02_pthread目录,运行make 产生pthread 程序,使用NFS 方式连接开发主机进行运行实验。
四、实验步骤
1、编写并编译简单的多线程示例程序 2、阅读源代及编译应用程序
进入exp/basic/02_pthread目录,使用vi 编辑器或其他编辑器阅读理解源代码。运行make 产生pthread 可执行文件。 3、下载和调试
切换到minicom 终端窗口,使用NFS mount 开发主机的/arm2410s 到/host 目录。 进入/host/exp/basic/pthread目录,运行pthread ,观察运行结果的正确性。
五、实验结果
实验结果如图2.1所示
图 2.1 多线程实验结果截图
实验四: A/D 接口实验
一、实验目的
了解在linux 环境下对S3C2410芯片的8通道10位A/D的操作与控制。
二、实验设备及工具
UP-NETARM2410-S嵌入式实验平台、PC 机Pentium 500以上,硬盘10G 以上。 PC机操作系统REDHAT LINUX 9.0+MINICOM +ARM-LINUX 开发环境
三、实验内容
学习A/D接口原理,了解实现A/D系统对于系统的软件和硬件要求。阅读ARM 芯片文档,掌握ARM 的A/D相关寄存器的功能,熟悉ARM 系统硬件的A/D相关接口。利用外部模拟信号编程实现ARM 循环采集全部前4路通道,并且在超级终端上显示。
四、实验步骤
1、阅读理解源码
进入/arm2410s/exp/basic/04_ad目录,使用vi 编辑器或其他编辑器阅读理解源代码。
2、编译应用程序
运行make 产生ad 可执行文件
[root@zxt /]# cd /arm2410s/exp/basic/04_ad/
[root@zxt 04_ad]# make [root@zxt 04_ad]# ls
ad hardware.h main.o Makefile.bak s3c2410-adc.h bin main.c Makefile readme.txt src 3、下载调试
换到minicom 终端窗口,使用NFS mount 开发主机的/arm2410s 到/host 目录。 telnet 192.168.0.115 root
[/mnt/yaffs] mount -t nfs -o nolock 192.168.0.56:/arm2410s /host [/mnt/yaffs]cd ad
[/mnt/yaffs/ad]insmod s3c2410-adc.o [/mnt/yaffs]cd /host/exp/basic/04_ad/ [/host/exp/basic/04_ad]./ad 本实验运行结果如下图4.1所示
图 2.1 A/D 接口实验运行结果
六、思考题
1.ARM 的A/D功能的相关寄存器有哪几个,对应的地址是什么?
2. 如何启动ARM 开始转换A/D,有几种方式?转化开始时ARM 是如何知道转换哪些通道的?如何判断转换结束?
答:方式一:软件启动
1) 定义与A/D转换相关的寄存器
2) 定义与A/D转换相关的寄存器初始化 3) RADCCON=OX1
方式二:硬件启动
1) 复位A/D转换器
2) 外界用高电平触发ADCCON[0]
转换开始时知道转换哪通道的方式,通过对ADCCON[5:3]的为赋值来选择通道。
实验五:D/A 接口实验
一、实验目的
掌握MAX504 D/A转换芯片的使用方法
掌握不带有D/A的CPU 扩展D/A功能的主要方法 了解D/A驱动程序加入内核的方法
二、实验仪器
硬件:UP-NETARM2410-S 嵌入式实验平台、PC 机。
软件:PC 机操作系统REDHAT LINUX 9.0+MINICOM +ARM-LINUX 开发环境
三、实验内容
了解实现D/A系统对于系统的软件和硬件要求。阅读MAX504芯片文档,掌握 其使用方法。
四、实验步骤
1. 阅读理解源码
进入/arm2410s/exp/basic/05_da目录,使用vi 编辑器阅读理解源代码。 2. 编译应用程序
运行make 产生da 可执行文件da_main
[root@zxt /]# cd /arm2410s/exp/basic/05_da/ [root@zxt 05_da]# make [root@zxt 05_da]# ls
da_main da_main.c da_main.o doc drivers Makefile s3c44b0-spi.h 3. 下载调试
切换到minicom 终端窗口,使用NFS mount 开发主机的/arm2410s到/host目录,然后进入/host/exp/05_da/drivers目录,用insmod exio.o命令插入D/A驱动,并用lsmod 命令查看是否已经插入。
[/mnt/yaffs]cd /host/exp/basic/05_da/ [/host/exp/basic/05_da]cd drivers/
[/host/exp/basic/05_da/drivers]insmod exio.o Using exio.o
[/host/exp/basic/05_da/drivers]lsmod Module Size Used by Not tainted exio 2384 0 (unused)
i2c-tops2 14104 0 (unused)
进入/host/exp/basic/05_da目录,运行./da_main,观察运行结果的正确性。 [/host/exp/basic/05_da]./da_main 0 1
五、实验结果
通过ls 查看da_main
用insmod exio.o命令插入D/A驱动,并用lsmod 命令查看是否已经插入。 进入/host/exp/basic/05_da目录,运行./da_main,观察运行结果如下图5.1所示,电压为1v :
图 5.1 运行da_main 输出结果
六、 思考题
1.D/A 转换器的分类。
D/A 转换器的内部电路构成无太大差异,一般按输出是电流还是电压、能否作乘法运算等 进行分类。大多数 D/A 转换器由电阻阵列和 n 个电流开关(或电压开关) 构成。按数字输入 值切换开关,产生比例于输入的电流(或电压) 。
电压输出型(如 TLC5620)
电压输出型 D/A 转换器虽有直接从电阻阵列输出电压的,但一般采用内置输出放大器以低 阻抗输出。直接输出电压的器件仅用于高阻抗负载,由于无输出放大器部分的延迟,故常 作为高速 D/A 转换器使用。
● 电流输出型(如 THS5661A)
电流输出型 D/A 转换器很少直接利用电流输出,大多外接电流—电压转换电路得到电压输 出,后者有两种方法:一是只在输出引脚上接负载电阻而进行电流—电压转换,二是外接 运算放大器。用负载电阻进行电流—电压转换的方法,虽可在电流输出引脚上出现电压, 但必须在规定的输出电压范围内使用,而且由于输出阻抗高,所以一般外接运算放大器使 用。此外,大部分 CMOS DA 转换器当输出电压不为零时不能正确动作,所以必须外接运算 放大器。当外接运算放大器进行电流电压转换时,则电路构成基本上与内置放大器的电压 输出型相同,这时由于在 D/A 转换器的电流建立时间上加入了运算放入器的延迟,使响应 变慢。此外,这种电路中运算放大器因输出引脚的内部电容而容易起振,有时必须作相位 补偿。 ● 乘算型(如 AD7533)
D/A 转换器中有使用恒定基准电压的,也有在基准电压输入上加交流信号的,后者由于能 得到数字输入和基准电压输入相乘的结果而输出,因而称为乘算型 D/A 转换器。乘算型 D/A 转换器一般不仅可以进行乘法运算,而且可以作为使输入信号数字化地衰减的衰减器及对 输入信号进行调制的调制器使用。 ● 一位 D/A 转换器
一位 D/A 转换器与前述转换方式全然不同,它将数字值转换为脉冲宽度调制或频率调制的 输出,然后用数字滤波器作平均化而得到一般的电压输出(又称位流方式) ,用于音频等场合。 2.D/A 转换器的主要技术指标。
1)分辩率(Resolution) 指最小模拟输出量(对应数字量仅最低位为‘1’)与最大量(对应数字量所有有效位为‘1’)之比。
2)建立时间(Setting Time) 是将一个数字量转换为稳定模拟信号所需的时间, 也可以以为是转换时间。DA 中常用建立时间来描述其速度, 而不是AD 中常用的转换速率。一般地, 电流输出 DA建立时间较短, 电压输出DA 则较长。 其他指标还有线性度(Linearity),转换精度, 温度系数/漂移。
3.MAX504 的特点及使用方法。 由单个5V 电源供电 电压输出缓冲
内部 2.048V 参考电压 INL=0.5 LSB (MAX ) 电压不随温度变化
可变的输出范围:0V~VDD,VSS~VDD 上电复位 串行输出
实验六:直流电机实验
一、实验目的
熟悉ARM 本身自带的PWM ,掌握相应寄存器的配置。
Linux 下编程实现ARM 系统的PWM 输出,从而控制直流电机。
了解直流电机的工作原理,学会用软件的方法实现步进电机的脉冲分配。 掌握带有PWM 的CPU 编程实现其相应功能的主要方法。
二、实验内容
学习直流电机的工作原理,了解实现电机转动对于系统的软件和硬件要求。学习ARM PWM的生成
方法。使用Redhat Linux 9.0 操作系统环境及ARM 编译器,编译直流电机的驱动模块和应用程序。运行
程序,实现直流电机的调速转动。
三、实验设备及工具
硬件:UP-NETARM2410-S 嵌入式实验平台、PC 机。
软件:PC 机操作系统REDHAT LINUX 9.0+MINICOM +ARM LINUX 开发环境。
四、实验步骤
1、编译直流电机模块
cd /arm2410s/kernel-2410s
make menuconfig
进入Main Menu / Character devices 菜单,选择DC MOTOR 为模块加载:
编译内核模块:
make dep
make
make modules
直流电机模块的编译结果为:
/arm2410s/kernel-2410s/drivers/char/s3c2410-dc-motor.o
2、编译应用程序
cd /arm2410s/exp/basic/10_dcmotor/
make
生成dcm_main
3、运行程序
在超级终端中,通过加载NFS 运行编译结果(注意:首先要设定/arm2410s 为NFS 共享目录):
mount –t nfs –o nolock 192.168.0.121:/arm2410s /host
insmod /host/kernel-2410s/drivers/char/s3c2410-dc-motor.o
cd /host/exp/basic/10_dcmotor/
./dcm_main
程序运行结果:直流电机变速转动。
五. 实验结果
六、思考题
1.简述PWM 的基本原理,思考其基本参数的变化对电机转动的影响。
PWM 是一种对模拟信号电平进行数字编码的方法。通过高分辨计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM 信号仍然是数字的,因为在给定的任何时刻,满幅值得=的直流供电要么完全有,要么完全无。电压或电流源是以一种通或断的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM 进行编码。
变频器大多采用PWM 调制的形式进行变频的,也就是说变频器输出的电压其实是一系列的脉冲,脉冲的宽度和间隔均不相等。其大小就取决于调制波和载波的交点,也就是开关频率。开关频率越高,一个周期内脉冲的个数就越多,电流波形的平滑性就越好,但是对其他设备的干扰也越大。载波频率越低或者设置不好,电机就会发出难听的噪音。通过调节开关频率可以实现系统的噪声最小,波形的平滑性最好,同时干扰也是最小的。
实验七:步进电机实验
一、实验目的
了解直流电机和步进电机的工作原理
学会Linux 下用软件的方法实现步进电机的脉冲分配,用软件的方法代替硬件的脉冲分配器
二、实验内容
学习步进电机的工作原理,了解实现电机转动对于系统的软件和硬件要求。学习ARM 知识,要掌
握I/O 的控制方法。Linux 下编程实现ARM 的四路I/O 通道实现环形脉冲分配用于控制步进电机的转
动。
三、实验设备及工具
硬件:UP-NETARM2410-S 嵌入式实验平台、PC 机。
软件:PC 机操作系统REDHAT LINUX 9.0+MINICOM +ARM-LINUX 开发环境。
四、实验步骤
1、编译步进电机模块
cd /arm2410s/kernel-2410s
make menuconfig
进入Main Menu / Character devices菜单,选择STEP MOTOR
为模块加载:编译内核模块:
make dep
make
make modules
步进电机模块的编译结果为:
/arm2410s/kernel-2410s/drivers/char/s3c2410-exio.o
2、编译应用程序
cd /arm2410s/exp/basic/11_stepmotor
make
生成stepmotor
3、运行程序
在超级终端中,通过加载NFS 运行编译结果:
mount –t nfs –o nolock 192.168.0.121:/arm2410s /host
insmod /host/kernel-2410s/drivers/char/s3c2410-exio.o
cd /host/exp/basic/11_stepmotor /
./stepmotor
五. 实验结果
六、思考题
1. 思考四相步进电机各相先后导通的所有可能,确定步距角的变化,自己动手编出程序,在试验平台上验证。
相数是指电机内部的线圈组数,步进电机的相数不同,步进电机的齿数不同,步进电机的步距角也不同。 步进电机每个步距角对应一个脉冲。
总结
本次实验内容安排紧凑,实验一的操作过程让我们尽快熟悉了实验环境,学会使用vi 编辑查看代码以及设置NFS 等环境参数,而接下来的实验则让我们渐渐对各种的基本命令有了最直接的认识。通过让我们自己编辑代码,运行程序,观察结果来逐步了解这些代码的含义。实验是一次学与习的过程,让我们在操作的同时加深理论认识。此外,实验过程中碰到的形形色色的问题也让我们收获颇丰,
通过学长学姐们的解释与指导,让我们将所学知识得到一定的扩展。感谢实验过程中学长学姐们的耐心指导以及同学们的热心帮助,最后感谢老师在课上的悉心教导!