引言
DSP数字信号处理器DSP数字信号处理器是一个实时处理信号的微处理器,分为定点和浮点两种基本类型,它们之间差异在于浮点DSP比定点DSP具有更强大的计算能力和更大范围的动态。浮点DSP内部设有专门支持浮点运算的硬件单元,对浮点格式的数据可以直接通过代码加入硬件运算中,因此运算速度很高。而定点DSP没有定点运算单元,它对浮点格式的实数必须通过软件才能实现,这样就增加了指令代码,间接地使得定点DSP运算速度低于浮点DSP,典型的浮点处理器,如TI公司的C6000系列,几乎所有的嵌入式微控制器都为定点处理器,如TI公司的C2000系列。因为浮点DSP的价格更加昂贵,因此定点DSP仍然有其巨大的优势。但是任何算法都需要进行浮点运算,因此如何提高在定点DSP上进行的浮点运算的速度和,就成为了用户开发时必须要考虑的关键问题。TI公司专门为定点处理器TMS320C2000系列提供的IQmath库为解决上述问题提供了良好的实现方法。
数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。
1 数的定标:Q格式
有符号数的表示法,机器数(出现在电脑的二进位数值)有3个特点, 无符号或符号转换成数值来表示,没有 +10101这样的资料,而是以010101来表示,只表示单纯的整数或小数,小数点的位置预设在一定的位置而较少变动,它的长度受到电脑硬体的限制,而不能无限增长。Q格式,就是将一个小数放大若干倍后,用整数来表示小数
定点DSP不能直接处理小数,编程时处理小数有3种方法:
①把变量定义成float类型。该方法编程量,但编译出来的代码。
②把整数变量放大来表示小数。这是许多开发定点DSP的程序员经常使用的方法,但程序不具有可移植性。
③采用整数定标的方法来确定小数,即采用Q格式来表示小数。对于定点处理器而言,不管定义哪种类型的数据终都采用整型数据进行具体的运算。
整数定标的实质就是通过确定小数点位于哪一位,从而确定小数的,通常用Q格式表示。一个32位有符号定点数的Q格式如下:
其中,S是符号位,I是整数部分,f是小数部分。定点数的大小按下式计算:
比如Q15定点数的小数点位于第15位的右侧,小数0.25用Q15表示则为2000H。这样很简单地用一个整数格式表示了一个小数,对于定点DSP来说处理小数就与处理整数完全相同了。需要注意的是,采用Q格式数据进行算法设计的时候必须考虑溢出,各种Q格式数据表示的范围和参考文献。
2 TMS320F2812定点DSP处理器
TMS320F2812作为TI公司C2000系列DSP典型产品,一款用于控制的高性能、多功能、高性价比的32位定点DSP芯片。定点处理器TMS320F2812具有很高的性价比,广泛应用于工业控制,特别是应用于处理速度、处理方面要求较高的领域。TMS320F2812整合了Flash存储器、A/D转换器、事件管理器、QEP以及多种通信模块,具有强大的控制和信号处理能力,便于用户开发高性能的数字控制系统。特别是TI公司为C28xx内核专门设计的IQmath库能够实现在定点DSP处理器上进行的浮点运算和复杂的控制算法。另外,该器件还有3个独立的32位CPU定时器,以及多达56个独立编程的GPIO引脚,可外扩大于1M×16位程序和数据存储器。TMS320F2812采用哈佛总线结构,具有密码保护机制,可进行双16×16乘加和32×32乘加操作,因而可兼顾控制和快速运算的双重功能
库函数;顾名思义是把函数放到库里是别人把一些常用到的函数编完放到一个文件里,供别人用。别人用的时候把它所在的文件名用#include<>加到里面就可以了。一般是放到lib文件里的,一般是指编译器提供的可在c源程序中调用的函数。可分为两类,一类是c语言标准规定的库函数,一类是编译器特定的库函数。
IQmath库是高度优化和具有高的数学函数库集合。IQmath库里面包含的函数都是采用Q格式定点数作为输入/输出,允许程序设计人员在定点TMS320F281xx处理器上进行浮点算法设计,从而提高运算速度。
3.1 IQmath库组成
IQmath库可以在c/C++程序设计中使用,它包含4个部分:
◆IQmath头文件IQmathLib.h
◆包含所有函数和数值表的目标文件IQmath.lib
◆命令连接文件IQmath.cmd
◆调试用的GEL文件IQmath.gel
3.2 IQmath库函数
IQmath库中主要包括以下函数(用户在程序设计开发时可以直接调用):
◆格式转换函数IQ()、IQN()、IQtoF()、IQtoIQN()等
◆算术运算函数IQmpy()、IQp()等
◆三角运算函数IQsin()、IQcos()、IQatan2()等
IQmath库中的各个函数及其含义参考文献。
3.3 IQmath库函数应用
下面说明如何在一个C程序中使用IQmath库。首先要安装IQmath库,可以从TI公司的网站https://www.dspvillage.ti.com得到。然后新建一个工程,将IQmath.lib,IQmath.cmd添加到工程。同时,还要把IQmath.gel添加到工程中,因为IQ变量的变换和调整都是通过GEL函数来实现的。按以上步骤设置完以后,就可以在C语言程序中利用IQmath库里面的函数了。需要注意的是,IQmath.cmd必须包含以下内容:
4 PARK变换浮点算法的定点数实现
浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法。
定点数是计算机中采用的一种数的表示方法。参与运算的数的小数点位置固定不变。
在现代交流电机控制领域,空间矢量控制法(SVPWM)使得交流电机的控制策略能像直流电机的控制策略一样,可以实现转矩电流和磁通的单独控制,因此成为主流的交流伺服驱动控制策略。利用DSP强大的计算能力和信号处理能力,SVPWM的电流和磁通控制均可以采用软件实现。TMS320F2812处理器专门为电机控制设有两个事件管理器(EVA/EVB)和编码器电路(QEP),因此成为运动控制的选择之一。图1是采用TMS320F2812实现SVPWM控制算法的系统结构框图。
从图1可以看出,PARK变换是SVPWM控制算法中为复杂的变换之一,是一个旋转矢量is从静止二相坐标系(α-β)变换到同步旋转的二相坐标系(d-q)。PARK变换坐标映射如图2所示。
由图2可以得到PARK变换的方程式:
因为PARK变换是一个浮点算法,如果在定点处理器TMS320F2812上采用浮点运算来实现,代价很高。采用浮点类型进行编程将产生十分庞大的代码,而且在循环计算中势必影响系统的效率和性能。采用IQmath库可以将浮点算法转换为定点数算法,这样运算速度可以明显提高,这对实时性要求很好的运动控制系统的设计十分有效。利用IQmath库实现PARK变换的程序段如下:
图3是利用Embedded Target for TI C2000 DSP集成开发工具对IQmath库编写的SVPWM程序计算PWM占空比的波形图。
5 结论
利用IQmath库可以在32位定点处理器TMS320F2812上实现浮点算法与定点算法之间的无缝连接,能够极大地增强定点DSP的运算能力;在不牺牲时间周期的情况下可以实现高计算,能够快速地完成对浮点算法的转换、植入和执行;还可以根据应用系统不同要求相应地调整运算,比直接采用ANSI C语言相比效率更高。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。