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只有一次获奖机会
每周做一次审核。先到先得!
  • 看着童鞋们参加的这么踊跃,也来插科打诨一番,这是之前做的一个28335的核心板,拿出来简单的讲一下,献丑了~

    TMS320F28335最小系统板设计

    核心板采用TMS320F28335作为核心处理器,配有标准的JTAG接口、电源管理、自启动设定、复位和时钟等模块。同时,将F28335芯片引脚全部引出,便于二次开发。

    电源模块

    核心板采用TI公司的双路输出低压差稳压芯片TPS767D301提供TMS320F28335所需要的+3.3V I/O电源和+1.9V内核电源,并采用一个LED作为上电指示。系统中将数字电源与模拟电源、数字地与模拟地分开。模拟地与数字地之间加磁珠,抑制高频串扰。

    TPS767D301中的可调电压调整器输出可以在1.5~5.5V范围内进行调节,这种调整主要是通过外接一个电阻取样网络来实现,可调的输出电压可由下式决定:

    式中, =1.1834V

    电源模块电路图如图1所示。


    图1 核心板电源模块电路

    外围电路设计

    核心板外围电路设计包括以下几部分:

          1) 复位电路:采用阻容式复位电路,以方便进行手动复位。RC回路充电时间常数为22ms,确保成功复位;

          2) JTAG接口:按照通用标准设置,方便程序的调试和烧写;

          3) 时钟电路:采用30MHz无源晶振,与DSP内部电路组成谐振电路,经PLL倍频后获得150MHzCPU时钟;

          4) 自启动设定电路:采用贴片式的拨码开关,SO-8封装,体积小巧不易造成误拨动。

    各部分的原理图如图2所示:

    图2 外围电路原理图

    最后打出来的板子,展示一下:






  • TMS320F2812用于高压测试仪时问题

    我曾经设计过一款高压测试仪,此仪器输出高达1W伏特的高压(AC/DC可选);将此电压施加于被测体上时会有击穿电流,仪器检测此击穿电流并显示出来。

    先讲一下原理:

    1、高压输出原理:高压的产生使用了TMS320F2812的PWM功能,通过查找波表的方式产生SPWM驱动波,经过数字功放、LC滤波、变压器升压【直流还包括倍压整流】,生成电压;通过电阻对输出电压采样。

    2、恒压原理:利用电阻分压,分压后的采样电压经运放调理后进入TMS320F2812的ADC转变为数字量,软件对数字量校正后,通过定时中断中的PID实时算法,调整SPWM脉宽比,从而使输出电压稳定于设定电压。

    3、电流检测:利用采样电阻将被测体击穿电流转变为电压,经过运放调理后进入TMS320F2812的片内ADC转变为数字量,软件对其校正后通过LCD显示出来。

    再讲遇到的一个有趣的小问题。

    此仪器带有电弧侦测功能,检测击穿电流中的高频分量,从而判断有无电弧产生,并且可以设定5个比较等级,对应判断5种强度的电弧是否产生。

    原理是击穿电流通过采样电阻转为电压,用高通滤波器滤出高频分量信号;此信号输入到高速比较器的一端;高速比较器的另一端接一片DAC的输出端,比较器的输出接TMS320F2812的外部中断脚。这样,通过比较设定的DAC电压和采样信号的大小,比较器的输出就能触发中断,一旦有中断产生,则判断此设定等级的电弧发生。

    问题是:

    实验中发现,电弧的强度不仅与电弧信号的峰值有关系,而且与频率有关系,仅靠峰值无法鲜明地区分各个等级。还要区分频率。

    当初因为电路板空间所限很难再加入其他电路,只能软件处理。非常纠结~@!

    解决办法:

    后来突然想起,TMS320F2812的输入脚有量化功能(GPXQUAL寄存器),通过设置量化周期位(QUALPRD位)的大小,能够实现量化周期从75MHz到292KHz的变化,从而实现对的输入信号进行“可变截至频率的LPF数字滤波”,几经实验,确定了几个量化周期的经验值,成功的实现了电弧等级的区分!没有废一个电阻一个电容就实现了功能。

    TI的芯片功能做的如此之细,真是“良苦用心”~! 还真能解决大问题~!

  • 基于TMS320F28335的直流电机PID控制

    在之前的项目中我们需要控制两个直流电机,一个控制漏斗中物料的搅拌速度,另一个控制传送带的转动速度,通过一个PBS电子称实时测量漏斗中物料重量,通过三者的协调控制,实现一个固体流量计的设计。在开发中我们综合成本,开发周期等因素采用TMS320F28335作为主控制器。

    TMS320F28335具有150MHz的高速处理能力,具备32位浮 点处理单元,6个DMA通道支持ADC、McBSP和 EMIF,有多达18路的PWM输出,其中有6路为TI特有的更高精度的PWM输出 (HRPWM),12位16通道ADC。得益于其浮点运算单元,用户可快速编写控制算法而无需在处理小数操作上耗费过多的时间和精力,与前代DSC相比,平均性能提高50%,并与定点C28x控制器软件兼容,从而简化软件开发, 缩短开发周期,降低开发成本。

    两个直流电机都带有速度反馈,反馈信号为方波脉冲,其频率与转速成正比(电机转动一圈产生两个脉冲)。额定工作电压都为+12V,额定转速为100转,电机控制采用闭环控制系统,DSP 发送的PWM 波控制直流电机的转速,通过速度反馈,DSP 可实时读取当前速度值,利用 DSP 中运行的控制程序根据速度读数控制 PWM 的脉宽,从而实现闭环调速控制。

     

    直流电机设计原理

    程序设计

    控制环节:系统维护一个全局变量 pwm,计算控制电机绕组电压的 PWM 波形的占空比,取值越大,通过电机的电流越多,电机加速,反之,占空比越小电机越慢。

    采样环节:由于电机速度反馈信号频率为几十赫兹,所以设计测量周期较长,这样保证偶然偏差值较少发生,但系统“反应”较慢。采样脉冲设计为 1 赫兹的方波信号。测量的

    结果为电机转动圈数,比如测速结果为 84,则实际转速为 84 转/秒。

    计算环节:去PID控制取 P=0.6、I=0.2、D=0.1,直接由测速结果计算出占空比调节增量,计算中限制了增量的最大值不能超过 10,以免引起太大的电流波动。  

    // PID算法控制子程序

    void PIDControl(int rk,int yk)

    {

        ek=rk-yk;

        duk=a*ek+b*ek1+c*ek2;       // 计算控制输出

        ek2=ek1; ek1=ek;

        if ( duk>10 )   duk=3;      // 幅度限制

        tz=(int)duk;

        pwm+=tz;                    // 计算当前占空比

        if ( pwm<0 )    pwm=0;

        else if ( pwm>99 )  pwm=99;

    }

    采用DSP进行电机的PID控制,大大提高了固体流量计的流量达到设定值的稳定时间,之前在ARM中做的PID控制达到稳定值需要1分钟左右,在DSP中只需要10秒左右就可以了。稳定PID控制的参数可以随需要变化,当采用不同的参数组合时,得到的系统响应也不尽相同,优化的参数区值并不是唯一的。在凑试参数时,可以按照先比例—后积分—再微分的顺序反复调试参数,直到满意为止。

  • TMS320LF2407A学习总结

    1、 芯片选型

     因为电路需具备AD转换,CAN通讯,SPI通讯等功能,程序较复杂,关键是处理速度要快,所以选用了内部有flash,16路AD,CAN2.0的LF2407;首先在设计LF2407电路就花了相当长的时间 。在设计原理图时因为要客服Flash烧写次数有限的问题,还要考虑程序的加载方式,以及由此带来的电路结构的改变问题

    2、仿真器采用合众达XDS51-USB2.0 ,TI DSP Emulator。首先安装驱动就花了大半天时间,XDS51-USB2.0的驱动必须安装在CCS3.3的根目录下面而不是它的默认目录。在安装驱动钱要将之前安装其他DSP驱动卸载掉。

    3、  最小系统设计

     3.1   电源设计

       低纹波,高稳定的电源电压对于DSP系统有重要意义,   电源设计的关键是选择合适的3.3V器件, 实际用的是7333,具有低功耗(静态3.3uA),高精度(%2),低压差(0.12V/100mA)。

    3.2  时钟电路
         为了降低成本,我们使用片内振荡器,与无源晶振,起振电容一起连接成三点式振荡器来产生稳定时钟。连接起振电容是为了保证正常的起振,对于振荡频率的影响极小。为了简化FLASH的烧写,我们使用默认的10MHZ。

    3.3 电源滤波和接地问题

    滤波电容要分布在DSP的各个电源管脚的输入引脚上,作为滤波,旁路,和退藕,DSP电源引脚相对集中的可以作为一组处理,但其模拟电源端和地必须就近接一个高性能的电容。

     

  • 德州仪器推出新型高集成度 C2000™ 32 位 Piccolo™ F2805x 微控制器

    http://www.eeworld.com.cn/mcu/2012/1106/article_11057.html

    德州仪器推出新型高集成度 C2000™ 32 位 Piccolo™ F2805x 微控制器 2012-11-06 11:19:21 来源:EEWORLD 关键字:德州仪器 C2000™ Piccolo™ F2805x 微控制器 2012 年 11 月 6 日,北京讯。日前,德州仪器 (TI) 宣布推出最新电机控制解决方案 — 新型高集成度 C2000™ Piccolo™ F2805x 微控制器、电机控制软件、特定应用开发工具和广泛的支持,使电机控制设计不再复杂。这些 Piccolo 微控制器经过优化,适用于各种三相变频电机控制应用,旨在提升电泵、风机、牵引驱动装置、纺织机等的电源效率和控制性能。

    新型 Piccolo F2805x 微控制器将许多模拟组件紧凑封装在芯片上以提高系统效率,减少分立部件的数量。借助可采用 C 语言进行编程的控制律加速器 (CLA) 片上协处理器,Piccolo F2805x 微控制器可实现 TMS320C28x™ 数字信号处理 (DSP) 内核的高智能和高性能。CLA 是一个 32 位浮点数学加速器,专为独立于 CPU 内核工作而设计,以分担时间敏感性控制算法或 DSP 处理,从而将 CPU 解放出来去处理运动轨迹、系统管理、通信和安全检查,使闭环应用性能最高可提升至 5 倍。

    Piccolo F2805x 微控制器的特性与优势:

    • 工作频率为 60 MHz 的 C28x CPU 与可采用 C 语言进行编程的 32 位浮点 CLA 协处理器(工作频率也是 60 MH)珠联璧合,能简化编程,提高灵活性,并可直接访问片上外设以并行执行算法和控制回路。CLA 可实现更快的系统响应速度,更高 KHz 的控制回路以及完善的触发和故障检测功能。

    • 嵌入式存储器可实现更大的存储空间,包括高达 128 KB 的闪存和高达 20 KB 的SRAM。闪存及 ROM 保护区的启动 ROM 与双 128 位安全密钥可为整个器件或混源软件开发确保代码的安全性。 • 片上通信接口,例如SPI 模块、I2C 总线、CAN 2.0 与 3 SCI/UART 模块等可改善实时通信的连接性。

    • 集成式模拟可提高系统效率并降低材料清单 (BOM) 成本:

    - 高达 2.3 MSPS 的 12 位模数转换器 (ADC) 适用于同步电机相位读数 — 双采样和保持功能。

    - 具有故障管理机制的 14 个增强型脉宽调制 (PWM) 通道可为多台电机和电源转换提供电机控制功能。 - 7 个视窗化的模拟比较器带有 10 位数模转换器 (DAC),可针对每个电机相位、集成式故障保护和准确而及时的反馈提供独立的电流反馈。

    - 通过集成片上时钟源并提供附加的后备振荡器来实现从时钟故障条件下的顺利恢复,双路零销振荡器可提升系统的稳健性。 - 电压调节器能用统一的电源电压轨给微控制器供电,从而降低系统复杂性和成本。

    - 可编程增益放大器 (PGA) 多达 4 个,能在 ADC 转换之前充当可变电阻器来调整传入的反馈波形,从而降低成本并减小电路板面积。

    - 32 位增强型输入捕捉模块 (eCAP) 和增强型正交编码器脉冲 (eQEP) 模块适用于带传感器的电机控制,可精确检测并捕获旋转运动系统的位置和速度。

    工具、软件、培训和支持使电机控制开发不费吹灰之力

    借助 TI 附免费开源电机控制软件库和示例的电机控制开发套件,设计人员可轻松着手进行开发工作。这些库和示例项目可用于 Piccolo F2805x 微控制器的 C28x 与 CLA 两种内核,拥有的功能几乎涵盖了所有必要电机控制数学功能及特定器件外设配置。以精简为理念设计的电机控制库是完全模块化的,完美适用于开发的各个阶段,使设计人员能将诸多功能软件代码块连接在一起,就像对方框图的各个模块进行连接一样。连接完电机控制库的软件块后,设计人员即可轻松调谐其参数,并将代码和闪存编译到 Piccolo F2805x 微控制器。

    基于 C2000 Piccolo 的模块化开发工具能借助各种 C2000 微控制器进行实验,以满足性价比和外设功能设置的要求。这些工具包括:C2000 LaunchPad、controlCARD、controlSTICK 与 C2000 实验套件。所有这些工具均涵盖 TI Code Composer Studio v5 集成开发环境和 C2000 controlSUITE™ 软件,可提供易于使用的开源演示 GUI、软件示例和电机控制开发文档。

    在线提供电机控制培训,此外,TI E2E 社区还提供 24/7 全天候技术支持。 供货情况 Piccolo F2805x 微控制器立即可以订货。各种 C2000、电机控制和 Piccolo 工具也开始以不同的价位供货。 TI 在线技术支持社区 欢迎加入德州仪器在线技术支持社区与同行工程师互动交流,咨询问题并帮助解决技术难题:www.deyisupport.com。

    TI 广泛系列的微控制器 (MCU) 与软件 从通用型超低功耗 MSP MCU 到 Stellaris® Cortex™-M MCU、再到实时控制 C2000™ MCU、乃至 Hercules™ 安全 MCU,TI 可提供最全面的微控制器解决方案。通过充分利用 TI 完整的软硬件工具、广泛的第三方产品以及技术支持,设计人员可加速产品的上市进程。 商标 C2000、Piccolo、controlSUITE 与 Code Composer Studio 是德州仪器 (TI) 的商标,Stellaris 是一个注册商标。所有注册商标与其它商标均归其各自所有者专属。

  • 基于TMS320F2812的正弦脉宽调制SPWM

    具体请参考附件

    基于TMS320F2812的正弦脉宽调制SPWM.pdf
  • 谈F28M35的M3侧的blink例程

    从简单的谈起吧。

    1、程序先进行了HWREG(SYSCTL_MWRALLOW) =  0xA5A5A5A5;  因为 //必须写入0xA5A5A5A5,之后才能够改写一些被MWRALLOW保护的寄存器

    关于哪些寄存器被保护可以参考1.13.1 System Control, Configuration Register Map

    2、之后进行了    SysCtlClockConfigSet(SYSCTL_USE_PLL | (SYSCTL_SPLLIMULT_M & 0xA) |

                            SYSCTL_SYSDIV_1 | SYSCTL_M3SSDIV_1 |

                            SYSCTL_XCLKDIV_4);

    //设置 PLL,PLLSYSCLK=200M,M3 = 100MHz and = 100MHz,XPLLCLKOUT=50MHZ

        //SysCtlClockConfigSet(unsigned long ulConfig)                    

        //bits 21, 20 of ulConfig 代表SYSDIVSEL,设定C28X内核的速度是PLLSYSCLK除1、2、4、8,这里设为1

        //bits 19, 18 of ulConfig 代表M3SSDIVSEL,设定M3内核的速度是PLLSYSCLK除1、2、4,,这里设为1

        //bits 17, 16 of ulConfig 代表XPLLCLKCFG,设定XPLLCLKOUT的速率为PLLSYSCLK除1、2、4,这里设为4

        //bits 9-0 of ulConfig 代表SYSPLLMULT的整数和小数部分,这里设为10;PLLSYSCLK = Fref * SYSPLLMULT /2 /SYSDIVSEL divider,

        //bit 31 of ulConfig代表SYSPLLCTL[0],允许PLL上电

    3、    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);

                // 用于设定Run Mode Clock Gating Control Register  (RCGC)寄存器

    4、  // 禁止看门狗模块

       SysCtlPeripheralDisable(SYSCTL_PERIPH_WDOG1);

       SysCtlPeripheralDisable(SYSCTL_PERIPH_WDOG0);

       //允许中断

       IntMasterEnable();

       // 设置相应的GPIO引脚为输出状态,为推挽输出,无弱上拉.

       GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_7);

       GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_7, ~0);

  • 采用C2000 TMS320F28027的LaunchPad启动开发工作

    C2000被广泛用于数字电机驱动、数字电源控制、新能源、等工业、家电、汽车方面的应用。C2000 Launchpad开发板是德州仪器公司2012年推出的一款非常超值的针对TMS320F2802x0系列MCU的开发板。本培训课程包含六个部分,包括介绍 C28x CPU的架构,开发编程调试环境Code Composer Studio,外设头文件与例程,复位、Watchdog、中断和系统初始化设计,PWM、ADC、CAP和QEP等控制外设,片山闪存的编程、加密和Boot模式。本课程由TI资深专家罗焰明主讲,并有丰富的针对基于Launchpad的C2000例程设计实验讲解及互动,内容精彩不容错过!

    【关于C2000】:

    C2000 Piccolo LaunchPad 是价格低廉的评估平台,旨在帮助您跨入 C2000 Piccolo 微控制器实时控制编程领域。 LaunchPad 基于 Piccolo TMS320F28027,具有 64KB 板载闪存、8 个PWM 通道、eCAP、12 位 ADC、I2C、SPI、UART 等大量独有特性。 它包含许多板载硬件,例如,集成的隔离式 XDS100 JTAG 仿真器使编程和调试简单易行;采用 40 PCB 引脚,可以方便地连接 F28027 处理器的引脚;具有重置按钮和可编程按钮等。C2000 LaunchPad 不仅有开发所需的硬件,还使用户可以通过免费的 controlSUITE 访问示例代码、库、驱动程序以及大量其他资源。 用户还可以与 controlSUITE 一起下载 Code Composer Studio 集成式开发环境(IDE) 版本 5 的无限制版。

    利用进行开发所需的所有硬件和软件,用户可以集中精力学习或开发在数字照明、电机控制、数字功率转换、精度感应等大量领域中使用的实时控制系统。

  • 刚注册随便看看

  • 基于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 芯片兼容。

  • 看球回来,分享一下我自己在学TMS320F2812DSP遇到的一些小问题。纯粹自己理解,错误之处望见谅,多指正。

    首先,是延迟函数的使用:在做电机调速时,发现自己用C简单编写的延迟delay函数,会出现实际延迟时间与程序设定时间误差较大的情况,查阅一些资料,发现可以利用例程里已有的延迟汇编文件,编写较为准确的延迟函数DELAY-US(),且调用简单可靠。具体步骤如下:1,下载DSP281x_usDelay.asm文件,将内容改为

    extern void DSP28x_usDelay(Uint32 Count);

    .def _DSP28x_usDelay

    .sect "ramfuncs"

    .global __DSP28x_usDelay

    _DSP28x_usDelay:

    SUB ACC,#1

    BF _DSP28x_usDelay,GEQ ;; Loop if ACC >= 0

    LRETR

    放于工程的source中;

    2,在MOTOR.H文件中定义

    #define CPU_RATE 6.667L // for a 150MHz CPU clock speed (SYSCLKOUT)

    #define DELAY_US(A) DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L)

    3,在GlobalPrototypes.h中定义

    extern void DSP28x_usDelay(Uint32 Count);

    4, 在程序中直接调用DELAY_US(A),例如 DELAY_US(1000L);,表示延迟1ms 。

    其次,是2812flash烧写的问题,具体步骤如下:(1) 下载烧写FLASH配套CMD文件、LIB文件以及起始代码asm文件。

    CMD文件名称:DSP281x_Headers_nonBIOS.cmd

    CMD文件名称:Flash.cmd

    LIB文件名称:rts2800_ml.lib

    ASM文件名称:DSP281x_CodeStartBranch.asm

    (2)配置C文件

    配置好主程序的C文件,才能将FLASH成功烧录,并且将FLASH中的文件拷贝到RAM中运行。

    关于C文件的配置。

    首先在F2812.CMD文件中,我们可以看到有关于加载FLASH到RAM的内容:

    ramfuncs : LOAD = FLASHD,

    RUN = RAML0,

    LOAD_START(_RamfuncsLoadStart),

    LOAD_END(_RamfuncsLoadEnd),

    RUN_START(_RamfuncsRunStart),

    PAGE = 0

    以及在C文件中调用FLASH 到RAM的函数memcpy,将它放在系统初始化(InitSystem();)之后即可:

    InitSystem();

    memcpy(&RamfuncsRunStart,

    &RamfuncsLoadStart,

    &RamfuncsLoadEnd - &RamfuncsLoadStart);

    Initflash();

    关于ramfuncs,则在系统初始化中定义即可。如:sysctrl.c中

    #pragma CODE_SECTION(InitFlash, "ramfuncs");

    (3)我们需要定义所用变量:

    extern Uint16 RamfuncsLoadStart;

    extern Uint16 RamfuncsLoadEnd;

    extern Uint16 RamfuncsRunStart;

    我的这些定义都是:DSP281x_GlobalPrototypes.h 当中,当然,也可以放在其他系统初始化的地方。

    Memcpy这个函数应该是rts2800_ml.lib库文件中自带的,不需要我们定义。

    (4)烧写成功后的注意事项:

    1. 一定要拔除仿真器(JTAG端),给电路板重新上电,方能实现FLASH启动。

    2. 注意MP/MC引脚的电压。0为方式MC来作为计算机模式启动,3.3V为方式MP作为微处理器模式启动。

    3. 由于GPIO引脚的F4\F12\F3\F2决定了DSP2812的启动顺序,而从FLASH必须要在F4(SCITXDA)为1,而F12\F3\F2随意的状态下启动。请大家启动前确认F4引脚电压。

  •  

    与大家分享分享有关CMD文件,还请批评指教。

    C2000系CMD文件的配置理解
    CMD的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件,
    其中比较关键的就是MEMORY和SECTIONS两个伪指令的使用,常常令人困惑,
    系统出现的问题也经常与它们的不当使用有关。
    CCS是从DOS系统下DSP软件继承的开发环境。

    从DOS环境下的CMD说起:
    1命令文件的组成

    命令文件的开头部分是要链接的各个子目标文件的名字,
    这样链接器就可以根据子目标文件名,将相应的目标文件链接成一个文件;
    接下来就是链接器的操作指令,这些指令用来配置链接器,
    接下来就是MEMORY和SECTIONS两个伪指令的相关语句,必须大写。
    MEMORY,用来配置目标存储器,SECTIONS用来指定段的存放位置。

    结合下面的典型DOS环境的命令文件link.cmd来做一下说明:

    file.obj            //子目标文件名1

    file2.obj        //子目标文件名2

    file3.obj        //子目标文件名3

    - o prog.out  //连接器操作指令,用来指定输出文件

    - m prog.m    //用来指定MAP文件

    MEMORY

    { 略 }

    SECTIONS

    { 略 }

    otherlink.cmd


    本命令文件link.cmd要调用的otherlink.cmd等其他命令文件,
    则文件的名字要放到本命令文件最后一行,
    因为放开头的话,链接器是不会从被调用的其他命令文件中返回到本命令文件。
    2 MEMORY伪指令


          MEMORY用来建立目标存储器的模型,
    SECTIONS指令就可以根据这个模型来安排各个段的位置,
    MEMORY指令可以定义目标系统的各种类型的存储器,及容量。MEMORY的语法如下:

    MEMORY

    {

    PAGE 0 : name1[(attr)] : origin = constant,length = constant

    name1n[(attr)] : origin = constant,length = constant

    PAGE 1 : name2[(attr)] : origin = constant,length = constant

    name2n[(attr)] : origin = constant,length = constant

    PAGE n : namen[(attr)] : origin = constant,length = constant

    namenn[(attr)] : origin = constant,length = constant

    }

    PAGE关键词对独立的存储空间进行标记,页号n的最大值为255,实际应用中一般分为两页,PAGE 0程序存储器和PAGE 1数据存储器。

    name存储区间的名字,不超过8个字符,不同的PAGE上可以出现相同的名字(最好不用,免的搞混),一个PAGE内不许有相同的name。

    attr的属性标识,为R表示可读;W可写X表示区间可以装入可执行代码;I表示存储器可以进行初始话,什么属性代码也不写,表示存储区间具有上述的四种属性,基本上我们都选择这种写法。

    origin:略。

    length:略。
    下面是简单的写法供大家参考,程序从0x060是要避开加密位,不从0x0044开始更可靠一点,此例中的同名的页可以只写第一个,其后省略,但写上至少安全一点:


    MEMORY

    {

          PAGE 0: VECS: origin = 0x0000,  length 0x40

          PAGE 0: PROG: origin = 0x0060,  length 0x6000

          PAGE 1: B0  : origin = 0x200,  length 0x100

          PAGE 1: B1  : origin = 0x300,  length 0x100

          PAGE 1: DATA: origin = 0x0860,  length 0x0780

    }
    3 SECTIONS伪指令
    SECTIONS指令的语法如下:
    SECTIONS
    {
    .text:  {所有.text输入段名}  load=加载地址  run =运行地址
    .data:  {所有.data输入段名}  load=加载地址  run =运行地址
    .bss:  {所有.bss输入段名}    load=加载地址  run =运行地址
    .other: {所有.other输入段名}  load=加载地址  run =运行地址
    }
    SECTIONS必须用大写字母,其后的大括号里是输出段的说明性语句,每一个输出段的说明都是从段名开始,段名之后是如何对输入段进行组织和给段分配存储器的参数说明:
    以.text段的属性语句为例,“{所有.text输入段名}”这段内容用来说明连接器输出段的.text段由哪些子目标文件的段组成,举例如下

    SECTIONS
    {
    .text:{  file1.obj(.text) file2(.text) file3(.text,cinit)}略
    }

    指明输出段.text要链接file1.obj的.text和 file2的.text 还有file3的.text和.cinit。在CCS的SECTIONS里通常只写一个中间没有内容的“{ }”就表示所有的目标文件的相应段
    接下来说明“load=加载地址  run =运行地址”链接器为每个输出段都在目标存储器里分配两个地址:
    一个是加载地址,一个是运行地址。通常情况下两个地址是相同的,可以认为输出段只有一个地址,
    这时就可以不加“run =运行地址”这条语句了;但有时需要将两个地址分开,
    比如将程序加载到FLASH,然后放到RAM中高速运行,这就用到了运行地址和加载地址的分别配置了,
    如下例所示:
    .const :{略} load = PROG  run = 0x0800
    常量加载在程序存储区,配置为在RAM里调用。
    “load=加载地址”的几种写法需要说明一下,首先“load”关键字可以省略,
    “=”可以写成“>”, “加载地址”可以是:地址值、存储区间的名字、PAGE关键词等,
    所以大家见到“.text:{ } > 0x0080”这样的语句可千万不要奇怪。
    “run =运行地址”中的“ = ”可以用“>”其它的简化写法就没有了。大家不要乱用。


    4 CCS中的案例
    在CCS中的命令文件好像简化了不少,少了很多东西,语句也精简了好多,
    首先不用指定输入链接器的目标文件,CCS会自动默认处理,
    其次链接器的配置命令也和DOS的环境不同,需要了解的请找TI文档吧!
    下面是刘和平书中的例子,大家来看看是不是可以很精确的理解了呢!
    -stack 40
    /*-------------------------------------------------------------------------*/
    /*  命令文件 – 存储空间 F2407            */
    /*-------------------------------------------------------------------------*/
    MEMORY
    {
    PAGE 0 :  VECS : origin =    0h , length = 40h  /*  程序复位 */
          PVECS : origin =  40h , length = 70h  /* 外围模块中断向量 */
          PROG : origin =  0b0h , length = 7F50h  /* 在片FLASH */
    PAGE 1 :  MMRS : origin =    0h , length =  05Fh  /* MMRS            */
        B2 : origin = 0060h , length =  020h  /* DARAM B2 块  */
        B0 : origin = 0200h , length =  100h  /* DARAM B0 块  */
        B1 : origin = 0300h , length =  100h  /* DARAM B1 块  */
    SARAM  : origin = 0800h , length =  0800h    /* SARAM 块  */
    EXT : origin = 8000h , length =  8000h  /* 外部存储器  */
    }
    /*-------------------------------------------------------------------------*/
    /* SECTIONS ALLOCATION                                                    */
    /*-------------------------------------------------------------------------*/
    SECTIONS
    {
        .reset  : { } > VECS  PAGE 0  /* 复位中断向量表 */
        .vectors : { } > VECS  PAGE 0 /* 中断向量表 */
        .pvecs  : { } > PVECS  PAGE 0 /* 外围模块中断向量表  */
        .text    : { } > PROG  PAGE 0 /* 代码 */
        .cinit  : { } > PROG  PAGE 0 
        .bss    : { } > SARAM  PAGE 1 /* 块 B2 */
        .const  : { } > SARAM  PAGE 1 /* 块 B2 */ 
        .stack  : { } > B1    PAGE 1 /* 堆栈—40个单元 */
    }

     

    谢谢。。。。。。。。。。。。

  • 刚刚听说有这个活动,过来看看发现竟然是最后一天了。

    分享一下我的几个程序吧,还有一篇文档(下载的,很不错的文档)。

    不多说了,上附件。

    F28027.rar
  • 有我,不知道什么时候能收到,很期待  

  • 活动结束,非常感谢大家的参与和分享! 我们尽快公布最后一轮的获奖者名单。

  • 活动结束了?期待继续有新活动!

  • 收到了,感谢deyisupport ,感谢TI。但是不知道为什么光盘打不开

  • To changhu fang: 麻烦您再试试, 如果您的光盘还是打不开,请您发站内信给我,我来联络一下,看看是否可以更换。谢谢!

  • 这期活动圆满结束了,再次感谢大家的参与!最后一批的获奖名单如下:

    优秀分享奖:

    Alonesky;Lei Liu1 ;kevin Lee1 ;zhongguang lu ;ting liu ;

    阳光普照奖:

    Qiangkai Xu ;jin kim;APPLE GORDEN ;yi zuo ;qing wan ;bryant peter ;whh ;jinsong liu ;Xia Meng ;cool Star1 ;Joseph Lin  

    物流公司会在本周与大家联络确认地址,尽快把奖品给您寄送过去。

    我们热切地期望大家继续关注TI官方社区!再次感谢大家的积极参与和分享!

  • 谢谢deyisupport ! 我想问下:是通过注册邮箱来联系快递地址吗?因为我没有看到哪里登记资料。

  • 谢谢deyisupport ! 我想问下:是通过注册邮箱来联系快递地址吗?因为我没有看到哪里登记资料。

  • 不知道什么时候联系我?

  • 上周, 物流公司已经给最后一批获奖的朋友发出邮件, 麻烦大家在规定时间内回复告知邮寄的信息. 谢谢!

  • deyisupport ,

    我们用TI的28035很久了,有一些项目经验,现在参加还有 TMDX28069USB 和LAUNCHXL-F28027  赠送吗?

  • 请问你还有5000的汇编指令资料吗?我正在到处找呢,之前没有会变基础。。。。

  • 可以的,今天也在研究struct和union定义方法

  • 很感兴趣,希望能下载资料

  • 您好,我准备用DAC8568这款芯片,但是TI官方不提供例程,您能否将您的关于这款DAC芯片的驱动程序借我参考一下,小弟不胜感谢。