嵌入式

1. 嵌入式微处理器的基本结构

(1)嵌入式硬件系统一般由嵌入式微处理器、存储器和输入/输出部分组成。

(2)嵌入式微处理器是嵌入式硬件系统的核心,通常由控制单元、算术逻辑单元和寄存器3大部分组成:

A、控制单元:主要负责取指、译码和取数等基本操作并发送主要的控制指令。

B、算术逻辑单元:主要处理数值型数据和进行逻辑运算工作。

C、寄存器:用于暂存临时性的数据。

2. 嵌入式微处理器的分类(根据用途)

(1)嵌入式微控制器(MCU):又称为单片机,片上外设资源一般比较丰富,适合于控制。最大的特点是单片化,体积小,功耗和成本低,可靠性高。目前约占70%的市场份额。

(2)嵌入式微处理器(EMPU):又称为单板机,由通用计算机中的 CPU 发展而来,它的特征是具有32位以上的处理器,具有较高的性能。通常嵌入式微处理器把 CPU、  ROM、RAM 及 I/O 等模块做到同一个芯片上。

(3)嵌入式 DSP 处理器(DSP):专门用于信号处理方面的处理器,其在系统结构和指令算法方面进行了特殊设计,使其处理速度比最快的 CPU 还快10~50倍,在数字滤     波、FFT、频谱分析等方面获得了大量的应用。

(4)嵌入式片上系统(SOC):追求产品系统最大包容的集成器件,其最大的特点是成功实现了软硬件的无缝结合,直接在微处理器片内嵌入操作系统的代码模块。

3. 典型的微处理器的结构和特点

(1)8位微处理器:以8051为重点,彻底搞清楚8位单片机的工作原理,外设控制、存储分布 、寻址方式以及典型应用。

(2)16位微处理器:典型的微处理器可以参考 MSP430,找一本这方面的书看看关于 MSP430的结构原理以及典型应用。

(3)32位微处理器:32位处理器采用32位的地址和数据总线,其地址空间达到了2 32 =4GB 。目前主流的32位嵌入式处理器系统主要有 ARM 系列、MIPS 系列、PoewrPC系列等。ARM 微处理器体系结构目前被公认为是嵌入式应用领域领先的32位嵌入式 RISC 处理器结构。按照目前的发展形式,ARM 几乎成了嵌入式应用的代名词。

4、单片机系统的基本概念

(1)单片机组成:中央处理器、存储器、I/O 设备。

(2) 存储器:物理实质是一组或多组具备数据输入/输出和数据存储功能的集成电路,用于充当设备缓存或保存固定的程序及数据。

A、ROM(只读存储器):一般用于存放固定的程序或数据表格等,数据在掉电后仍然会保留下来。
B、RAM(随机存储器):用于暂存程序和数据、中间计算结果,或用作堆栈用等,数据在掉电后就会丢失。

(3) I/O 端口:单片机与外界联系的通道,它可以对各类外部信号(开关量、模拟量、频率信号)进行检测、判断、处理,并可控制各类外部设备。现在的单片机 I/O 口已经    集成了更多的特性和功能,对 I/O端口的功能进行了拓展和复用,例如外部中断、ADC 检测以及 PWM 输出等等。

(4)输出电平:高电平电压(输出“1”时)和低电平电压(输出“0”时)

A、TTL 电平:正逻辑,5V 为逻辑正,0V 为逻辑负,例如单片机的输出。
B、RS232电平:负逻辑,-12V 为逻辑正,+12V 为逻辑负,例如 PC 的输出。

注:因此在单片机和 PC 进行通讯的时候需要一个 MAX232芯片进行电平转换。

(5)堆栈:它是一种线性的数据结构,是一个只有一个进出口的一维空间。

A、堆栈特性:后进先出(LIFO)

B、堆栈指针:用于指示栈顶的位置(地址),当发生压栈或者出栈操作时,导致栈顶位置变化时,堆栈指针会随之变化。

C、堆栈操作:压栈操作(PUSH)和出栈操作(POP)。

D、堆栈类型:“向上生长”型堆栈,每次压栈时堆栈指针加1;“向下生长”型堆栈,每次压栈堆栈时指针减1。

E、堆栈应用:调用子程序、响应中断时,堆栈用于保护现场;还可以用作临时数据缓冲区来使用。

F、使用注意:堆栈溢出问题,压栈和出栈的匹配问题。

(6)定时计数器:实质都是计数器。用作定时器时是对单片机内部的时钟脉冲进行计数,而在用作计数器时是对单片机外部的输入脉冲进行计数,其作用如下:

A、计时、定时或延时控制;

B、脉冲技术;

C、测量脉冲宽度或频率(捕获功能)

(7)中断:优先级更高的事件发生,打断优先级低的时间进程。引起中断的事件称为中断源。一个单片机可能支持多个中断源,这些中断源可以分为可屏蔽中断和非可屏蔽中    断,而这些中断源并不都是系统工作所需的,我们可以根据系统需求屏蔽那些不需要的中断源。

A、中断嵌套:当一个低级中断尚未执行完毕,又发生了一个高级优先级的中断,系统转而执行高级中断服务程序,待处理完高级中断后再回过头来执行低级中断服务程序。

B、中断响应时间是指从发出中断请求到进入中断处理所用的时间;中断处理时间是指中断处理开始到中断处理结束的时间。

C、中断响应过程:

a、保护现场:将当前地址、累加器 ACC、状态寄存器保存到堆栈中。
b、切换 PC 指针:根据不同的中断源所产生的中断,切换到相应的入口地址。
c、执行中断服务处理程序。
d、恢复现场:将保存在堆栈中的主程序地址、累加器 ACC、状态寄存器恢复。
e、中断返回:从中断处返回到主程序,继续执行。

D、中断入口地址:单片机为每个中断源分配了不同的中断入口地址,也称为中断向量。

(8)复位:通过外部电路给单片机的复位引进一个复位信号,让系统重新开始运行。

A、复位发生时的动作:
a、PC 指针从起始位置开始执行(大多数单片机都时从0x0000处开始执行)。
b、I/O 端口设置成缺省状态(高阻态、或者输出低电平)。
c、部分专用控制寄存器 SFR 恢复到缺省状态。
d、普通 RAM 不变(如果时上电复位,则是随即数)。

B、两种不同的复位启动方式:

a、冷启动:也叫上电复位,指在断电状态下给系统加电,让系统开始正常运行。
b、热启动:在不断电的状态下,给单片机复位引进一个复位信号,让系统重新开始。

C、两种类型的复位电路:高电平复位和低电平复位。

D 注意事项:

a、 注意复位信号的电平状态及持续时间必须满足系统要求。
b、 注意避免复位信号抖动。

(9)时钟电路:单片机是一种时序电路,必须提供脉冲电路才能正常工作。时钟电路相当于单片机的心脏,它的每一次跳动(振动节拍)都控制着单片机的工作节奏。振荡得慢时,系统工作速度就慢,振荡得快时,系统工作速度就快(功耗也增大)。

A、振荡周期:振荡源的振荡节拍。
B、机器周期:单片机完成一个基本操作需要的振荡周期(节拍)。
C、指令周期:执行一条指令需要几个机器周期。不同的指令需要的机器周期数不同。

5、 ARM 体系结构的基本概念

(1) ARM :Advanced RISC Machine。

(2) ARM 体系结构中支持两种指令集:ARM 指令集和 Thumb 指令集。

(3) ARM 内核有 T 、 D 、 M 、 I 四个功能模块:

A、T 模块:表示16位 Thumb,可以在兼顾性能的同时减少代码尺寸。
B、D 模块:表示 Debug,内核中放置了用于调试的结构,通常为一个边界扫描链 JTAG。
C、M 模块:表示8位乘法器。
D、I 模块:表示 EmbeddedICE Logic,用于实时断点观测及变量观测的逻辑电路部分。

(4) ARM 处理器有7 种运行模式:

A、用户模式(User):正常程序执行模式,用于应用程序。
D、快速中断模式(FIQ):快速中断处理,用于高速数据传输和通道处理。
C、外部中断模式(IRQ):用于通用的中断处理。
D、管理模式(SVE):供操作系统使用的一种保护模式。
E、数据访问中止模式(Abort):用于虚拟存储及存储保护。
F、未定义指令中止模式(Undefined):当未定义指令执行时进入该模式。
G、系统模式(System):用于运行特权级的操作系统任务。

除了用户模式之外的其他6种处理器模式称为 特权模式,在这些模式下,程序可以访问所有的系统资源 ,也可以任意地进行处理器模式切换,其中,除了系统模式外,其他的5种特权模式又称为 异常模式。处理器模式可以通过 软件控制进行切换,也可以通过 外部中断或异常处理过程进行切换。大多数的用户程序运行在用户模式下,这时,应用程序不能访问一些受操作系统保护的系统资源,应用程序也不能直接进行处理器模式切换。当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理中进行处理器模式的切换。这种体系结构可以使操作系统控制整个系统的资源。当应用程序发生异常中断时,处理器进入相应的异常模式。在每一种异常模式种都有一组寄存器,供相应的异常处理程序使用,这样就可以保证进入异常模式时,用户模式下的寄存器不被破坏。系统模式并不是通过异常过程进入的,它和用户模式具有完全一样的寄存器,但是系统模式属于特权模式,可以访问所有的系统资源,也可以直接进行处理器模式切换,它主要供操作系统任务使用。

(5) ARM 处理器共有 37 个寄存器: 31 个通用寄存器和6个状态寄存器

A、通用寄存器包括 R0~R15,可以分为3类:

a、未备份寄存器 R0~R7:在所有的处理器模式下,未备份寄存器都是指向同一个物理寄存器。
b、备份寄存器 R8~R14:
对于 R8~R12来说,每个寄存器对于2个不同的物理寄存器,它们每次所访问的物理寄存器都与当前的处理器运行模式有关。对于 R13、R14来说,每个寄存器对于6个不同的物理寄存器,其中一个是用户模式和系统模式共用。R13在 ARM 指令种常用作堆栈指针。由于处理器的每种运行模式都有自己独立的物理寄存器R13,所有在用户应用程序的初始化部分,一般要初始化每种模式下的 R13,使其指向该运行模式的栈空间。R14又称为连接寄存器(LR),在 ARM 体系种具有下面两种特殊作用:在通过 BL 或 BLX 指令调用子程序时,存放当前子程序的返回地址;在 异常中断发生时,存放异常模式将要返回的地址。
c、程序计数器 R15(PC)。
由于 ARM 采用了流水线机制,在三级流水线中,当正确读取了 PC 的值时,该值为当前指令地址值加8个字节。也就是说,PC 指向当前指令的下两条指令的地         址。在 ARM 指令状态下,PC 的0和1位是0 ,在 Thumb 指令状态下,PC 的0位是0。

B、程序状态寄存器

a、ARM 体系结构包含1个当前程序状态寄存器(CPSR)和5个备份的程序状态寄存器(SPSR),使用MSR 和 MRS 指令来设置和读取这些寄存器。
b、当前程序状态寄存器 CPSR:保存当前处理器状态的信息,可以在任何处理器模式下被访问。
c、备份程序状态寄存器 SPSR:每一种异常处理器模式下都有一个专用的物理状态寄存器。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容,在异常中断程序退出时,可以用 SPSR 中保存的值来恢复 CPSR。
d、由于用户模式和系统模式不属于异常模式,它们没有 SPSR,当在这两种模式下访问 SPSR 时,结果是未知的。

(6) ARM 指令的寻址方式

所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。

A、 立即寻址:操作数本身就在指令中给出,只要取出指令也就取到了操作数。
       ADD R0, R0, #1 ;R0=R0+1
B、 寄存器寻址:利用寄存器中的数值作为操作数。
       ADD R0, R1, R2 ;R0=R1+R2
C、 寄存器间接寻址:以寄存器中的值作为操作数地址,而操作数本身存放在存储器中。
       ADD R0, R1, [R2] ;R0=R1+[R2]
       LDR R0, [R1]    ;R0=[R1]
       STR R0, [R1]    ;[R1]=R0
D、 基址变址寻址:将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。
       LDR R0, [R1, #4]    ;R0=[R1+4]
       LDR R0, [R1, #4]!   ;R0=[R1+4] R1=R1+4
       LDR R0, [R1], #4    ;R0=[R1] R1=R1+4
       LDR R0, [R1, R2]!   ;R0=[R1+R2]
E、 多寄存器寻址:一条指令可以完成多个寄存器值的传送。
       LDMIA R0, {R1, R2, R3}   ;R1=[R0] R2=[R0+4] R3=[R0+8]
F、 相对寻址:以程序计数器 PC 的当前值作为基地址,指令中的地址标号作为偏移量,两者相加之后得到操作数的有效地址。

      BL NEXT ;跳转到子程序 NEXT 处执行
        ……
      NEXT
        ……
      MOV PC, LR ;从子程序返回
G、 堆栈寻址:支持4种类型的堆栈工作方式:

a、 满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生长。
b、 满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生长。
c、 空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生长。
d、 空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生长。

(7) ARM 的存储方法

A、大端模式:数据的高字节存储在低地址中,低字节存储在高地址中。
B、小端模式:数据的低字节存储在低地址中,高字节存储在高地址中。

(8) ARM 中断与异常

A、ARM 内核支持7种中断,不同的中断处于不同的处理模式,具有不同的优先级,而且每个中断都有固定的中断地址入口。当一个中断发生是,相应的 R14(LR)存储中      断返回地址,SPSR 存储当前程序状态寄存器 CPSR 的值。

B、由于 ARM 内核支持流水线工作,LR 寄存器存储的地址可能是发生中断后面指令的地址,所以不同的中断处理完成后,必须将 LR 寄存器值经过处理后再写P15(PC)      寄存器。

C、ARM 异常的具体含义:

a、复位:当处理器的复位电平有效时,产生复位异常,程序跳转到异常复位异常处理程序处执行。
b、未定义的指令:当 ARM 处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可以使用该异常机制进行软件仿真。
c、软件中断:该异常由执行 SWI 指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现操作系统调用功能。
d、指令预取中止:如果处理器预取指令的地址不存在或该地址不允许当前指令访问,存储器向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。
e、数据访问中止:如果处理器数据访问指令的目标地址不存在,或者该地址不允许当前指令访问 ,处理器产生数据访问中止异常。
f、外部中断请求:当 ARM 外部中断请求管脚有效,而且 CPSR 中的 I 位为0时,产生 IRQ 异常 。系统的外设可以通过该异常请求中断服务。
g、快速中断请求:当 ARM 快速中断请求管脚有效,而且 CPSR 的 F 位为0时,产生 FIQ 异常。

D、ARM 处理器对异常中断的响应过程

a、将下一条指令的地址存入相应的连接寄存器 LR 中。
b、将 CPSR 复制到相应的 SPSR 中。
c、根据异常的类型,强制设置 CPSR 的运行模式位。
d、强制 PC 从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。

E、ARM 处理器从异常中断处理程序中返回

a、恢复中断的程序的处理器状态,将 SPSR 复制到 CPSR 中。
b、若在进入异常处理时设置了中断禁止位,要在此清除。
c、将连接寄存器 LR 的值减去相应的偏移量后送到 PC。

F、复位异常中断处理程序不需要返回。在复位异常中断程序开始整个用户程序的执行。

转自: 沉舟侧畔

围观 404

基于STM平台且满足实时控制要求操作系统,有以下5种可供移植选择。分别为μClinux、μC/OS-II、eCos、FreeRTOS和rt-thread。下面分别介绍这五种嵌入式操作系统的特点及不足,通过对比,读者可以根据自己的应用需求选择合适的平台。

TOP1:μClinux

μClinux是一种优秀的嵌入式Linux版本,其全称为micro-control Linux,从字面意思看是指微控制Linux。同标准的Linux相比,μClinux的内核非常小,但是它仍然继承了Linux操作系统的主要特性,包括良好的稳定性和移植性、强大的网络功能、出色的文件系统支持、标准丰富的API,以及TCP/IP网络协议等。因为没有MMU内存管理单元,所以其多任务的实现需要一定技巧。

μClinux在结构上继承了标准Linux的多任务实现方式,分为实时进程和普通进程,分别采用先来先服务和时间片轮转调度,仅针对中低档嵌入式CPU特点进行改良,且不支持内核抢占,实时性一般。

在内存管理上由于μClinux是针对没有MMU的处理器设计的,不能使用处理器的虚拟内存管理技术,只能采用实存储器管理策略。系统使用分页内存分配方式,在启动时对实际存储器进行分页。系统对内存的访问是直接的,操作系统对内存空间没有保护,多个进程可共享一个运行空间,所以,即使是一个无特权进程调用一个无效指针也会触发一个地址错误,并有可能引起程序崩溃甚至系统崩溃。

μClinux操作系统的中断管理是将中断处理分为两部分:顶半处理和底半处理。在顶半处理中,必须关中断运行,且仅进行必要的、非常少、速度快的处理,其他处理交给底半处理;底半处理执行那些复杂、耗时的处理,而且接受中断。因为系统中存在有许多中断的底半处理,所以会引起系统中断处理的延时。

μClinux对文件系统支持良好,由于μClinux继承了Linux完善的文件系统性能,它支持ROMFS、NFS、ext2、MS-DOS、JFFS等文件系统。但一般采用ROMFS文件系统,这种文件系统相对于一般的文件系统(如ext2)占用更少的空间。但是ROMFS文件系统不支持动态擦写保存,对于系统需要动态保存的数据须采用虚拟RAM盘/JFFS的方法进行处理。

在对硬件的支持上,由于μClinux继承了Linux的大部分性能,所以至少需要512KB的RAM空间,lMB的ROM/Flash空间。

在μClinux的移植方面,μClinux是Linux针对嵌入式系统的一种改良,其结构比较复杂。移植μClinux,目标处理器除了需要修改与处理器相关的代码外,还需要足够容量的外部ROM和RAM。

点评:μClinux最大特点在于针对无MMU处理器设计,这对于没有MMU功能的stm32f103来说是合适的,但移植此系统需要至少512KB的RAM空间,1MB的ROM/FLASH空间,而stmf103拥有256K的FLASH,需要外接存储器,这就增加了硬件设计的成本。μClinux结构复杂,移植相对困难,内核也较大,其实时性也差一些,若开发的嵌入式产品注重文件系统和与网络应用则μClinux是一个不错的选择。

TOP2:μC/OS-II

μC/OS-II是在μC/OS的基础上发展起来的,是用C语言编写的一个结构小巧、抢占式的多任务实时内核。μC/OS-II能管理64个任务,并提供任务调度与管理、内存管理、任务间同步与通信、时间管理和中断服务等功能,具有执行效率高、占用空间小、实时性能优良和扩展性强等特点。

对于实时性的满足上,由于μC/OS-II内核是针对实时系统的要求设计实现的,所以只支持基于固定优先级抢占式调度;调度方法简单,可以满足较高的实时性要求。

在内存管理上,μC/OS-II把连续的大块内存按分区来管理,每个分区中都包含整数个大小相同的内存块,但不同分区之间内存的大小可以不同。用户动态分配内存时,只须选择一个适当的分区,按块来分配内存,释放时将该块放回到以前所属的分区,这样就消除了因多次动态分配和释放内存所引起的碎片问题。

μC/OS-II中断处理比较简单。一个中断向量上只能挂一个中断服务子程序ISR,而且用户代码必须都在ISR(中断服务程序)中完成。ISR需要做的事情越多,中断延时也就越长,内核所能支持的最大嵌套深度为255。

在文件系统的支持方面,由于μC/OS-II是面向中小型嵌入式系统的,即使包含全部功能,编译后内核也不到10 KB,所以系统本身并没有提供对文件系统的支持。但是μC/OS-II具有良好的扩展性能,如果需要也可自行加入文件系统的内容。

在对硬件的支持上,μC/OS-II能够支持当前流行的大部分CPU,μC/OS-II由于本身内核就很小,经过裁剪后的代码最小可以为2KB,所需的最小数据RAM空间为4 KB,μC/OS-II的移植相对比较简单,只需要修改与处理器相关的代码就可以。

点评:μC/OS-II是一个结构简单、功能完备和实时性很强的嵌入式操作系统内核,针对于没有MMU功能的CPU,它是非常合适的。它需要很少的内核代码空间和数据存储空间,拥有良好的实时性,良好的可扩展性能,并且是开源的,网上拥有很多的资料和实例,所以很适合向stm32f103这款CPU上移植。

TOP3:eCos

eCos(embedded Configurable operating system),即嵌入式可配置操作系统。它是一个源代码开放的可配置、可移植、面向深度嵌入式应用的实时操作系统。最大特点是配置灵活,采用模块化设计,核心部分由小同的组件构成,包括内核、C语言库和底层运行包等。每个组件可提供大量的配置选项(实时内核也可作为可选配置),使用eCos提供的配置工具可以很方便地配置,并通过不同的配置使得eCos能够满足不同的嵌入式应用要求。

在实时性反面,由于eCos调度方法丰富,提供了两种基于优先级的调度器(即位图调度器和多级队列调度器),允许用户在进行配置时选择其中一个调度器,适应性好。因此在实时性方面表现良好。

在内存管理上eCos对内存分配既不分段也不分页,而是采用一种基于内存池的动态内存分配机制。通过两种内存池来实现两种内存管理方法:一种是变长的内存池;另一种是定长的内存池,类似于VxWorks的管理方案。

在中断管理上eCos使用了分层式中断处理机制,把中断处理分为传统的ISR(中断服务程序)和滞后中断服务程序DSR(递延服务程序)。类似于μClinux的处理机制,这种机制可以在中断允许时运行DSR,因此在处理较低优先级中断时允许高优先级的中断和处理。为了极大地缩短中断延时,ISR应当可以快速运行。如果中断引起的服务量少,则ISR可以单独处理中断;如果中断服务复杂,则ISR只屏蔽中断源,然后交由DSR(递延服务程序)处理。

eCos操作系统的可配置性非常强大,用户可以自己加入所需的文件系统。eCos操作系统同样支持当前流行的大部分嵌入式CPU,eCos操作系统可以在16位、32位和64位等不同体系结构之间移植。eCos由于本身内核就很小,经过裁剪后的代码最小可以为10 KB,所需的最小数据RAM空间为10 KB。

在系统移植方面 eCos操作系统的可移植性很好,要比μC/OS-II和μClinux容易。

点评:eCos最大特点是配置灵活,并且支持无MMU的CPU的移植,开源且具有很好的移植性,也比较合适于移植到STM32平台的CPU上。但eCOS的应用还不是太广泛,还没有像μC/OS-II那样普遍,并且资料也没有μC/OS-II多。eCos适合用于一些商业级或工业级对成本敏感的嵌入式系统,例如消费电子领域中的一些应用。

TOP4:FreeRTOS

由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对于C/OS-II、 embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为6.0版。

作为一个轻量级的操作系统,FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。 FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运行。 FreeRT0S内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用 时间。

FreeRTOS的内核可根据用户需要设置为可剥夺型内核或不可剥夺型内核。当 FreeRTOS被设置为可剥夺型内核时,处于就绪态的高优先级任务能剥夺低优先级任务的CPU使用权,这样可保证系统满足实时性的要求;当 FreeRTOS被设置为不可剥夺型内核时,处于就绪态的高优先级任务只有等当前运行任务主动释放CPU的使用权后才能获得运行,这样可提高CPU的运行 效率。

FreeRTOS的移植:FreeRTOS操作系统可以被方便地移植到不同处理器上工作,现已提供了ARM、MSP430、 AVR、PIC、C8051F等多款处理器的移植。FrceRTOS在不同处理器上的移植类似于μC/0S一II,故本文不再详述FreeRTOS的移 植。此外,TCP/IP协议栈μIP已被移植到FreeRTOS上,具体代码可见FreeRTOS网站。

点评:相对于常见的μC/OS—II操作系统,FreeRTOS操作系统既有优点也存在不足。其不足之处, 一方面体现在系统的服务功能上,如FreeRTOS只提供了消息队列和信号量的实现,无法以后进先出的顺序向消息队列发送消息;另一方 面,FreeRTOS只是一个操作系统内核,需外扩第三方的GUI(图形用户界面)、TCP/IP协议栈、FS(文件系统)等才能实现一个较复杂的系统, 不像μC/OS-II可以和μC/GUI、μC/FS、μC/TCP-IP等无缝结合。

TOP5:RT-Thread

RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统(许可证GPLv2)。实时线程操作系统不仅仅是一个单一的实时操作系统内核,它也是一个完整的应用系统,包含了实时、嵌入式系统相关的各个组件:TCP/IP协议栈,文件系统,libc接口,图形用户界面等。

中国人自己开发的,稳定版本是 1.2.1,有希望看完源码。精简、靠谱,自带一个叫做 finsh 的片上调试工具,非常实用。各种信号量、互斥锁、邮箱、事件等线程协同功能都有。

需要注意的是,rt-thread 2.0 版本的设计思想和 1.2 的完全不同,将会把 linux 纳入进来,是的,不是在 linux 里面嵌入 rt-thread,而是把 linux 嵌入到 rt-thread 里面!

点评:rt-thread 的文档呢,官网是有的,不过,真的是只能作为参考,很明显是开发人员的事后开发笔记整理的。目前还是只能通过看代码来理解详细的使用方式,从文档和论坛的只言片语里面,是难以还原真相的。rt-thread 的好处就是它的版本还比较小,即便缺乏文档,也是可以看源码看下去的。

转自: 嵌入式资讯精选

围观 354

随着智能手机的发展,不管是看手机配置还是经常在生活中与网络中都经常听人有人讨论一些词。比如手机RAM多少或者ROM多少等等。可能大家都知道不管是ROM还是RAM越大越好,但对于ROM和RAM是什么意思以及两者之间的区别却不了解。

简单的说,一个完整的计算机系统是由软件和硬件组成的。其中,硬件部分由中央处理单元CPU(包括运算器和控制器)、存储器和输入/输出设备构成。目前个人电脑上使用的主板一般只能支持到1GB的内存,即使是INTEL目前最高阶的450NX芯片组也只能支持到4GB。

单片机的一个主要作用就是数据信息的处理,而在处理数据的过程中,需要一些“容器”来存放这些数据。这就好比烧饭要用到锅碗瓢盆一样。在这里,我们称这些“容器”为“存储器”。

存储器的物理实质是一组(或多组)具备数据输入/输出和数据存储功能的集成电路,用于充当设备缓存或保存同定的程序及数据。存储器按存储信息功能的不同,可分为只读存储器ROM和随机存储器RAM

RAM

RAM是指通过指令可以随机的、个别的对各个存储单元进行访问的存储器,一般访问时间基本固定,而与存储单元地址无关。RAM的速度比较快,但其保存的信息需要电力支持,一旦丢失供电即数据消失,所以又叫易失性存储器,还有一种很有趣的叫法是“挥发性存储器”,当然这里“挥发”掉的是数据而不是物理上的芯片。在51单片机中,RAM主要用来保存数据、中间结果和运行程序等,所以也把RAM叫做数据存储器。

ROM

ROM英文概念是 Read Only Memory,只读式存储器,在计算机中,是一种类型的内存。此类型内存常被用于存储重要的或机密的数据。理想上认为,此种类型的内存是只能读取,而不允许擦写。在51单片机中,ROM一般用来存放常数、数据表格、程序代码等,所以也叫做程序存储器

ROM和RAM区别

至于ROM与RAM的主要区别相信大家也已经想到了。在手机中,RAM是指手机内存,属于手机内部存储器,属于随机存储,速度高于ROM,对于手机配置性能起着重要的决定性,另外掉电后,数据被清空,比如手机运行着QQ与其它软件,重启手机后,软件就没有处于登录状态,这点也比较好理解吧。

嵌入式中,ROM和RAM到底有何不同?
  

而ROM则属于外部存储,比如我们经常可以购买SD卡放入手机里面,则就是手机ROM,手机ROM就是我们通常说的存储卡,也可以简单的理解成手机硬盘吧。用来存储手机系统文件、图片、电影等等,不会随着掉电而丢失数据,ROM越大存储的数据就越多。

ROM存放指令代码和一些固定数值,程序运行后不可改动;RAM用于程序运行中数据的随机存取,掉电后数据消失。。

ROM即只读存储器。ROM中的信息一次写入后只能被读出,而不能被操作者修改或删除。一般用于存放固定的程序或数据表格等。

不能被操作者修改或删除。一般用于存放固定的程序或数据表格等。

当然,“只读”这个“传统”的概念有时是可以被一些新特性的器件颠覆的。下面介绍的这两种类型的ROM就可以使用适当的方法进行擦除或改写。

1.EPROM

EPROM 与一般的ROM的不同点在于,它可以用特殊的装置擦除或重写其中的内容。

2.闪存FLASH

闪速存储器,又称PEROM, 它是完全非易失的,可以在线写入,并且可以按页连续字节写入,读出速度快。

RAM即随机存储器。这就是我们平常所说的内存,主要用来存放各种现场的输入/输出数据、中间计算结果,以及与外部存储器交换信息,或是作堆桟用。它的存储单元根据具体需要可以读出或改写。

RAM只能用于暂时存放程序和数据。一旦电源关闭或发生断电,RAM中的数据就会丢失。而ROM中的数据在电源关闭或断电后仍然会保留下来。这也许就是二者最大的区别吧。

来源: eepw.com

围观 556

近年来,在单片机系统中嵌入操作系统已经成为人们越来越关心的一个话题。本文通过对一种源码公开的单片机嵌入式实时操作系统μC/OS-II为例,阐述了在单片机中使用该嵌入式操作系统的优缺点,以及在应用中应当注意的一些问题。

早在20世纪60年代,就已经有人开始研究和开发嵌入式操作系统。但直到最近,它才在国内被越来越多的提及,在通信、电子、自动化等需要实时处理的领域所日益显现的重要性吸引了人们越来越多的注意力。但是,人们所谈论的往往是一些著名的商业内核,诸如VxWorks、PSOS等。这些商业内核性能优越,但价格昂贵,主要用于16位和32位处理器中,针对国内大部分用户使用的51系列8位单片机,可以选择免费的μC/OS-II。

μC/OS-II的特点

1、μC/OS-II是由Labrosse先生编写的一个开放式内核,最主要的特点就是源码公开。这一点对于用户来说可谓利弊各半,好处在于,一方面它是免费的,另一方面用户可以根据自己的需要对它进行修改。缺点在于它缺乏必要的支持,没有功能强大的软件包,用户通常需要自己编写驱动程序,特别是如果用户使用的是不太常用的单片机,还必须自己编写移植程序。

2、μC/OS-II是一个占先式的内核,即已经准备就绪的高优先级任务可以剥夺正在运行的低优先级任务的CPU使用权。这个特点使得它的实时性比非占先式的内核要好。通常我们都是在中断服务程序中使高优先级任务进入就绪态(例如发信号),这样退出中断服务程序后,将进行任务切换,高优先级任务将被执行。拿51单片机为例,比较一下就可以发现这样做的好处。假如需要用中断方式采集一批数据并进行处理,在传统的编程方法中不能在中断服务程序中进行复杂的数据处理,因为这会使得关中断时间过长。所以经常采用的方法是置一标志位,然后退出中断。由于主程序是循环执行的,所以它总有机会检测到这一标志并转到数据处理程序中去。但是因为无法确定发生中断时程序到底执行到了什么地方,也就无法判断要经过多长时间数据处理程序才会执行,中断响应时间无法确定,系统的实时性不强。如果使用μC/OS-II的话,只要把数据处理程序的优先级设定得高一些,并在中断服务程序中使它进入就绪态,中断结束后数据处理程序就会被立即执行。这样可以把中断响应时间限制在一定的范围内。对于一些对中断响应时间有严格要求的系统,这是必不可少的。但应该指出的是如果数据处理程序简单,这样做就未必合适。因为μC/OS-II要求在中断服务程序末尾使用OSINTEXIT函数以判断是否进行任务切换,这需要花费一定的时间。

3、μC/OS-II和大家所熟知的Linux等分时操作系统不同,它不支持时间片轮转法。μC/OS-II是一个基于优先级的实时操作系统,每个任务的优先级必须不同,分析它的源码会发现,μC/OS-II把任务的优先级当做任务的标识来使用,如果优先级相同,任务将无法区分。进入就绪态的优先级最高的任务首先得到CPU的使用权,只有等它交出CPU的使用权后,其他任务才可以被执行。所以它只能说是多任务,不能说是多进程,至少不是我们所熟悉的那种多进程。显而易见,如果只考虑实时性,它当然比分时系统好,它可以保证重要任务总是优先占有CPU。但是在系统中,重要任务毕竟是有限的,这就使得划分其他任务的优先权变成了一个让人费神的问题。另外,有些任务交替执行反而对用户更有利。例如,用单片机控制两小块显示屏时,无论是编程者还是使用者肯定希望它们同时工作,而不是显示完一块显示屏的信息以后再显示另一块显示屏的信息。这时候,要是μC/OS-II即支持优先级法又支持时间片轮转法就更合适了。

4、μC/OS-II对共享资源提供了保护机制。正如上文所提到的,μC/OS-II是一个支持多任务的操作系统。一个完整的程序可以划分成几个任务,不同的任务执行不同的功能。这样,一个任务就相当于模块化设计中的一个子模块。在任务中添加代码时,只要不是共享资源就不必担心互相之间有影响。而对于共享资源(比如串口),μC/OS-II也提供了很好的解决办法。一般情况下使用的是信号量的方法。简单地说,先创建一个信号量并对它进行初始化。当一个任务需要使用一个共享资源时,它必须先申请得到这个信号量,而一旦得到了此信号量,那就只有等使用完了该资源,信号量才会被释放。在这个过程中即使有优先权更高的任务进入了就绪态,因为无法得到此信号量,也不能使用该资源。这个特点的好处显而易见,例如当显示屏正在显示信息的时候,外部产生了一个中断,而在中断服务程序中需要显示屏显示其他信息。这样,退出中断服务程序后,原有的信息就可能被破坏了。而在μC/OS-II中采用信号量的方法时,只有显示屏把原有信息显示完毕后才可以显示新信息,从而可以避免这个现象。不过,采用这种方法是以牺牲系统的实时性为代价的。如果显示原有信息需要耗费大量时间,系统只好等待。从结果上看,等于延长了中断响应时间,这对于未显示信息是报警信息的情况,无疑是致命的。发生这种情况,在μC/OS-II中称为优先级反转,就是高优先级任务必须等待低优先级任务的完成。在上述情况下,在两个任务之间发生优先级反转是无法避免的。所以在使用μC/OS-II时,必须对所开发的系统了解清楚,才能决定对于某种共享资源是否使用信号量。

μC/OS-II在单片机使用中的一些特点:

(1)在单片机系统中嵌入μC/OS-II将增强系统的可靠性,并使得调试程序变得简单。以往传统的单片机开发工作中经常遇到程序跑飞或是陷入死循环。可以用看门狗解决程序跑飞问题,而对于后一种情况,尤其是其中牵扯到复杂数学计算的话,只有设置断点,耗费大量时间来慢慢分析。如果在系统中嵌入μC/OS-II的话,事情就简单多了。可以把整个程序分成许多任务,每个任务相对独立,然后在每个任务中设置超时函数,时间用完以后,任务必须交出CPU的使用权。即使一个任务发生问题,也不会影响其他任务的运行。这样既提高了系统的可靠性,同时也使得调试程序变得容易。

(2)在单片机系统中嵌入μC/OS-II将增加系统的开销。现在所使用的51单片机,一般是指87C51或者89C51,其片内都带有一定的RAM和ROM。对于一些简单的程序,如果采用传统的编程方法,已经不需要外扩存储器了。如果在其中嵌入μC/OS-II的话,在只需要使用任务调度、任务切换、信号量处理、延时或超时服务的情况下,也不需要外扩ROM了,但是外扩RAM是必须的。由于μC/OS-II是可裁减的操作系统,其所需要的RAM大小就取决于操作系统功能的多少。举例来说,μC/OS-II允许用户定义最大任务数。由于每建立一个任务,都要产生一个与之相对应的数据结构TCB,该数据结构要占用很大一部分内存空间。所以在定义最大任务数时,一定要考虑实际情况的需要。如果定得过大,势必会造成不必要的浪费。嵌入μC/OS-II以后,总的RAM需求可以由如下表达式得出:

RAM总需求=应用程序的RAM需求+内核数据区的RAM需求+(任务栈需求+最大中断嵌套栈需求)·任务数
所幸的是,μC/OS-II可以对每个任务分别定义堆栈空间的大小,开发人员可根据任务的实际需求来进行栈空间的分配。但在RAM容量有限的情况下,还是应该注意一下对大型数组、数据结构和函数的使用,别忘了,函数的形参也是要推入堆栈的。

(3)μC/OS-II的移植也是一件需要值得注意的工作。如果没有现成的移植实例的话,就必须自己来编写移植代码。虽然只需要改动两个文件,但仍需要对相应的微处理器比较熟悉才行,最好参照已有的移植实例。另外,即使有移植实例,在编程前最好也要阅读一下,因为里面牵扯到堆栈操作。在编写中断服务程序时,把寄存器推入堆栈的顺序必须与移植代码中的顺序相对应。

(4)和其他一些著名的嵌入式操作系统不同,μC/OS-II在单片机系统中的启动过程比较简单,不像有些操作系统那样,需要把内核编译成一个映像文件写入ROM中,上电复位后,再从ROM中把文件加载到RAM中去,然后再运行应用程序。μC/OS-II的内核是和应用程序放在一起编译成一个文件的,使用者只需要把这个文件转换成HEX格式,写入ROM中就可以了,上电后,会像普通的单片机程序一样运行。

结语

由以上介绍可以看出,μC/OS-II具有免费、使用简单、可靠性高、实时性好等优点,但也有移植困难、缺乏必要的技术支持等缺点,尤其不像商用嵌入式系统那样得到广泛使用和持续的研究更新。但开放性又使得开发人员可以自行裁减和添加所需的功能,在许多应用领域发挥着独特的作用。当然,是否在单片机系统中嵌入μC/OS-II应视所开发的项目而定,对于一些简单的、低成本的项目来说,就没必要使用嵌入式操作系统了。

围观 356

引 言

运动控制器是运动控制系统的核心部件。目前,国内的运动控制器大致可以分为3类:

第1类是以单片机等微处理器作为控制核心的运动控制器。这类运动控制器速度较慢、精度不高、成本相对较低,只能在一些低速运行和对轨迹要求不高的轮廓运动控制场合应用。

第2类是以专用芯片(ASIC)作为核心处理器的运动控制器,这类运动控制器结构比较简单,大多只能输出脉冲信号,工作于开环控制方式。由于这类控制器不能提供连续插补功能,也没有前馈功能,特别是对于大量的小线段连续运动的场合不能使用这类控制器。

第3类是基于PC总线的以DSP或FPGA作为核心处理器的开放式运动控制器。这类开放式运动控制器以DSP芯片作为运动控制器的核心处理器,以PC机作为信息处理平台,运动控制器以插件形式嵌入PC机,即“PC+运动控制器”的模式。这样的运动控制器具有信息处理能力强,开放程度高,运动轨迹控制准确,通用性好的特点。但是这种方式存在以下缺点:运动控制卡需要插入计算机主板的PCI或者ISA插槽,因此每个具体应用都必须配置一台PC机作为上位机。这无疑对设备的体积、成本和运行环境都有一定的限制,难以独立运行和小型化。

针对这些问题,设计了一种基于ARM+DSP的嵌入式运动控制器。该控制器将嵌入式CPU与专用运动控制芯片相结合,将运动控制功能以功能模块的方式嵌入到ARM主控板的架构,把不需要的设备裁减掉,既兼顾功能又节省成本。该控制器是一种可以脱离上位机单独运行的一种独立型运动控制器,具有良好的应用前景。

1 嵌入式运动控制器的硬件平台设计

嵌入式运动控制器的硬件主要包括两个部分:ARM主控板和DSP运动控制板。这两块控制板通过通用I/O口以总线的方式连接在一起。在设计时,可以分别对ARM主控板和DSP运动控制板进行设计,最后再调试。这种将ARM主控板和DSP运动控制板分开设计和调试的硬件方案,将设计难点分散,使设计和调试更简单。

1.1 ARM主控板部分

本系统采用的ARM芯片为Samsung公司推出的16/32位RISC处理器S3C2440A,主频为400 MHz,最高频率可达533 MHz。ARM主控板以嵌入式处理器S3C2440A为核心,外扩存储器和通用设备接口。ARM主控板的硬件结构框图如图1所示。

ARM+PCL6045B的嵌入式运动控制器设计

通过通用I/O接口与DSP运动控制板通信,实现ARM主控板与运动控制板之间数据的实时双向传送;外部NAND Flash存储器(64 MB),用于存储系统参数及运动指令;NOR Flash存储器(2 MB),用于存放系统运行程序;SDRAM存储器(64 MB),用于存放临时数据;通过串口、以太网接口、USB接口与上位机系统通信,实现两者之间数据的传送;通过LCD接口,实现320×240分辨率液晶屏的图形与字符显示,并具有触摸屏接口,提供友好的人机交互界面;通过I/O扩展接口,提供可编程的数字I/O通道;通过JTAG接口与PC机通信,实现系统运行程序的仿真调试及下载,软件升级接口。

1.2 DSP运动控制板部分

本系统DSP运动控制芯片选用PCL6045B。PCL6045B是一种功能十分强大的DSP运动控制芯片。芯片能够控制四轴,并实现两轴到四轴直线差补、两轴圆弧差补。所有插补计算由芯片完成,上位机只需写入圆弧的参数即可,其多轴插补控制功能特别优秀。系统硬件采用主从式双CPU结构模式。主CPU为ARM处理器,负责键盘、显示、网络通信等管理工作;从CPU为PCL6045B运动控制芯片,专门负责运动控制的处理工作。PCL6045B与ARM的通信是靠读写I/O总线上的几个地址来进行指令和数据的传输。控制系统硬件结构框图如图2所示。

ARM+PCL6045B的嵌入式运动控制器设计

1.3 ARM处理器与运动控制芯片的连接

通过设置引脚IF0与IF1,PCL6045B芯片与不同的CPU相连,如表1所列。

ARM+PCL6045B的嵌入式运动控制器设计

本系统设置IF1:IF0=0:1,CPU连接如图3所示。

ARM+PCL6045B的嵌入式运动控制器设计

2 嵌入式运动控制器的软件设计

本系统可根据被控对象的特征设计不同的模块化用户软件,来满足不同的运动控制任务。模块化软件恰好是Linux操作系统的优点。Linux还可以根据用户的需求实现内核的裁减和定制,源码开放,网络支持功能强大,价格上也更具有竞争优势等。所以该控制器选用Linux作为片上系统(SoC)。但是,Linux并不是一个实时操作系统,因此,通过实时内核补丁RTAI(Real Time Application In-terface),在硬件平台的基础上增加一个实时内核,将Linux内核当作它的优先级最低的任务执行,从而保证运动控制系统的实时性。系统的控制软件分为两个区域:非实时域和实时域。非实时域是建立在普通Linux内核基础上的,其主要包括系统初始化和通信模块。

①系统初始化:进行微处理器的硬件初始化,包括输入/输出接口的配置、具体总线通信方式的配置以及伺服系统相关的接口参数配置。

②通信模块:负责运动控制卡和上位机之间的坐标值、速度值、数控系统的I/O接口状态、报警状态以及数据链表的传输。

实时域建立在RTAI实时内核的基础上。其实时任务通过实时进程的方式来完成,一种为周期性(peri_odic)实时进程,另一种为一次性(one shot)实时进程。实时域主要包括如下4个周期性实时线程:

①状态检测线程(rt_monitor_thread)。本任务对设备运行状态进行检测,负责从I/O端口读入各个连接的I/O设备值,然后将状态写入状态检测缓冲区中,对设备急停、伺服报警、限位信号进行判断,并进行相应的处理。

②插补线程(rt_interpolation_thread)。从译码缓冲区中顺序取得插补数据,然后根据是直线或者圆弧进行插补,插补得到下个周期应该到达的理论坐标值。

③位置控制线程(rt_position_thread)。读取计数器中编码器的数值,得到实际的位置,并与插补器中的理论位置坐标作比较。根据差值调节PID参数,并将具体脉冲输出数写入对应的PWM口的脉冲数寄存器中。

④功能控制线程(rt_function_thread)。功能控制任务利用RTAI实时管道来传递命令和状态信息的功能。通过管道的命令设置实现Linux操作系统对实时部分RTAI的访问,从而实现运动控制器的运行、暂停、给定速度等状态设置。

2.1 软件平台的建立

软件平台是系统应用程序开发的基础。本系统软件平台主要包括:ARM-Linux的移植、串行接口驱动开发、USB接口驱动开发、LCD接口驱动开发、触摸屏接口驱动开发、以太网接口驱动开发、文件系统的移植等。这些软件的开发和移植在很多文献中有详细的说明。

2.2 运动控制函数库的设计

通用运动控制器的功能主要取决于运动控制函数库。要做成一个开放式的运动控制器,必须编写丰富的运动控制函数库,以满足不同的应用要求。运动控制函数库要为单轴及多轴的步进或伺服控制提供许多运动函数,如单轴驱动、两轴直线插补、3轴直线插补、圆弧插补等等。另外,为了配合运动控制系统的开发,还编写了一些辅助函数,如中断处理、编码器反馈、间隙补偿、通用开关量的输入输出等。这样,用户在开发应用程序时就不必再关心底层的东西,只需根据控制系统的要求编制人机界面,并调用运动控制函数库中的函数,就可以开发出满足要求的多轴运动控制系统。

2.3 对Ljnux进行实时化改造

由于Linux不是一个实时操作系统,所以,利用实时内核补丁RTAI(Real Time Application Interface)。RTAI的安装和使用详见参考文献[7]。该控制器所使用的Linux开发环境为ELDK(Embedded Linux DevelopedKit)3.0。Linux内核为Linuxp pc_2_4_devel,而RTAI的版本为24.1.12。由Linux中的init_module()和cleanup_modtde()两个函数加载和卸载实时任务模块,通过这两个函数进行实时线程及其处理函数的创建和回收。其关键程序如下:
ARM+PCL6045B的嵌入式运动控制器设计

2.4 应用软件设计

应用软件主要包括人机交互界面的设计、数控指令的编译解释、按键功能的实现、运动状态的监视等。通过操作系统ARM-Linux,可方便地实现上述功能,并进行多任务的调度。运动控制器根据输入的数控指令文件,将其存入NAND Flash中。ARM处理器通过对数控指令进行译码、速度预处理、粗插补计算等,调用运动控制函数,进而发出控制指令控制步进或伺服系统去控制执行部件进行动作,从而达到实现运动控制的目的。

结 语

本文综合应用ARM嵌入式系统技术、DSP运动控制技术等多种技术开发出高性能的嵌入式运动控制器。该控制器相比传统的基于PC机的运动控制器,具有成本低、体积小、功耗低、功能丰富、运行稳定的特点和优势。以ARM微控器和PCL6045B为核心的嵌入式运动控制器,采用Linux操作系统,经过对其进行实时化改造,使系统能很好地进行多任务处理,保证了系统的实时性。该控制器能够实现高速和高精度的运动控制需求,具有良好的运动控制性能。该运动控制器的设计,为读者提供了一种良好的解决方案,在运动控制领域具有广阔的应用前景。

来源: 中国百科网

围观 527

运动控制系统已被广泛应用于工业控制领域。近年来,工业控制对运动控制系统的要求越来越高。传统的基于PC及低端微控制器日渐暴露出高成本、高消耗、低可靠等问题,已经不能满足现代制造的要求 。随着嵌入式技术的日益成熟,嵌人式运动控制器已经初露锋芒。基于ARM技术的微处理器具有体积小、低成本、低功耗的特点,决定其在运动控制领域具有良好的发展前景。

PCL6045BL是一种新型专用DSP运动控制芯片,它具有强大的数据处理能力和较高的运行速度,可以实现高精度的多轴伺服控制。为解决精密制造对低成本、可移植性强的通用型多轴数控系统的迫切需求,文中给出一种基于ARM 微处理器S3C2440与DSP专业运动控制芯片PCL6045BL构成的嵌入式四轴运动控制器。该运动控制器具有高性能、低成本、体积小、可独立运行等特点,可以满足运动控制系统高速、高精度的 要求。它可广泛应用于雕刻机、机器人、绣花机以及数控加工等工业控制领域。

为解决精密制造对低成本、可移植性强的通用型多轴数控系统的迫切需求,给出一种基于ARM微处理器S3C2440和专用DSP运动控制芯片PCL65045BL组合的嵌入式四轴运动控制器。硬件上该控制器采用ARM+DSP的主从式双CPU结构,结合ARM在人机界面显示、通信接口方面的优势以及PCL6045BL高控制精度的优点。软件上在S3C2440上移植μC/OS-II实时操作系统来管理运动控制系统。该控制系统通用性较强,可广泛应用于雕刻机、机器人、绣花机以及数 控加工等工业控制领域。

1 系统总体设计

嵌入式四轴运动控制器主要由硬件部分和软件部分构成。

硬件主要包括S3C2440嵌入式主控板和PCL6045BL运动控制板两个部分。S3C2440嵌入式主控板和PCL6045BL运动控制板之间通过通用的IDE通信接口进行连接。

软件方面在硬件平台的基础上移植S3C2440实时嵌入式操作系统,设计Boot Loader、外设驱动以及运动控制系统的应用程序。采用上述的软硬件平台,嵌入式运动控制器可以达到开放性能好、精度高的要求。本嵌入式四轴运动控制器的结构如图1所示。

ARM+DSP的嵌入式四轴运动控制器设计
图1 嵌入式四轴运动控制器的构成

ARM具有丰富的片内外围电路,如USB接口、IIS接口、LCD控制器等,在人机界面的显示、通信接口以及系统移植方面具有更强大的功能。PCL6045BL运动控制芯片速度快,可靠性高,性能好,在运动控制方面有很大的优势。

实时操作系统μC/OS-II包含了实时内核、任务管理、时间管理、任务间通信同步和内存管理等功能,可以使各个任务独立工作,互不干涉,很容易实现准时而且无误地执行,使实时应用程序的设计和扩展变得容易,使应用程序的设计过程大为减化 。将S3C2440处理器、PCL6045BL 以及μC/OS-II三者的优势应用到本嵌入式四轴运动控制器中可以使其具有强大的功能,并缩短开发时间。

本嵌入式四轴运动控制器以S3C2440为主控平台,在ARM上移植μC/OS-II实时操作系统来进行人机界面的显示、I/O的管理、任务问的通信、指令的编译等工作。PCL6045BL运动控制模块主要负责位置控制,插补驱动,速度控制。用户的指令通过S3C2440指令编译系统的编译,通过与PCL6045BL之问的专用通信接口来控制DSP运动控制芯片发出脉冲以达到使伺服电机高速运行。

2 系统硬件设计

2.1 系统硬件平台设计

在控制系统中,以S3C2440处理器为主控核心,PCL6045BL运动控制芯片为从CPU,构建的嵌入式运动控制器结构如图2所示。

ARM+DSP的嵌入式四轴运动控制器设计
图2 系统硬件

S3C2440是一款16/32位ARM920T RISC处理器,它实现了MMU、AMBA总线和独立的16 KB指令和16 KB数据哈佛结构的缓存,每个缓存均为8个字长度的流水线。S3C2440提供全面的、通用的片上外设,不需要配置额外的部件。PCL6045BL运动控制芯片,由NPM公司生产,是一种通过总线接收CPU命令、并产生脉冲控制步进电机或脉冲驱动型伺服电机的CMOS大规模集成芯片,可提供多种输出运动控制功能,包括连续、定长、回原点等输出方式。PCL6045BL可以实现2~4轴线性插补及任意两轴圆弧插补。在这种主从结构框架基础上,主CPU S3C2440主要负责数据的存储、人机界面的显示、网络通信等管理工作。从CPU PCL6045BL输出的脉冲发送给4个轴的伺服驱动器。S3C2440只需要通过发送简单的指令给PCL6045BL,便可实现各种控制功能。

2.2 ARM 与PCL6045BL的连接

PCL6045 BL与ARM的通信是通过读写I/O总线上的几个地址来进行指令和数据的传输。PCL6045BL每个轴的内部寄存器地址由A0、A1 和A2地址线输人决定,其控制地址范围由输入端子A3和A4进行选择。因此在这种主从结构的设计中,ARM与PCL6045BL的连接如图3所示。

ARM+DSP的嵌入式四轴运动控制器设计
图3 PCL6045BL与S3C2440的接口电路

2.3 I/O接口电路

嵌入式四轴运动控制器与伺服电机之间是通过I/O接口电路进行连接的。I/O接口电路主要任务是完成输入信号的光电隔离以及对输出脉冲的驱动。设计中采用光电耦合器将PCL6045BL芯片与后面的伺服电机驱动器以及其他控制反馈等线路隔离。由于光耦合器输入输出问互相隔离,电信号传输具有单向性等特点,因而具有良好的电绝缘能力和抗干扰能力。又由于光耦合器的输入端属于电流型工作的低阻元件,因而具有很强的共模抑制能力。将PCL6045BL的输出信号(如CP、CW等)和输入信号(如报警、限位等)都使用光耦器件与PCL6045BL隔离,这样能有效地防止干扰信号进入主芯片损坏PCL6045BL。

3 软件设计

系统软件部分由μC/OS-II实时嵌入式操作系统及相关应用软件组成。μC/OS-II实时嵌入式操作系统仅仅提供了一个任务调度的实时内核,因而需要自行开发一系列与系统运行相关的设备驱动程序、API函数及应用程序,才能将μC/OS-II扩展为一个完整、实用的实时操作系统。

3.1 Boot Loader的设计

嵌入式系统中,通常并没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由Boot Loader来完成。Boot Loader是系统加电后运行的第一段代码,负责初始化系统并启动操纵系统,相当于PC机的程序。Boot Loader初始化硬件设备,建立内存空间的映射图,为最终调用操作系统内核准备好正确的环境。

Boot Loader分为阶段1和阶段2两个部分,与CPU核以及存储设备密切相关的处理工作通常都放在阶段1中,且可以用汇编语言来实现;而阶段2则通常用C语言来实现一般的流程以及对板级的一些驱动支持。

阶段1主要进行定义入口、设置中断向量、系统寄存器配置、初始化寄存器等操作。而阶段2主要完成调用初始化函数、初始化闪存设备、初始化内存分配函数等操作。Boot Loader是嵌入式系统软件开发的第一个环节,把实时操作系统和硬件平台紧密地结合起来,对于嵌入式系统的软件开发尤为重要。

3.2 μC/OS-II在S3132440的移植

嵌入式实时操作系统μC/OS-II是一个源代码公开的多任务实时操作系统内核,它简化了应用软件的设计,使控制系统的实时性得到保障。良好的多任务设计,有助于提高控制系统的稳定性和可靠性。所谓移植,就是通过修改操作系统内核与处理器相关部分的源代码,使一个实时内核能在微处理器或微控制器上运行。μC/OS-II的文件系统结构包括核心代码部分,配置代码部分,处理器相关代码部分,如图4所示。其中处理器相关代码部分包括OS_CPU.H,OS_CPU.A.ASM,OS_CPU.C.C 3个文件。将μC/OS-II移植到S3C2440只需要修改与处理器相关的代码即可。

ARM+DSP的嵌入式四轴运动控制器设计

3.3 系统应用程序设计

实时应用程序的设计过程包括如何把问题分割为多个子任务,每个子任务都是整个系统的一部分,都被赋予一定的优先级,有自己的一套CPU寄存器和堆栈空间。一个任务,也叫一个线程,是一个简单的程序,该程序可以认为CPU完全只属于自己。在本设计中将任务划分为人机界面的设计、数控指令编译解释、伺服单元采集任务、状态监视等。μC/OS-II可以按照优先级启动各个任务,并通过内核来完成任务之间的调度。系统的基本流程如图5所示。

S3C2440根据系统的应用程序对指令进行解释,调用运动控制函数,继而PCL6045BL发出脉冲控制伺服电机去控制执行机构动作,实现运动控制的结果。

ARM+DSP的嵌入式四轴运动控制器设计
图5 用户程序流程

3.4 NC代码解释

运动控制器接受来自上位机发送过来的加工文件,但加工文件指令在程序中不能直接被识别,在执行指令之前必须先对其进行解析译码。解释器的主要功能就是将用户程序以程序段为处理单位,将程序中的轮廓信息、运行速度和辅助功能信息,转换成嵌入式运动控制器能够执行的格式。解释过程主要包括数控文件的读入、词法分析、语法分析以及加工信息存储数据结构等过程,如图6所示。

ARM+DSP的嵌入式四轴运动控制器设计
图6 程序处理流程

4 实例分析

上位机通过RS485总线与S3C2440连接,把NC指令文件输入到ARM 中,经过NC代码解释器,变成PCL6045BL能够识别的代码,从而完成规定的运动控制功能。用NC代码编写如下加工程序:

N001 COO X15 Y25//起始点选定

N002 G18//XY平面选择

N003 G90 G01 X15 Y5//准备直线插补

N004 X30 Y5//(15,5)到(30,5)

N005 X30 Y15//前行至点(30,15)

N006 X45 Y15//前行至点(45,15)

N007 X45 Y5//前行至点(45,5)

N008 X60 Y5//前行至点(60,5)

N009 X60 Y25//前行至点(60,25)

N010 X15 Y25//回到始点(15,25)

根据上面所给的代码可以完成如图7所示的多点之间直线插补的功能。

ARM+DSP的嵌入式四轴运动控制器设计
图7 多线段直线插补运动轨迹

5 结语

该运动控制器的硬件结构是基于微处理器S3C2440和PCL6045BL运动控制芯片设计的,它较好地发挥了ARM处理器的高性能、低成本和运动控制芯片的高可靠性、开发周期短的优点;在控制器硬件平台上移植μC/OS-II实时操作系统既能使整个软件系统结构简结、层次清晰,又能很好地达到运动控制实时性的要求。

来源: elecfans.com

围观 486

随着遥感、通讯技术的迅速发展,微小无人机的设计逐步被深究。小型无人机由于其高度灵活机动性、信息化强、适应恶劣环境等优势,近几年在军事、高空拍摄、农业等领域有着广泛的应用,通过搭载在机体上的各类传感器单元获取所需的数据信息,如图像的采集,能够对特定特殊环境进行有效的勘察。但目前,无人机的地面控制站主要使用功耗高、体积大的PCI总线采集技术,一定程度限制了无人机的高度灵活性等优点。因此,以32位ARM微处理器为核心、DM368作为协处理器,设计出一种基于嵌入式的实时性强、数据传输和处理速度快的无人机勘察系统。

1 系统功能架构

无人机系统的设计由飞行控制系统、无线通信系统、地面控制站三大遥感技术组成,飞行过程包括飞行器的起飞、飞行轨迹、任务处理和回收等过程,其中飞行控制系统是本系统设计的核心。图1为无人机勘察系统的总体结构图。图中传感器单元由陀螺仪、GPS等组成,采用无线射频模块XT09-SI负责将采集到的信息传输到地面控制站并传达地面控制站的控制指令,形成飞行控制-飞行管理-飞行任务实施,完成无人机的信息接收、信息处理、信息输出的功能,实现智能化、网络化。

基于嵌入式的无人机勘察系统设计

2 系统硬件设计

本系统围绕着以以ARM为内核的S3C2410搭建起主控制处理模块,采用小型的CCD摄像机和DM368视频协处理组成对音频和视频的采集,无线射频模块XT09-SI作为数据的传输和接收通道的媒介,在无人机飞行器上搭载GPS、陀螺仪、磁航向等多种传感器单元,实现对不同数据的精确采集和改变飞行轨迹等功能。

2.1 数据传输模块

数据的采集和传输及接收是无人机系统设计的复杂部分,为了有利于系统后期的功能拓展和硬件维护,采用模块化的设计。采用XT09-SI无线射频模块作为该电路的数据传输模块。该无线传输模块与微控制器的电路接口采用串行通信原理,硬件连接示意图如图2所示。数据间通信使用标准的RS-232接口,并设计高速光耦隔离6N137模块对电路提高抗干扰能力,通过接收地面控制站的指令,完成无人机的飞控的控制、数据采集和发送等功能。

基于嵌入式的无人机勘察系统设计

2.2 图像视频传输模块

DM368模块是基于ARM 926EJ处理器的低功耗数字多媒体处理芯片,DM368模块采用的是完成符合PAL制式视频标准,可接Flash Memory或者FPGA等设备,支持H.264、MPPEG4等图像编码技术,芯片内部集成32 k RAM、16 kROM、丰富的外部接口等资源,集图像和音频采集于一体,可以稳定高效的管理数据通信、视频压缩编码等任务。由于视频数据在发射端和接收端会存在偏差,为了减少误差,需对H.264帧图像压缩编码算法进行优化。常用的H.264处理方法有对编码纹理负责区域的4×4像素和区域平坦的16x16像素两种算法,帧的预测可以看成是由简单的加法和移位运算来减少预测模式从而提高编码的效应。16x16像素预测模式由垂直预测、水平预测、DC预测以及平面预测4种模式,4种模式的函数为:

基于嵌入式的无人机勘察系统设计

本系统对图像的帧算法通过对16x16像素预测编码采用加法器和移位器运算,对计算方程进行优,减少数据占用空间,使视频传输效率提高。采用的算法如下:

基于嵌入式的无人机勘察系统设计

2.3 主控制器模块

无人机勘察系统的主控制器选用具有高性能、低功耗32位内核S3C2410,工作频率最高可达到266 MHz,拥有高效的信号处理能力,片上集成丰富的资源,高达24个外部中断源,能够满足多路中断处理,提高处理器的资源利用率,3路URAT,I2C、PWM、SPI等多路通信接口,片外存储器的接口拓展有Nor Flash、SDRAM,通过总线方式与微处理器相连,拓展储存数据空间,并且具有高数据传输的DAM通道。S3C2410芯片通过SPI接口和RS-232接口与XT09-SI无线模块以及其他传感器单元模块进行数据的交换。

3 软件设计

无人机勘察工程中,地面控制站对无人机的控制方式有手动航模操作、遥控指令控制、程序预定控制等操作,操作系统要求满足能够管理多任务和判断优先级。在目前的嵌入式操作系统中有Linux、UC/OS、UC/GUI等多种,都具备各自的优势。无人机勘察系统要求软件的编写可靠、简单易操作,因此,本系统的软件设计采用可管理64个实时多任务内核的UCOSII。要实现对无人机的飞行控制,软件编程的重点在于对UC/OS操作系统的体系结构拓展,建立起RTOS实时操作系统。以下是操作系统的部分示意代码。

基于嵌入式的无人机勘察系统设计

4 系统测试

地面监控平台是这个系统设计的重要部分,监控中心上位机采用Qt开发,通过Socket编程,实现上位机和无人机控制程序之间能够双向通信,实时接收无人机采集到的信息和发送控制指令,完成所需的飞行任务。地面监控平台能过得到无人机采集到各类传感器单元的数据,并实时在窗口显示出来。本次实验让无人机进行简单的飞行测试,系统能够及时响应。图3是监控系统接收到的部分信息。

基于嵌入式的无人机勘察系统设计

5 结束语

文中设计了基于嵌入式的无人机勘察系统,通过引入UC/OS实时内核,能够完成数据的采集、传输和处理,运用DM368视频协处理对高压缩率的H.264标准的图像进行压缩编码,可采集并传输稳定、高速实时勘察到的图像和音频。整体绕着ARM构成的微控制器运转、具有低功耗、数据处理速度高效等特点,随着嵌入式和传感器的不断发展,无人机勘察将在军事、高空拍摄、农业等领域得到更好的发展与应用。

来源:电子设计工程

围观 680

现代传动系统要集成控制回路精度、扩展性、网络通信、外设控制、数据和设计安全、功能安全和可靠性等特性,这是十分重要的。此外,电机必须准确并且同步控制,同时不损害性能和确定性,在多轴控制系统中尤其如此。

电机消耗的电能占全球电耗的比例非常高。在很大程度上,电机的能耗取决于电机和传动效率。为了降耗、提高传动效率和改善性能,世界各地的监管机构均已实施能源效率标准。因此,电机传动的部署正日益使用高精度、高性能电机控制算法。现代传动系统要集成控制回路精度、扩展性、网络通信、外设控制、数据和设计安全、功能安全和可靠性等特性,这是十分重要的。此外,电机必须准确并且同步控制,同时不损害性能和确定性,在多轴控制系统中尤其如此。为了满足这些控制和集成要求,嵌入式设计人员设计的传动不仅要能够运行复杂的电机控制算法,而且要在连接性日益增加的环境下支持多个外设通信。

微控制器/数字信号处理器解决方案与 FPGA电机控制解决方案的比较

电机控制应用设计传统上采用微控制器(MCU)或数字信号处理器(DSP)来运行电机控制算法。但是,随着人们日益部署具有更高集成水平、扩展性、现有IP重复利用性的高性能工业控制系统,使得FPGA成为优先选择,尤其结合了ARM Cortex M3微控制器和FPGA逻辑资源的解决方案,为许多关键任务提供了理想的分工。它们日益被采纳的原因有几个。

首先,由于架构和访问指令存储器的原因,使得微控制器十分适合用于速度更慢的串行任务,但是,对时间要求更苛刻的并行处理功能的应用,FPGA则是更加理想的选择。例如,在多轴控制中,速度独立的多个电机通过实施确定性控制环路进行控制。通常,多轴电机控制系统还集成了外设控制、传感器接口、保护逻辑/安全和网络通信等功能。与这些功能有关的任务,各自拥有不同的执行时间和优先等级。

微控制器或DSP传动控制器采用屏蔽和中断服务程序来分配每种任务的执行优先等级。某些未屏蔽的任务可能在控制回路之前执行,导致控制回路的实际执行时间不确定。相反,FPGA的控制回路和片上系统(SoC)FPGA与其它过程并行执行,在多轴控制环路中,还可以采用时分多路复用(TDM)方案顺序运行。

配备ARM Cortex-M3微控制器的SoC FPGA甚至更高效地执行这种应用:这种FPGA用于按严格确定性定时方式执行的控制回路非常理想,而较低速度的接口则可以与ARM M3微控制器连接(图1)。

解决确定性多轴电机控制设计的挑战
图1:基于Flash的SmartFusion2 SoC FPGA实施的高度集成电机控制解决方案

解决确定性多轴电机控制设计的挑战
表1:微控制器/数字信号处理器解决方案vs FPGA电机控制解决方案

此外,FPGA解决方案改善了扩展性和性能。正如前述,在基于FPGA的控制中,优先等级更低的任务对控制回路的执行没有影响,因此,增加电机的数量并不会影响控制回路的执行时间。根据需求,可以扩大FPGA上运行的IP组合,从驱动两台无刷DC(BLDC)步机电机通道扩大到六轴解决方案,或将电机性能提高到70000 RPM以上。

此外,采用基于FPGA的多轴控制可以支持高达数百KHz的更高脉冲宽度调制(PWM)开关频率。除集成PWM产生等特性之外,基于FPGA的电机控制器还包括嵌入式处理、控制外设(如USB、PCIe、I2C和CAN)专用块、多用户定义I/O及拥有参考设计的即用型IP库。很重要一点是要记住电机控制算法并非唯一要求的功能。通常,完整的电机控制设计需要一个或多个通信接口和控制I/O。这些接口并非面向高性能,因此,非常适合使用M3等微控制器来实施。通信接口可以是CAN总线、SPI、UART或其它控制总线。SoC FPGA在客户外设和设计其它部分之间提供桥梁,当需要其它外设时,可以采用基于微控制器的SoC FPGA。模块化IP组件还简化了定制和扩展,支持多轴电机或高转动速率解决方案的不同组合,同时满足不断演变的地区技术标准。IP块越紧凑(即整个组合不到10000个逻辑元件),支持集成需求的净空间便越多。

可靠性和安全性是FPGA解决方案的其它两个重要方面。当设计用于卫星太阳能电池板、导向和控制系统、医学扫描仪、核电厂机械及执行器(Actuator)和发动机控制等应用的系统时,航空电子特别重要。许多半导体部件(包括MCU/DSP)易受单粒子翻转(SEU)的影响。可靠性和安全性的最佳选择是基于Flash而不是SRAM)的FPGA。所有配置信息芯片位于非易失性存储器内,它们在启动时绝对不会暴露位流。FPGA用于实施确定性定时非常重要的电机控制和网络功能时也比微控制器可靠。微控制器的定时差异是几毫秒,而FPGA的定时差异仅几纳秒或更低。

FPGA还满足确定性多轴电机控制解决方案的安全挑战要求。在现今的业界中,设计可能被克隆,或其数据可能被篡改或窃取的威胁日益增加。OEM面临的另一个威胁是其处理所有要求设计和IP的供应商或合同制造商或会过度制造。大多数MCU/DSP可能无法提供FPGA固有的高级安全特性水平,这些安全特性能够以分层方法提供硬件安全性、设计安全性和数据安全性(全面安全战略的三个关键要素)。有些基于闪存的FPGA还可以作为拥有关键储存能力的信任根设备,防止超连接工业IoT受到恶意攻击。FPGA采用物理反克隆功能(PUF)等特性应对安全需求,其中在公钥/私钥方案中,采用公钥基础设施(PKI),私钥用于实施M2M验证。其它特性包括加密加速器、随机数发生器、用于保护CUP/DSP内核的硬件防火墙,及差分功率分析(DPA)措施,它们相互配合,使整个系统根据需要对安全进行分层,从而保护硬件和数据。

与基于微控制器或DSP的实施相比,基于FPGA的电机控制实施的关键优点是确定性、扩展性和性能、可靠性,以及耐用性及安全性。

● 确定性— 在MCU或DSP实施中,任务顺序运行,执行时间和中断优先等级不同。ISR的执行时间不一定受到限制,因此可能导致不确定。与此相反,FPGA并行运行任务,每个任务的执行时间是确定的,并且总是产生确定性的输出。

● 扩展性和性能 - 对更高开关频率的多轴电机控制来说,MCU/DSP的性能并非最优化。高速电机要求较高开关频率(如500 kHz)和‘ => 2 µs ’ FOC回路执行。MCU硬件架构(PWM、ADC和GPIO)在控制多个电机方面存在局限性。采用FPGA实施,高级现场定向控制(FOC)的执行时间是1 µs。用于FOC的TDM可用于控制多个电机。任何I/O引脚均可配置用于PWM和ADC接口,FPGA集成了多个工业以太网协议、HMI和其它典型MCU/DSP不支持的接口。

● 可靠性和耐用性 – MCU和DSP易受软失效(SEU)的影响,产品使用寿命短。FPGA不受SEU影响,并且抗多种应用中的辐射,而产品使用寿命通常在20年以上。

● 安全性 –基于MCU/DSP的实施存在篡改、克隆和制造过多的风险,而基于FPGA的实施则拥有防篡改、安全启动、安全通信和强大的安全传承特性。

解决确定性多轴电机控制设计的挑战
图2:SmartFusion2双轴电机控制启动器套件(SF2-MC-STARTER-KIT)

电机开发人员要满足今天的能源效率法规和新技术要求,同时要确保设计可扩展以支持不同的多轴电机或高转动速率解决方案组合,非常富有挑战性。基于Flash的SoC FPGA应对了这些挑战,将处理能力与硬件和软件编程性和集成新特性和功能的能力相结合,同时促进了多层安全性。它们提供了先进的特性,如多轴控制、确定性响应、并行处理、功能集成和灵活性,使设计人员能够降低系统的总体拥有成本(TCO)。

来源: 中电网

围观 440

现有的数控系统中多采用工控机加运动控制卡的计算机数控系统方案进行运动控制器的设计。随着工控机整体功能日趋复杂,对运动控制系统的体积、成本、功耗等方面的要求越来越苛刻。现有计算机数控系统在运动控制方面逐渐呈现出资源浪费严重、实时性差的劣势。此外,数控系统的开放性、模块化和可重构设计是目前数控技术领域研究的热点,目的是为了适应技术发展和便于用户开发自己的功能。

本文基于ARM和FPGA的硬件平台,采用策略和机制相分离的设计思想,设计了一种具有高开放性特征的嵌入式数控系统。该数控系统不仅具备了以往大型数控系统的主要功能,还具备了更好的操作性和切割性能,而且在开放性方面优势更为突出,使数控系统应用软件具有可移植性和互换性。

1 基于ARM和FPGA的嵌入式数控系统整体方案
  
基于ARM和FPGA的嵌入式数控系统结构如图1所示。按照模块划分的思想,本文将控制器分为人机交互、插补算法和通信三部分。系统中 ARM采用三星公司推出的16/32位RISC微处理器S3C2440A,它采用了ARM920T内核,核心频率高达400MHz。FPGA采用 Xilinx公司Spartan 3E系列的XC3S250E。
  

基于ARM和FPGA的嵌入式数控系统设计
图1 基于ARM+FPGA的嵌入式数控系统结构

  
2 S3C2440A控制系统
  
ARM作为数控系统的控制核心主要负责对从数据存储器中读取或直接从上位PC或网络获得的零件加工代码和控制信息进行译码、运算、逻辑处理,完成加工数据的粗插补以及人机界面和数据通信。ARM系统是整个数控系统的控制核心,在嵌入式操作系统的管理下,采用分时处理的方式实现整个系统的信息处理和粗插补运算,通过键盘、触摸屏等输入装置输入各种控制指令,对数控系统的实时运行状态通过LCD、指示灯等显示,实现人机友好交互。基于 S3C2440A控制器有各种通信接口,包括RS232、RS485、以太网口、USB等接口模块。通过这些接口实现文件传输和网络控制。
  
嵌入式数控的软件系统总体结构如图2所示。系统的软件结构主要分为两部分:操作系统软件和数控应用软件。由于数控系统是个实时多任务系统,实时性要求很高,为保证各个任务的协调执行,本系统采用了μC/OS-II实时操作系统作为软件平台。
  
基于ARM和FPGA的嵌入式数控系统设计
图2 嵌入式数控的软件系统总体构图

  
要实现该操作系统在S3C2440A微处理器平台上的正常运行,需要修改与处理器类型有关部分的代码,操作系统移植需要完成的工作是改写三个文件,即改写文件0S_CPU.H、0S_CPU_A.ASM和OS_CPU_C.C。其中0S_CPU.H包括了用#define语句定义的,与处理器相关的变数、宏和类型。0S_CPU_A.ASM中定义了几个汇编语言函数,包括中断服务程序的中断向量地址等。如果某些C编译器允许在C语言中直接插入汇编语言语句,就不一定需要,用户可以把所需的汇编语言代码直接放到OS_CPU_C.C文件中。
  
3 ARM和FPGA的接口设计
  
为使系统能够按照预期设计良好工作,首先要从硬件上实现ARM和FPGA之间的可靠通信。本文采用的方案是在FPGA上实现SRAM时序,将FPGA作为一块特殊的内存设备挂接到ARM的内存地址空间。这样在ARM端只需要编写SRAM的驱动程序就可以实现对FPGA端的数据写入和读取。
  
3.1 SRAM时序
  
SRAM时序分为读时序和写时序两种。当CPU对SRAM进行读操作时,首先会在地址线上写入正确的地址信号,接着是对SRAM芯片的片选信号,然后是对芯片的读信号,之后经过一定的振荡期后CPU在数据线上读到稳定的有效数据。
  
当CPU对SRAM进行写操作时,首先会在地址线上写入正确的地址线号,接着是对SRAM芯片的片选信号,然后是对芯片的写信号,在写信号上升沿之前CPU会在数据线上准备好有效数据,以供SRAM芯片在写信号上升沿将数据写入相应的地址单元。
  
3.2 FPGA端SRAM实现
  
ARM和FPGA的通信需要的接口信号有地址线A0-A15、数据线D0-D15、片选信号nCS,读信号nRD和写信号new,每次需要实现16位数据的读写。用Verilog硬件语言描述SRAM时序如下:
基于ARM和FPGA的嵌入式数控系统设计

  
可知只有在片选信号、读信号都拉低而写信号仍为高的情况下,才在data线上输出地址线上对应单元的数值,其他情况下FPGA都将data线置为高阻态,放弃对data线的控制。
  
4 基于FPGA的DDA精插补器设计
  
随着FPGA器件及其开发技术的日臻成熟,采用FPGA实现运动控制的方案显示出巨大的潜力。由于FPGA的设计是并行的、多线程,而且具有在线可编程能力,兼备了速度快和成本低的优点,同时克服了专用处理器灵活性方面的不足。基于FPGA的DDA精插补器相对传统的软件插补具有强大的优势。
  
4.1 数字积分插补算法
  
目前比较成熟的数控插补算法有逐点比较法、最小偏差法和数字积分法等,数字积分法又称数字微分分析器(Digital Differential Analyzer,DDA)。采用该方法进行插补,具有运算速度快、逻辑功能强、脉冲分配均匀等特点,可实现一次、二次甚至高次曲线插补,易于实现多轴联动。
  
数字积分插补算法是将函数的积分运算转换成变量的求和运算。如果所选择的脉冲当量足够小,则用求和运算代替积分所引起的误差可以不超过允许的数值。采用两个寄存器(函数寄存器和累加寄存器)和一个全加器构成数字积分器,将单位周期选得足够小,每单位周期都向累加器累加函数寄存器中的数值,如果累加器溢出,就向外发送脉冲,实时地改变函数寄存器的值,就可以完成步进电机的调速。DDA插补控制器设计的硬件描述语言程序的流程图如图3所示。

基于ARM和FPGA的嵌入式数控系统设计
图3 DDA插补控制器设计的硬件描述语言程序的流程图

  
4.2 数字积分插补的FPGA实现
  
采用有限状态机的设计方法,每个轴的数字积分插补均由一个三状态机的积分累加器完成。本系统的FPGA开发环境为Xilinx公司的 Xil inx ISE,并结合ModelSim仿真软件对整个系统进行了全面的功能验证。如图4所示为DDA插补模块的顶层RTL级原理图,由图5可知DDA插补模块的输入信号为各轴的起始坐标以及时钟信号和启动信号,输出信号为各轴的脉冲信号和方向信号。

基于ARM和FPGA的嵌入式数控系统设计基于ARM和FPGA的嵌入式数控系统设计
图5 DDA插补模块仿真波形

  
运用ModelSim仿真软件对DDA插补模块进行仿真验证。测试数据的起点坐标为(0,0,0)终点坐标为(8,15,11),仿真结果如图5所示,显示系统很好的完成了三轴的脉冲分配。
  
4.3 加减速控制模块
  
加减速控制是数控系统的关键技术之一,也是实现数控系统高实时性的瓶颈。数控系统中,为了保证机床在启动或停止时不产生冲击、失步、超程或振荡,必须对进给电机的脉冲频率或电压进行加减速控制。即当机床加速启动时,保证加在电机上的脉冲频率逐渐增加;而当机床减速停止时,保证加在电机上的脉冲频率逐渐减小。目前,电机加减速的常用控制方法是梯形加减速控制和S形加减速控制。本次设计采用两种控制方案以适应不同工作场合的要求。
  
4.3.1 梯形加减速
  
梯形加减速是指在加减速过程中加速度为常数,速度曲线为梯形的加减速过程。梯形加减速控制算法简单、易于实现,但在加减速过程中加速度曲线不连续会导致驱动机构的振动和冲击。正常情况下梯形加减速运动过程如图6所示分为加速段、匀速段和减速段三个阶段。
  
基于ARM和FPGA的嵌入式数控系统设计
图6 正常情况下梯形加减速运动过程

  
图7所示为ModelSim对梯形加减速模块的仿真结果,可以看到插补器输出的脉冲速度曲线呈现梯形,输出脉冲的频率的大小随速度的变化而变化,实现了电机的梯形调速。
  
基于ARM和FPGA的嵌入式数控系统设计
图7 ModelSim对梯形加减速模块的仿真结果

  
4.3.2 S形加减速
  
S形加减速是指在加减速时,加速度导数为常数,速度曲线为S形曲线的加减速过程。通过控制加速度导数来避免加速度突变,减小加工过程中由于加速度突变引起的机械系统振动。S形曲线速度控制可以得到平滑的速度曲线,但算法复杂,运算时间长。
  
基于ARM和FPGA的嵌入式数控系统设计
图8 S形加减速曲线图

  
S形加减速中加速度相对加速度导数的变化规律相当于直线加减速中速度相对加速度的变化规律。如图8所示为S形曲线加减速的曲线图,图中从上到下依次为速度曲线、加速度曲线以及减速度曲线。从图中可以看出,正常情况下S形加减速分为:加加速段、匀加速段、减加速段、匀速段、加减速段、匀减速段和减减速段七个阶段。加速度连续,调速光滑,不会导致驱动机构的振动和冲击。
  
基于ARM和FPGA的嵌入式数控系统设计
图9 ModelSim对S形加减速模块的仿真结果

  
图9所示为ModelSim对S形加减速模块的仿真结果,可以看到插补器输出的脉冲速度曲线呈现梯形,输出脉冲的频率的大小随速度的变化而变化,实现了电机的S形调速。
  
5 结束语

本文给出了一种基于ARM和FPGA的开放性的嵌入式数控系统,突破了传统的计算机数控系统架构,采用ARM处理器S3C2440A和 FPGA器件XC3S25 0E和μC/OS-II嵌入式实时操作系统组成的数控系统软硬件平台,充分利用了ARM微处理器的高速运算能力与FPGA的快速配置能力,大大减少了系统的外围接口器件,并具有良好的稳定性、模块化、可扩展性、可移植性等特点,有利于实现数控系统的开放化和网络化,有效地降低了系统成本,适合我国数控系统发展的需要,具有广阔的应用前景。

来源: 电子产品世界

围观 520

页面

订阅 RSS - 嵌入式