河北国呈科技|河北国呈电子|空气质量监测|无人机应用|

真人娱乐|官网

示例图片三
网站首页 > 新闻资讯 > 行业资讯

一种ARM+DSP 架构的小型无人机飞行控制平台软件设计

2016-11-01 09:59:01 真人娱乐|官网 阅读

 罗罗诺亚网 无人机频道

导读 了提高提出了ARM+DSP 的解决方ARM 作为主和数DSP 作为RAM 进行数


我们实现工作软件ARM-Linux 系统A/DRAM 可靠性高便于维的特点

 

近年来无人机以其独有的低成本低损耗零伤亡可重复使用和高机动等优势在军用和民用领域的应用范围不断扩大使得人们对无人机提出了更高的要求因此作为无人机核心的飞行控制器的研究也越来越受到重视

 

高精度要求无人机控制系统的精度高稳定性好能适应复杂的环境计算速度快精度高,小型化则对控制系统的重量和体积提出了更高的要求此外还要具备实时可靠的特点

 

1 飞控平台概述


本设计的无人机飞行控制平台是基于ARM+DSP 双处理器协同工作来实现的 总体结构图如图1 所示平台选用SAMSUNG 公司的ARM9 处理器S3C2440 作为主处理器选用TI 公司的DSP 处理器TMS320F2812 作为从处理器

 

双口RAM 芯片IDT7028L 实现双处理器之间的通讯AD7490 芯片将机载传感器采集的信号由模拟量转换为数字量AD5628芯片用于输出模拟控制量平台外扩32M SDRAM8 路串口通信电路具有30 路离散I/O JTAG 调试接口主要实现的功能

 

1) ARM 主处理器采集各传感器信号 包括角速度高度飞行器姿态等参数经调理电路滤除干扰后送入A/D 转换电路将转换后的数字量存入双口RAM

 

2 DSP 从处理器通过双口RAM 获取数据 进行控制律解算产生PWM 控制信号送入舵机保证无人机平稳飞行


 QQ截图20161101094658.jpg

 

 图1 系统总体结构图

 

2 软件设计

 

根据平台任务划分 分别对ARMDSP 处理器进行软件设计针对ARM 主处理器需要完成U-boot 内核引导程序Linux 内核yaffs 根文件系统的移植 建立起嵌入式ARMLinux系统基于此开发环境进行驱动及应用程序开发针对DSP 从处理器主要基于CCS 集成开发环境使用C 语言与汇编语言完成数据处理

 

ARM 处理器主要包括初始化模块数据采集模块其中数据采集模块包括A/D 转换串行通讯和无线通讯等初始化模块主要完成对ARM 系统时钟中断寄存器外部存储器的操作保证串口AD7490 等的正常工作数据采集模块使用计数方式产生不同时间间隔的定时中断在中断服务程序中完成对A/D 转换串口等数据的采集并存入双口

RAMIDT7028L

 

DSP 处理器主要包括初始化模块控制律解算模块初始化模块保证DSP 系统正常工作为满足系统的实时性要求控制律解算模块通过设置合理的定时间隔读取双口RAM中的数据进行控制律解算向舵机输出PWM 控制信号

 

在解算过程中考虑到A/D 转换串行通讯无线传输具有不同的刷新速率 刷新速率较慢的数据使用历史值作为当前值软件设计流程图如图2 所示

 

QQ截图20161101094706.jpg

图2 软件设计流程图

 

3 关键技术解决

 

飞控平台软件设计的关键是移植Linux 操作系统 并在此基础上实现底层驱动的开发


3.1 Linux 系统移植3.1.1 Bootloader 的移植文中选用U-boot-1.1.6 作为系统的Bootloader在源码基础上修改添加开发板硬件相关文件配置选项


首先修改最顶层Makefilesmdk2440_config: unconfig@ $ MKCONFIG $ @:_CONFIG =  arm arm920t

smdk2440 NULL s3c24x0修改board/smdk2440/lowlevel_init.S 完成SDRAM 的配置修改board_init 函数完成对S3C2440 系统时钟的改动修改board/s3c2440/flash.c 完成对Nor Flash 的支持修改driver/nand/nand.c 等驱动函数完成对Nand Flash 等设备的支持增加串口 xmodem 协议以便使用SecureCRT 工具 增加nandwritenand write.yaffs等命令以烧写内核和yaffs 文件系统映像文件执行make s3c2440_configmake all命令U-boot 重新编译生成二进制映像文件u-boot.bin将其烧写进Nor Flash

 

 

3.1.2 内核的移植

 

首先配置内核 确保内核可以正确编译修改顶层Makefile将如下代码


ARCH ?=$SUBARCH

CROSS_COMPILE ?=

改为

ARCH ?= arm

CROSS_COMPILE ?= arm-linux-

根据U-boot Flash 的分区情况修改linux2.6.32/arch/

arm/mach-s3c2440/目录下的mach-smdk2440.c 等文件


修改drivers/mtd/nand 下的s3c2440.c 文件和arch/arm/plats3c24xx下的common-smdk.c 文件将相关设备注册进内核完成MTD 分区

 

yaffs2 代码通过脚本文件patch-der.sh 给内核打补丁的方式加入内核


make menuconfig 命令进入内核配置界面对内核进行裁剪然后执行make dep”“makeclean”“make zImage 命令生成内核映像文件zImageUboot启动后就可以将内核烧写进Nand Flash

 

 

3.1.3 根文件系统的移植

 

鉴于访问速度快的优点 选择YAFFS 文件系统进行移植利用Busybox-1.7.0 来创建/bin/sbin 等目录下的可执行文件并在/dev 目录下创建必需的设备节点/etc 目录下创建必需配置文件/lib 目录下包含库文件

 

Busybox-1.7.0 目录下执行make menuconfig命令可进入配置界面对Busybox 进行相关配置修改Busybox 根目录的Makefile使用交叉编译器修改后为


ARCH ?= arm

CROSS_COMPILE ?= arm-linux-


然后执行make 命令编译Busybox 执行命令makeCONFIG_PREFIX =dir_path install 将其安装在指定目录dir_path 再加载glibc


创建etc 目录下的etc/inittabetc/init.d/rcS etc/fstab 文件/dev 目录下静态创建各种节点/dev/mtdblock*/dev/ttySAC*


使用mdev 初始化/dev 和动态更新修改etc/fstab etc/init.d/rcS 使内核启动时自动运行mdev


最后创建procmnt 等空目录使用命令mkyaffsimage 创建YAFFS 文件系统映像文件进而烧写到目标板 

 

3.2 底层驱动的实现

 

3.2.1 AD7490 驱动的实现

 

AD7490 作为字符设备其读写是以字节为单位的采用可加载模块化机制来开发设备驱动程序

 

首先对设备进行初始化AD7490 设备的初始化包括两部分

 

一是对SPI 工作方式各控制寄存器和模式寄存器等配置参数并将PIO 配置为引脚外设控制

 

二是完成设备驱动程序向Linux 内核注册调用函数register_chrdev 实现驱动模块的注册调用函数unregiste_chrdev 实现驱动模块注销


对于字符设备驱动程序是通过file_operations 结构体中的成员函数实现对Linux 的系统调用的file_operations 结构体如下:


static struct file_operations AD7490_fops={

.owner = THIS_MODULE

.llseek = NULL

.read = ad7490_rd

.write = ad7490_wr

.open = ad7490_open

.release = ad7490_close

}

 

构造file_operations 结构中用到的各个成员函数每个成员都对应一个系统调用当用户操作设备文件时系统调用通过设备文件的主设备号找到相应设备驱动程序 再通过file_operations 中相应函数指针由该函数进行相应控制

 

最后编写Makefile 文件执行make命令进行编译生成可执行的.ko 文件编译成功后在目标板的映射目录下执行insmod命令进行动态加载执行rmmod命令实现动态卸载


驱动程序加载后还需编写A/D 测试程序来验证驱动程序是否实现了相应功能经验证该驱动成功实现了预期功能

 

3.2.2 IDT7028L 驱动的实现

 

将双口RAM IDT7028L 作为块设备编写驱动程序利用一块系统内存作为缓冲区当用户进程对设备进行读写请求时驱动程序先查看缓冲区内容若能满足要求就返回相应数据否则就调用相应的请求函数进行实际的I/O 操作

 

首先对双口RAM 进行初始化配置寄存器分配地址资源并初始化数据结构申请中断和注册设备


调用函数register_blkdev 实现驱动注册不使用请求队列而是使用制造请求的方式实现I/O 请求处理 分配gendisk 初始化gendisk添加gendisk 到系统中调用函数unregister_blkdev()实现驱动注销


类似于字符设备驱动中的file_operations 结构体在块设备驱动中有block_device_operations 结构体


定义结构体如下

 

static struct block_device_operations IDT7028L_fops={.

.owner = THIS_MODULE;:

.open = idt7028_open

.release = idt7028_close

.ioctl = idt7028_ioctl

.media_changed = idt7028_media_changed

.revalidate_disk = idt7028_ revalidate_disk

.getgeo = idt7028_getgeo

}

 

实现block_device_operations 结构体中的各个函数编写Makefile 文件编译加载该驱动模块经测试程序验证该驱动成功实现了预期功能

 

4 结论

 

文中研究了ARM+DSP 架构的小型无人机飞行控制平台软件设计分析了系统功能模块给出了系统软件设计流程和关键技术的解决方法实践证明该方案合理可行软件可靠性高系统具有抗干扰能力强实时处理效果好的优点

Powered by MetInfo 5.3.14 ©2008-2019 www.metinfo.cn