C28x系列的28069、28377D的PWM使用经验

[复制链接]

脉宽调制(PWM)基本的原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。

一般工程的底层代码搭建好之后,大部分应用程序中用到的PWM功能可以用以下三个函数表示:

修改PWM占空比、周期

typedef struct{

Uint16 TBPRD7;

Uint16 TBPRD8;

Uint16 TBPRD9;

Uint16 TBPRD10;

Uint16 TBPRD11;

Uint16 TBPRD12;

Uint16 CmpA7;

Uint16 CmpA8;

Uint16 CmpA9;

Uint16 CmpA10;

Uint16 CmpA11;

Uint16 CmpA12;

}PwmData;

void PwmManage(PwmData*data)

{

EPwm7Regs.TBPRD  = data->TBPRD7;

EPwm8Regs.TBPRD  = data->TBPRD8;

EPwm9Regs.TBPRD  = data->TBPRD9;

EPwm10Regs.TBPRD = data->TBPRD10;

EPwm11Regs.TBPRD = data->TBPRD11;

EPwm12Regs.TBPRD = data->TBPRD12;

EPwm7Regs.CMPA.bit.CMPA  = data->CmpA7;

EPwm8Regs.CMPA.bit.CMPA  = data->CmpA8;

EPwm9Regs.CMPA.bit.CMPA  = data->CmpA9;

EPwm10Regs.CMPA.bit.CMPA = data->CmpA10;

EPwm11Regs.CMPA.bit.CMPA = data->CmpA11;

EPwm12Regs.CMPA.bit.CMPA = data->CmpA12;

}

释放PWM

void PwmEnable(void)

{

EALLOW;

EPwm1Regs.TZCLR.bit.OST = 1;

EPwm2Regs.TZCLR.bit.OST = 1;

EPwm3Regs.TZCLR.bit.OST = 1;

EPwm4Regs.TZCLR.bit.OST = 1;

EPwm5Regs.TZCLR.bit.OST = 1;

EPwm6Regs.TZCLR.bit.OST = 1;

EPwm7Regs.TZCLR.bit.OST = 1;

EPwm8Regs.TZCLR.bit.OST = 1;

EPwm9Regs.TZCLR.bit.OST = 1;

EPwm10Regs.TZCLR.bit.OST = 1;

EPwm11Regs.TZCLR.bit.OST = 1;

EPwm12Regs.TZCLR.bit.OST = 1;

EDIS;

}

闭锁PWM

void PwmDisable(void)

{

EALLOW;

EPwm1Regs.TZFRC.bit.OST  = 1;

EPwm2Regs.TZFRC.bit.OST  = 1;

EPwm3Regs.TZFRC.bit.OST  = 1;

EPwm4Regs.TZFRC.bit.OST = 1;

EPwm5Regs.TZFRC.bit.OST = 1;

EPwm6Regs.TZFRC.bit.OST = 1;

EPwm7Regs.TZFRC.bit.OST = 1;

EPwm8Regs.TZFRC.bit.OST = 1;

EPwm9Regs.TZFRC.bit.OST = 1;

EPwm10Regs.TZFRC.bit.OST = 1;

EPwm11Regs.TZFRC.bit.OST = 1;

EPwm12Regs.TZFRC.bit.OST = 1;

EDIS;

}

上面代码中释放与闭锁PWM的功能是由软件TRIP实现的。

以上三个函数基本在两电平或者三电平逆变器上用的比较多,除此之外PWM还有很多其他功能,接下来笔者慢慢列举。

PWM启动ADC

这是一个比较常用的功能,基本上如果使用DSP的片内ADC,大部分都会用PWM触发ADC,或者外部中断启动ADC。

PWM启动ADC,主要是考虑启动ADC的周期,常规的做法启动ADC转换的周期就是PWM的周期,这种做法适用于PWM周期比较长的情况下,如果PWM周期比较短,可能需要隔好几个PWM周期,再启动一次ADC转换。

//ADC SOC

EPwm1Regs.ETSEL.bit.SOCAEN    = 1;        // Enable SOC on A group

EPwm1Regs.ETSEL.bit.SOCASEL    = 1;        // When TBCTR == 0x0000,EPWMxSOCA pulse will be

//generated

EPwm1Regs.ETPS.bit.SOCAPRD     = 1;        // Generate pulse on 1st event

PWM触发中断

一般DSP系统中的主中断,都是ADC转换完成后触发的主中断,因为大部分的应用需求,都是希望DSP进入主中断后能够读取ADCRESULT,所以采用ADC触发的中断,一点都不浪费时间。

但有人认为ADC是个不稳定的东西,他们认为ADC转换过程中有机率出现问题,这种情况下,会导致系统无法进入主中断,而产生一系列问题?所以也有人用PWM的CMPB触发的中断作为主中断,但CMPB要在ADC转换完成之后才能触发中断,,这是为了进入主中断后读取的ADCRESULT,是当前周期转换的,而不是上个周期的。

EPwm1Regs.ETSEL.bit.INTSEL = 6;        //  time-base counter equal to

//CMPB when the timer

//is incrementin

EPwm1Regs.ETPS.bit.INTPRD  = 1;           // Generate interrupt on 1st event

EPwm1Regs.CMPB  = 1000;

PWM的TRIP模块

TRIP这个词,不好翻译,暂时还是用英文吧,笔者也没有看过特别合适的中文翻译,PWM的TRIP模块,主要功能是关系到PWM的释放与闭锁,闭锁一般是使PWM的A、B 引脚输出低电平。

然后TRIP分为硬件TRIP、软件TRIP,这两者实现的功能是相同的,只是触发TRIP事件的源头不同。硬件TRIP事件是怎么产生的,把DSP的一个GPIO设置为TRIP引脚,当该引脚的电平被拉低时,立即产生TRIP事件,此时PWM即会被闭锁。硬件TRIP闭锁PWM的速度很快,软件闭锁,可能至少需要几十us或者一个中断周期才能够闭锁PWM。

软件TRIP就是实现人为的闭锁、释放PWM功能。

EPwm1Regs.TZSEL.bit.OSHT1 = 1; // one-shit

EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_LO;  //Force EPWMxA to a low state

EPwm1Regs.TZCTL.bit.TZB = TZ_FORCE_LO; // Force EPWMxB to a low state

创龙28377d历程_C28x系列的28069、28377D的PWM使用经验相关推荐

  1. 创龙基于Xilinx Artix-7系列FPGA处理器的HDMI、SFP接口

    处理器 Xilinx Artix-7 FPGA型号为XC7A100T-2FGG484I,逻辑单元101K个,DSP Slice 240个,在28nm节点实现最低功耗和成本. HDMI CON12和CO ...

  2. 创龙Xilinx Artix-7系列FPGA开发板的拨码开关、拓展IO

    TLA7-EasyEVM开发板是一款由广州创龙基于Xilinx Artix-7系列FPGA自主研发的核心板+底板方式的开发板,可快速评估FPGA性能.核心板尺寸仅70mm x 50mm,采用沉金无铅工 ...

  3. 广州创龙TLK7-EVM开发板介绍

    开发板简介 Ø 基于Xilinx Kintex-7系列高性价比FPGA处理器: Ø FPGA芯片型号为XC7K325T-2FFG676I,兼容XC7K160T/410T-2FFG676I,NOR FL ...

  4. 创龙TI TMS320C6678 DSP + Xilinx Kintex-7 FPGA

    开发板简介 基于TI KeyStone C66x多核定点/浮点DSP TMS320C6678 + Xilinx Kintex-7 FPGA的高性能信号处理器: TI TMS320C6678集成8核C6 ...

  5. 【学习分享】8 创龙TMS320C6748开发板 基于PRU的Demo例程演示

    hello亲爱的读者们,小编又来更新啦,今天例程所处开发环境依然还是广州创龙开发的TMS320C6748开发板,对往期文章有兴趣的读者可以转到置顶查看往期文章.至此,[学习分享]创龙TMS320C67 ...

  6. 创龙28377d历程_广州创龙SOM-TL138/1808/6748核心板 JTAG仿真器接口/LED

    前言 TL138/1808/6748-EVM是广州创龙基于SOM-TL138/1808/6748核心板开发的一款开发板.由于SOM-TL138/1808/6748核心板管脚兼容,所以此三个核心板共用同 ...

  7. 创龙Xilinx Zynq-7000系列XC7Z035/XC7Z045/XC7Z100高性能SoC处理器评估板SMA端子

    CPU CPU为Xilinx Zynq-7000 SOC,兼容XC7Z035/XC7Z045/XC7Z100,平台升级能力强,以下为Xilinx Zynq-7000特性参数: 创龙TLZ7xH-EVM ...

  8. 创龙Xilinx Zynq-7000系列SoC高性能处理器开发板的SFP+接口、FMC接口

    TLZ7xH-EVM是一款由创龙基于SOM-TLZ7xH核心板设计的开发板,底板采用沉金无铅工艺的6层板设计,为用户提供了SOM-TLZ7xH核心板的测试平台,用于快速评估核心板的整体性能. SOM- ...

  9. 创龙Xilinx Zynq-7000系列SoC高性能处理器开发板的RTC座、SMA端子

    CPU TLZ7xH-EVM是一款由创龙基于SOM-TLZ7xH核心板设计的开发板,底板采用沉金无铅工艺的6层板设计 CPU为Xilinx Zynq-7000 SOC,兼容XC7Z035/XC7Z04 ...

最新文章

  1. msf rhosts设置文件_聊一聊基于 msf 的免杀项目测试过程
  2. Linux scp常用命令
  3. 《SPARK/TACHYON:基于内存的分布式存储系统》-史鸣飞(英特尔亚太研发有限公司大数据软件部工程师)...
  4. time.h 详细介绍
  5. 第八章《对象引用、可变性和垃圾回收》(下)
  6. 关于.net项目从vs2003升级到2005的若干问题
  7. windows qt 不能debug_linux配置vlc-qt
  8. Qt深入:不能不知道的Type、Attribute和Flags
  9. 服务器搬迁方案_医院机房迁移细则规范 amp; 机房搬迁实施规划方案
  10. SASS+COMPASS 自适应 学习笔记
  11. WinRAR 永久去除弹窗广告
  12. C语言: gotoxy函数
  13. ITIL学习笔记——核心流程之:IT服务连续性管理
  14. word怎么加入html,Word中怎么放入html
  15. Oracle for update skip locked 详解
  16. calc() 工作原理
  17. mysql autoenlist默认_Dapper MySql DateTime 异常
  18. Lib之过?Java反序列化漏洞通用利用分析
  19. Serialize的使用
  20. Oracle打补丁步骤

热门文章

  1. 解决scrapy不执行Request回调函数callback
  2. wpf 图片绝对路径引用_Python Pillow 图片处理
  3. djanjo 使用a标签跳转_djangoGETPOST用法以及点击a标签和form表单跳转的类型取参等...
  4. c++ 线程软件看门狗_装配生产线MES系统软件
  5. 【算法•日更•第三十期】区间动态规划:洛谷P4170 [CQOI2007]涂色题解
  6. leecode刷题(4)-- 存在重复数组
  7. linux之expect
  8. boost 正则 分割字符串
  9. CPU是如何处理指令的
  10. c post请求网页_Python使用urllib2抓取网页