果果爱吃土豆 发表于 2024-12-1 19:03:15

HANPOSE公司的20HS24两相步进电机, STC8A8K64D4芯片

各位大佬,嵌入式新人一位,现在我在使用HANPOSE公司提供的20HS24的步进电机做项目,如下是根据原理图和步进电机写的一个简单demo,但是在将程序烧录到STC8A芯片板子里面,通过串口工具给STC8A的uart1发送指令来驱动电机的正反转,点击正转都没有90度,多点击正转90度之后,步进电机发热严重,请问大佬们帮忙看看是啥问题,非常感谢#include "config.h"
#include "STC8A_Delay.h"
#include "STC8A_GPIO.h"
#include "Uart.h"

void GPIO_timer_config() {
    //P1.4/P1.5/P1.6/P1.7 推挽 B3电机
    P1M0 |= 0xf0; P1M1 &= ~0xf0;
    P14 = 0;P15 = 0;P16 = 0;P17 = 0;
}


//电机反转90度
void Motor_reverse_90(){
    unsigned char step;
    for(step = 0;step <50; step++){
      switch(step % 4){
            case 0:
                P14 = 1;
                P15 = 0;
                P16 = 1;
                P17 = 0;
                break;
            case 1:
                P14 = 0;
                P15 = 1;
                P16 = 1;
                P17 = 0;
                break;
            case 2:
                P14 = 0;
                P15 = 1;
                P16 = 0;
                P17 = 1;
                break;
            case 3:
                P14 = 1;
                P15 = 0;
                P16 = 0;
                P17 = 1;
                break;
            default:
                break;
      }
      delay_ms(2);// 延时,确保信号稳定
    }
}


//电机正转90度
void Motor_forward_90(){
    unsigned char step;
    for(step = 0;step <50; step++){
      switch(step % 4){
            case 0:
                P14 = 1;
                P15 = 0;
                P16 = 0;
                P17 = 1;
                break;
            case 1:
                P14 = 0;
                P15 = 1;
                P16 = 0;
                P17 = 1;
                break;
            case 2:
                P14 = 0;
                P15 = 1;
                P16 = 1;
                P17 = 0;
                break;
            case 3:
                P14 = 1;
                P15 = 0;
                P16 = 1;
                P17 = 0;
                break;
          default:
                break;
      }
      delay_ms(2);
    }
}

void main(){
    Uart_init();
    GPIO_timer_config();
    EA = 1;// 开启全局中断
    printf("Init \n");
    while (1) {
      Uart1_recv();
      if(recv_data == 1){
            recv_data = 0;
            Motor_reverse_90(); //反转90度
      }else if(recv_data == 2){
            recv_data = 0;
            Motor_forward_90();//正转90度
      }
      delay_ms(10);
      
    }
}


神农鼎 发表于 2024-12-1 19:27:12



STC8A8K64D4-两相步进电机, 传统的CCP/PWM/PCA实现SPWM细分驱动 - BLDC/144MHz-PWM-硬件移相/45路PWM+3路CCP/7组不同周期的PWM/DAC 国芯技术交流网站 - AI32位8051交流社区 (stcaimcu.com)




DebugLab 发表于 2024-12-1 21:49:56

20步进给1A电流???太大了!!!

果果爱吃土豆 发表于 2024-12-1 22:17:11

神农鼎 发表于 2024-12-1 19:27
STC8A8K64D4-两相步进电机, 传统的CCP/PWM/PCA实现SPWM细分驱动 - BLDC/144MHz-PWM-硬件移相/45路PWM+3路 ...

感谢,我是刚入门嵌入式,有点看不太懂寄存器操作方式{:smile:},所以我想请教下大佬我代码逻辑是否有问题

果果爱吃土豆 发表于 2024-12-1 22:18:10

DebugLab 发表于 2024-12-1 21:49
20步进给1A电流???太大了!!!

没明白意思,求大佬指点

DebugLab 发表于 2024-12-1 22:44:04

果果爱吃土豆 发表于 2024-12-1 22:18
没明白意思,求大佬指点


更换这2个电阻,减小电流

社区闲人 发表于 2024-12-2 07:45:23

驱动步进电机要使用加减速算法。
页: [1]
查看完整版本: HANPOSE公司的20HS24两相步进电机, STC8A8K64D4芯片