- 打卡等级:初来乍到
- 打卡总天数:3
- 最近打卡:2025-10-26 10:46:25
已绑定手机
新手上路
- 积分
- 28
|
发表于 2025-10-23 20:02:39
|
显示全部楼层
抱歉,没有懂您说的什么意思 ,能麻烦具体指出在您发布的STC8H1K28例程里的那个位置加吗?大概要加多少延时?
void StepMotor(void) // 换相序列函数
{
PWMB_IER = 0;
PWMB_CCER1 = 0;
PWMB_CCER2 = 0;
step = P2 & 0x07; //P2.0-HALL_A P2.1-HALL_B P2.2-HALL_C
if(!Motor_Dir) //顺时针
{
switch(step)
{
case 2: // 010, P2.0-HALL_A下降沿 PWM3, PWM2_L=1 //顺时针
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_IER = 0x08; //P2.2 使能中断
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 使能中断
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 使能中断
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_IER = 0x08; //P2.2 使能中断
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 使能中断
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 使能中断
break;
default:
break;
}
}
else //逆时针
{
switch(step)
{
case 4: // 100, P2.0-HALL_A下降沿 PWM1, PWM2_L=1 //逆时针
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 使能中断
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_IER = 0x08; //P2.2 使能中断
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 使能中断
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 使能中断
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_IER = 0x08; //P2.2 使能中断
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 使能中断
break;
default:
break;
}
}
}
|
|