主题中讨论的其他器件: C2000WARE
工具/软件:Code Composer Studio
使用 C#读取温度传感器的值、将其设置为.txt、通过 TMS320F28335读取.txt、并更改 ePWM 的频率。
我想立即更改。温度更改、频率更改。
这是我的代码。
#include "DSP28x_Project.h"
#include
void InitEPwm1 (void);
void GPIO_Setup (void);
中断 void a (void);
int F;
文件*fp_g;
字符 t[1];
int main()
{
InitSysCtrl();
InitEPwm1Gpio();
GPIO_Setup();
Dint;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.EPWM1_INT =&A;
EDIS;
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;
EDIS;
EALLOW;
SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;
EDIS;
InitEPwm1();
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;
IER |= M_INT3;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
EINT;
ERTM;
for (;;){
_asm (" NOP");
}
}
void GPIO_Setup (void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0=1;// GPIO配置為ePWM1A功能
GpioCtrlRegs.GPAMUX1.bit.GPIO1=1;// GPIO1配置為ePWM1B功能
GpioCtrlRegs.GPAMUX1.bit.GPIO12=1;//TZ1 -触发区1
GpioCtrlRegs.GPAMUX2.bit.GPIO16=3;//TZ5 -跳匣区域5
EDIS;
}
空 InitEPwm1 (空)
{
//设置 TBCLK
EPwm1Regs.TBPRD =F;// TBPRD=150m/f-1
EPwm1Regs.TBPHS.Half.TBPHS = 0x0000;//相位为0 (相位為0)
EPwm1Regs.TBCTR =时基计数器清0;//μ s
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上计数
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相位加载
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;//时基时钟分频1倍分频 μ s
//设置隐藏
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;// CMPA影子装载模式 μ s
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;//CTR=0影子寄存器A装载update IT
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
//设置操作
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;// CTR上升至CMPA值 置1 ePWMA输出高
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;// CTR下降至CMPA值 置0 ePWMA输出低
EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;// CTR上升至CMPB值 置1 ePWMB输出高
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;// CTR下降至CMPB值 置0 ePWMB输出低
//中断,我们将在其中更改比较值
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_PRD;//在 PRD 事件上选择 INT
EPwm1Regs.ETSEL.bit.INTEN = 1;//启用 INT
EPwm1Regs.ETPS.bit.INTPRD = et_1st;//在发生第一个事件时生成 INT
//设置死区
EPwm1Regs.DBCTL.bit.IN_MODE = 0;ePWMxA是雙邊沿延時輸入源 μ s
EPwm1Regs.DBCTL.bit.OUT_MODE = 3;使能雙邊沿沿時 μ s
EPwm1Regs.DBCTL.bit.POLSEL = 2;ePWMxA不翻轉,ePWMxB翻轉 μ s
EPwm1Regs.DBFED =625;//100ns*150m
EPwm1Regs.DBRED =625;
//设置触发区
EALLOW;
EPwm1Regs.TZSEL.bit.OSHT1 = 1;启用TZ1作为PWM1的错误源 μ s
EPwm1Regs.TZSEL.bit.OSHT5 = 1;
EPwm1Regs.TZCTL.bit.TZA = 2;//EPWM1A 将在跳闸事件上强制拉低。
EPwm1Regs.TZCTL.bit.TSB = 2;
EPwm1Regs.TZEINT.BIT.OST = 1;//启用 OST 中断
EDIS;
EPwm1Regs.CMPA.half.CMPA=0;
}
中断空 A (空)
{
fp_g=fopen ("D:\\Xiang\\fp\\fp.txt"、"r");
fread (t、2、1、FP_G);
if (t[1]==28)
{F=2000;
EPwm1Regs.CMPA.half.CMPA=F/2;
EPwm1Regs.CMPB=F/2;
EPwm1Regs.ETCLR.bit.INT = 1;
PieCtrlRegs.PIEACX.All=PIEACK_Group3;
}
其他
{F=2500;
EPwm1Regs.CMPA.half.CMPA=F/2;
EPwm1Regs.CMPB=F/2;
EPwm1Regs.ETCLR.bit.INT = 1;
PieCtrlRegs.PIEACX.All=PIEACK_Group3;
}
}