基于C编程的交流调速系统的实现【关键词】交流调速系统,TMS320F240,C语言
【论文摘要】讨论了用C语言实现基于TMS320F240的交流调速系统编程的有关问题,重点介绍了用C语言 实 现系统软件设计的方法。实验结果证明了用C代码实现交流调速系统实时控制的可行性。?
1 引言?
TMS320F240 DSP是TI公司推出的专为数字电机控制而设计的高速专用微处理器。它的高速运 算能力使得它能够运行复杂控制算法,专为电机控制而设计的芯片结构大大简化了控制系统 的硬件结构和成本[1]。由于TMS320F240的诸多优点,它在交流调整系统中的应用 越来越广泛。?
TI的DSP带有C编译器和其它相关的开发软件,使得用户可以直接利用C语言进行开发,同时,TI的DSP所带的C编译器带有一个功能齐全的优化编译器,它使用一种先进的优化扫描技术 来生成高效简洁的C代码,面向TMS320F240的专用优化则充分利用了TMS320F240独有的结构 特点[2]。TI的DSP所带的C编译器还提供了一些其它的措施用以提高C代码的执行效率,如函数 嵌入。而对于C语言不容易实现的对硬件的访问,可以用汇编对这些硬件进行访问,以达到最佳地利用DSP芯片软硬件资源的目的。
?
2 混合编程的实现方法?
2.1 使用独立的汇编代码模块?
这是一种最通用的方法。如果遵循函数调用规范和寄存器规范,C语言和汇编语言函数的接 口是很简单的。C代码可以访问汇编语言定义的变量和调用汇编语言定义的函数,同样,汇编代码也可以访问C语言定义的变量和调用C语言定义的函数。在本文所讨论的交流调速系统中,独立的汇编代码模块用于实现系统硬件的初始化。C模块完成各变量的初始化,主程序的编写,PWM下溢中断服务程序和串行通讯中断服务程序的编写。在将汇编代码模块和C模块分别编译生成目标文件之后,将它们连接生成可执行文件,连接程序同时将可执行的输出模 块的入口设置在cint0。cint0函数在运行支持库函数中,它 通过调用main函数开始C程序。
?
2.2 使用asm语句
?
TM320F240的C编译器允许在编译输出的汇编语言中嵌入TMS320F240的汇编指令。这一功能是 通过asm语句来实现的,它是对C语言的扩展。asm语句在语法上与调用一个带有一个字符串 常量作为参数名为asm的函数相似。如asm(“assembler text”)。编译器将直接拷贝字符串参数到输出文件,双引号内为汇编语句。所有的字符串转义码的意义保持不变。?
2.3 在C代码中使用汇编变量?
有时,C语言程序需要访问在汇编语言中定义的变量。?
访问.bss中定义的未被初始化的变量的步骤:?
(1)使用.bss定义变量。?
(2)使用.global将变量声明为外部变量。?
(3)在变量名前加下划线。?
(4)在C语言中将变量声明为外部变量,用通常的方法访问它。?
2.4 直接修改C代码编译后生成的汇编代码?
用户可以通过编译源文件然后在汇编前修改输出文件来监视和改变汇编语言输出。 此时,C 交叉列表文件显得格外有用。C交叉列表文件是编译器和C源文件产生的一个扩展的汇编语言 源文件,它将C语言语句嵌入到编译输出的汇编语言中,以起到注释的作用。如果不用它而 直接查看编译输出的汇编语言,很难将汇编语言和原来的C代码对应起来。
?
3 优化器和函数嵌入
?
优化器是可选的,它介于C编译器的文法分析器和代码生成器之间执行。优化器可以提高程 序的执行速度并减少C语言程序的大小。优化程序读入中间文件,根据所选的优化级别对它 进行优化之后,产生一个中间文件。此中间文件的格式和原来的中间文件没有什么不同,只 是它能够使代码生成程序生成更为高效的代码。?
函数嵌入是指当调用一个嵌入式函数时,函数的代码被插入到调用处。它可以省去函数调用 的额外开销;而且编译程序就不用再做与环境中的代码相关的优化。?
4 混合编程中断的处理?
交流调速系统结构如图1所示。软件设计基于两个模块:初始化模块和运行模块。前者只在 开始的时候执行1次,它包括硬件的初始化和变量的初始化;后者包括多种中断服务程序, 如图2所示。
SCI中断在中断矢量表中位于INT1,它包括SCI接受中断和SCI发送中断。当产生SCI中断时, 可以通过它们的偏移量来加以区分,然后执行相应的接受和发送任务。?
PWM下溢中断利用Timer1的下溢中断事件产生定时中断,它在中断矢量表中位于INT2。PWM下 溢中断服务程序内完成电流采样、坐标变换、速度测量、空间矢量的计算等任务,如图3所 示。在此系统中按转子磁场定向,并采用电流给定计算转差频率[3]。?
用C代码编写的中断服务程序如何中断和返回,当C环境被初始化之后,启动程序并不会允许 或关闭中断,如果用户的系统使用中断,用户就必须自己处理所有和中断的允许和屏蔽有关 的事情。<![endif]>
C函数的中断可以通过使用以下的协议得到直接的处理:?
(1) 任何名为cint<d>的函数都被视为中断服务程序,其中d是一个0—9的数字。c int0保留用于系统复位中断。
?
(2)用户也可以使用中断关键字,interrupt。?
使用这些协议定义了一个中断后。当编译器遇到这些服务程序中的一个,它会产生代码以允 许函数从中断捕获中激活。这一方法提供了比标准C的信号机制更多的功能。?
将一个程序和某一个中断关联时,必须在相应的中断矢量入口处放置一条跳转指令。采用.s ect汇编指令建立一个简单的跳转指令表就可以实现这一功能。?
在处理C函数中断的时候,注意:?
(1)如果SP(ARI)指向的字被编译器使用,必须保存它。?
(2)中断服务程序必须是void型,并且不能有参数。?
(3)中断的屏蔽和使能必须由程序员设置,设置的方法是用嵌入汇编语句的方法修改IMR寄存器,这种修改不会破坏C环境和C指针。?
(4)在汇编语言中,必须在中断服务程序名前加下划线。
?
5 定点DSP实现浮点运算?
使用C语言编写PWM下溢中断时需要解决的一个问题就是如何用定点DSP实现浮点运算,因为 矢量控制中的各种坐标变换、三角函数的计算以及空间矢量的产生都涉及到小数运算。?
对于DSP芯片而言,参与数值运算的数都是16位的整型数。要处理各种小数,最关键的就是 数的定标,即确定一个数的小数点处于16位中的哪一位。通过设定小数点在16位数中的不同 位置,就可以表示不同大小和不同精度的小数了。?
如果参与运算的数已知,定标值比较好确定,但PWM下溢中断中参与运算的数都是变量,定 标值的确定不是太容易的事了。而且在定标值确定之后,编写实现浮点数运算的汇编语言代 码是一件很枯燥的事。然而,如果使用F240的C编译器,以上的工作都由C编译器自动完成, 而且计算的精度很高。
?
6 实验结果?
本交流调速系统以TMS320F240为核心以实现对电动机的单片控制。逆变桥采用集驱动、检测 和保护等于一体的6单元智能功率模块(IPM)。智能功率模块(IPM)是先进的混合集成功率器 件,由高速低耗的IGBT芯片和优化的门极驱动及保护电路构成。图4~7中开关频率为4kHz, 电机空载时,利用TMS320F240的可编程串行口获得的转速分别为12r/min和600r/min的电动 机定子电流波形和同步旋转坐标下q轴上的定子电流波形。?
实验结果表明,用C语言实现交流调速系统是可行的,获得了满意的效果,提高了编程效率。利用TMS320F240进行电机控制可以完成复杂 的控制算法,进一步提高交流调整系统的性能。
参考文献:
?
[1] TMS320F/C240 DSP Controllers Reference Guide[J].Texas Instruments,1999.
[2] TMS320C2X/C5X Optimizing C Compiler User's Guide[J].Texas Instruments,1999.
[3]陈伯时,陈敏逊.交流调速系统[M].北京:机械工业出版社,1999. |
|