找回密码
 立即注册
楼主: pluto555

控制步进电机到指定的位置, 大学生毕业设计

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-06-30 21:44:42

0

主题

3

回帖

58

积分

注册会员

积分
58
发表于 2024-7-6 23:22:40 来自手机 | 显示全部楼层
angmall 发表于 2024-6-20 08:33
在使用步进电机控制时,如果你已经确认步进电机的步数是200步每转,并且驱动器也设置正确,那么问题可能出 ...

感谢大哥程序调通了大佬帮忙看看如果要加上正转反转控制参数要怎么改程序

//--包含你要使用的头文件--//
#include <STC8A8K64D4.H>
#include <uart.H>
#include <delay.H>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

#define STEPS_PER_MM 200// 200步/毫米

// 定义步进电机引脚
sbit STEP = P2^6;
sbit DIR = P2^7;
sbit LED = P2^2;
void mm(uint distance_mm) ;
void pwm_pulse(uint num_pulses);
/7oid Uart1_Init(void);        //9600bps@24.000MHz

void main()
{
        P2M0 |= 0xc4;
        P2M1 &= ~0xc4;
        Uart1_Init();
        delay_X_us(100);
        LED = 0;
        delay_X_us(100);
        LED = 1;
         
        while(1)
        {
                if(RI)        //检测串口1接收中断
        {}
        }
}

void Uart1_Isr(void) interrupt 4
{
        uchar DAT;
       
        DAT = SBUF;  //读数据
        RI = 0;                 //串口中断标志位清零
        switch(DAT)    //判断串口接收的数据
        {
        case '1':LED=0;mm(1);break; / ++开灯判断
        case '0':LED=1;mm(1);break; //x--;关灯判断                  
        default :break;                        
                }
}

// 产生PWM脉冲
void pwm_pulse(uint num_pulses)
{
         uint i;
        for (i = 0; i < num_pulses; i++)
{
        STEP = 1;
        delay_X_us(400);// 调整延时时间以改变PWM频率
        STEP = 0;
        delay_X_us(400);// 调整延时时间以改变PWM频率
}
}

// 输入距离控制函数
void mm(uint distance_mm)
{
        uint steps = distance_mm * STEPS_PER_MM;
// 产生PWM脉冲
        pwm_pulse(steps);
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:527
  • 最近打卡:2025-05-07 00:40:41

10

主题

1162

回帖

5197

积分

论坛元老

积分
5197
发表于 2024-7-7 09:11:24 | 显示全部楼层
五五*** 发表于 2024-7-6 23:22
感谢大哥程序调通了大佬帮忙看看如果要加上正转反转控制参数要怎么改程序

//--包含你要使用的头文件-- ...

要在程序中添加正转和反转控制,可以通过修改步进电机的方向引脚(DIR)来实现。在你的代码中,需要扩展现有的UART控制指令,以便能够接收并处理正转和反转的指令。


### 修改后的代码示例


//--包含你要使用的头文件--//
#include <STC8A8K64D4.H>
#include <uart.H>
#include <delay.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

#define STEPS_PER_MM 200 // 200步/毫米

// 定义步进电机引脚
sbit STEP = P2^6;
sbit DIR = P2^7;
sbit LED = P2^2;

void mm(uint distance_mm, uchar direction);
void pwm_pulse(uint num_pulses);
void Uart1_Init(void); // 9600bps@24.000MHz

void main()
{
    P2M0 |= 0xC4;
    P2M1 &= ~0xC4;
    Uart1_Init();
    delay_X_us(100);
    LED = 0;
    delay_X_us(100);
    LED = 1;

    while (1)
    {
        if (RI) // 检测串口1接收中断
        {}
    }
}

void Uart1_Isr(void) interrupt 4
{
    uchar DAT;

    DAT = SBUF; // 读数据
    RI = 0;    // 串口中断标志位清零
    switch (DAT) // 判断串口接收的数据
    {
    case '1':
        LED = 0;
        mm(1, 1); // 正转
        break;
    case '0':
        LED = 1;
        mm(1, 0); // 反转
        break;
    default:
        break;
    }
}

// 产生PWM脉冲
void pwm_pulse(uint num_pulses)
{
    uint i;
    for (i = 0; i < num_pulses; i++)
    {
        STEP = 1;
        delay_X_us(400); // 调整延时时间以改变PWM频率
        STEP = 0;
        delay_X_us(400); // 调整延时时间以改变PWM频率
    }
}

// 输入距离控制函数
void mm(uint distance_mm, uchar direction)
{
    uint steps = distance_mm * STEPS_PER_MM;

    // 设置方向
    if (direction)
    {
        DIR = 1; // 正转
    }
    else
    {
        DIR = 0; // 反转
    }

    // 产生PWM脉冲
    pwm_pulse(steps);
}


### 代码说明


1. **方向控制的添加**:
    - 在函数 `mm(uint distance_mm, uchar direction)` 中,增加了 `direction` 参数,用于控制正转(1)或反转(0)。
    - 通过设置 `DIR` 引脚的电平,控制步进电机的转动方向。`DIR = 1` 表示正转,`DIR = 0` 表示反转。


2. **UART中断处理函数的修改**:
    - 在 `Uart1_Isr` 中,根据接收到的指令调用 `mm` 函数,添加了方向参数。
    - 例如,接收到 `'1'` 时,调用 `mm(1, 1)` 实现正转;接收到 `'0'` 时,调用 `mm(1, 0)` 实现反转。


3. **步进电机控制函数的修改**:
    - 在 `mm` 函数中,根据传入的 `direction` 参数,设置 `DIR` 引脚的电平,然后产生相应的PWM脉冲以控制步进电机移动指定的距离。


通过上述修改,你的程序可以控制步进电机的正转和反转,并能通过UART接收指令来动态调整电机的转动方向。




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-06-30 21:44:42

0

主题

3

回帖

58

积分

注册会员

积分
58
发表于 2024-7-12 19:12:27 | 显示全部楼层
angm*** 发表于 2024-7-7 09:11
要在程序中添加正转和反转控制,可以通过修改步进电机的方向引脚(DIR)来实现。在你的代码中,需要扩展 ...

感谢大佬 验证成功了

回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-7 13:36 , Processed in 0.125811 second(s), 62 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表