WYP 发表于 2025-10-9 23:25:34

求大老帮写个代码,利用STC8g1k08-38i-tssop20与A4988做一个42步进电机驱动控制器

利用STC8g1k08-38i-tssop20与A4988做一个42步进电机驱动控制器,有一个正转开关,一个反转开关,开关点动模式,一个电位器调速开关。在线等高手

下面这个代码只有正转和反转,没有调速,帮我加个调度也可以

#include <STC8G.H>
#include <intrins.h>

// 引脚定义(严格按需求分配)
sbit STEP   = P3^2;    // 第13脚:A4988 STEP
sbit DIR      = P3^3;    // 第14脚:A4988 DIR
sbit KEY_FWD= P3^5;    // 第16脚:正转开关(低电平有效)
sbit KEY_REV= P3^4;    // 第15脚:反转开关(低电平有效)

// 函数声明(修复:添加所有函数原型)
void Delay_us(unsigned int us);
void Delay_ms(unsigned int ms);
void GPIO_Init(void);

// 全局变量
unsigned int pulse_delay = 1000;// 固定速度1000us(可调)

void main()
{
    // 初始化
    GPIO_Init();
    STEP = 0;
    DIR = 0;
   
    while(1)
    {
      // 点动控制逻辑
      if(KEY_FWD == 0)
      {
            DIR = 0;// 正转方向
            do {
                STEP = 1;
                Delay_us(50);    // 50us脉冲宽度
                STEP = 0;
                Delay_us(pulse_delay);
            } while(KEY_FWD == 0);
      }
      else if(KEY_REV == 0)
      {
            DIR = 1;// 反转方向
            do {
                STEP = 1;
                Delay_us(50);
                STEP = 0;
                Delay_us(pulse_delay);
            } while(KEY_REV == 0);
      }
      else
      {
            STEP = 0;// 停止
            Delay_ms(10);
      }
    }
}

// GPIO初始化
void GPIO_Init(void)
{
    P3M0 = 0x00;// P3口准双向模式
    P3M1 = 0x00;
    KEY_FWD = 1;// 启用内部上拉
    KEY_REV = 1;
}

// 微秒延时函数(12MHz时钟优化)
void Delay_us(unsigned int us)
{
    while(us--)
    {
      _nop_(); _nop_(); _nop_(); _nop_();
      _nop_(); _nop_(); _nop_(); _nop_();
    }
}

// 毫秒延时函数
void Delay_ms(unsigned int ms)
{
    unsigned int i, j;
    for(i = ms; i > 0; i--)
      for(j = 1100; j > 0; j--);
}

神农鼎 发表于 2025-10-10 09:36:36



51开源,步进电机驱动 程序, 直接驱动, 或驱动步进电机驱动器 一共8个程序 - 步进电机控制 国芯人工智能技术交流网站 - AI32位8051交流社区

WYP 发表于 2025-10-11 17:27:35

神农鼎 发表于 2025-10-10 09:36
51开源,步进电机驱动 程序, 直接驱动, 或驱动步进电机驱动器 一共8个程序 - 步进电机控制 国芯人工智能 ...

那个好像没调速度开关,{:shuai:}
页: [1]
查看完整版本: 求大老帮写个代码,利用STC8g1k08-38i-tssop20与A4988做一个42步进电机驱动控制器