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模块的一些详细介绍:
- PWM模块数量:TMS320F28034具有多个PWM模块,具体数量取决于具体型号,通常每个PWM模块包含多个独立的PWM通道。
- 分辨率:PWM模块通常具有可编程的分辨率,通常是12位或更高,这有助于实现高精度的PWM输出。
- 死区控制:PWM模块通常支持死区控制功能,这对于驱动功率半导体器件(如MOSFET或IGBT)时非常重要,可避免交叉导通。
- 相位补偿:PWM模块通常支持相位补偿功能,可以调整PWM波形的相位,对于一些应用中的同步要求很有帮助。
- 中断支持:PWM模块通常支持中断功能,可以在特定事件发生时触发中断,这在实时控制系统中非常有用。
- 死区时间:PWM模块通常允许用户配置死区时间,即两个PWM信号之间的延迟时间,以确保电路中的开关元件正常工作。
- 支持的PWM输出类型:PWM模块通常支持不同类型的PWM输出,如对称/非对称PWM、单极性/双极性PWM等。
- 保护功能: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,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 概述:与关系型数据库不同,MongoDB 的数据以类似于 JSON 格式的二进制文档存储,通常称这种格式为Bson,Bson不仅支持JSON中已有的数据类型,还增加了一些额外的数据类型,例如日期和二进制数据&a…...

vlunstack-2(复现红日安全-ATT CK实战)
环境搭建 配置信息 DC IP:10.10.10.10 OS:Windows 2012(64) 应用:AD域 WEB IP1:10.10.10.80 IP2:192.168.47.131 OS:Windows 2008(64) 应用:Weblogic 10.3.6MSSQL 2008 PC IP1:10.10…...

【生信入门】预览快速体验Linux-重生之小明闯Linux
生信少走弯路,快试试生信云专用服务器。新用户注册免费体验5小时。https://www.tebteb.cc 一.故事 小明的Linux冒险 在一片混沌的黑暗中,小明睁开了眼睛。他感到头痛欲裂,四周一片漆黑,只有一行闪烁的字符映入眼帘: [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的缩写,意为开放式系统互联。各个层次的划分遵循以下原则: 1. 同一层的各网络节点都有相同的层次结构,具有同样的功能; 2. 同一节点的内相邻层之间通过接口进行通信&…...

Error updating database. Cause: org.apache.shiro.UnavailableSecurity
mybtisplus查看MetaObjectHandler是否有自定义获取用户信息填充用户的方法...

【网络安全】本地文件包含及远程文件包含漏洞详解
一、文件包含漏洞概述 1.1 什么是文件包含 开发人员将需要重复调用的函数写入一个文件,对该文件进行包含时产生的操作。这样编写代码能减少冗余,降低代码后期维护难度。 保证网站整体风格统一:导航栏、底部footer栏等,把这些不…...
redis启动的三种方式
默认启动: # 默认的启动指令 redis-server 默认启动属于前台启动,会阻塞整个会话窗口,窗口关闭或者按下CTRL C则Redis停止。不推荐使用。 //查看云服务器是否安装过redis redis-server -v//检查安装目录 which redis-server//查看redis进…...

手机怎么远程控制电脑屏幕?手机远程控制电脑方法分享
手机与电脑之间的互联互通变得越来越便捷。 无论是工作还是学习,有时我们需要在手机上远程控制电脑屏幕,以完成一些复杂的操作或查看电脑上的文件。 本文将详细介绍几种实用的手机远程控制电脑屏幕的方法,帮助读者轻松实现这一目标。 一、使…...
NET的全称、主要功能以及在计算机网络中的作用?
.NET是一个广泛的、全方位的平台,应用于开发网站、应用程式、网页应用程式和网络服务。以下是.NET的全称、主要功能以及在计算机网络中的作用: .NET的全称 .NET的全称实际上是Microsoft .NET Framework。它是微软公司推出的一种面向网络的开发框架&…...

LLM - 使用 HuggingFace + Ollama 部署最新大模型 (GGUF 格式 与 Llama 3.1)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/141028040 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Ollama…...

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

three.js 模型高亮效果实现说明(结合react)
three.js react 实现鼠标移入模型高亮选中效果 使用EffectComposer和其附加的渲染效果Passes(如RenderPass和OutlinePass)来实现高级渲染效果。首先创建EffectComposer实例,并添加RenderPass和OutlinePass,最后在渲染循环中调用…...

入营测评题解
第一题:first 第二题:chengji 打擂台,每个数跟当前最大、最小值比较,维护当前最值即可。 #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」 企业资源计划(enterprise resource planning,ERP)是制造企业的核心管理软件。ERP系统的基本思想是以销定产,协同管控企业的产、供、销、人、财、物等资源,帮助企业按照销售订单,基于产品的制造…...
Windows系统设置网络IPv4和IPv6优先访问级
Windows系统设置网络IPv4和IPv6优先访问级 资源宝整理分享:www.httple.net 在数字化的世界中,我们离不开互联网,而互联网协议(IP协议)则扮演着至关重要的角色。IPv4曾是互联网的主要标准,但随着IP地址枯竭问…...

yolov8 剪枝 - DepGraph
2024年8月5 5000张图片,2个类别。 yolov8n 初始: 185 layers, 3151904 parameters, 31936 gradients, 8.7 GFLOPs 经过三次finetune后: 185 layers, 2327024 parameters, 31936 gradients, 6.6 GFLOPs 经过第四次fintune后: …...

【网络】套接字socket编程预备知识
1.源IP地址和目的IP 计算机网络中的源地址和目的地址是用来标识网络中的不同主机的。 源地址是指发送数据包的主机的地址,而目的地址则是指接收数据包的主机的地址,在数据包传输过程中,每经过一个路中器感交换机,都会根据目的地址…...

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

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...