PWM1,2,3的A,B,C 6个通道初始化

#include "pwm.h"

//PRD:自动重装值
//CMPA:通道A比较值
//CMPB:通道B比较值
void InitEPwm123(int16 PRD)
{
   InitEPwmGpio();          //初始化EPWM1,2,3的GPIO
   Epwm1_Init(PRD);
   Epwm2_Init(PRD);
   Epwm3_Init(PRD);
}

//设置EPWM1模块
void Epwm1_Init(int16 PRD)
{
EPwm1Regs.TBPRD = PRD ; //设置周期
    EPwm1Regs.CMPA.half.CMPA = 0;  //设置占空比
EPwm1Regs.CMPB = 0;

// Setup TBCLK
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;  //递增模式
//EPwm1Regs.TBCTL.bit.CTRMODE =TB_COUNT_UPDOWN;  //增减模式
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;    // Disable phase loading
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;    // Disable phase loading
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;    //
EPwm1Regs.TBPHS.half.TBPHS = 0x0000;       // Phase is 0
EPwm1Regs.TBCTR = 0x0000;                  // Clear counter
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;   // Clock ratio to SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;      // TBCLK = SYSCLKOUT/(HSPCLKDIV*CLKDIV)

// Setup shadow register load on ZERO
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

// 递增模式的动作
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;            // Set PWM1A on Zero
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;          // Clear PWM1A on event A, up count
EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;            // Set PWM1B on Zero
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;          // Clear PWM1B on event B, up count
}

void Epwm2_Init(int16 PRD)
{
EPwm2Regs.TBPRD = PRD ; //设置周期
EPwm2Regs.CMPA.half.CMPA = 0;  //设置占空比
EPwm2Regs.CMPB = 0;
// Setup TBCLK
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//; // Count up
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;    // Disable phase loading
EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;    // Disable phase loading
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;    //
EPwm2Regs.TBPHS.half.TBPHS = 0x0000;       // Phase is 0
EPwm2Regs.TBCTR = 0x0000;                  // Clear counter
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;   // Clock ratio to SYSCLKOUT
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;      // TBCLK = SYSCLKOUT/(HSPCLKDIV*CLKDIV)

// Setup shadow register load on ZERO
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

// Set actions
EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET;            // Set PWM1A on Zero
EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;          // Clear PWM1A on event A, up count
EPwm2Regs.AQCTLB.bit.ZRO = AQ_SET;            // Set PWM1B on Zero
EPwm2Regs.AQCTLB.bit.CBU = AQ_CLEAR;          // Clear PWM1B on event B, up count
}

void Epwm3_Init(int16 PRD)
{
EPwm3Regs.TBPRD = PRD ; //设置周期
EPwm3Regs.CMPA.half.CMPA = 0;  //设置占空比
EPwm3Regs.CMPB = 0;
    // Setup TBCLK
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//; // Count up
EPwm3Regs.TBCTL.bit.PHSEN = TB_DISABLE;    // Disable phase loading
EPwm3Regs.TBCTL.bit.PRDLD = TB_SHADOW;    // Disable phase loading
    EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;    //
EPwm3Regs.TBPHS.half.TBPHS = 0x0000;       // Phase is 0
EPwm3Regs.TBCTR = 0x0000;                  // Clear counter
EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;   // Clock ratio to SYSCLKOUT
EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1;      // TBCLK = SYSCLKOUT/(HSPCLKDIV*CLKDIV)

// Setup shadow register load on ZERO
EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm3Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
    EPwm3Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

// Set actions
EPwm3Regs.AQCTLA.bit.ZRO = AQ_SET;            // Set PWM1A on Zero
EPwm3Regs.AQCTLA.bit.CAU = AQ_CLEAR;          // Clear PWM1A on event A, up count
    EPwm3Regs.AQCTLB.bit.ZRO = AQ_SET;            // Set PWM1B on Zero
EPwm3Regs.AQCTLB.bit.CBU = AQ_CLEAR;          // Clear PWM1B on event B, up count

}

头文件

#ifndef PWM_H_
#define PWM_H_
#include "main.h"
#if (CPU_FRQ_150MHZ)
  #define CPU_CLK   150e6
#endif
#if (CPU_FRQ_100MHZ)
  #define CPU_CLK   100e6
#endif
#define PWM_FREQ   10e3                // 10KHZ   If diff freq. desired, change freq here.
//#define SP        CPU_CLK/(2*PWM_CLK)   //上下计数模式
#define SP        ( (CPU_CLK/PWM_FREQ)-1 )     //向上计数模式的自动重装值   10Khz的PWM波

#define SP_UPDOWN         (CPU_CLK/(2*PWM_FREQ))    //向上计数模式的自动重装值

// Configure the period for each timer
#define EPWM1_TIMER_TBPRD  SP  // Period register
#define EPWM1_MAX_CMPA     SP-10
#define EPWM1_MIN_CMPA       10
#define EPWM1_MAX_CMPB     SP-10
#define EPWM1_MIN_CMPB       10

#define EPWM2_TIMER_TBPRD   SP // Period register
#define EPWM2_MAX_CMPA     SP-10
#define EPWM2_MIN_CMPA       10
#define EPWM2_MAX_CMPB     SP-10
#define EPWM2_MIN_CMPB       10

#define EPWM3_TIMER_TBPRD  SP  // Period register
#define EPWM3_MAX_CMPA     SP-10
#define EPWM3_MIN_CMPA       10
#define EPWM3_MAX_CMPB     SP-10
#define EPWM3_MIN_CMPB     10

#define Set_EPWM1A(Val)   EPwm1Regs.CMPA.half.CMPA = Val  //设置占空比
#define Set_EPWM1B(Val)   EPwm1Regs.CMPB = Val  //设置占空比
#define Set_EPWM2A(Val)   EPwm2Regs.CMPA.half.CMPA = Val  //设置占空比
#define Set_EPWM2B(Val)   EPwm2Regs.CMPB = Val  //设置占空比
#define Set_EPWM3A(Val)   EPwm3Regs.CMPA.half.CMPA = Val  //设置占空比
#define Set_EPWM3B(Val)   EPwm3Regs.CMPB = Val  //设置占空比

void InitEPwm123(int16 PRD);
void Epwm1_Init(int16 PRD);
void Epwm2_Init(int16 PRD);
void Epwm3_Init(int16 PRD);

#endif /* PWM_H_ */

main函数中要到的函数

InitEPwm123(SP);  //SP宏定义为自动重装值,根据不同的PWM波频率进行调整
    Set_EPWM1A(SP/4);      //设置为不同的占空比
    Set_EPWM1B(SP*7/8);
    Set_EPWM2A(SP/5);
    Set_EPWM2B(SP/4);
    Set_EPWM3A(SP/3);
    Set_EPWM3B(SP/2);

DSP28335 epwm使用相关推荐

  1. Dsp28335 - ePWM - 50Hz小舵机的控制 - 代码例程

    最近要做一点小东西,使用dsp28335控制舵机,使用pwm信号.在这里写点东西给需要使用pwm这个模块的新人吧. 工程模板代码我传在我的csdn的资源里了,有需要的可以下载. 28xx设置的sysc ...

  2. DSP28035控制舵机

    1.舵机教程和参考例程 硬石舵机教程和参考例程(密码:o5zh) 2.使用到的舵机MG90S 使用的舵机MG90S 信号线(黄线)红线(电源线)棕色(地线) 舵机的控制一般需要一个20ms(50HZ) ...

  3. DSP28335:EPWM

    一.PWM基础知识 PWM是脉宽调制的缩写,通俗地说就是宽度可调节的方波脉冲 二.EPWM概述 1.EPWM模块的功能 ①输出两路PWM ②具有相位控制功能,可以超前或滞后于其他EPWM模块 ③具有死 ...

  4. dsp呼吸灯C语言编程,DSP28335 呼吸灯程序

    DSP28335呼吸灯程序 //########################################################################### // // FI ...

  5. DSP28335入门教程:寄存器手册的下载

    2020.04.29更新 TI官方最近更新的TMS320F28335用户指导手册,已经将全部功能模块统一到单个文档中:TMS320x2833x, TMS320x2823x Technical Refe ...

  6. DSP28335学习笔记-产生PWM波 ——从应用角度出发

    文章目录 前言 一.示波器检测PWM波 1.对应引脚说明 2.PWM波形 二.寄存器配置及代码实现 1.时基模块寄存器配置 2.计数比较模块和动作模块 3.死区产生模块 总结 前言 关于DSP2833 ...

  7. 手把手教你用DSP28335打出PWM波和SPWM波

    1.关于DSP28335的内部ePWM模块 PWM的4要素:周期,脉宽,脉冲相位,脉冲个数. DSP中共有6个EPWM模块,每个EPWM模块有两路输出ePWMxA和ePWMxB.它们两者之间可以是两路 ...

  8. DSP28335学习之旅1-基础知识

    目录 1.1  DSP 是什么 1.2  DSP 与单片机的区别 1.3  DSP性能相关 1.4  DSP命名规则 1.5  DSP28335的常用资源 1.6  DSP28335的常用参考手册 1 ...

  9. DSP28335的GPIO口功能应用

    一. GPIO功能结构 在DSP28335中,一共有88个GPIO口,分为3组,A组GPIO0-GPIO31;B组GPIO32-63:C组GPIO64-GPIO87.这些引脚的首要功能就是输入/输出功 ...

最新文章

  1. 超想做一个网络游戏!有兴趣的人进来讨论讨论!
  2. AsyncTask类的使用
  3. 列表逆序排序_Python零基础入门学习05:容器数据类型:列表和元组
  4. Ubuntu19.04安装mysql8.0版本(亲测OK)
  5. android点击通知跳转到服务,Android 接收推送消息跳转到指定页面的方法
  6. ros melodic 版本sudo rosdep init和rosdep upgrade失败的解决办法
  7. Linux unit14
  8. linux无密码scp,linux通过ssh-keygen实现无密码scp文件和目录
  9. zTree入门实例(一眼就看会)
  10. 语句删除数据库表中有默认字段值的字段
  11. ASP.NET MVC扩展自定义视图引擎支持多模板动态换肤skins机制
  12. 互联网IT工程师需要具备哪些技能?
  13. win10释放C盘空间(清理C盘)
  14. 码力十足学量化|如何获取指数成分股及权重数据
  15. 农场买了一羊,第一年是小羊,第二年底生一只,第三年不生,第四年底再生一只,第五年死掉
  16. 学习认识使用大数据数据采集工具
  17. 云业务贡献40.5%增长:亚马逊2022年财报亮点解读
  18. 基于51单片机的数字频率计设计
  19. Android开发之svn命令行以及cornerston教程
  20. 单调队列,单调栈总结

热门文章

  1. java HHmm_java date HHmmss hhmmss
  2. javascript之内嵌函数javascript
  3. 小型VoIP电话系统的建立
  4. JavaScript事件基础
  5. python 声音基频f0_【aubio】音频处理笔记
  6. 80端口、8080端口和443端口是什么用的
  7. 从百团大战到大兵团作战,天猫“三纵两横”将为商家带来哪些变革
  8. update 和 upgrade
  9. 学习使用js得到视频时长和播放时长
  10. wordpress 主机_您的虚拟主机PHP更新如何影响您的WordPress网站