| 
				打卡等级:初来乍到打卡总天数: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;
 }
 }
 }
 
 | 
 |