Cコードに問題があります。使用している PWM をシャットダウン (トリップ ゾーン) するかどうかを決定するために使用される ADC があります。しかし、ADC が間違った電圧レベルで PWM をシャットダウンするため、私の計算は意図したとおりに機能しないようです。変数を次のように開始します。
float32 current = 5;
Uint16 shutdown = 0;
そして、私は次のように計算します:
// Save the ADC input to variable
adc_info->adc_result0 = AdcRegs.ADCRESULT0>>4; //bit shift 4 steps because adcresult0 is effectively a 12-bit register not 16-bit, ADCRESULT0 defined as Uint16
current = -3.462*((adc_info->adc_result0/1365) - 2.8);
// Evaluate if too high or too low
if(current > 9 || current < 1)
{
shutdown = 1;
}
else
{
shutdown = 0;
}
その後、この if ステートメントを使用します。
if(shutdown == 1)
{
EALLOW; // EALLOW protected register
EPwm1Regs.TZFRC.bit.OST = 1; // Force a one-shot trip-zone interrupt
EDIS; // end write to EALLOW protected register
}
そのため、電流が 9 を超えるか 1 を下回る場合、PWM をトリップさせたいと考えています。これは、それぞれ <273 (0x111) および >3428 (0xD64) の ADC 結果と一致するはずです。ADC 値は、それぞれ電圧 0.2V と 2.51V に対応します。ADC は、電圧 0 と 3V の間を 12 ビット精度で測定します。
しかし、そうではありません。代わりに、トリップ ゾーンは約 1V と 2.97V でオフになります。それで、私は何を間違っていますか?