|
发表于 2023-7-11 15:15:43
|
显示全部楼层
梁工,你好! 我换相序列函数 的最后一个相序理解加了一个计数器,打算计算工作圈数;为何计数器的值(XUANZ_num)比电机实际 运作圈数比值达到1000:1关系了, 不知道如何理解!
if(!B_direct) //顺时针
{
switch(step)
{
case 2: // 010, P2.0-HALL_A下降沿 PWM3, PWM2_L=1 //顺时针
HEnum=0;
PWMA_ENO = 0x00; PWM1_L=0; PWM3_L=0;
Delay_500ns();
PWMA_ENO = 0x10; // 打开C相的高端PWM
PWM2_L = 1; // 打开B相的低端
PWMB_CCER2 |= (0x01+0x00); //P2.2 0x01:允许输入捕获, +0x00:上升沿, +0x02:下降沿
PWMB_CCER2 |= 0x10; // 开启比较输出, 高电平有效 //230517
PWMB_IER |= 0x08; //P2.2 使能中断
HEnum++;
break;
case 6: // 110, P2.2-HALL_C上升沿 PWM3, PWM1_L=1
PWMA_ENO = 0x10; PWM2_L=0; PWM3_L=0; // 打开C相的高端PWM
Delay_500ns();
PWM1_L = 1; // 打开A相的低端
PWMB_CCER1 |= (0x10+0x20); //P2.1 0x10:允许输入捕获, +0x00:上升沿, +0x20:下降沿
PWMB_IER |= 0x04; //P2.1 使能中断
HEnum++;
break;
case 4: // 100, P2.1-HALL_B下降沿 PWM2, PWM1_L=1
PWMA_ENO = 0x00; PWM2_L=0; PWM3_L=0;
Delay_500ns();
PWMA_ENO = 0x04; // 打开B相的高端PWM
PWM1_L = 1; // 打开A相的低端
PWMB_CCER1 |= (0x01+0x00); //P2.0 0x01:允许输入捕获, +0x00:上升沿, +0x02:下降沿
PWMB_IER |= 0x02; //P2.0 使能中断
HEnum++;
break;
case 5: // 101, P2.0-HALL_A上升沿 PWM2, PWM3_L=1
PWMA_ENO = 0x04; PWM1_L=0; PWM2_L=0; // 打开B相的高端PWM
Delay_500ns();
PWM3_L = 1; // 打开C相的低端
PWMB_CCER2 |= (0x01+0x02); //P2.2 0x01:允许输入捕获, +0x00:上升沿, +0x02:下降沿
PWMB_CCER2 |= 0x10; // 开启比较输出, 高电平有效 //230517
PWMB_IER |= 0x08; //P2.2 使能中断
HEnum++;
break;
case 1: // 001, P2.2-HALL_C下降沿 PWM1, PWM3_L=1
PWMA_ENO = 0x00; PWM1_L=0; PWM2_L=0;
Delay_500ns();
PWMA_ENO = 0x01; // 打开A相的高端PWM
PWM3_L = 1; // 打开C相的低端
PWMB_CCER1 |= (0x10+0x00); //P2.1 0x10:允许输入捕获, +0x00:上升沿, +0x20:下降沿
PWMB_IER |= 0x04; //P2.1 使能中断
HEnum++;
break;
case 3: // 011, P2.1-HALL_B上升沿 PWM1, PWM2_L=1
PWMA_ENO = 0x01; PWM1_L=0; PWM3_L=0; // 打开A相的高端PWM
Delay_500ns();
PWM2_L = 1; // 打开B相的低端
PWMB_CCER1 |= (0x01+0x02); //P2.0 0x01:允许输入捕获, +0x00:上升沿, +0x02:下降沿
PWMB_IER |= 0x02; //P2.0 使能中断
HEnum++; if(HEnum==6 ){ // XUANZ_num1++;
}
XUANZ_num++;
HEnum=0;
break;
default:
break;
}
}
第2给我请问题:上面程序中的: if(HEnum==6 ){ XUANZ_num1++;
}
里面的:XUANZ_num1 为何数字加不了。一直为0, 电机不是6个相序有序运转的吗?
|
|