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         历史数据调出查看