This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

【活动结束】别等了! 快来参与!!! 免费工具等你拿!

Other Parts Discussed in Thread: TMS320F2812, TMS320F28335, ADS805, CONTROLSUITE, SPRC087, CCSTUDIO, ULN2003A, TMS320F2808, LAUNCHXL-F28027, TMS320F28035, TPS3307, LM258, TMS320F28027, TMDSHVBLPFCKIT, TLV320AIC1106, ADS8482, TMS320LF2407A, LM393

为配合C2000 DAY的强势推出,2012 10 8  11 9 ,我们诚邀您来分享您在学习或工作中关于应用 TI C2000 产品的设计心得

我们相信业内同仁的分享和交流为彼此提供宝贵的经验借鉴,同时真诚希望 TI 官方社区成为大家共同学习和探讨技术的一个网上家园!

发贴要求(不符合下面要求将不具备获奖资格)

- 每篇有关C2000的主题不少于 300

- 内容要求必须清晰详细写出设计心得的具体过程(例如设计中使用哪款产品碰到的问题及其解决的方法和步骤。)

- 发表以跟贴形式,需为原创贴 (最好同时配上合适的图片或视频)

奖项设置
征文奖交由 TI 技术专家团队评选,TI拥有最终解释权!
优秀分享奖(封顶50名): LAUNCHXL-F28027  和 TMDX28069USB  各一个
阳光普照奖 (封顶100):LAUNCHXL-F28027 一个
每个ID只有一次获奖机会
每周做一次审核。先到先得!
  • 抢沙发,正在学习使用C28027呢, 先安装control suite才能查看文档。总结一些学习心得和经验成文档后再放上来

  • 时间差了11个小时啊, 是不是论坛的时区设置不对啊, 美国的主机吧。。。?

  • 不错 先占个位

  • 好活动  同楼上 占个位先

  • 先占位,回家再发,要找一下代码,用28027做过SVPWM电机控制,带键盘和显示

  • 键盘和显示用的是CH452,SPI接口的

  • 活动很好,对打算学C2000的朋友来说是一大好事。  只不过感觉这个活动周期太长,等活动结束拿到板子估计自己已经学得差不多了, 建议活动是不是可以借鉴eeworld那种分段式的审核,那样早参加的网友也可以早点拿到板子。

  • 谢谢feifei zhuang的建议,我们将每周做一次审核。先到先得。

  • 最近社区活动多多啊,人气也越来越旺了。

    想要个TMDX28069USB,但没什么东西可写,

    表示支持和关注吧。

  • 再顶

    能免费拿个TMDX28069USB多好啊

    但没做过什么,同楼上一样没经验

    每周做一次审核

    得想办法写点了

  • 先好好学习下这个,TI都是给力的活动!

  • 谢谢 TI给力的活动,先占个位置,内容随后跟近..

  •                             基于DSP28027的SVPWM简易变频器

    很早以前自己做的了,包含CH452的键盘和显示部分,SPI接口,硬件也很简单,给出了SVPWM简易变频器项目的源代码和CH452的资料.希望大家喜欢!

    代码当初是全汇编写的.

    SVPWM技术的原理

        2.1 基本电压空间矢量

        图1示出电动游览车的逆变器主电路。规定当上桥臂的一个开关管导通时,开关状态为1。此时,相应的下桥臂开关管关断;反之亦然,开关状态为0。3个桥臂只有1或0的状态,因此由3个桥臂的开关状态a,b,c可形成000~111的8种开关模式。其中,000和111的开关模式为零状态,其它6种开关模式可提供有效的输出电压。空间矢量的基本思想就是用这8种开关模式的组合来近似电机的定子电压。

       

        由上述假定可推导出三相逆变器输出的线电压矢量[UAB,UBC,UCA]T与开关状态矢量[a,b,c]T的关系为:

        

        式中 Udc--直流输入电压

        三相逆变器输出的相电压矢量[UA,UB,UC]T与开关状态矢量[a,6,c]T的关系为: 

        
     
        将开关状态矢量a,b,c的8种开关组合代入式(2),可求出UA,UB,UC在8种状态下各自对应的电压,然后把在每种开关模式下的相电压值代入u=uA+uB+uC就可依次求出8种开关模式下的相电压矢量和相位角。图2示出这8个基本电压矢量的位置。
     
        上述相电压值都指三相A,B,C平面坐标系中的值.为了计算方便,在DSP程序计算中需将其转换到O,α,β平面坐标系中。如果选择在两个坐标系中,电机的总功率将保持不变,作为两个坐标系的转换原则,则采用下述转换方式:

        

        
     
        根据式(3)可将前面算出的各开关模式下对应的相电压转换至O,α,β坐标系中的分量。各基本矢量转换至O,α,β坐标系后的对应分量如图2所示。

        2.2 磁链轨迹的控制

        有了含6个有效矢量和2个零矢量的这8个基本电压空间矢量后,就可根据这些基本矢量合成尽可能多的电压矢量,以形成一个近似圆形的磁场。图3示出一种电压空间矢量的线性时间组合方法。输出的参考相电压矢量Uout的幅值代表相电压的幅值,其旋转角速度就是输出正弦电压的角频率。Uout可由相邻的两个基本电压矢量Ux和Ux±60的线性时间组合来合成,如:

        

        

        在每一个TPWM期间都改变相邻基本矢量的作用时间,并保证所合成的电压空间矢量的幅值都相等,因此当TPWM取足够小时,电压矢量的轨迹是一个近似圆形的正多边形。

        在合成电压空间矢量时,由于对非零矢量Ux和Ux±60的选择不同,以及零矢量的分割方法也不同,因而会产生多种电压空间矢量的PWM波。目前,应用较为广泛的是七段式电压空间矢量PWM波形,其Ux和Ux±60的选择顺序如图2所示。

        2.3 T1,T2和T0的计算

        根据式(4),电压空间矢量Uout可由Ux和Ux±60的线性时间组合来得到,则由图3,且根据三角正弦定理有:

        
     
        由式(5)和式(6)可解得:

          
     
        式(7)和式(8)中,TPWM可事先选定;Uout可由U/?曲线确定:θ可由电压角频率ω和nTPWM的乘积确定。因此,当Ux和Ux±60确定后,就可根据式(7)和式(8)确定T1和T2。最后再根据确定的扇区,选出Ux和Yx±60即可。

        为了使每次状态转换时,开关管的开关次数最少,需要在TPWM期间插入零矢量的作用时间,使TPWM=T1+T2+T0。插入零矢量不是集中的加入,而是将零矢量平均分成几份,多点的插入到磁链轨迹中,这不但可使磁链的运动速度平滑,而且还可减少电机的转矩脉动。

         2.4 扇区号的确定

        将图2划分成6个区域,成为扇区。每个区域的扇区号已在图中标出。确定扇区号是非常重要的,因为只有知道Uout位于哪个扇区,才知道选用哪一对相邻的基本电压空间矢量合成Uout。下面介绍一种确定扇区号的方法,即当Uout以O,α,β坐标系的分量形式Uoutα,Uoutβ给出时,先计算Uref1=Uβ,,再用N=4sign(Uref3)+2sign(Uref2)+sign(Uref1)计算N值。式中sign(x)为符号函数,当x>0时,则sign(x)=1;当x<0时,则sign(x)=0。然后,根据N的值,查表l即可确定扇区了。

        

        在每一个PWM周期中,各扇区中Ux和Ux±60的切换换顺序如图2所示。图4示出七段式电压空间矢量PWM波的零矢量和非零矢量在0扇区的施加顺序及作用时间。 

        

        3 SVPWM的过调制处理

        正常SVPWM调制波的电压矢量的端点轨迹位于六边形的内切圆内,见图4。如果电压矢量的端点轨迹位于六边形的外接圆和外切圆之间时,SVPWM将出现过调制的暂态,这时若不采取措施,输出电压将会出现严重失真而增大电机的转矩脉动,由此应避免电压矢量进入该区。

        一般的做法是对端点超出六边形的部分进行压缩,保持其相位不变,将其端点回至内切圆内。工程实现时,先判断电压矢量的端点轨迹是否超出外切六边形,再计算T0,T1,T2,具体实现比较麻烦。一种简单的实现方法是,首先计算出T1,T2,并判断T1+T2>TPWM是否成立,若不成立,则保持T1,T2的值不变:若成立,则将电压矢量的端点轨迹拉回至圆的外切六边形内,假定此时的两非零矢量作用时间分别为T1,T2,则可得:T1/T1=T2/T2,因此,T1,T2,T0可按T1=[T1/(T1+T2)]TPWM,T2=TPWM-T1,T0=0求得。

        按上述方法即可生成所需的SVPWM波,并可得到所需的电压矢量Uout。图5示出过调制示意图。

        

     

     

     

     

         CH452 是数码管显示驱动和键盘扫描控制芯片。CH452内置时钟振荡电路,可以动态驱动8 位数码管或者64 只LED,具有BCD 译码、闪烁、移位、段位寻址、光柱译码等功能;同时还可以进行64键的键盘扫描;CH452 通过可以级联的4 线串行接口或者2 线串行接口与单片机等交换数据;并且可以对单片机提供上电复位信号。  
    2、特点  
    2.1. 显示驱动  
      ● 内置电流驱动级,段电流不小于20mA,字电流不小于100mA。
    ● 动态显示扫描控制,直接驱动8 位数码管、64 只发光管LED 或者64 级光柱。
    ● 可选数码管的段与数据位相对应的不译码方式或者BCD 译码方式。
    ● BCD 译码支持一个自定义的BCD 码,用于显示一个特殊字符。
    ● 数码管的字数据左移、右移、左循环、右循环。
    ● 各数码管的数字独立闪烁控制,可选快慢两种闪烁速度。
    ● 任意段位寻址,独立控制各个LED 或者各数码管的各个段的亮与灭。
    ● 64 级光柱译码,通过64 个LED 组成的光柱显示光柱值。
    ● 扫描极限控制,支持1 到8 个数码管,只为有效数码管分配扫描时间。
    ● 通过占空比设定提供16 级亮度控制。
    ● 可以选择字驱动输出极性,便于外部扩展驱动电压和电流。
     
    2.2. 键盘控制  
      ● 内置64 键键盘控制器,基于8×8 矩阵键盘扫描。
    ● 内置按键状态输入的下拉电阻,内置去抖动电路。
    ● 键盘中断,可以选择低电平有效输出或者低电平脉冲输出。
    ● 提供按键释放标志位,可供查询按键按下与释放。
    ● 支持按键唤醒,处于低功耗节电状态中的CH452 可以被部分按键唤醒。
     
    2.3. 外部接口  
      ● 同一芯片,可选高速的4 线串行接口或者经济的2 线串行接口。
    ● 4 线串行接口:支持多个芯片级联,时钟速度从0 到2MHz,兼容CH451 芯片。
    ● 4 线串行接口:DIN 和DCLK 信号线可以与其它接口电路共用,节约引脚。
    ● 2 线串行接口:支持两个CH452 芯片并联(由ADDR 引脚电平设定各自地址)。
    ● 2 线串行接口:400KHz 时钟速度,兼容两线I2C 总线,节约引脚。
    ● 内置上电复位,可以为单片机提供高电平有效和低电平有效复位输出。
     
    2.4. 其它杂项  
      ● 内置时钟振荡电路,不需要外部提供时钟或者外接振荡元器件,更抗干扰。
    ● 支持低功耗睡眠,节约电能,可以被按键唤醒或者被命令操作唤醒。
    ● 支持3V~5V 电源电压。
    ● 提供SOP28 和DIP24S 两种无铅封装,兼容RoHS,引脚与CH451 芯片兼容。
     
    DSP28027.rar
  • CHE452到官方下吧,硬件很简单一看就明白了,电路原理图找不到了.

  • 分享一个血与泪的心得。

    主题:28069发送FIFO溢出导致地址位乱跑的问题

    环境:利用28069的TXFIFO和TXWAKE位发送数据,用的第九位地址位模式。也就是TXWAKE为0的时候后面8位表示数据,TXWAKE为1的时候后面8位表示地址,也可以说数据位是8+1=9位。

    现象:28069发送的地址会无规律的变成特定的明显错误的数,比如10,20等。最开始没有这个问题,随着代码的修改,后期偶尔出现这个问题,越到后面越明显。

    原因:

  • 原因就是在TXFIFO非空的时候就往TXFIFO里连续写了3个数,其中第一个数是跟随了TXWAKE了的,意思就是地址。但这个TXWAKE位因为溢出的原因跑到了其他的数据上,所以导致地址诡异。

    我还专门写了个测试程序:

  •        我只是一个DSP的初学者,还在跑别人的例程,也没有什么DSP的实际设计经验,但我的第一块DSP板板子是自己DIY的,我就给大家说说制作这块板的经历吧!

           DSP的板子的价格还是很高,对一般的学生要买一块功能比较强大的板子还是有难度的。如果自己设计板子又有技术难度,毕竟要使板子跑100MHZ以上的速度对板子的走线布局有很高的要求,而且画板子很花时间。我到TI的网站申请了一片28335,TB搜索一家有出售这种芯片的空板,选择空板也很多要点:板子上的功能并不是要多越好,要考虑自己的运用方向和知识水平;对28335这种高速芯片板子最好设计为4层板,才能比较好的屏蔽干扰;再者板子也要买布局合理美观的。

           制作像DSP这种高速数字芯片的电路尤其要注意模拟地和数字地的隔离,但要怎样选择隔离的元件呢?  可以供选择的元件有磁珠,电感,电容,0欧电阻,因为我的板子上有用到这些东西,这里就给大家说说选择这些元件的原则(来自网络和其请教的高手):磁珠的等效电路相当于带阻限波器,只对某个频点的噪声有显着抑制作用,使用时需要预先估计噪点频率,以便选用适当型号。对于频率不确定或无法预知的情况,磁珠不合。 电容隔直通交,造成浮地(模拟地和数字地没有接在一起,存在压差,容易积累电荷,造成静电)。电感体积大,杂散参数多,不稳定。 0欧电阻相当于很窄的电流通路,能够有效地限制环路电流,使噪声得到抑制。电阻在所有频带上都有衰减作用(0欧电阻也有阻抗),这点比磁珠强。

          我的板子上用的是磁珠。现在分享我焊接的板子的美图,呵呵呵!

  • 怎么不能编辑自己的帖子?我习惯先点发布再编辑。

    简单说下测试程序,就是sci环回测试,程序优先级从高到低依次为:接收中断->发送中断->AD中断,中断可被打断。

    AD中断是定时中断,不判断TXFIFO就往里面写3个数,第一个数是地址。写完后开发送中断,发送中断配置为TXFIFO空才中断,所以发送中断没问题。接收中断是Rx中断,没用FIFO。但在接收中断中加入一个delay,占时间用的,这样会挤占发送中断的执行,使之推后,如果推后到AD中断发数据语句的前面,就会发生TXFIFO溢出了。

    期望的结果:

    RxDataArray里面应该是101,2,3,4,5,6,因为BUFFER写1之前给TXWAKE写1了。如果TXWAKE跑到后面了,那就会出现102,103等等,所以我对所有可能的情况,也就是1,2,3,4,5,6,101,102,103,104,105,106进行捕捉计数,看计数值就知道有没有出现了。

    实验的结果:

    delay延时较小时:

    正常的,只出现了2,3,4,5,6和101的计数。

     

    delay延时加大后:

     出现了错误,很有意思,本来应该是地址的1,丢掉了TXWAKE,本来应该是数据6,被加上了TXWAKE。

    结论:FIFO用之前都要判断。另外虽说是自己的疏忽造成的bug,但TI对于这样的异常情况是不是也没处理好,丢掉可以,但不能乱来是吧。

    原创文章,禁止转载,谢谢。

  • 另外,我想要28335 controlCARD啊!能不能送一个啊,或者折扣价购买也行啊,谢谢!

  • 刚接触TMS320F2812,在用瑞泰的开发板做实验时,要在FLASH中烧写程序遇到了困难,经过在hellodsp中参考他人资料与自己的思索,终于弄明白了如何在FLASH中烧写!可能每个人遇到的问题不太一样,但我希望这篇文章能帮助你!

    1、我用的操作系统是WINDOWS XP,软件Code Composer Studio3.3。

    2、当从F2812内部的Flash中运行应用程序时,存在着一些特殊要求。在用CCS仿真软件调试程序使之运行在RAM中时,这些问题可能不会暴露出来,因为CCS有可能掩盖这些问题。

    在RAM中调试时,需要的文件有:

    头文件(.h):所有工程的头文件几乎一样,故头文件不需要修改,直接复制就可以了。

    CMD文件名称:DSP281x_Headers_nonBIOS.cmd

    CMD文件名称:F2812_EzDSP_RAM_lnk.cmd

    LIB文件名称:rts2800_ml.lib

    ASM文件名称:DSP281x_CodeStartBranch.asm

    C文件:DSP281x-DefaultIsr.c DSP281x-GlobalvariableDefs.c DSP281x-PieCtrl.c DSP281x-PieVect.c

    DSP281x-SysCtrl.c DSP281x-Spi.c

    C文件:main文件 这个需要自己编写

    在FLASH中烧写,需要改写CMD文件和配置C文件(主要是指主程序)

    CMD文件应该为:F2812.cmd(此文件主要是分配了FLASH空间)

    3 配置C文件

    C文件中的主要程序不变,只是加了对FLASH的初始化及如何将程序从FLASH中复制到RAM中去运行。注意FLASH控制寄存器的初始化代码,不能在FLASH中执行,必须从FLASH复制到RAM中执行。

    #include "DSP281x_Device.h" // DSP281x Headerfile Include File

    #include "DSP281x_Examples.h" // DSP281x Examples Include File

    #include "f2812a.h"

    #include "DSP281x_Globalprototypes.h" (需添加处)

    // Global symbols defined in the linker command file(需添加处)

    extern Uint16 RamfuncsLoadStart;

    extern Uint16 RamfuncsLoadEnd;

    extern Uint16 RamfuncsRunStart;

    // 定义指示灯寄存器地址和寄存器类型

    #define LBDS (*((unsigned int *)0xc0000))

    // 子程序接口

    void Delay(unsigned int nDelay); // 延时子程序

    main()

    {

    unsigned int uLED[4]={1,2,4,8}; // 控制字,逐位置1: 0001B 0010B 0100B 1000B

    int i;

    InitSysCtrl(); // 初始化DSP运行时钟

    //Flash to Ram*/ (需添加处)

    memcpy(&RamfuncsRunStart,

    &RamfuncsLoadStart,

    &RamfuncsLoadEnd - &RamfuncsLoadStart);

    InitFlash(); (需添加处)

    while ( 1 )

    {

    for ( i=0;i<4;i++ )

    {

    LBDS=uLED[i]; // 正向顺序送控制字

    Delay(256); // 延时

    }

    for ( i=3;i>=0;i-- )

    {

    LBDS=uLED[i]; // 反向顺序送控制字

    Delay(256); // 延时

    }

    }

    }

    void Delay(unsigned int nDelay)

    {

    int ii,jj,kk=0;

    for ( ii=0;ii

    {

    for ( jj=0;jj<512;jj++ )

    {

    kk++;

    }

    }

    }

    此程序是LED灯循环点亮,红色标记是在原来程序的基础上需要添加的。Memcpy这个函数应该是rts2800_ml.lib库文件中自带的,不需要我们定义。关于FLASH的初始化配置Initflash();我把它放置在Memcpy函数之后。关于ramfuncs,则在系统初始化DSP281x-SysCtrl.c 中定义已经定义(#pragma CODE_SECTION(InitFlash, "ramfuncs");)

    经过以上三个步骤,其实应该是两个步骤后,我们就准备好了,下一步就是把程序编译然后烧写到FLASH中了

  • 全汇编,太厉害了。有两个问题:

    1. 不知道为什么要用全汇编?不好维护啊,关键是懂的人少吧。

    2. 过调制处理里面直接限制Uout不行么?把Uout限制在内接圆半径以内就行了吧?

  • TMS320F28335外扩ADC

    由于采样频率的限制,使用28335时,可以用外部扩展接口扩展一个ADC,如采用ADS805,使采样频率可以达到20MHz。通过28335DMA读取高速AD转换器ADS805的数据,能够快速有效读出数据,降低CPU资源消耗。硬件原理图如附件图示。

    系统的一些说明:
    1. 时钟:AD时钟信号CLK由DSP的ePWM产生。28335工作在150MHz,通过ePWM1A产生占空比为50%且频率约为19MHz(18.75MHz)的时钟作为ADC的采样频率。同时通过EPWM1SOCA产生与AD时钟信号反相的触发源,作为DMA转换的同步信号。19MHz的时钟信号勉强能够满足ADS805时钟信号的特征要求。但是这个信号最好添加驱动芯片以改善波形。 输出使能信号OEn由GPIO6输出得到。这样造成一个问题就是当进行AD转换的时候,AD将始终占用总线,直到AD转换完成释放总线。
    2.程序: Xinf的读时序中的建立时间设为2个CPU时钟,选通时间设为2个CPU时钟,跟踪周期设为1个CPU时钟。 使用DMA1通道读取地址0×200000(Zone7)的内容,存储在数组ADC_Result中。触发源设置为EPWM1的EPWM1SOCA,总线配置为16位传输方式。DMA传输完毕后触发中断,对读取的数据进行处理。
    心得体会:
    1. DMA配置时,需要将BURSTSIZE配置为0,也就是每次传输一个字,因为转换的数据需要实时读取。而且每次只读取一个字的数据。如果此值设置过大,会造成周期性的数据读取错误。而且相邻两点可能产生数据重复现象。
    2. Xinf读取周期配置中,建立时间要大一点,不然会出现意外的数据错误。
    3. 由于没有CPLD支持,ADS805使能信号使用GPIO6输出,这样造成在AD转换期间,Xintf总线会一直占用,直到数据转换完成。

  • 占个座,在编辑中

    呵呵

  • 先说说我对C2000的一点认识:C2000 一般用在光伏逆变器、数字电机控制、数字电源等领域。相比于其他 MCU 来说,C2000 的核心是 DSP 核心,所以数学运算能力强,适合于运算

    各种复杂的控制算法;其次它的中断响应速度快,可以快速进入中断处理突发事件,也就是实时性好。

    比较典型的应用就是电机控制,众所周知,DSP 最早就是为了控制电机而诞生的。到目前为止,电机的控制算法越来越复杂,对计算能力要求也相应提高,在同档次的 MCU 中(如

    C2000、M4),C2000 比较受亲睐,一是因为它已经诞生许久,稳定性好,其次性能确实强,M4 等后起之秀性能也绝对不差,但还没有收到市场的考验。

    工作中接触过TMS320CF2812,它有ADC模块具有16路12位流水线模数转换模块(ADC).TMS320CF2812 DSP内部就有ADC转换资源。包含前段模拟多路复用器(MUX)采样保持S/H电路、转换内核、稳压器以及其他模拟支持电路。

    数字电路包含可编程序列发生器、结果寄存器、模拟电路接口、器件外围总线接口已经其他片上模块的接口。模数转换

    (ADC)模块可以直接用于电机或运动控制场合。

    软件:软件立即启动(使用SOC的SEQn位)。

    EVA:事件管理器A(在EVA中有多个事件源)。

    EVB:事件管理器B(在EVB中有多个事件源)。

    排序器可工作在启动/停止模式,允许多个按时间排序的触发源使转换同步。

    EVA和EVB可分别独立地触发SEQ1和SEQ2(仅用在双排序器模式)。

    外部:(ADC SOC)引脚。框图如下:

    当初选用它主要是考虑到高精度实时的AD模块和快速的运算指令,很方便的进行PID或FFT运算等控制算法,事实证明,很好用。

    选择TI的C2000系列还有一个重要的原因就是开发资源丰富,技术支持全面,大大缩短了研发周期,这对我们这些开发者来说是很重要的。

    用于 C2000(TM) 微处理器的 controlSUITE(TM) 是一套全面的软件基础设施和软件工具集,以全面满足每个设计阶段对更加直观易用的软件的需求,旨在最大程度地缩短软件开发时间。与传统 MCU 产品不同,controlSUITE 软件可为简化评估、应用自适应、调试、测试以及重复使用提供必要的内容与内容管理。controlSUITE 软件除免费软件产品系列常见的简单演示之外,还可提供能够作为真正开发系统使用的全面开源项目 —— 库与示例,实现诸如电机控制等应用。此外,全新安装程序还可消除版本与依赖性等问题,使开发人员能够在集中区域获得完整的软件产品。

    TI提供了丰富的开发资源: 应用程序开发—系统范例,应用程序库;器件评估—基础程序库,标头文件和工程范例(这个真的很好);调式与代码生成—第三方程序库及仿真,CCS 集成型开发环境。

    顺便传一个CSS下烧写flash的资料,大家分享一下。

     

    CCS4向dsp28xx内置flash烧写程序过程.pdf
  • word编辑的,结果图片贴不上去,奇怪了,干脆把word文档贴上来好了。

     

    我对C2000的一点认识.doc
  • 我对TMS320F28335的理解及对其ePWM模块的操作经验

    我是一个单片机玩家,用单片机做过不少项目。但对于DSP,目前只停留在学习阶段,下面,就把我学到的跟大家交流一下。

    在我的理解,可以把TI C2000系列的DSP看做一款高级的单片机,一方面是它的时钟频率很高,另一方面,它的内核架构、外设资源相当地丰富。而且它的价格也算不上太贵,学习资料丰富,适合大面积推广应用。

    ePWM也叫增强型脉冲宽度调制器。本人就是学电机的,PWM是电力电子系统与设备的关键控制单元,ePWM可以用最小的CPU资源产生复杂的脉冲宽度,并且可编程程度高,灵活性高,利于理解和应用。此外,28335还添加了硬件扩展模块,高精度脉冲宽度调制器(HRPWM),在一些高精度控制场合,HRPWM体现了它的功能。

    ePWM模块主要包含有时间基准子模块、计数比较子模块、动作限定子模块、死区控制子模块、斩波器子模块、错误区域控制子模块、事件触发子模块。这些模块在系统内通过信号进行连接。

    下面,给出一些ePWM周期性错误中断的代码。当外部错误引脚出现低电平时候,PWM停止输出,但低电平撤走之后,PWM自动回复输出。

    #include "DSP2833x_Device.h"

    #include "DSP2833x_Examples.h"

    //实验现象:1、在ePWM3A、ePWM3B、ePWM4A、ePWM4B输出相互独立的PWM波

    //2、这是周期性中断:错误管脚TZ3

    int flag = 0;

    void delay(void)

    {

    unsigned int i,j;

    for(i = 0;i < 500;i++)

    for(j = 0;j < 1000;j++);

    }

    void LED_GPIO_Init(void)

    {

    EALLOW;

    GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 0;

    GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 0;

    GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;

    GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1;

    EDIS;

    }

    void main(void)

    {

    InitSysCtrl();  //系统时钟150M

    DINT;

    InitPieCtrl();

    IER = 0x0000;

    IFR = 0x0000;

      InitPieVectTable();

    LED_GPIO_Init();

    EALLOW;

    GpioCtrlRegs.GPADIR.bit.GPIO4=1;    //设置GPIO4输出方向

    GpioCtrlRegs.GPADIR.bit.GPIO5=1;    //设置GPIO5输出方向

    GpioCtrlRegs.GPADIR.bit.GPIO6=1;    //设置GPIO6输出方向

    GpioCtrlRegs.GPADIR.bit.GPIO7=1;    //设置GPIO7输出方向

    GpioCtrlRegs.GPAMUX1.bit.GPIO4=1;   //ePWM4

    GpioCtrlRegs.GPAMUX1.bit.GPIO5=1;   //ePWM5

    GpioCtrlRegs.GPAMUX1.bit.GPIO6=1;   //ePWM6

    GpioCtrlRegs.GPAMUX1.bit.GPIO7=1;   //ePWM7

    EDIS;

       ///////////////////////////////////////////////////////////////////

    //时间基准寄存器

    EPwm3Regs.TBPRD = 7499;             // Period = 7499+1 个TB时钟周期

    EPwm3Regs.TBPHS.all = 0;            // 相位为零

    EPwm3Regs.TBCTR=0;                  //计数器初始值为零

    EPwm3Regs.CMPA.half.CMPA = 2000;

    EPwm3Regs.CMPB = 4000;

    //设置TBCLK=150M/2=75M

    EPwm3Regs.TBCTL.bit.HSPCLKDIV = 0;  //高速时间基准时钟预分频

    EPwm3Regs.TBCTL.bit.CLKDIV = 0;     //时间基准时钟预分频

    EPwm3Regs.TBCTL.bit.CTRMODE = 0;    //增模式

    //设定动作

    EPwm3Regs.AQCTLA.bit.CAU =0x1; //增模式:计数器等于CPMA时ePWMA输出变低

    EPwm3Regs.AQCTLA.bit.PRD =0x2; //增模式:计数器等于周期值时wPWMA输出变高

    EPwm3Regs.AQCTLB.bit.CBU =0x1; //增模式:计数器等于CPMB时ePWMB输出变低

    EPwm3Regs.AQCTLB.bit.PRD =0x2; //增模式:计数器等于周期值时ePWMB输出变高

    ///////////////////////////////////////////////////////////////////

    //时间基准寄存器

    EPwm4Regs.TBPRD = 7499;             // Period = 7499+1 个TB时钟周期

    EPwm4Regs.TBPHS.all = 0;            // 相位为零

    EPwm4Regs.TBCTR=0;                  //计数器初始值为零

    EPwm4Regs.CMPA.half.CMPA = 2000;

    EPwm4Regs.CMPB = 4000;

    //设置TBCLK=150M/2=75M

    EPwm4Regs.TBCTL.bit.HSPCLKDIV = 0;  //高速时间基准时钟预分频

    EPwm4Regs.TBCTL.bit.CLKDIV = 0;     //时间基准时钟预分频

    EPwm4Regs.TBCTL.bit.CTRMODE = 0;    //增模式

    //设定动作

    EPwm4Regs.AQCTLA.bit.CAU =0x1; //增模式:计数器等于CPMA时ePWMA输出变低

    EPwm4Regs.AQCTLA.bit.PRD =0x2; //增模式:计数器等于周期值时wPWMA输出变高

    EPwm4Regs.AQCTLB.bit.CBU =0x1; //增模式:计数器等于CPMB时ePWMB输出变低

    EPwm4Regs.AQCTLB.bit.PRD =0x2; //增模式:计数器等于周期值时ePWMB输出变高

    ///////////////////////////////////////////////////////////////////

    /*中断配置*/

    EALLOW;

    GpioCtrlRegs.GPADIR.bit.GPIO14 = 0;    //设置GPIO14输入方向

    GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 1;   //TZ3

    EDIS;

    EALLOW;

    EPwm3Regs.TZSEL.bit.CBC3 = 1;  //使能周期触发

    EPwm3Regs.TZCTL.bit.TZA = 2;   //PWMA强制输出为低

    EPwm3Regs.TZCTL.bit.TZB = 2;   //PWMB强制输出为低

    EPwm3Regs.TZFLG.bit.CBC = 1;   //清除中断标志位

    EPwm3Regs.TZCLR.bit.CBC = 1;

    EPwm3Regs.TZEINT.bit.CBC = 1;  //启用周期错误中断

    /*注意:周期性错误的波形恢复是自动的,只要错误管脚恢复了正常;

    使能中断只是为了对既有的错误进行一些后续处理*/

    EDIS;

    IER |= M_INT2;

    PieCtrlRegs.PIEIER2.bit.INTx3 = 1;

    EINT;

    ERTM;

    for(;;)

       {  

    GpioDataRegs.GPBTOGGLE.bit.GPIO60 = 1;

    delay();

    GpioDataRegs.GPBTOGGLE.bit.GPIO60 = 0;

    delay();

    //注意中断服务函数

       }

    }

  • 第一次接触C2000是从去年的本科毕业设计开始。在主控制器的选择上,经过一段时间的考虑,我选择了C2000系列的TMS320F2812。这是全新的开始,之前也有用过51、AVR、LM3s1138 ARM等单片机,但是与F2812相比,不论是性能,稳定性还是周边资料,他们都弱爆了。

    F2812的入门还是比较麻烦的。首先要装仿真器的驱动,(F2812开发板加仿真器还是价格不菲的,c2000 lauchpad价格太亲民了),然后要熟悉CCS的编程环境,学习DSP编程、下载。给我印象深刻的是,F2812有两种下载方式,分别是RAM内仿真和FLASH烧写;F2812对寄存器的操作是面向结构体的,从结构体中由上到下一层一层的找;cmd文件很有特色,定义了寄存器和用户程序在DSP中的位置。

    入门之后就是应用了,我的本科毕业设计是要做一个小型的电流型逆变器,关键程序就是产生6路SPWM控制开关管通断,思路是先产生二逻辑的电压型SPWM然后通过逻辑变换产生三逻辑的电流型SPWM。F2812的事件管理器功能强大,具体实现方法就是通过三个比较单元和定时器中断产生6路互补的SPWM,然后再利用捕获单元捕获三路PWM,在捕获中断进行逻辑变换(其实就是查表)。

    DSP输出PWM波形和逆变器输出波形

  • 前面已经发帖占位 但不能在编辑,出现以下错误。

     

    Sorry, there was a problem with your last request!

    Either the site is offline or an unhandled error occurred. We apologize and have logged the error. Please try your request again or if you know who your site administrator is let them know too.

          最近在接触C2000 ,dsp数字信号处理主要的优势就是数学运算,所以数学运算很为重要,通过看书了解到有IQmath数学函数库这个东西,先共享下资料

    压缩包第一个文件为最新版本的libaray,第二个为库函数的中文介绍,第三个为IQmath的源文件。

    什么是IQmath?

           C28 IQmath数学库的使用


     

    IQmath.rar
  • 官方下载IQmath数学库文件sprc087,默认目录安装,安装完成后的文档结构如下:

    <base> install directory is C:\tidcs\c28x\IQmath\v15a

    <base>\doc Contains this file

    <base>\include The IQmath header files

              C code uses IQmathLib.h

              C++ code uses IQmathLib.h and IQmathCPP.h

    <base>\lib                              The IQmath library files. These are used by both C and C++

    <base>\gel                              Legacy GEL file for debug

    <base>\examples\cmd               Linker command files used by the examples

    <base>\examples\C                  C example: Refer to ReadMe_SampleC.txt

    <base>\examples\C\projects      CCS projects for the C example

    <base>\examples\C\source        Source code for the C example

    <base>\examples\Cpp               C++ code example: Refer to ReadMe_SampleCpp.txt

    <base>\examples\Cpp\projects   CCS projects for the C++ example

    <base>\examples\Cpp\source     Source code for the C++ example

    包含IQmathLib.h头文件

    将用户代码与IQmath链接,通常是添加IQmath.lib文件,如果用户使用浮点DSP,想混合使用IQmath与芯片本身的浮点功能,则添加IQmath_fpu32.lib

    修改.cmd文件,可以参考TI提供的例程,或者在原有cmd文件基础上修改

    按照头文件中定义的Q格式定义变量,调用函数,调试的话,可以添加gel文件

        按照上面的步骤,使用Q格式只是熟练度的问题了。我在使用过程中的问题出现在cmd文件上,对照普通的cmd文件,使用IQmath的cmd文件需要添加如下语句:

    MEMORY

    {

    PAGE 0 :

      IQTABLES   : origin = 0x3FF000, length = 0x000b50

      RAMH0      : origin = 0x3F8002, length = 0x001FFE

    PAGE 1 :

      RAML0L1  : origin = 0x008000, length = 0x002000

    }

    SECTIONS

    {

      /* IQmath inclues the assembly routines in the IQmath library

         IQmathTables is used by division, IQsin, IQcos, IQatan, IQatan2

                      this is in boot ROM so we make it NOLOAD.  Using

                      the ROM version saves space at the cost of 1 cycle

                      per access (boot ROM is 1 wait).

         IQmathTablesRam is used by IQasin, IQacos, and IQexp

      */

      IQmath           : > RAMH0,       PAGE = 0

      IQmathTables     : > IQTABLES,    PAGE = 0, type = NOLOAD

      IQmathTablesRam  : > RAML0L1,     PAGE = 1

    }

        从注释中可以发现,IQmath段是IQmath库中汇编程序的映射,IQmathTables段是IQsin, IQcos, IQatan, IQatan2等使用的查找表的映射,这个查找表被固化在了Boot rom中,使用Boot rom中的查找表可以节约Ram空间,但是Rom的访问需要额外的1个等待周期,所以用户可以自己权衡时间(1 wait)和空间(Ram)哪个对自己是最重要的。另外,如果选择直接调用Boot rom中的查找表,重映射时,必须使用NOLOAD关键字。IQmathTablesRam段是IQasin, IQacos, and IQexp等使用的查找表的映射,如果不使用这些功能,可以直接删除该段,节约Ram或Flash资源。

        还有一点需要注意,IQmath中编译代码的大小是动态的,它是根据用户代码中调用的IQmath库函数来条件编译的,所以初始时,可以将IQmath段的大小定义的稍微大一些,最后根据map文件适当增减段的大小,节约宝贵的Ram资源。

  • 基于DSP2812的断路器机械特性测试仪研究与设计

     

    之前参与过的一个项目,分享一下软硬件设计思路:

     

    高压断路器的可靠性在很大程度上取决于其机械操动系统的可靠性。高压断路器由于机械原因所造成的事故无论是在次数,还是在事故所造成的停电时间上都占据总量60%以上。因此,加强对高压断路器机械特性的检测与诊断,具有十分重要的现实意义。

    本设计选用TI公司的DSP TMS320F2812作为微处理器,进行外围硬件电路设计,主要包括模拟信号的前端处理电路、开关量输入调理电路、开关量输出电路、脉冲处理电路以及电源模块的设计。之后用C语言对各个电路功能模块编制调试数据采集程序。

    一.硬件设计

    本设计硬件部分的原理框图如图1所示。设计以TI公司的DSP TMS320F2812为核心,通过扩展外围硬件接口电路,实现对各种所需信号的数据采集。

    测试仪硬件原理框图

    1.基于嵌入式芯片设计的独立硬件电路系统

    嵌入式芯片选用TI公司的DSP TMS320F2812,主频150MHz,内含128kFLASH,18KRAM.在处理速度,算法编写,外扩接口等方面有相当优势。

    F2812处理器外设包括232QEP单元,1612AD模拟输入通道,SPI高速同步串行接口,2SCI异步串行接口,CAN总线接口,看门狗,多路通用目的数字量I/O及其他,满足本系统设计要求。

    2.通讯接口及协议

    通讯接口拟采用以下三种方式:标准RS485通信接口;eCAN总线通信接口;以太网通信接口。

    a.标准RS485通信接口

    RS485通信接口可于本地或远方通过串口协议通信,通信协议支持DNPMODBUSIEC870-5-101等规约。设计时采样获得信号,处理串行通信。

    beCAN总线通信接口

    F2812内含eCAN模块控制器,并提供了完整的CAN协议。设计时通过通用端子引入后,经CAN转换器连入DSP片上的CAN模块即可。后续程序编写包括初始化和消息收发控制等各项功能的开发。

    c.以太网通信接口

    选用型号为DM9000的嵌入式以太网芯片及相关信号变压电路,通信接口的物理介质系统选用双绞线和光纤并存的口连接方式。其中,双绞线物理接口选用通用标准RJ45接头。

    3.内存容量的扩展。历史事件的存贮数据量计划为3年,在设计上采用256Mb或更大的SD卡替换FLASH,随着近年来SD卡成本呈不断降低的趋势,成本和容量均不构成关键障碍。

    二.软件设计

    嵌入式系统独立运行所有的在线监测的软件功能,可以通过以太网接口和PC机联机通讯,管理员和使用者能通过上位机的应用软件操作和察看在线检测系统的数据和内部设置参数。软件功能有:

    l         上位机PC软件有图形化的断路器机构部件运行状态指示

    l         机构运行机械特性参数报表、曲线显示

    l         断路器位置信息显示

    l         算法设置

    l         历史数据调出查看

    l         看门狗设计

    l         其他功能

    本设计中的软件采用结构化和模块化的设计思想,共包含了参数设置、信号采集、数据编码与解码、数据存储与传输、数据计算及显示等几个部分。图2所示为软件总体设计流程图。

    软件总体设计流程图

    程序的总体流程可描述为装置上电后,首先F2812进行系统的初始化,包括系统时钟设置、外部扩展接口时序设定、中断初始化、端口定义等,以及各模块初始化,包括事件管理器单元、QEP单元、AD采样模块、SCI通讯模块等,此外还包括了程序设计中使用到的一些状态标志的设定、常量及变量的初始化等。用户通过交互界面对测量中的一些参数进行设置,主要包括即将执行的操作命令(合闸、分闸、重合闸)、采样时间、待测触头的数量、待测断路器速度的定义方法等。参数设定完成后,装置等待用户给出操作命令,根据用户命令的不同执行相应的操作,并对断路器动作过程中的各项开关量、数字量及模拟量进行采样。之后判断采样时间是否达到设定值,若已完成设定采样时间,则对采样数据进行存储、传输,并对这些数据进行处理,计算并显示出试验结果,若未达采样时间,则继续采样。完成一次试验后,用户可对测量参数重新设定,并进行新的试验。

    软件设计中对于TMS320F2812的开发使用了TI公司推出的集成开发环境Code Composer Studio v3.1(或CCStudio v3.3),仿真器选用了北京合众达电子技术有限公司开发的SEED-XDSPP(或SEED-USB2.0),程序设计以C语言为主,而部分调用频率较高、速度要求较高的子程序使用了汇编语言编写。

    三.主要技术难点

    1.动触头行程信号采集方法。

    通常高压断路器都有着紧凑的机械操动机构,因此需要选择较为理想的测量行程信号的传感器安装在操动机构上,既要真实地反映其行程特性,又不影响断路器原有性能、参数及可靠性,设计中选用的传感器运行稳定,并可工作在高电压、强电流、强振动和温差大的环境下。

    2.系统实时性要求高。

    高压断路器通常分(合)闸动作过程非常短(一般大约几十毫秒),而现场采集的信号很多,信号的频率有很大的差别,给系统的数据采集带来很大难度,且各个信号之间存在着相互的换算关系,因此要求系统的实时性极强,能够在较短的时间对各个信号准确无误地测量并完成数据计算、存储。

    3.抗干扰技术。

    高压断路器在进行合、分闸操作时会产生强烈放电和机械振动,对整个系统造成很强的电磁干扰。因此,如何采取有效的抗干扰措施,使信号检测部分能够可靠运行,并且测试结果能够真实准确地反映断路器机械特性参数变化信息也是课题的难点之一。设计中采取了有效的硬件和软件抗干扰技术,并给出了具体的抗干扰措施。针对接地技术、电磁屏蔽技术和滤波技术、隔离技术、PCB布局布线以及数字滤波技术等方面进行了具体处理。

    4.数据处理要求高。

    由于需要得到的参数结果较多,很多都要求很高的精度,且需要图形化显示时间-行程特性曲线、时间-电流特性曲线和断口状态,对于多组实验结果的妥善存储则需要运用数据库技术,这些都需要扎实的软件基础和一定的工作经验,并根据实际调查和应用的需求不断地改进。

    5.合闸电阻的测量。

    对于装配合闸电阻的高压断路器,需要对合闸电阻的投放时间及大小进行测量。由于合闸电阻的投放时间短,且一般阻值较小,设计中采用了线性光耦采集辅助触点合闸电阻的投放信号。

     

    附:DSP2812系统板成品图(最小系统板,扩展板手头没有了)

  • 不好意思,图片貌似传错了,也改不了了,干脆把word发上来吧,大家见谅~~

    基于DSP2812的断路器机械特性测试仪研究与设计.doc
  •  大家好,首先我是一名c2000的初学者,原来我在用stc和stm8单片机,在一个项目中出现了许多的问题,人家的项目是电源和电焊,原来是用PLC做控制,现在要改成便宜的控制器,主要原因就是变压器和电火花干扰单片机的运行,所以听说C2000应该是一个比较好的控制器,想学习换成c2000。

     

     

          下面我说一下我听别人说的一些C2000的一些抗干扰的的方法,具体可能有一些偏差请谅解。

          根据我的项目自身、干扰源和干扰途径的分析,抗干扰措施主要是:提高系统自身的电磁兼容性;隔离干扰源;切断干扰途径3种方案。

          其中在系统本身做了一些抗干扰的保护措施,例如在控制器表面本身添加了一些隔离我的东西。

          听说c2000可以用软件来提高抗干扰能力,主要有:利用数字滤波器来滤除干扰;采用软件看门狗、多次采样技术、定时刷新输出口等技术来抑制干扰。

     

    希望ti能够给我这次获得板子的机会,谢谢。

  • TMS320F2812的ADC转换精度 前一段时间做一个光伏逆变器的项目,在项目中使用TMS320F2812作为控制器。在对电流进行采样时,发现2812的ADC的转换数据有点偏差,而且转换精度受温度影响很大,有较大的温漂。如果ADC采样不精确,在后面控制时,系统会出现振荡或控制偏差大的问题,因此必须解决2812进行ADC转换时的精确性。

    我们都知道TMS320F2812有16路12位ADC模块,模拟电压的输入范围是0-3V,25MHZ的ADC时钟频率,数字结果 = 4095*(模拟输入电压 — ADC转换低电压参考值)/3;为了提高ADC转换精确度,最后经过实验提出了2种修正ADC转换精度的方法。

    方法1:外加ADC校正电路 通过外置基准电压芯片,然后对标准电压进行ADC采样,采样后结果与际值进行比较,得出ADC转换偏差,在以后进行ADC采样时,ADC修正后采样值 = ADC 采样值 + ADC转换偏差值。这样就可以提高ADC的转换精确度。

    上图是外部校准电路。CJ431能够产生2.5V电压基准电压,通过外部电阻分压,产生REFA、REFB两个基准电压。REFA =2.5*1/6=0.4167V,REFB = 2.5*4/6 = 1.6667V.对这两个电压值AD采样,然后与计算得出的数字量进行比较,求出偏差。在以后的AD采样中就可以利用偏差来提高ADC转换精度。

    方法2:加入一阶惯性环节 加入一阶段惯性环节可以通过硬件或软件实现。

    1):硬件实现。

    加入一阶阻容滤波电路。 模拟电压输入可以滤除高频纹波,可以提高电压转换精度。

    2)软件实现

    在进行ADC采样时,记上一次电压ADC转换值为D1,下一次ADC转换值为D2,利用公式计算:当次ADC转换值 = D1 *a + D2*(1-a),a称作惯性系数,数值的大小由系统的偏移大小决定。其实这种方法跟硬件的阻容滤波是一个意思。

  • 很久以前28335做过逆变器,系统老是出错,最后发现时ePWM模块设置出了错。在此针对该模块做一点点总结,希望蹭个奖:

    ePWM模块总共有7个模块:
    (1)时间基准模块TB:为输出PWM产生始终基准TBCLK,配置PWM的时钟基准计数器TBCTR,设置计数器的计数模式,配置硬件或软件同步时钟基准计数器,确定ePWM同步信号输出源;
    (2)计数器比较模块CC:确定PWM占空比,以及ePWM输出高低电平切换时间;
    (3)动作限定模块AQ:确定计数器和比较寄存器匹配时产生动作,即ePWM 高低电平的切换;
    (4)死区控制模块DB:配置输出PWM上升沿或下降沿延时时间,也可以将A、B两通道配置成互补模式,我做的逆变器就是将ePWM配置成互补模式。死区时间可以编程确定;
    (5)PWM斩波模块PC:产生高频PWM载波信号;
    (6)错误控制模块TZ:当外部有错误信号产生时,对PWM输出进行相应处理,比如全置高,或拉低,或置为高阻态,从而起到保护作用。当然该功能也可以通过软件强制产生;
    (7)事件触发模块EZ:使能ePWM中断,使能ePWM触发ADC采样,确定事件产生触发的速度和清除相关事件标志位。
       ePWM模块的7个模块就像一条生产线,一级一级的经过,但DSP更高级,可以实现通过配置,使得ePWM只经过我选择的生产线,没有被选择上的就不要经过。例如,死区控制模块可以需要也可以不需要,这就看实际系统需不需要了。在实际使用ePWM时,正常的发出PWM波往往只要要配置TB、CC、AQ、DB、ET五个模块就OK了。

  •                                                                                             C2000快速实现取整函数的一点心得

    floor与ceil函数都是C语言的标准库函数,在<math.h>头文件引用之后一般即可直接调用。在浮点DSP上,通过TI 的FastFPU库,此类浮点函数一般可以通过查ROM的方法快速计算得到。但在定点的DSP,比如C2000中常用的TMS320F2812上,则需做一定的处理,以提高执行效率。我们知道,在浮点DSP上一般有专门的浮点协处理器FPU来完成浮点运算,而在定点DSP上直接计算浮点运算需要消耗大量的处理能力,将浮点运算转换为定点来计算是唯一的选择。

    在一个用到floor与ceil函数的具体实验中,我采用了TI公司的TMS320F2812定点DSP,采用C语言编程并使用TI公司定点处理智能数学运算(IQmath)。以对Vrab求取floor与ceil值为例,得到以下代码

    /*floor and ceil calculation*/

    _iq Uab,temp;

    Uint16 fab,cab;

    if(Uab>=0) {

    fab=_IQint(Uab);

    temp=_IQfrac(Uab);

    cab=(temp||0)+fab;

    }

    else{

    cab=_IQint(Uab);

    fab=cab-1;

    }

    经测试,若采用C语言的标准库函数ceil与floor,计算六次floor与ceil与值需要耗费4118个时钟周期,而改写之后,求取六个值只需要137个周期,大大节省了计算时间;以DSP的时钟周期为例,则执行时间从4118*6.67ns=27.47us,缩短到了137*6.67ns=0.91us,运算速度得到极大的提高。

    在此,顺便讲一下CCS中如何计算程序的执行时间:

    首先是打开ccs,建立工程,编译程序,解决错误。。。这个过程不多讲,最后自然是下载程序。

    其次,在ccs的工具栏中点击Profile---Clock---View,就可以在ccs的左下角看到时钟周期数了。。然后还需要再来一遍Profile---Clock---Enable,则使能了时钟评估这个选项。

    其次,在需要被测试的程序两端加入断点,然后运行程序。。程序运行到第一个端点停止后,双击一下右下角的计数值,则它就能清零了。然后再运行一下程序,此时程序运行到第二个端点停止,这时的右下角的数值就是执行这段程序所用的时钟周期数。当然,考虑上插入断点所带来的处理器开销,实际的执行时钟周期要稍微小于所显示的值。

  • 正在做电机控制,用的8051+CPLD的方案,遇到很大局限性。正在考虑转为C2000 DSP

  •  

             在电力电子专业,DSP应用相当广泛,我们实验室都是在用TI公司C2000系列的2812作为控制器。在实践与学习中,也总结了一些硬件设计的经验。以DSP2812在光伏电源中的应用为例,讨论一下DSP2812相关的硬件设计。

    首先分析一下整个光伏电路的系统:

             DSP在整个系统中意义重大,既负责整个电路中功率开关的驱动,电压、电流采样,PID控制,还是整个系统人机交互的核心,可以通过按键输入、液晶显示等完成人机交互的设计。硬件电路设计包括DSP供电电源、DSP核心板、PWM及驱动、电压检测、电流检测、保护电路设计及显示系统设计。

    1.      DSP电源设计:采用TI公司TPS767D318,可以输出1.8V3.3V两种电压,供MCU内核及IO口使用。另外,该电源有复位端子,一旦系统异常,复位引脚输出置位信号,可用作MCU复位源。一般要求外部I/O 3.3V 先上电,等外部电压稳定后,内核1.8V 再上电;掉电的时候则是外部I/O 3.3V 先掉电,内核1.8V 后掉电。

    2.      DSP核心板设计:

    TMS320F2812 作为主控芯片设计相应主控板。主控板上扩展了一片IS61LV6416 作为外部RAM;外部采用30MHz 的无源晶振,经过内部十倍频和二分频后为内核提供150MHz 的时钟频率。

     

    3.      PWM产生及驱动电路设计

    IGBT驱动电路大都采用M57959L设计,采用+15V -10V 两组电源,IGBT 从关断到导通时,驱动输出+15V,当IGBT从导通到关断时,驱动输出-10V。驱动信号输入端所加的电阻4 R 5 R 可以减少由线路电感引起的振荡。驱动输出端外加一级图腾柱电路,驱动能力进一步得到增强。驱动保护端(第八引脚)通过隔离光耦引出,可以减少保护端口的干扰,避免系统误操作。

    以上设计的驱动电路,从逻辑上来分析属于正逻辑驱动,即高电平导通,低电平关断。但TMS320F2812 芯片在默认情况下输出引脚为高电平,如果直接与该驱动电路连接,会造成主电路直通现象而烧坏IGBT 模块。这一点在实际的设计中要得到充分的重视。在本文的设计中考虑到优化布线的需要采用ULN2003A芯片实现了DSP 驱动信号的取反,同时将相应的电平由3.3V 提高到5V

    4.      电压检测

    一般电力电子系统中既需要检测直流电压,也需要检测交流电压。一般都是通过电压互感器及相关调制电路实现。把待检测电压调制到0~3.3V直流电压,经RC滤波后,送DSPAD采集。交流电压和直流电压调理电路分别如以下两图所示:

     

    霍尔传感器CSB2-10mA 的输入输出电流比为10mA:25mA。逆变器输出交流电压在220V300V 之间,输入的直流母线电压在650V750V 之间。根据输入电压的幅值,在测量交流电压时霍尔传感器的原边串入30K/10W 的电阻,在测量直流电压时霍尔传感器的原边串入72K/10W 的电阻。对于交流信号的检测,由于DSP 的内部为单极性采样,因此对传感器输出的交流小信号必须增加调理电路。

     

    5.      电流采样电路设计

    同电压采样类似,采用霍尔电流传感器对电流进行调理,最终输出电压送AD采集。

    霍尔电流传感器JT151T11 的输出/输入电流比:100mA:150A,考虑到逆变器输出电流在0100A 之间,选用的负载电阻为25 /0.5W

     

    6.      保护电路设计

    作为一个完整的系统,保护部分是不可或缺的。设计保护电路需要考虑多个层面,而且要确保各保护电路本身的可靠性,这样才能提高系统的整体安全性。在本文中涉及的硬件保护有:过流保护;过热保护;驱动保护。

    过流保护需要对输出电流的瞬时值进行监控,一旦超过设定值将给DSP 发送外部中断信号。由于输出为交流电流,所以过流也有着正负极性,因此要对输入的电流信号进行精密整流,通过整流后的信号与给定的参考值比较来确定是否过流。

    调理后的信号可以接到DSP引脚上,作为反馈信号。

    7.      人机交互设计

    在显示电路的设计中,考虑到液晶模块具有较低的功耗,又能一屏显示多个参数,能够方便的观察多个参数的变化。采用SMC1602液晶进行显示。

    由于SMC1602A 型液晶模块采用5V 供电,而TMS320F2812 I/O 只能接受3.3V 以下电压,两者之间电平不匹配,因此接口不能直接相连。为解决该问题,本设计中采用了电平转换芯片74LVC4245A,该芯片的VCCA 引脚接5V 电平,VCCB 引脚接3V5V 电平,DIR 引脚决定数据传输方向,OE 引脚为芯片使能端。

    DSP系统实物图:

     

    时间有限,先整理一下DSP2812在电力电力控制系统中主要硬件的设计,有时间再整理一下程序设计。

     

     

     

     

     

     

  • 正在学习C2000系列,从官网下了个68K的control suite,安装后发现1.3G,内容极其丰富,适合我们这些入门级的学习者

  • 本文介绍应用于仪器和设备测试的高精度宽频率功率信号源的设计。传统的功率信号源一般采用线性电源或模拟控制的功率开关变换电源。随着高性能DSP控制器的出现,使采用数字化控制的功率开关变换电源作为功率信号源成为可能,这有利于提高系统的集成化水平和控制功能。本文介绍的功率信号源采用工作频率为150MHzDSP TMS320F2812控制。并且采用DC/DCDC/AC两级联合调节实现。

    1 系统的整体结构

    本文介绍的功率信号源可提供输出电压从2100V可变,频牢从20l000Hz可变,并且可以在50Hz基频的情况下叠加基波幅值030%的直流分量与29次的各次谐波分量。输出电压幅值最小可调步长和分辨率为O1V,输出电压频率最小可调步长和分辨率在20100Hz时为O1 Hz,在100l 000Hz时,为1Hz。在额定工作条件下,在2100V范围内,应能连续输出05A的电流,即最大输出50VA的功率。

    为了满足系统的高精度及输出电压和频率均可变的要求,系统框图如图l所示,整个系统由ACDCDCDCDCAC三部分组成。由于对输出功率的要求比较小,所以采用了反激式直流变换电路。DC/AC级采用全桥逆变电路。整个系统的控制是基于TT公司的DSP TMS320F2812DCDC环节采用INFINEON公司的ICES2AS01控制,其给定信号VnfDSP根据控制要求产生,从而获得可调的直流电压VdcCC/AC环节由DSP直接进行PWM控制,从而产生所需的功率信号波形。

    DSP TMS320F2812的几个特点:

    (1)速度方面 TMS320F2812最高工作频率为150MHz(30MHz的品振经过倍频而得到)

    (2)AD精度 TMS320F2812AD采样精度可以达到12位:

    (3)运算方面 TMS320C281232位的定点DSP,可以方便地运行32位与32位的乘法,能满足高精度与快速计算的要求。

    2 控制方案及参数设计

    21 逆变器建模与控制方案设计

    单相全桥逆变器及其双环控制的结构框图如图2所示,Vdc为输入直流电压,S1S4是功率MOSFET管.L为输出滤波电感,C为输出滤波电容。其控制环节采用电压外环电流内环的双环PID控制。采用输出电压与给定电压进行比较得到误差电压,误差电压经过PI环后成为电流环的给定,与电流采样值再进行比较.再经过P环节,蛀后由DSPPWM环节产生控制信号。由于电感电流等于电容电流和负载电流之和,其中电容电流为输出电压的微分,对电感电流进行控制相当于使系统能超前对输出电压进行控制,因此能得到更好的动态性能。另外电感电流包含了负载电流,所以又可以对负载起到限流作用。

    逆变器输出电压的采样为差分采样模式,电感电流采样采用电流霍尔器件。电压采样系数为0.0109,则采样精度为 小于0.lV(其中,3VDSP采样的最大电压值)满足系统要求。

    根据逆变器的结构框图可以得到逆变器系统的控制框图,如图3所示。其中, 是电压环PI调节的传递函数;K1为电流环P调节参数;KmPWM环节的有效增益;K1为内环电流环的增益;K2为电压外环的增益;HSH(S)为零阶保持环节, 为由于开关频率fs较高,即Ts较小,所以近似为

    2.1.1 电流内环的参数设计

    为了达到较高的精度,在程序设计时将采样值做Q18的变化,(DSP里只能进行定点数的计算,Q18是把浮点数转换为定点数的一个过程)即在原来的基础上乘以218,在设计参数的时候应该考虑该系数。内环电流环的增益为K1=(16)×218=43691,交越频率取15的开关频率,取开关频率为100kHzVdc200V计算,则

    212 电压外环的参数设计

    同样的,外环电压环的增益为K2=O0109×218=2857

    Kvp=O.1Kvi=3140,即取PI环节补偿频率为5kHz。取开关频率为100kHz。其离散波特图如图4所示。从图4中可得,系统相位裕量为60°,满足稳定性要求。

     

    2.2 DCDC级控制给定设计

    本文采用DCDCDCAC两级联合凋节,以达到功率信号源的高精度要求。DCAC级采用双极性的逆变器凋压方式,幅度调制比为m=Usm/Ucm

    式中:Usm为正弦调制波的幅值;

    Ucm为三角载波的幅值。

    在双极极性SPWM调压方法中,逆变桥的直流母线电压的利用率为

    在深度调制,即m值较小的情况下,ucu8的交点贴近横轴,输出电压每个载波周期的宽度近于相等,即接近于方波,其输出谐波的幅值较高,会影响输出电压的精度,所以,m值越高越好。同时,为避免由于PWM控制脉波过窄和死区等因素使PWM脉波丢失,m值不宜取的太高。一般情况mO9

    m一定时,根据该式和所要求的功率信号输出电压值可计算出DC/AC级的输入电压值,并由此给出DCDC级输出电压的给定值。由于在基频50Hz的情况下,有时需要叠加030%的直流分量或者与29次的各次谐波,所以输出电压幅值作为参考。在不需要叠加的时候,当输出电压Vo已给定,则输出电压幅值Vom也相应给定,输入电压由公式

    确定,取m=0.9,则

    在叠加直流分量与谐波的时候,当输出基频的电压幅值与所叠加的直流分量或谐波的次数与幅值都给定后,则得到一个输出电压的幅值Vom,考虑功率MOSFET的通态压降等因索,输入电压给予一定的裕量,对上述公式进行一定的修正:

    考虑输出电压的稳定性,设置了一个Vdc的最小值,即当Vom>8V(这里的Vom包括不叠加的与叠加后的)时,Vdc=Vom0.8,而当Vom

    DSP里,逆变器输出电压的给定值是以一个单位正弦表(Q15)乘以一个给定值(Q10)的形式给出的,最终与逆变器输出电压的采样值比较的数是一个Q25的数(即单位正弦表里的数乘以系数225).所以输出电压最小可调步长为

    满足系统要求。

    当输出频率改变时则调用变频子程序。由于输出电压频率从20"1000Hz可变,为了达到一定的精度要求,希望开关管的开关频率尽量高,在这里,采取分段的方式来进行设置,如图6所示。

    采取分段方式设置开关频率的目的是为了在整个频率范围内都有一个较高的开关频率,以提高精度并易于输出滤波。表l中给出了不同频率范围段的相位精度及最小可调步长。在20100Hz情况下,最小可调步长小于O1 Hz满足系统要求,在100Hz以上最小可调步长小于1 Hz也满足系统要求。这样,保证了在输出电压频率范围变化较大的情况下,开关频率的变化范围大概从60"126kHz,取L=1mHC=047μF,截止频率约为73kHz,对上述开关频率的范围都可以达到较好的滤波效果。

    3 实验结果

    实验结果如图7"12所示。

    4 结语

    本文提出了变频调压功率信号源的设计方案.通过TMS320F2812DCDCDCAC两级联合调节,实现了高精度的宽范围变频调压交流电源。

     

  • F28335核心之一在于CMD文件的合理分配,千万要慎重,防止程序空间和数据空间的重复利用,不然会进入非法中断服务程序,呵呵。剩下的就是一些寄存器的配置,高低速时钟==。仔细看看资料就可以了,TI的例程源码是我们学习的捷径,一定要好好利用。另外,我发现芯片不能用手碰,按一下,仿真器就断线了,不知道咋回事?也许是仿真器的问题,你们出现这个问题了吗?它的IO寄存器操作和ARM很相似,应该说一模一样。总之,用起来还是挺方便的...丰富的外设资源,设计者更加灵活,方便...

  • 从Word贴不上图,汗颜了

  • SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。

    DSP TMS320F2812的SPI使用总结.doc
  • word里面有一段程序,希望大家相互研讨,共同进步

  • 关于浮点的DSP程序,如果有错误希望大家指正。谢谢

  • TMS320F28335 GPIO使用问题

     

            在光伏并网逆变器研发项目中,曾经使用TMS320F2808作为主控制芯片,整体逆变器运行正常,并经过了严格的产品验证和长期的产品运行,这款产品也已经比较成熟了。随着科技的进步和市场需要,对产品提出了系统精度、性能、功能等方面的新的要求。在后期,对主控电路做了更新,将主控芯片提升为28335

            其它电路及电路设计就不再做阐述了,直接对程序移植中遇到的GPIO问题及解决方法分享给大家。

            使用GPIO作为输出控制外部接触器,为了增强其抗干扰能了,在每个中断321.5us周期,对GPIO进行输出。当连续使用GPIO时,只有第一条指令执行了,代码如下:

          GpioDataRegs.GPBDAT.bit.GPIO50 = 1;

          GpioDataRegs.GPADAT.bit.GPIO51 = 1;

            查看GPIO对应的配置也不存在问题,笔者开始怀疑是不是编译器在执行编译的时候忽略了后面的代码,然后就在两句GPIO设置之间加入了NOP空语句,结果运行正常了。真的是编译器的问题吗,笔者还是有些怀疑,为了确认是不是这个问题,查看了C代码和对应编译完成的汇编代码,结果发现,加入NOP空语句前及以后,只是在中间多了NOP空指令,说明编译器没有忽略任何代码。

    在仿真状态下,笔者对未加入空语句的程序,进行单步执行,运行没有问题,指令执行正确,这下令笔者更不明白了。后来又问过一些高人,都不能说清是什么问题,但是解决方法就是中间加入NOP空语句。望后来者若也遇到这样的问题,不如试试我这种解决方法吧,若有高人能解释为什么,期望能给我回帖哦,小弟不胜感激。

  • 怎么发的文字不显示?

    {

    Ecap有好几个功能:

    第一:捕获外部信号,可以设置为捕捉信号的上升还是下降沿

    第二:计算外部方波信号的周期和占空比,在这里可以分别对CAP1、CAP2、CAP3和CAP4上升沿或下降沿动作进行设置

    ECAP可以产生以下几个中断:

    CTR = CMP

    CTR = PRD

    ......................

    }

  • C2000学习分享

    一、TI的资料支持

    C2000全套软硬件资料

    controlSUITE软件是TI针对C2000推出的可支持实时控制应用的软件,相较于传统的MCUcontrolSUITE软件可为简化评估、应用调适、除错、测试及重复使用,提供内容及必要的内容管理。除包含一般免费软件产品常见的简单范例外,还为马达控制等应用,提供可做为真正开发系统使用的全面开放原始码数据库与范例。此外,全新安装程序还可消除版本更新与依赖性等问题,并让开发人员能够于同一地方获得完整的软件产品。

    下载链接:http://www.ti.com.cn/tool/cn/controlsuite

    通过controlSUITE,工程师可以获得C2000全套的、开源的软硬件资料。以下为升级后的目录参考,大家可以下载此软件后,自动在线升级。

    二、TI C2000的系列