当前位置: 首页 > news >正文

LLC数字控制TMS320F28034,4-DSP的epwm配置介绍

LLC数字控制TMS320F28034,4-DSP的epwm配置介绍

  • 1 TMS320F28034
    • 1.1 概述
    • 1.2 PWM详细介绍
  • 2 TMS320F28034 PWM功能框图
    • 2.1 ePWM功能模块
    • 2.2 ePWM功能寄存器框图
  • 3 TMS320F28034 PWM初始化流程
  • 4 结合项目设计
  • 5 代码设计
    • 5.1 PWM初始化程序
    • 5.2 工程代码
  • 6 总结


配套代码示例

1 TMS320F28034

1.1 概述

TMS320F28034 的系统时钟即为其主频。根据第一节手册的介绍,该系统时钟的最大值为 60MHz。TMS320F28034是德州仪器(Texas Instruments)生产的一款数字信号处理器(DSP),主要用于控制应用中的脉宽调制(PWM)控制。它是C2000系列中的一员,专为实时控制应用设计。

1.2 PWM详细介绍

以下是TMS320F28034的PWM模块的一些详细介绍:

  1. PWM模块数量:TMS320F28034具有多个PWM模块,具体数量取决于具体型号,通常每个PWM模块包含多个独立的PWM通道。
  2. 分辨率:PWM模块通常具有可编程的分辨率,通常是12位或更高,这有助于实现高精度的PWM输出。
  3. 死区控制:PWM模块通常支持死区控制功能,这对于驱动功率半导体器件(如MOSFET或IGBT)时非常重要,可避免交叉导通。
  4. 相位补偿:PWM模块通常支持相位补偿功能,可以调整PWM波形的相位,对于一些应用中的同步要求很有帮助。
  5. 中断支持:PWM模块通常支持中断功能,可以在特定事件发生时触发中断,这在实时控制系统中非常有用。
  6. 死区时间:PWM模块通常允许用户配置死区时间,即两个PWM信号之间的延迟时间,以确保电路中的开关元件正常工作。
  7. 支持的PWM输出类型:PWM模块通常支持不同类型的PWM输出,如对称/非对称PWM、单极性/双极性PWM等。
  8. 保护功能:PWM模块通常包含各种保护功能,如过流保护、过温保护等,以确保系统的稳定性和安全性。

2 TMS320F28034 PWM功能框图

在这里插入图片描述

2.1 ePWM功能模块

在这里插入图片描述

ePWM模块信号:
 PWM输出信号(EPWMxA和EPWMxB),与GPIO复用。
 触发区信号(TZ1到TZ6)。模块外部出现故障条件,TZ1到TZ3可配置为GPIO外设异步输入。TZ4与EQEP1模块相连。TZ5与系统时钟失效逻辑单元相连,TZ6与来自CPU的EMUSTOP输出相连。
 时基同步输入(EPWMxSYNCI)和输出(EPWMxSYNCO)信号,可通过ePWM1管脚输出,在内部将所有ePWM模块相连。EPWM1SYNCO与eCAP1的SYNCI连接。
 ADC开始转换信号(EPWMxSOCA和EPWMxSOCB)。
 比较器输出信号(COMPxOUT),与触发区信号产生数字比较事件。
 外设总线,32位宽,可以对ePWM寄存器执行16位和32位写操作。

2.2 ePWM功能寄存器框图

在这里插入图片描述

初始化TMS320F28034的PWM模块:
选择PWM时钟源和配置定时器周期:
首先,需要选择PWM的时钟源,可以是外部时钟或者内部时钟,常见的选择是使用系统时钟(SYSCLK)作为PWM的时钟源。
配置PWM的定时器周期,即PWM计数器的周期。这个周期决定了PWM波形的频率,可以根据具体需求进行设置。
配置PWM模块:
初始化每个PWM模块。每个PWM模块通常包含一个或多个独立的PWM通道。
禁用PWM模块,配置PWM的周期(PRD寄存器)和其他参数,如相位补偿、死区时间等。
启用PWM模块,使其开始生成PWM波形。
配置PWM输出引脚:
将PWM输出连接到外部器件,如电机驱动器或逆变器。这通常涉及将PWM输出引脚配置为GPIO模式,并设置为输出状态。
启动PWM模块:
启动PWM模块前,确保对所有PWM模块的配置都已完成。
通过设置相应的寄存器位或标志位来启动PWM模块。
确保PWM模块的时钟同步,以确保各个PWM模块之间的同步性。
其他配置和注意事项:
根据具体应用需求,配置死区时间、相位补偿、中断处理等功能。
对于不同的PWM模块,可能需要分别进行配置,确保每个PWM模块满足应用需求。
在初始化过程中,需要注意保护功能的配置,如过流保护、过温保护等,以确保系统的稳定性和安全性。

3 TMS320F28034 PWM初始化流程

初始化TMS320F28034的PWM模块:
选择PWM时钟源和配置定时器周期:
首先,需要选择PWM的时钟源,可以是外部时钟或者内部时钟,常见的选择是使用系统时钟(SYSCLK)作为PWM的时钟源。
配置PWM的定时器周期,即PWM计数器的周期。这个周期决定了PWM波形的频率,可以根据具体需求进行设置。
配置PWM模块:
初始化每个PWM模块。每个PWM模块通常包含一个或多个独立的PWM通道。
禁用PWM模块,配置PWM的周期(PRD寄存器)和其他参数,如相位补偿、死区时间等。
启用PWM模块,使其开始生成PWM波形。
配置PWM输出引脚:
将PWM输出连接到外部器件,如电机驱动器或逆变器。这通常涉及将PWM输出引脚配置为GPIO模式,并设置为输出状态。
启动PWM模块:
启动PWM模块前,确保对所有PWM模块的配置都已完成。
通过设置相应的寄存器位或标志位来启动PWM模块。
确保PWM模块的时钟同步,以确保各个PWM模块之间的同步性。
其他配置和注意事项:
根据具体应用需求,配置死区时间、相位补偿、中断处理等功能。
对于不同的PWM模块,可能需要分别进行配置,确保每个PWM模块满足应用需求。
在初始化过程中,需要注意保护功能的配置,如过流保护、过温保护等,以确保系统的稳定性和安全性。

4 结合项目设计

(1)跟句计算书及设计报告可知缓启动LLC运行的最低频率逐渐降低,死区逐渐减小。当PWM的最大周期量增加至MAX_PD,即对应的35kHz时,同时死区达到最小时,软启动结束,状态机跳转至运行状态。所以启动时为最高频率启动120Khz,死区为最大。
(2)为了保证AD采集数据与数字控制达到逐周期的效果,需要使用PWM触发ADC数据采集。
(3)数字控制时为保证产品工作的可靠性,电路上采用TZ事件作为PWM控制的保护,当触发TZ事件时,进行封波控制。
(4)在进行软件设计时,为保证开关管工作的稳定性,我们在初始上电时,不进行PWM引脚功能配置,使其输出低电平。
(5)在高频控制时,系统工作在最高频率需要进入burst模式,我们设置端口统一打开和关闭的封装函数。

5 代码设计

5.1 PWM初始化程序

注意看注释所解释内容。

void FunPwmInit(void)
{EALLOW;//120kHzEPwm1Regs.TBPRD =400;EPwm1Regs.TBPHS.half.TBPHS = 0;//采用向上计数模式;EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//相移关闭;EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;// 使用镜像寄存器,不直接操作TBPRD寄存器EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;// CTR = ZERO 时,发出同步时钟,EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;// TBCLK时钟分频; TBCLK = SYSCLKOUT/(CLKDIV * HSPCLKDIV),CLKDIV = 1;EPwm1Regs.TBCTL.bit.CLKDIV=TB_DIV1;// HSPCLKDIV = 1;  TBCLK = SYSCLKOUT(60Mhz);EPwm1Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;// CMPA寄存器使用镜像模式;EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;// CMPB寄存器使用镜像模式;EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;// 当CTR = 0 时,将CMPA镜像中的数据加载到CMPA执行寄存器中;EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_PRD;// 当CTR = 0 时,将CMPB镜像中的数据加载到CMPA执行寄存器中;EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_PRD;// 当CTR = 0,EPWM1A = 1;EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;// 当CTR = CMPA,EPWM1A = 0;EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;EPwm1Regs.AQCTLB.bit.ZRO = AQ_NO_ACTION;EPwm1Regs.AQCTLB.bit.CAU =AQ_NO_ACTION;// enable Dead-band module  DBA_ALLEPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;// 上升沿延迟器输出端口不翻转,下升沿延迟器输出端口翻转,此处为设置PWMAB互补模式输出;EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;//死区190*1/60MHzEPwm1Regs.DBFED = 190;//死区190*1/60MHzEPwm1Regs.DBRED = 190;//更新比较值EPwm1Regs.CMPA.half.CMPA=200;//ADC触发采样//触发ADC采集位置EPwm1Regs.CMPB=100;//永远是CMPA的一半//使能SOCA触发功能EPwm1Regs.ETSEL.bit.SOCAEN  = 1;//Cnt=CMPB信号时触发采样,EPwm1Regs.CMPB位置EPwm1Regs.ETSEL.bit.SOCASEL = 6;//立即触发Generate pulse on 1st eventEPwm1Regs.ETPS.bit.SOCAPRD  = 1;//TZ1 will be one shot signal for EPWM1EPwm1Regs.TZSEL.bit.OSHT1=TZ_DISABLE;//在逻辑控制时再打开//TZ will Force EPWM1A to a low stateEPwm1Regs.TZCTL.bit.TZA=TZ_FORCE_LO;//TZ will Force EPWM1B to a low stateEPwm1Regs.TZCTL.bit.TZB=TZ_FORCE_LO;// TZ中断标志位全部清0;EPwm1Regs.TZCLR.all = 0xffff;// 中断均不使能;EPwm1Regs.TZEINT.all = 0;// 数值比较器暂不适用;EPwm1Regs.TZDCSEL.all = 0;EDIS;
}

5.2 工程代码

在APP问价夹下新建两个文件,分别是sys_pwm.c和sys_ pwm.h,并在includes.h中引用sys_ pwm.h文件,在sys_ pwm.c中引用includes.h文件,形成工程框架,软件工程如下所示。

配套代码示例
在这里插入图片描述

工程代码:

//Main.c文件中

#include "includes.h"/********************************************************
* 函数名称:Init_system
* 功 能:   系统初始化
* 入口参数:
* 出口参数:
* 修 改:
********************************************************/
void Init_system(void)
{InitSysCtrl();DINT;InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable();EALLOW;Flash_CPUScaleFactor = SCALE_FACTOR;Flash_CallbackPtr=NULL;EDIS;MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd, &RamfuncsRunStart);InitFlash();
}
/********************************************************
* 函数名称:void Init_system_end(void)
* 功 能:   系统初始化结束
* 入口参数:
* 出口参数:
* 修 改:
********************************************************/
void Init_system_end(void)
{EALLOW;  // This is needed to write to EALLOW protected registersPieCtrlRegs.PIECTRL.bit.ENPIE = 1;   // Enable the PIE blockEDIS;    // This is needed to disable write to EALLOW protected registers//================================================================================EINT;ERTM;}/********************************************************
函数名称:main
函数功能:主程序
入口参数:
出口参数:
修    改:
********************************************************/
void main(void)
{Init_system();FunTimerInit();FunGpioInit();FunPwmInit();FunPwmOpen();Init_system_end();
//while(1){//计时200msdelay_ms(200);//指示灯的引脚状态进行反转LEDGTOGGLE();}
}

/*

  • includes.h
  • Created on: 2024年7月29日
  •  Author:
    

*/

#ifndef APP_INCLUDES_H_
#define APP_INCLUDES_H_#include "Flash2803x_API_Library.h"
#include "Flash2803x_API_Config.h"#include "DSP28x_Project.h"
#include "DSP2803x_DefaultISR.h"
#include "DSP2803x_Adc.h"#include "string.h"#include "sys_gpio.h"
#include "sys_timer.h"
#include "sys_pwm.h"//------------------------------------------
void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr);extern void Init_system(void);
extern void Init_system_end(void);#endif /* APP_INCLUDES_H_ */

/*

  • sys_gpio.c
  • Created on: 2024年7月30日
  •  Author:
    

*/

#include "includes.h"void FunGpioInit(void)
{GpioDataRegs.GPADAT.all = 0ul;GpioDataRegs.GPBDAT.all = 0ul;//GPIO初始化//开始寄存器配置前执行指令EALLOW;// GPIOA DATA数据全清0GpioDataRegs.GPADAT.all = 0ul;// GPIOB DATA数据全清0GpioDataRegs.GPBDAT.all = 0ul;//LED GGpioCtrlRegs.GPAMUX2.bit.GPIO24=0;GpioCtrlRegs.GPADIR.bit.GPIO24=1;//LED YGpioCtrlRegs.GPAMUX2.bit.GPIO21=0;GpioCtrlRegs.GPADIR.bit.GPIO21=1;//LED RGpioCtrlRegs.GPAMUX2.bit.GPIO20=0;GpioCtrlRegs.GPADIR.bit.GPIO20=1;// GPIO0 <-> EPWM1A == 0:GPIO功能 1:PWM功能GpioCtrlRegs.GPAMUX1.bit.GPIO0=0;// GPIO1 <-> EPWM1B == 0:GPIO功能 1:PWM功能GpioCtrlRegs.GPAMUX1.bit.GPIO1=0;// GPIO0 <-> EPWM1A == 0:输出功能 1:输入功能GpioCtrlRegs.GPADIR.bit.GPIO0=1;// GPIO1 <-> EPWM1B == 0:输出功能 1:输入功能GpioCtrlRegs.GPADIR.bit.GPIO1=1;// GPIO0 <-> EPWM1A == 1:输出0GpioDataRegs.GPACLEAR.bit.GPIO0=1;// GPIO1 <-> EPWM1B == 1:输出0GpioDataRegs.GPACLEAR.bit.GPIO1=1;// COMP_OUT GPIO42 <-> OPP_COMP1_OUTGpioCtrlRegs.GPBMUX1.bit.GPIO42 = 3;// AI02<-> COPM1+ ==2:比较器功能GpioCtrlRegs.AIOMUX1.bit.AIO2 = 2;// GPIO15 <-> TZ1GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 1;//寄存器配置结束后执行指令EDIS;
}

/*

  • sys_gpio.h
  • Created on: 2024年7月30日
  •  Author:
    

*/

#ifndef APP_SYS_GPIO_H_
#define APP_SYS_GPIO_H_//===========================================================================#define LEDRGPIO        GPIO20
#define LEDRMUX         GpioCtrlRegs.GPAMUX2.bit.LEDRGPIO
#define LEDRDIR         GpioCtrlRegs.GPADIR.bit.LEDRGPIO
#define LEDRTOGGLE()    GpioDataRegs.GPATOGGLE.bit.LEDRGPIO = 1
#define LEDRON()        GpioDataRegs.GPASET.bit.LEDRGPIO =1
#define LEDRLOW()       GpioDataRegs.GPACLEAR.bit.LEDRGPIO =1#define LEDYGPIO        GPIO21
#define LEDYMUX         GpioCtrlRegs.GPAMUX2.bit.LEDYGPIO
#define LEDYDIR         GpioCtrlRegs.GPADIR.bit.LEDYGPIO
#define LEDYTOGGLE()    GpioDataRegs.GPATOGGLE.bit.LEDYGPIO = 1
#define LEDYON()        GpioDataRegs.GPASET.bit.LEDYGPIO =1
#define LEDYLOW()       GpioDataRegs.GPACLEAR.bit.LEDYGPIO =1#define LEDGGPIO        GPIO24
#define LEDGMUX         GpioCtrlRegs.GPAMUX2.bit.LEDGGPIO
#define LEDGDIR         GpioCtrlRegs.GPADIR.bit.LEDGGPIO
#define LEDGTOGGLE()    GpioDataRegs.GPATOGGLE.bit.LEDGGPIO = 1
#define LEDGON()        GpioDataRegs.GPASET.bit.LEDGGPIO =1
#define LEDGLOW()       GpioDataRegs.GPACLEAR.bit.LEDGGPIO =1extern void FunGpioInit(void);#endif /* APP_SYS_GPIO_H_ */

/*

  • sys_pwm.c
  • Created on: 2024年8月9日
  •  Author:
    

*/

#include "includes.h"void FunPwmInit(void)
{EALLOW;//120kHzEPwm1Regs.TBPRD =400;EPwm1Regs.TBPHS.half.TBPHS = 0;//采用向上计数模式;EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//相移关闭;EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;// 使用镜像寄存器,不直接操作TBPRD寄存器EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;// CTR = ZERO 时,发出同步时钟,EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;// TBCLK时钟分频; TBCLK = SYSCLKOUT/(CLKDIV * HSPCLKDIV),CLKDIV = 1;EPwm1Regs.TBCTL.bit.CLKDIV=TB_DIV1;// HSPCLKDIV = 1;  TBCLK = SYSCLKOUT(60Mhz);EPwm1Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;// CMPA寄存器使用镜像模式;EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;// CMPB寄存器使用镜像模式;EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;// 当CTR = 0 时,将CMPA镜像中的数据加载到CMPA执行寄存器中;EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_PRD;// 当CTR = 0 时,将CMPB镜像中的数据加载到CMPA执行寄存器中;EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_PRD;// 当CTR = 0,EPWM1A = 1;EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;// 当CTR = CMPA,EPWM1A = 0;EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;EPwm1Regs.AQCTLB.bit.ZRO = AQ_NO_ACTION;EPwm1Regs.AQCTLB.bit.CAU =AQ_NO_ACTION;// enable Dead-band module  DBA_ALLEPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;// 上升沿延迟器输出端口不翻转,下升沿延迟器输出端口翻转,此处为设置PWMAB互补模式输出;EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;//死区190*1/60MHzEPwm1Regs.DBFED = 190;//死区190*1/60MHzEPwm1Regs.DBRED = 190;//更新比较值EPwm1Regs.CMPA.half.CMPA=200;//ADC触发采样//触发ADC采集位置EPwm1Regs.CMPB=100;//永远是CMPA的一半//使能SOCA触发功能EPwm1Regs.ETSEL.bit.SOCAEN  = 1;//Cnt=CMPB信号时触发采样,EPwm1Regs.CMPB位置EPwm1Regs.ETSEL.bit.SOCASEL = 6;//立即触发Generate pulse on 1st eventEPwm1Regs.ETPS.bit.SOCAPRD  = 1;//TZ1 will be one shot signal for EPWM1EPwm1Regs.TZSEL.bit.OSHT1=TZ_DISABLE;//在逻辑控制时再打开//TZ will Force EPWM1A to a low stateEPwm1Regs.TZCTL.bit.TZA=TZ_FORCE_LO;//TZ will Force EPWM1B to a low stateEPwm1Regs.TZCTL.bit.TZB=TZ_FORCE_LO;// TZ中断标志位全部清0;EPwm1Regs.TZCLR.all = 0xffff;// 中断均不使能;EPwm1Regs.TZEINT.all = 0;// 数值比较器暂不适用;EPwm1Regs.TZDCSEL.all = 0;EDIS;
}void FunPwmOpen(void)
{EALLOW;// GPIO0 <-> EPWM1A == 0:GPIO功能 1:PWM功能GpioCtrlRegs.GPAMUX1.bit.GPIO0=1;// GPIO1 <-> EPWM1B == 0:GPIO功能 1:PWM功能GpioCtrlRegs.GPAMUX1.bit.GPIO1=1;EDIS;
}void FunPwmClose(void)
{EALLOW;// GPIO0 <-> EPWM1A == 0:GPIO功能 1:PWM功能GpioCtrlRegs.GPAMUX1.bit.GPIO0=0;// GPIO1 <-> EPWM1B == 0:GPIO功能 1:PWM功能GpioCtrlRegs.GPAMUX1.bit.GPIO1=0;// GPIO0 <-> EPWM1A == 0:输出功能 1:输入功能GpioCtrlRegs.GPADIR.bit.GPIO0=1;// GPIO1 <-> EPWM1B == 0:输出功能 1:输入功能GpioCtrlRegs.GPADIR.bit.GPIO1=1;// GPIO0 <-> EPWM1A == 1:输出0GpioDataRegs.GPACLEAR.bit.GPIO0=1;// GPIO1 <-> EPWM1B == 1:输出0GpioDataRegs.GPACLEAR.bit.GPIO1=1;EDIS;
}

/*

  • sys_pwm.h
  • Created on: 2024年8月9日
  •  Author:
    

*/

#ifndef APP_SYS_PWM_H_
#define APP_SYS_PWM_H_extern void FunPwmInit(void);
extern void FunPwmOpen(void);
extern void FunPwmClose(void);#endif /* APP_SYS_PWM_H_ */

/*

  • sys_timer.c
  • Created on: 2024年8月1日
  •  Author:
    

*/

#include "includes.h"void FunTimerInit(void)
{EALLOW;  // This is needed to write to EALLOW protected registers//打开对应定时器时钟SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1;SysCtrlRegs.PCLKCR3.bit.CPUTIMER1ENCLK = 1;// CPU 定时器 0// 寄存器地址指针和各自计时器初始化:CpuTimer0.RegsAddr = &CpuTimer0Regs;// 定时器周期寄存器最大值初始化:CpuTimer0Regs.PRD.all  = 0xFFFFFFFF;// 预分频寄存器初始化为1 (SYSCLKOUT):CpuTimer0Regs.TPR.all  = 0;CpuTimer0Regs.TPRH.all = 0;// 确保定时器0停止:CpuTimer0Regs.TCR.bit.TSS = 1;// 重加载计数器周期值:CpuTimer0Regs.TCR.bit.TRB = 1;// 复位中断计时器:CpuTimer0.InterruptCount = 0;// CPU 定时器 1// 寄存器地址指针和各自计时器初始化:CpuTimer1.RegsAddr = &CpuTimer1Regs;// 定时器周期寄存器最大值初始化:CpuTimer1Regs.PRD.all  = 0xFFFFFFFF;// 预分频寄存器初始化为1 (SYSCLKOUT):CpuTimer1Regs.TPR.all  = 0;CpuTimer1Regs.TPRH.all = 0;// 确保定时器1停止:CpuTimer1Regs.TCR.bit.TSS = 1;// 重加载计数器周期值:CpuTimer1Regs.TCR.bit.TRB = 1;// 复位中断计时器:CpuTimer1.InterruptCount = 0;//定时器时长配置//60:代表主频60M,//20:代表20us,//1000:代表1msConfigCpuTimer(&CpuTimer0,60,20);ConfigCpuTimer(&CpuTimer1,60,1000);StartCpuTimer0();StartCpuTimer1();PieVectTable.TINT0 = &CpuTimer0Isr;//往中断矢量表中填写定时器0一个指针PieVectTable.TINT1 = &CpuTimer1Isr;//往中断矢量表中填写定时器1一个指针//打开PIE组对应中断PieCtrlRegs.PIEIER1.bit.INTx7 = 1; //使能第一组7通道定时器0IER |= M_INT1;  // Enable CPU INTIER |= M_INT13; //根据中断向量表使能定时器1EDIS;   // This is needed to disable write to EALLOW protected registers
}//delay_ms时间函数
static unsigned char delay_flag = 0;
static unsigned int delay_cnt = 0;
void delay_ms(unsigned int timer)
{delay_flag = 1;delay_cnt = 0;while(delay_cnt<timer){;}delay_flag = 0;delay_cnt = 0;
}//定时器中断0的中断服务函数==20us
static unsigned int  timercnt= 0;
interrupt void CpuTimer0Isr(void)
{timercnt++;//1S时长if(timercnt>50000){timercnt = 0;//指示灯的引脚状态进行反转LEDRTOGGLE();LEDYTOGGLE();}//============================================================CpuTimer0Regs.TCR.bit.TIF  = 1; //清除外设级中断标志位PieCtrlRegs.PIEACK.bit.ACK1= 1; //清除PIE级中断应答
}//定时器中断1的中断服务函数==1000us
interrupt void CpuTimer1Isr(void)
{//时间计数的代码程序if(delay_flag){delay_cnt++;if(delay_cnt>65500){delay_cnt = 65500;}else{;}}else{delay_cnt = 0;}//============================================================CpuTimer1Regs.TCR.bit.TIF  = 1; //清除外设级中断标志位PieCtrlRegs.PIEACK.bit.ACK1= 1; //清除PIE级中断应答
}

/*

  • sys_timer.h
  • Created on: 2024年8月1日
  •  Author:
    

*/

#ifndef APP_SYS_TIMER_H_
#define APP_SYS_TIMER_H_extern void FunTimerInit(void);extern void delay_ms(unsigned int timer);extern interrupt void CpuTimer0Isr(void);
extern interrupt void CpuTimer1Isr(void);#endif /* APP_SYS_TIMER_H_ */

配套代码示例

6 总结

TMS320F28034作为德州仪器(Texas Instruments)C2000系列中的一款数字信号处理器(DSP),具有强大的PWM模块,为各种实时控制应用提供了广阔的应用前景。以下是TMS320F28034 PWM应用前景的一些方面:
电机控制:TMS320F28034广泛用于各种电机控制应用,如直流电机、步进电机和交流电机控制。其灵活的PWM模块和丰富的控制功能使其成为控制电机速度、位置和转矩的理想选择。
逆变器控制:在可再生能源领域,如太阳能和风能转换系统中,TMS320F28034可用于控制逆变器以将直流电转换为交流电。PWM模块的高分辨率和灵活性可以实现高效的能量转换。
电源管理:TMS320F28034可用于电源转换器的控制,如开关电源、直流-直流转换器和直流-交流逆变器。通过PWM模块的精确控制,可以提高系统效率并降低能量损耗。
照明控制:在LED照明系统中,TMS320F28034可以实现PWM调光控制和颜色控制。其高精度的PWM输出可以实现平滑的亮度调节和色彩混合。
电力电子:在电力电子领域,TMS320F28034可用于控制各种功率半导体器件,如MOSFET和IGBT。通过PWM模块的灵活配置,可以实现高效的功率转换和电力控制。
工业自动化:TMS320F28034适用于工业自动化领域,如机器人控制、运动控制和过程控制。其快速的实时控制能力和丰富的通信接口使其成为工业应用的理想选择。
总的来说,TMS320F28034的PWM模块具有强大的功能和灵活性,适用于多种实时控制应用。随着数字控制技术的不断发展,TMS320F28034在各种领域都有着广阔的应用前景,并可以帮助工程师实现复杂控制算法和高效能量转换。

相关文章:

LLC数字控制TMS320F28034,4-DSP的epwm配置介绍

LLC数字控制TMS320F28034&#xff0c;4-DSP的epwm配置介绍 1 TMS320F280341.1 概述1.2 PWM详细介绍 2 TMS320F28034 PWM功能框图2.1 ePWM功能模块2.2 ePWM功能寄存器框图 3 TMS320F28034 PWM初始化流程4 结合项目设计5 代码设计5.1 PWM初始化程序5.2 工程代码 6 总结 配套代码示…...

MongoDB学习记录

1、初识Mongo 概述&#xff1a;与关系型数据库不同&#xff0c;MongoDB 的数据以类似于 JSON 格式的二进制文档存储&#xff0c;通常称这种格式为Bson&#xff0c;Bson不仅支持JSON中已有的数据类型&#xff0c;还增加了一些额外的数据类型&#xff0c;例如日期和二进制数据&a…...

vlunstack-2(复现红日安全-ATT CK实战)

环境搭建 配置信息 DC IP&#xff1a;10.10.10.10 OS&#xff1a;Windows 2012(64) 应用&#xff1a;AD域 WEB IP1&#xff1a;10.10.10.80 IP2&#xff1a;192.168.47.131 OS&#xff1a;Windows 2008(64) 应用&#xff1a;Weblogic 10.3.6MSSQL 2008 PC IP1&#xff1a;10.10…...

【生信入门】预览快速体验Linux-重生之小明闯Linux

生信少走弯路,快试试生信云专用服务器。新用户注册免费体验5小时。https://www.tebteb.cc 一.故事 小明的Linux冒险 在一片混沌的黑暗中&#xff0c;小明睁开了眼睛。他感到头痛欲裂&#xff0c;四周一片漆黑&#xff0c;只有一行闪烁的字符映入眼帘&#xff1a; [xiaomingu…...

用.net core简易搭建webapi托管到IIS

1、从官网下载.NET Core 托管捆绑包 https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/publish-to-iis?viewaspnetcore-8.0&tabsvisual-studio 2、新建ASP.NET Core WEB API项目 新建控制器TestController并生成GetInfo方法 3、发布 目标路径选择 2)显示所有…...

【计算机网络---OSI七层模型】

一、OSI的基本概念及原则 OSI是Open System Interconnect的缩写&#xff0c;意为开放式系统互联。各个层次的划分遵循以下原则&#xff1a; 1. 同一层的各网络节点都有相同的层次结构&#xff0c;具有同样的功能&#xff1b; 2. 同一节点的内相邻层之间通过接口进行通信&…...

Error updating database. Cause: org.apache.shiro.UnavailableSecurity

mybtisplus查看MetaObjectHandler是否有自定义获取用户信息填充用户的方法...

【网络安全】本地文件包含及远程文件包含漏洞详解

一、文件包含漏洞概述 1.1 什么是文件包含 开发人员将需要重复调用的函数写入一个文件&#xff0c;对该文件进行包含时产生的操作。这样编写代码能减少冗余&#xff0c;降低代码后期维护难度。 保证网站整体风格统一&#xff1a;导航栏、底部footer栏等&#xff0c;把这些不…...

redis启动的三种方式

默认启动&#xff1a; # 默认的启动指令 redis-server 默认启动属于前台启动&#xff0c;会阻塞整个会话窗口&#xff0c;窗口关闭或者按下CTRL C则Redis停止。不推荐使用。 //查看云服务器是否安装过redis redis-server -v//检查安装目录 which redis-server//查看redis进…...

手机怎么远程控制电脑屏幕?手机远程控制电脑方法分享

手机与电脑之间的互联互通变得越来越便捷。 无论是工作还是学习&#xff0c;有时我们需要在手机上远程控制电脑屏幕&#xff0c;以完成一些复杂的操作或查看电脑上的文件。 本文将详细介绍几种实用的手机远程控制电脑屏幕的方法&#xff0c;帮助读者轻松实现这一目标。 一、使…...

NET的全称、主要功能以及在计算机网络中的作用?

.NET是一个广泛的、全方位的平台&#xff0c;应用于开发网站、应用程式、网页应用程式和网络服务。以下是.NET的全称、主要功能以及在计算机网络中的作用&#xff1a; .NET的全称 .NET的全称实际上是Microsoft .NET Framework。它是微软公司推出的一种面向网络的开发框架&…...

LLM - 使用 HuggingFace + Ollama 部署最新大模型 (GGUF 格式 与 Llama 3.1)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/141028040 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 Ollama…...

如何实现Redis和Mysql中数据双写一致性

在我们的实际开发中&#xff0c;我们用到了redis缓存一些常用的数据&#xff08;如热点数据&#xff09;用来提高系统的吞吐量。 但是不可以避免的出现了数据的修改场景&#xff0c;这就导致了数据库中的数据和Redis中出现不一致性的情况。如何保证数据一致性就显得非常重要了&…...

three.js 模型高亮效果实现说明(结合react)

three.js react 实现鼠标移入模型高亮选中效果 使用EffectComposer和其附加的渲染效果Passes&#xff08;如RenderPass和OutlinePass&#xff09;来实现高级渲染效果。首先创建EffectComposer实例&#xff0c;并添加RenderPass和OutlinePass&#xff0c;最后在渲染循环中调用…...

入营测评题解

第一题&#xff1a;first 第二题&#xff1a;chengji 打擂台&#xff0c;每个数跟当前最大、最小值比较&#xff0c;维护当前最值即可。 #include<bits/stdc.h> using lllong long; using namespace std;const int N1e610;int n; int x;//1e9, ll最大9e18 ll maxn0,minn…...

制造知识普及(十)-- 常见的工业软件介绍

「 1. ERP」 企业资源计划&#xff08;enterprise resource planning&#xff0c;ERP&#xff09;是制造企业的核心管理软件。ERP系统的基本思想是以销定产&#xff0c;协同管控企业的产、供、销、人、财、物等资源&#xff0c;帮助企业按照销售订单&#xff0c;基于产品的制造…...

Windows系统设置网络IPv4和IPv6优先访问级

Windows系统设置网络IPv4和IPv6优先访问级 资源宝整理分享&#xff1a;www.httple.net 在数字化的世界中&#xff0c;我们离不开互联网&#xff0c;而互联网协议&#xff08;IP协议&#xff09;则扮演着至关重要的角色。IPv4曾是互联网的主要标准&#xff0c;但随着IP地址枯竭问…...

yolov8 剪枝 - DepGraph

2024年8月5 5000张图片&#xff0c;2个类别。 yolov8n 初始&#xff1a; 185 layers, 3151904 parameters, 31936 gradients, 8.7 GFLOPs 经过三次finetune后&#xff1a; 185 layers, 2327024 parameters, 31936 gradients, 6.6 GFLOPs 经过第四次fintune后&#xff1a; …...

【网络】套接字socket编程预备知识

1.源IP地址和目的IP 计算机网络中的源地址和目的地址是用来标识网络中的不同主机的。 源地址是指发送数据包的主机的地址&#xff0c;而目的地址则是指接收数据包的主机的地址&#xff0c;在数据包传输过程中&#xff0c;每经过一个路中器感交换机&#xff0c;都会根据目的地址…...

【学习笔记】Day 8

写在开头&#xff1a; 最近老板突然提出一个全新的组会主题&#xff0c;是关于 “最近我犯的傻”&#xff0c;其目的在于提供乐子的同时引以为戒。本来我还在愁到底去哪里找干的啥事儿&#xff0c;结果今天直接拉了个大的。什么叫无心插柳柳成荫啊&#xff0c;悲。 一…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...