当前位置:首页 > 电源 > 数字电源
[导读]引言 开关磁阻电机(Switched Reluctance Motor,SRM)的控制对实时性的要求很高,它需要不断地判断其转子瞬时位置、相电流等信息,进而控制SRM换相,实现电机运转。而作为SRM的控制核心,不仅要实现上述SRM基本控

引言
    开关磁阻电机(Switched Reluctance Motor,SRM)的控制对实时性的要求很高,它需要不断地判断其转子瞬时位置、相电流等信息,进而控制SRM换相,实现电机运转。而作为SRM的控制核心,不仅要实现上述SRM基本控制功能,而且要实现各种控制策略(包括电流斩波控制、电压PWM控制、角度位置控制),甚至是很复杂的SRM优化算法的应用。因此,SRM的控制需要一个性能优越的控制核心。
    TI公司推出的TMS320F2812是一款性能非常优越的数字信号处理器(DSP),最高工作时钟频率可达150MHz。其外设功能十分强大,存储资源也很丰富:芯片内部集成了18K SARAM(M0、M1各1K,L0、L1各4K,H0为8K),Flash为128K;且预留了5个扩展空间,方便用户进行功能扩展。这就为TMS320F2812运行方式的多样化提供了条件,同时也是选其作为SRM控制核心的原因。

1 TMS320F2812三种运行方式的实现
    TMS320F2812代码的开发环境为CCS,其工程一般由头文件、源文件、库文件以及连接命令文件(CMD)四种文件组成。头文件采用位域结构体进行定义,方便用户操作相关寄存器;源文件保存用户开发时编写的软件代码;库文件为系统文件,无法修改;CMD文件则是用来分配存储空间的,它告诉链接器将编译器生成的段链接到哪。所以,要想实现代码运行方式的多样化,必须很好地了解CMD文件。
    CMD文件包括MEMORY和SECTIONS。其中,MEMORY的作用是指示存储空间的起始位置和长度,而SECTIONS的作用是将各种初始化段和非初始化段分配到相应的存储空间。二者都是由编译器自己编译、生成及归类的。初始化段包括所有的代码、常量及初始化表格等;非初始化段由变量、堆栈等组成。用户也可以通过“#pragma DATA_SECTION”和“#pragma CODE_SECTION”指令,将自己定义的数据段或代码段分配到对应的数据空间或程序空间,完成映射。
1.1 RAM调试运行
    RAM调试运行指的是将用户编写的代码下载(load)到片内RAM,并在RAM上直接运行的一种运行方式。这种方式实际上就是通常所说的在线仿真。TMS320F2812通过仿真器与主机相连,主机能够在线调试程序,例如启动、停止、单步运行、设置断点等。
    RAM调试运行方式实现简单,其程序流程为:code_start-> wd_disable-> c_int00-> main()。 code_start和wd_disable的程序包含于DSP281x_CodeStartBranch.asm中,具体程序如下:
[!--empirenews.page--]
   
    段生成完毕,还需要在CMD文件中将其映射到RAMH0上,即所谓的H0启动模式。之后程序就会照流程直接在RAMH0上运行程序,实现RAM调试运行的方式。

1.2 Flash直接运行
    Flash直接运行指的是将用户编写的代码烧写到Flash,并在Flash初始化完成后,用户代码运行于Flash上的一种运行方式。
    与RAM调试运行相比,Flash直接运行的程序流程多了一个Memory_copy的环节,即code_start-> wd_disable-> c_int00-> main()-> Memory_copy。这是因为要想在Flash上直接运行程序,就需要配置好Flash控制寄存器(FACTIVEWAIT、FBANKWAIT等)。但这些寄存器是不能在Flash上直接配置的,所以只能将包含这些配置语句的Flash初始化函数InitFlash()搬运到RAM中运行。
    InitFlash()的搬运是通过指令“#pragma CODE_SECTION(InitFlash,“ramfunes”)”和CMD文件配置实现的。前者将函数InitFlash()映射到段ramfuncs,后者在SECTIONS中作如下配置:
    ramfuncs:LOAD=FLASH,PAGE=0
         RUN=RAML0,PAGE=0
         LOAD_START(_RamfuncsLoadStart),
    LOAD_END(_RamfuncsLoadEnd),
         RUN_START(_RamfuncsRunStart)
    其中,RamfuncsLoadStart等为已定义好的3个外部全局变量。这样配置后,只需要在主程序main()中先调用MemCopy(&Ram-funcsLoad Start,&Ramfuncs LoadEnd,&Ram funcsRunStart)将已经烧写到Flash中的初始化函数InitFlash()代码全部复制到以Ram-funcsRun
Start开头的RAM中,再调用函数InitFlash()就实现了InitFlash()的搬运。
    最后需要注意的一点就是,给codestart段分配的BEGIN段需要映射到以0x3F7FF6开头的一段Flash上,用于Flash启动模式,而不再是在RAM上。如此配置之后,其他用户代码就可以在Flash上正常运行了。[!--empirenews.page--]
1.3 Flash到RAM全搬运运行
    Flash直接运行归根到底就是实现了一个函数从Flash到RAM的搬运,而Flash到RAM的全搬运运行就是将所有初始化段全部搬运到RAM的一种运行方式。因此,其程序流程也与Flash直接运行类似,即code_start-> wd_disable-> copy_sections-> c_int00-> main()。与Memory_ copy不一样的是,copy_sections搬运的是由编译器编译生成的初始化段(.text、.cinit、.pinit等),而不是某一个函数了。所以,不能把该段放到C语言环境建立之后,而应在屏蔽看门狗后,否则程序无法运行。而且,搬运代码也只能用汇编语言编写,具体程序在文件DSP28 xx_SectionCopy.asm中实现,以.text段的搬运为例:

    代码把烧写地址和运行地址分别存储到XAR6和XAR7寄存器后,并将该段大小存入累加器ACC,通过判断累加器ACC是否为零来完成某个段的复制。copysections段直接分配到Flash地址空间。而被搬运的.text段在CMD文件中的配置则与Flash直接运行方式的ramfuncs段的配置类似,.text段烧写到Flash空间,复制到RAM后再运行。
    另外,DSP281x_CodeStartBranch.asm中的.ref_c_int00应修改为.ref copy_sections,同时将wd_disable映射到wddisable段,并分配到Flash地址空间。

2 SRM控制应用研究
    TM8320F2812的三种运行方式下载与运行存储介质的不同,使得三种运行方式的特点不尽相同,各有利弊,适合于不同情况下SRM控制的程序调试。
    RAM调试运行代码下载到RAM,并采用H0启动模式,程序直接在RAM上运行,运行速度快,可以正常地运行于150MHz的系统时钟下。而且,主机通过仿真器与TMS320F2812相连,能够在线调试程序,例如启动、停止、单步运行、设置断点等等。在线调试功能对于刚开始的代码编写和修改是非常有用的,但RAM调试运行受限于RAM空间的大小,无法运行很大的程序;同时,必须使仿真器与主机相连,否则无法运行程序。RAM掉电代码消失的特点更是限制了RAM调试运行方式在实际中的应用。因此RAM调试运行适合于初期SRM控制的程序调试。此时,SRM控制的母线电压值不是很高,程序代码不是很大,同时可以很方便地观察一些变量的变化,方便记录分析。
    当SRM控制的母线电压值提升上来(220 V以上)后,程序越来越大,设计也越趋于完善,不可能一直使用仿真器进行调试,将程序下载到Flash就成为了唯一的选择。Flash直接运行代码烧写到Flash中,采用Flash启动模式,程序最终在Flash上运行。128K的地址空间能够满足大程序的运行,而且烧写到Flash的代码掉电后不会消失,也不需要再连接仿真器,使得TMS320F2812能够很好完成实际应用。但Flash运行速度慢,对运行时间要求苛刻的程序如直接在Flash上运行,往往不能满足要求,使得SRM工作性能下降。
    Flash到RAM全搬运运行综合了二者的优点,代码烧写到Flash中,在C语言环境建立之前先将所有初始化相关段搬运到RAM中再运行,既实现了代码的掉电不消失,又保证了代码的全速运行。唯一的缺点就是受限于RAM空间的大小,不能运行太大的程序,否则可能溢出。
    为了简单验证3种运行方式的不同,本文利用了TMS320F2812的32位CPU定时器Cputimer0,因为该定时器工作于150 MHz,可以更好地看出各种运行方式的不同。Cputimer0产生40 kHz高速中断,在中断服务程序中翻转某GPIO口电平,观测其波形,频率应为20kHz。代码在RAM中运行正常,频率为20 kHz;而在Flash中运行要慢一点,为19.97kHz。而且程序越大,这种限制也就越明显。

3 结论
    本文详细地介绍了TMS320F2812的3种运行方式的实现方法,对它们运行的特点进行了分析,并作了简单的实验验证。3种运行方式各有利弊,在实际SRM控制应用中,应该充分地理解它们各自的特点,选取最适合的方式更快、更好地完成实际应用。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭