Only U is in my heart!
I will be right here waiting for you.

基于DSP28335的永磁同步电机调速系统设计(一)

onlyisu阅读(2456)

本控制系统的设计是为了实现基于TMS320F28335的永磁同步电动机的调速系统,并把它引用到全电动注塑机当中。本系统使用SVPWM的控制方法,通过采样电机电流和旋转变压器的位置信息,实现速度、电流双闭环控制。通过TMS320F28335的硬件浮点处理核心,实现应用于永磁同步电机的浮点算法,去取代过去的定点算法,提高代码效率。

1.1 设计背景及目的

    本永磁同步电机调速系统是全电动注塑机的其中一个应用部分。全电动注塑机凭借着其节约能源、清洁、噪声少、速度控制效果好、精度高、可重复性高、成本低等众多优点,成为了当下高端注塑机发展的一个方向。

    全电动注塑机的所有运动机构都采用交流伺服电动机驱动,一个稳定高效的永磁同步电动机驱动方案成为了全电动注塑机性能的一个总要部分。本次设计以适用于全电动注塑机的永磁同步电动机控制系统为目标进行设计,采用TI公司的TMS320F28335作为控制核心。凭借TMS320F28335高速的运算能力,适用于电动机控制的各种外设,以及TMS320F283XX特有的硬件浮点运算能力,进行永磁同步电动机的调速控制系统的设计。

1.2 设计所要解决的问题

    本次设计希望解决以下问题:

    (1)完成TMS320F28335的永磁同步电动机控制板的设计。本系统自主设计系统控制板,以TMSF28335作为主控芯片,采用TI公司提供的丰富的软件资源进行电机控制算法的设计。

    (2)完成各外设功能的设计及实现。本次系统应用了PWM、SPI、ADC、SCI等外设以及若干通用I/O口,每一部分都完成各自的功能与任务。本次设计必须在每一个模块功能的完整实现后,才能真正整合成一个完整适用的控制系统,以实现永磁同步电动机调速控制的功能。

    (3)实现基于TMS320F28335的定点算法到浮点算法的转换。由于TI公司提供的电机控制的各种库函数大部分是由原来的TMS320F28XX定点芯片转换过来的函数,函数主要还是使用IQ库进行运算。为了发挥TMS320F28335强大的硬件浮点运算功能,提高代码的效率,必须在设计出浮点的控制方法。

    (4)实现调速系统的PID闭环控制。PID控制是经典控制当中的应用最广,最有效的控制方法之一。永磁同步电动机的调速系统的速度、电流双闭环的PID参数的调试和确定是系统稳定运行的一个关键。

    (5)提高调速系统的稳定性和鲁棒性。在完成PID控制的基础上根据不同速度、负载智能改变PID参数的控制方法。

    (6)与PC通信进行电机的控制。通过SCI与PC机进行通信控制,实现PC机发送命令控制运动。

C55x C语言编程之存储器模式

onlyisu阅读(6045)

C编译器将存储器当作一个由代码子模块和数据子模块组成的线性模块。每个由C程序生成的代码子模块或数据子模块被放到各自的连续存储空间中。编译器认为目标存储器的全部24位地址都有效。

编译器支持两种存储器模型:小存储模式和大存储器模式。两种存储模式的数据在存储器中的放置和访问不同。

1.小存储器模式(默认模式)

使用小存储器模式将得到比使用大存储模式时更少的代码和数据。但是,程序必须满足一定的大小和存储放置限制。

在小存储器模式中,在单页(64KB)存储器内的以下段必须都分配合适:

.bss和.data段(所有静态和全局数据)。

.stack和sysstack段(第一和第二系统堆栈)。

.sysmem段(动态存储空间)。

.const段。

而对.text段(代码)、.switch段(switch语句)和.cinit段(变量初始化)的大小和位置没有限制。

小模式下编译器使用16位数据指针来访问数据。XARn寄存器的高7位用来设置指向包含.bss段的存储页。在程序执行过程中它们仍指向原来那些值。

2.大存储器模式

大存储器模式支持不严格的数据放置。用-ml shell选项就可以应用该模式。

在大存储器模式下,数据指针为23位,在存储器中占2字空间。.stack和.sysstack段必须在同一页上。

在大存储器模式下编译代码时,必须和rts55x.lib运行时间库链接。应用程序中的所有文件都必须使用相同的存储器模式。

链接器不允许同时存在大存储器模式和小存储器模式。

标准ANSIC语言模式的改变(-pk、-pr和-ps选项)

onlyisu阅读(3397)

-pk、-pr和-ps选项可以用来规定C编译器解释源代码。编译源代码有如下的模式:

  • Normal ANSI模式
  • K&R C模式
  • 宽松ANSI模式
  • 严格ANSI模式

默认的模式是Normal ANSI模式。在此模式下,大多数违反ANSI标准的语句都报错。违反严格ANSI标准的语句给出警告。语言扩展的语句都是允许的。

1.兼容K&R C(-pk选项)

主要用来简化用C55x ANSI C编译器对以前C标准代码的编译过程。编译器有一个K&R  (–pk)选项,用来改变语言的段规则来兼容老版本的代码。总体说来,–pk选项使编译要求比ANSI C更加容易达到。同时,该选项支持ANSI C语言的新功能,如函数原型、枚举、初始化和预处理器结构。

2.严格ANSI模式和宽松ANSI模式(–ps和–pr选项)

使用-ps选项可以使编译器工作在严格ANSI模式。这种模式下,会在违反ANSI规则的时候报错,同时可能影响程序严格形式的语言扩展不可用。这些语言扩展包括inline和asm关键字。

使用-pr选项可以使编译器忽略违反严格的ANSI标准的情况下而不发送警告消息(普通ANSI模式中会发送)或错误消息(严格ANSI模式中会发送)。在宽松ANSI模式中,编译接受对ANSI C标准的扩展,甚至是和ANSI C冲突的时候。

C55x C语言基本特性之Pragma指令

onlyisu阅读(2613)

Pragma指令告诉编译器的预处理器如何处理函数。C55x C编译器支持如下pragma指令:

CODE_SECTION

C54X_CALL

C54X_FAR_CALL

DATA_ALIGN

DATA_SECTION

FUNC_CANNOT_INLINE

FUNC_EXT_CALLED

FUNC_IS_PURE

FUNC_IS_SYSTEM

FUNC_NEVER_RETURNS

FUNC_NO_GLOBAL_ASG

FUNC_NO_IND_ASG

MUST_ITERATE

UNROLL

必须在函数体外确定pragma,且必须出现在任何声明、定义或对函数和符号引用之前。否则,编译器会输出警告。

下面简单介绍CODE_SECTION和DATA_SECTION的用法。

CODE_SECTION用于把代码配置到命名的代码段,语法为:

#pragma CODE_SECTION(func_name,”section_name”)

其中,func_name是C函数的名称,它将代码配置到由section_name定义的程序段中。

DATA_SECTION用于把数据配置到命名的数据段,语法为:

#pragma DATA_SECTION(var_name,”section_name”)

其中,var_name是包含在C函数内的变量名称,它将数据配置到由section_name定义的数据段中。

关于Pragma指令的详细使用方法,请参阅文献[SPRU281C,TMS320C55x Optimizing C/C++ Compiler User’s Guide (Rev. F)]。

C55x C语言基本特性之asm指令

onlyisu阅读(2904)

55x C编译器可以直接将C55x汇编语言指令嵌入到编译器的汇编语言输出中,这就是C语言的扩展功能—asm指令。这个语句提供了C不能提供的对硬件的访问功能。这个语句就好像是对叫做asm的函数的调用。asm指令格式如下:

asm (“assembler text”);

编译器直接把命令中的字符串复制到输出文件中。汇编器文档必须包括到两个引用中。所有常用字符串转义符保留原来的定义。例如,可以插入包含引用的string指令:

asm(“STR: .string\“abc\” ”);

插入的代码必须是合法的汇编语言指令。像其它汇编语言指令一样,包含引用的代码行必须用标号、空格、星号、分号开头。编译器不检查字符串。如果有错,汇编器会将其检测出来。

使用asm指令有个问题:它容易破坏C环境,因为C编译器在编译嵌入了汇编语言的C程序时并不检查或分析嵌入的汇编语句。当使用带asm指令的优化器时必须小心。虽然优化器不会移除asm指令,但它可以重新改变周围代码顺序并可能引起不可预知的结果。

C55x C语言基本特性之寄存器变量和参数

onlyisu阅读(2664)

寄存器变量就是用register关键字声明的关键字。根据是否使用优化器,C编译器对寄存器变量采用不同的处理方式。

当使用优化器进行编译时,编译器忽略任何寄存器声明,通过一种能够最有效地使用寄存器的代价算法,把寄存器分配给变量和临时量。

当不使用优化器进行编译时,编译器将使用register关键字的变量分配到寄存器中。

编译器会尽量分配好所声明的寄存器变量。如果编译器运行超出了合适的寄存器,它将通过移动寄存器内容到存储器来释放寄存器。如果定义了太多的寄存器变量,则会限制编译器用来存放临时表达式结果的寄存器数目。这个限制会引起过量的从寄存器到存储器的移动动作。

整型、浮点型和指针类型对象都可以声明为寄存器变量。而其它类型对象不行。

寄存器存储类对参数和局部变量很有用。一般来说,在一个函数中,某些参数会被复制到堆栈的某个地址,在函数体中被引用。一个寄存器参数会被复制到一个寄存器,而不是堆栈。这种做法加速了函数内参数的寻址速度。

C55x C语言基本特性之关键字

onlyisu阅读(2682)

1. const

C55x C编译器支持标准C语言的const关键字。将这个关键字使用到对任意变量或数组的定义上可以确保它们的值不改变。如果定义一个对象为const,那么const段就会为该对象分配存储空间。使用const关键字可以定义大常数表并将它们分配到系统ROM中。

2. ioport

C55x C编译器对标准C语言进行了扩展,增加了ioport关键字来支持I/O寻址模式。

ioport类型限定词可以和标准类型(数组、结构体、共用体和枚举)一起使用。它也可以和const及volatile一起使用。当和数组一起使用时,ioport限制的是数组单元而非数组类型本身。ioport可以单独使用,这种情况下int限定词就是默认的。

ioport类型限定词只能用于全局或静态变量。局部变量不能用ioport限制,除非变量是个指针。

例:ioport关键字的使用。

ioport int k  ; /*正确* /

void foo(void)

{

ioport int i  ; /*错误* /

ioport int *j ; /*正确* /

}

3. interrupt

C55x C编译器对标准C语言进行了扩展,增加了interrupt关键字,来指定某个函数为中断函数。

4. onchip

Onchip关键字声明一个特殊指针,该指针所指向的数据可用作双MAC指令的操作数。在链接时这些数据必须被链接到DSP片上存储器,否则会导致总线错误。Onchip关键字的使用例子如下:

onchip int x[100]; /* 数组声明 */

onchip int *p; /* 指针声明 */

5. volatile

在任何情况下,优化器会通过分析数据流来避免存储器访问。如果程序依靠存储器访问,则必须使用volatile关键字来指明这些访问。编译器将不会优化任何对volatile变量的引用。

C55x C语言基本特性之数据类型

onlyisu阅读(2290)

C55x C语言支持的数据类型有17种,具体的可以查看技术手册。

在定义各种数据类型时,应注意如下规则:

(1)避免设int和long为相同大小。

(2)对定点算法(特别是是乘法)尽量使用int数据类型。用long类型作乘法操作数会导致调用运行时间库(run-time library)的程序。

(3)使用int或unsigned int类型而非long类型来循环计数。虽然C55x有针对有效的硬件循环的机制,但硬件循环计数只有16位宽。

(4)避免设char为8位或long为64位。

(5)当所写代码用于多DSP目标系统中时,宜定义genetic类型。比如,一个人可以对16位整数和32位整数分别使用int16和int32。当对C55x DSP进行编译时,这些类型会分别被定义成int和long。

(6)一般来说,最好使用int类型作循环指数变量和其它位数不太重要时的整型变量,因为int是对目标系统操作最高效的整数类型而不管芯片结构如何。

C55x外设配置

onlyisu阅读(2109)

C55x的片内外设主要有:

模数转换器(ADC):用于采集电压、面板旋钮的输入值,转换为数字量。

可编程数字锁相环时钟发生器(DPLL):VC5509的时钟频率可达200MHz,最小机器周期为5ns。

指令高速缓存(I-Cache):1个可配置的24KB的存储器,可最小化对外部存储区的访问。

外部存储器接口(EMIF):可以实现与各种存储器件如异步SRAM、异步EPROM、同步DARAM和同步突发SRAM的无缝连接。

直接存储器访问控制器(DMA):在无CPU涉入的情况下,允许数据在内部存储器和外部存储器、增强型主机接口(EHPI) 之间传输。

多通道串行缓冲口(McBSP):为全双工串口,VC5509设有3个McBSP。

增强型主机接口(EHPI):为16位并行接口,用于提供主处理器对DSP上的内部存储器的访问,可被配置成复用或非复用形式。

2个16位的通用定时/计数器。

8个可配置的通用I/O引脚(GPIO)。

实时时钟(Real Time Clock,RTC):提供一个时间参考,并能产生基于时间的报警来中断DSP。

看门狗定时器(Watchdog Timer):可以在软件陷入循环又没有受控退出的情况下,防止系统死锁。

USB:目前VC5506、VC5507、VC5509各提供了1个USB接口。

C55x存储器配置

onlyisu阅读(2481)

C55x采用统一的存储空间和I/O空间。C55x的片内存储空间共有352KB(176K字),外部存储空间共有8MB。存储区支持的存储器类型有异步SRAM、异步EPROM、同步DRAM和同步突发SRAM。C55x的I/O空间与程序/地址空间分开。I/O空间的字地址为16位,能访问64K字地址。当CPU读写I/O空间时,在16位地址前补0来扩展成24位地址。

wps_clip_image-16401

TMS320VC5509A框图

大前端WP主题 更专业 更方便

联系我们联系我们