工具/软件:Code Composer Studio
您好!
我使用 具有所需频率和占空比的 HET 单独生成 PWM。 并且 还单独与 RTI 配合使用、两者都正常工作。 但是、当我根据我的需要尝试将这些合并到中时、当我将 HET 函数放入 RTI 函数时、HET 不起作用。 请帮助我将其简短描述。
HET 每20ms 切换一次。 我需要 HET 在 RTI 函数中处于 ON 状态2秒(T1 - 100*20ms = 2秒)。
RTI 将20ms 进行一次比较
源代码:
#include "sys_common.h"
#include "system.h"
#include "adc.h"
#include "sci.h"
#include "Gio.h"
#include "math.h"
#include "het.h"
#include "rti.h"
float o;
字符 y[20];
int t1 = 100;
int t2 = 50;
int T = 200;
int i1 = 0、J1 = 0、K1 = 0;
浮点 A;
浮点 VT、ti、sf、fiO2、tp、rr、peep;
浮点 ps;
浮动 ti1、TP1;//计算的阀驱动吸气
浮点 VTE = 0;//呼气流量传感器
float AFR、o2fr、dt1、dt2;
float Dt3 = 0;
int b;
字符 s[4];
静态无符号字符 i[6];
静态无符号字符*j=i;
static unsigned char 命令;
hetSIGNAL_t setup_pwm;
静态常量 uint32 s_het1pwmPolarity[8U]={3U、3U、3U、3U、3U、 3U、3U、3U、};
hetSIGNAL_t setup_pwm;
void pwmSetDuty_full (hetRAMBASE_t * hetRAM、uint32 PWM、uint32 fuser_pwmDuty、
uint32 pwmdutty);
空等待(uint32时间);
void main (void)
{
rtiInit();
gioInit();
gioSetDirection (gioPORTB、1);
sciInit();
hetInit();
adcInit();
adcStartConversion (adcREG1、adcGROUP1);
sciReceive (scilinREG、1、(unsigned char*)命令(command));
J=I;
b = 1;
_enable_IRQ ();
while (1)
{
hetInit();
如果(b = 1)
{
//hetInit();
rtiEnableNotification (rtiNOTIFICATION_COMPARE0);
rtiStartCounter (rtiCOUNTER_BLOCK0);
}
}
}
void rtiNotification (uint32通知)
{
如果(i1 < T1 && T1 > 0)
{
hetInit();
float ff = 100.0;
pwmStart (hetRAM1、pwm0);
setup_pwm.period=(float64) 1e6/1000;
float DuttyC2= ff/100;
uint32 Dutcycle2=setup_pwm.period* DuttyC2;
uint32 Portcentdutty2=DuttyC2*100;
pwmSetSignal (hetRAM1、pwm0、setup_PWM);
pwmSetDuty_full (hetRAM1、pwm0、Portcentdutty2、Dutcycle2);
O = i1;//平均值预置
sciSend (scilinREG、1、(unsigned char*)"#");
y[0]=((int) o/100)%10 + 0x30;
y[1]=((int) o/10)%10 + 0x30;
y[2]=((int) o)%10 + 0x30;
sciSend (scilinREG、4、(unsigned char*)&y);
sciSend (scilinREG、1、(unsigned char*)"f");
sciSend (scilinREG、2、(unsigned char*)"\n\n");
I1++;
}
否则、如果(i1 >= T1 && J1 < T2 && T2 > 0)
{
pwmStop (hetRAM1、pwm0);
O = J1;//平均值预置
sciSend (scilinREG、1、(unsigned char*)"!");
y[0]=((int) o/100)%10 + 0x30;
y[1]=((int) o/10)%10 + 0x30;
y[2]=((int) o)%10 + 0x30;
sciSend (scilinREG、4、(unsigned char*)&y);
sciSend (scilinREG、1、(unsigned char*)"g");
sciSend (scilinREG、2、(unsigned char*)"\n\n");
J1++;
}
否则、如果(i1 >= T1 && J1>= T2 && K1 < T && T > 0)
{
pwmStop (hetRAM1、pwm0);
O = K1;//平均预置
sciSend (scilinREG、1、(unsigned char*)"&");
y[0]=((int) o/100)%10 + 0x30;
y[1]=((int) o/10)%10 + 0x30;
y[2]=((int) o)%10 + 0x30;
sciSend (scilinREG、4、(unsigned char*)&y);
sciSend (scilinREG、1、(unsigned char*)"h");
sciSend (scilinREG、2、(unsigned char*)"\n\n");
K1+;
}
否则 if (i1 >= T1 &J1>= T2 &K1 >= T)
{
I1 = 0;
J1 = 0;
K1 = 0;
}
}
void pwmSetDuty_full (hetRAMBASE_t * hetRAM、uint32 PWM、uint32 fuser_pwmDuty、
uint32 pwmdutty){
uint32行动;
uint32 pwmPolarity = 0U;
uint32 var;
if (hetRAM == hetRAM1){
pwmPolarity = s_het1pwmPolarity[PWM];
}
if (fuse pwmDuty = 0U){
操作=(pwmPolarity = 3U)? 0U:2U;
}否则、如果(fuse _pwmDuty >= 100U){
操作=(pwmPolarity = 3U)? 2U:0U;
}否则{
操作= pwmPolarity;
}
//var =(uint32) pwmdutty * 1.2613;//(((pwmPeriod * pwmDuty)/ 100U)
var =(uint32) pwmdutty * 0.86;
hetRAM->指令[(PWM << 1U)+ 41U].Control =(hetRAM->指令[(PWM
<< 1U)+ 41U].Control)&(~(uint32)(0x00000018U))
|(操作<< 3U);
hetRAM->指令[(PWM << 1U)+ 41U].Data =(var << 7U)+ 128U;
}
空等待(UINT32时间)
{
while (time){time--;};
}
void esmGroup1通知(int 位)
{
返回;
}
void esmGroup2Notification (int 位)
{
返回;
}
void sciNotification (sciBASE-t * sci、无符号标志)
{
if (i[0]='r'| i[0]='i'| i[0]='p'| i[0]='f'| i[0]='v'| i[0]='A'| i[0]='b'| i[0]='m'|i[0]='d')
J++;
if (j=&i[6])
{
J=I;
开关(I[0])
{
案例"R":
r=((i[2]- 0x30)*100 +(i[3]- 0x30)*10 +(i[4]- 0x30));
//rr=12;
中断;
案例"I":
TI=((i[4]-0x30)*10+(i[5]-0x30));
TI=ti/10;
中断;
案例"p":
TP=((I[3]- 0x30)*10 +(I[4]- 0x30));
中断;
案例'f':
FiO2=((I[2]- 0x30)*100 +(I[3]- 0x30)*10 +(I[4]- 0x30));
中断;
案例"v":
VT=((I[1]- 0x30)*1000 +(I[2]- 0x30)*100 +(I[3]- 0x30)*10 +(I[4]- 0x30));
中断;
情况"b":
peep=((i[3]- 0x30)*10 +(i[4]- 0x30));
中断;
案例"A":
B=((I[1]- 0x30)*10 +(I[2]- 0x30);
中断;
案例"m":
PS=((I[3]- 0x30)*10 +(I[4]- 0x30);
中断;
案例"d":
A =((I[1]- 0x30)*10 +(I[2]- 0x30);
中断;
默认值:
中断;
}
i[0]='k';
}
sciReceive (sci、1、(unsigned char*) j);
}