波形图说明:绿色为GPIO67输出信号,低电平使能48V电压输出;黄色为48V输出,当绿色低电平时输出,高电平截止。紫色为直流电压,代表整个机器开通管段,蓝色是交流电压。整个系统是整流器。
通过开关电源获得的波形图,上电后,GPIO67始终为高电平与预期一致,48V也无输出
通过整流器直流母线接辅助电源供电,上电初会有GPIO67误动作,且随后会周期出现
对于周期出现的问题,将代码:
if(SoftErrFlag==0) {GpioDataRegs.GPCCLEAR.bit.GPIO67 = 1; } if(SoftErrFlag==1) {PWM_Disable();GpioDataRegs.GPCSET.bit.GPIO67 = 1;GpioDataRegs.GPBCLEAR.bit.GPIO41 = 1;GpioDataRegs.GPBCLEAR.bit.GPIO50 = 1; }
改为:
if(SoftErrFlag==0) { counter++; if(counter==100) { GpioDataRegs.GPCCLEAR.bit.GPIO67 = 1; counter=0; } } if(SoftErrFlag==1) { PWM_Disable(); counter=0; GpioDataRegs.GPCSET.bit.GPIO67 = 1; GpioDataRegs.GPBCLEAR.bit.GPIO41 = 1; GpioDataRegs.GPBCLEAR.bit.GPIO50 = 1; }
提高抗干扰性后没问题了
但第一次上电的误动作还在,最后通过参考问题:e2echina.ti.com/…/118035
将代码
// Step 1. Initialize System Control: InitSysCtrl(); memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize); // Step 2. Initialize GPIO: InitGpio();
改为
// Step 1. Initialize System Control: InitSysCtrl(); memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize); // Step 2. Initialize GPIO: InitGpio(); GpioDataRegs.GPCSET.bit.GPIO67 = 1;
没有问题了。
那么问题来了,为什么在InitGpio();后面添加一句GpioDataRegs.GPCSET.bit.GPIO67 = 1;就不会误动作了?
Green Deng:我认为是GPIO模块初始化后,引脚会处于一个不确定电平的状态,加上GpioDataRegs.GPCSET.bit.GPIO67 = 1之后就等于是给了GPIO口一个默认电平,就不会出现误动作了。
波形图说明:绿色为GPIO67输出信号,低电平使能48V电压输出;黄色为48V输出,当绿色低电平时输出,高电平截止。紫色为直流电压,代表整个机器开通管段,蓝色是交流电压。整个系统是整流器。
通过开关电源获得的波形图,上电后,GPIO67始终为高电平与预期一致,48V也无输出
通过整流器直流母线接辅助电源供电,上电初会有GPIO67误动作,且随后会周期出现
对于周期出现的问题,将代码:
if(SoftErrFlag==0) {GpioDataRegs.GPCCLEAR.bit.GPIO67 = 1; } if(SoftErrFlag==1) {PWM_Disable();GpioDataRegs.GPCSET.bit.GPIO67 = 1;GpioDataRegs.GPBCLEAR.bit.GPIO41 = 1;GpioDataRegs.GPBCLEAR.bit.GPIO50 = 1; }
改为:
if(SoftErrFlag==0) { counter++; if(counter==100) { GpioDataRegs.GPCCLEAR.bit.GPIO67 = 1; counter=0; } } if(SoftErrFlag==1) { PWM_Disable(); counter=0; GpioDataRegs.GPCSET.bit.GPIO67 = 1; GpioDataRegs.GPBCLEAR.bit.GPIO41 = 1; GpioDataRegs.GPBCLEAR.bit.GPIO50 = 1; }
提高抗干扰性后没问题了
但第一次上电的误动作还在,最后通过参考问题:e2echina.ti.com/…/118035
将代码
// Step 1. Initialize System Control: InitSysCtrl(); memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize); // Step 2. Initialize GPIO: InitGpio();
改为
// Step 1. Initialize System Control: InitSysCtrl(); memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize); // Step 2. Initialize GPIO: InitGpio(); GpioDataRegs.GPCSET.bit.GPIO67 = 1;
没有问题了。
那么问题来了,为什么在InitGpio();后面添加一句GpioDataRegs.GPCSET.bit.GPIO67 = 1;就不会误动作了?
user5103894:
回复 Green Deng:
这个其实使能了内部上拉,gpcpud.bit.gpio67=0的。