|
|
发表于 2023-8-8 13:26:40
|
显示全部楼层
梁工,我换相增加500ns延迟还是有概率会烧掉,我增加到800ns还是有概率会烧掉了,三极管从是是S8050换成3904问题仍然存在,三极管和mos同时坏。
会不会三极管没有及时关掉,工作在饱和区间或其他原因?
void StepXL(void) // 换相序列函数
{
switch(Step)
{
case 0: // AB
PWM0_L=0; PWM2_L=0; CCAP1H=0; CCAP2H=0;
Delay_800ns();
CCAP0H = PWM_Value; // 打开A相的高端
PWM1_L = 1; // 打开B相的低端
ADC_CONTR = 0XED; // 选择P1.5作为ADC输入 即c相电压
CMPCR1 = 0x9C; //bit7=1 允许比较器, bit4=1 比较结果由1变0, 产生下降沿中断 (不能响应下降沿中断?)
break;
case 1: // AC
PWM0_L=0; PWM1_L=0; CCAP1H=0; CCAP2H=0;
Delay_800ns();
CCAP0H = PWM_Value; // 打开A相的高端
PWM2_L = 1; // 打开C相的低端
ADC_CONTR = 0XEC; // 选择P1.4作为ADC输入 即B相电压
CMPCR1 = 0xAC; //上升沿中断
break;
case 2: // BC
PWM0_L=0; PWM1_L=0; CCAP0H=0; CCAP2H=0;
Delay_800ns();
CCAP1H = PWM_Value; // 打开B相的高端
PWM2_L = 1; // 打开C相的低端
ADC_CONTR = 0XEB; // 选择P1.3作为ADC输入 即a相电压
CMPCR1 = 0x9C; //下降沿中断
break;
case 3: // BA
PWM1_L=0; PWM2_L=0; CCAP0H=0; CCAP2H=0;
Delay_800ns();
CCAP1H = PWM_Value; // 打开B相的高端
PWM0_L = 1; // 打开A相的低端
ADC_CONTR = 0XED; // 选择P1.5作为ADC输入 即c相电压
CMPCR1 = 0xAC; //上升沿中断
break;
case 4: // CA
PWM1_L=0; PWM2_L=0; CCAP0H=0; CCAP1H=0;
Delay_800ns();
CCAP2H = PWM_Value; // 打开C相的高端
PWM0_L = 1; // 打开A相的低端
ADC_CONTR = 0XEC; // 选择P1.4作为ADC输入 即B相电压
CMPCR1 = 0x9C; //下降沿中断
break;
case 5: // CB
PWM0_L=0;PWM2_L=0;CCAP0H=0; CCAP1H=0;
Delay_800ns();
CCAP2H = PWM_Value;// 打开C相的高端
PWM1_L = 1; // 打开B相的低端
ADC_CONTR = 0XEB; // 选择P1.3作为ADC输入 即a相电压
CMPCR1 = 0xAC; //上升沿中
default:
break;
} |
|