梁工,正转反转加计算圈数, 为何正反转几个回合后,正反转对应位置就偏移动了,目前通过HEnum++; 或者HEnum--; 来计数。怎样才能保证吻合理想要的位置,而不偏移?
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_num++;
}
//if(S1==0) { XUANZ_num--; }else{ XUANZ_num++; }
XUANZ_num++;
HEnum=0;
break;
default:
break;
}
}
else //逆时针
{
switch(step)
{
case 4:// 100, P2.0-HALL_A下降沿PWM1, PWM2_L=1 //逆时针
HEnum=0;
PWMA_ENO = 0x00; PWM1_L=0; PWM3_L=0;
Delay_500ns();
PWMA_ENO = 0x01; // 打开A相的高端PWM
PWM2_L = 1; // 打开B相的低端
PWMB_CCER1 |= (0x10+0x00); //P2.1 0x10:允许输入捕获, +0x00:上升沿, +0x20:下降沿
PWMB_IER |= 0x04; //P2.1 使能中断
HEnum++;
break;
case 6:// 110, P2.1-HALL_B上升沿PWM1, PWM3_L=1
PWMA_ENO = 0x01; PWM1_L=0; PWM2_L=0; // 打开A相的高端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 2:// 010, P2.2-HALL_C下降沿PWM2, PWM3_L=1
PWMA_ENO = 0x00; PWM1_L=0; PWM2_L=0;
Delay_500ns();
PWMA_ENO = 0x04; // 打开B相的高端PWM
PWM3_L = 1; // 打开C相的低端
PWMB_CCER1 |= (0x01+0x00); //P2.0 0x01:允许输入捕获, +0x00:上升沿, +0x02:下降沿
PWMB_IER |= 0x02; //P2.0 使能中断
HEnum++;
break;
case 3:// 011, P2.0-HALL_A上升沿PWM2, PWM1_L=1
PWMA_ENO = 0x04; PWM2_L=0; PWM3_L=0; // 打开B相的高端PWM
Delay_500ns();
PWM1_L = 1; // 打开A相的低端
PWMB_CCER1 |= (0x10+0x20); //P2.1 0x10:允许输入捕获, +0x00:上升沿, +0x20:下降沿
PWMB_IER |= 0x04; //P2.1 使能中断
HEnum++;
break;
case 1:// 001, P2.1-HALL_B下降沿PWM3, PWM1_L=1
PWMA_ENO = 0x00; PWM2_L=0; PWM3_L=0;
Delay_500ns();
PWMA_ENO = 0x10; // 打开C相的高端PWM
PWM1_L = 1; // 打开A相的低端
PWMB_CCER2 |= (0x01+0x00); //P2.2 0x01:允许输入捕获, +0x00:上升沿, +0x02:下降沿
PWMB_CCER2 |= 0x10; // 开启比较输出, 高电平有效//230517
PWMB_IER |= 0x08; //P2.2 使能中断
HEnum++;
break;
case 5:// 101, P2.2-HALL_C上升沿PWM3, PWM2_L=1
PWMA_ENO = 0x10; PWM1_L=0; PWM3_L=0; // 打开C相的高端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_num++;
}
//if(S1==0) { XUANZ_num--; }else{ XUANZ_num++; }
XUANZ_num--;
HEnum=0;
break;
default:
break;
}
}
}
dong97512 发表于 2023-7-14 13:11
梁工,正转反转加计算圈数, 为何正反转几个回合后,正反转对应位置就偏移动了,目前通过HEnum++; 或者HEnu ...
开环控制,有误差不能感知的。
要达到你要求的效果,建议增加编码器或码盘。
梁工 发表于 2023-7-14 16:37
开环控制,有误差不能感知的。
要达到你要求的效果,建议增加编码器或码盘。 ...
没法闭环吗?
dong97512 发表于 2023-7-14 17:43
没法闭环吗?
电机控制的闭环是指由过0点指示换相时刻。
你要的是外部的闭环,那得有编码器或码盘。
梁工 发表于 2023-7-14 16:37
开环控制,有误差不能感知的。
要达到你要求的效果,建议增加编码器或码盘。 ...
我手上有一个GD32F03 加PT5671 样品, 能准确控制圈数。
dong97512 发表于 2023-7-14 17:47
我手上有一个GD32F03 加PT5671 样品, 能准确控制圈数。
那可能是FOC方式控制的,算法不一样。
梁工 发表于 2023-7-14 17:51
那可能是FOC方式控制的,算法不一样。
目前这个不是PWNB 有霍尔触发中断吗?这个能闭换控制吗?
dong97512 发表于 2023-7-14 19:08
目前这个不是PWNB 有霍尔触发中断吗?这个能闭换控制吗?
可以,上面我想成无HALL的了。有HALL的,HAL信号滤波一下,以免干扰影响计数。
梁工,你好! 根据这个原理图和带HALL程序,我已经将实物做出,电机在正转过程中转几分钟后会停一下以后立马再启动,反转没有这个问题。这个是硬件还是程序的问题。
现在又有新状况了,上电后转一会后,好像上下管会同时导通,电源直接短路;重新上电后正常转一会后,又短路。(带HALL程序)