找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2199|回复: 3
打印 上一主题 下一主题
收起左侧

用MINI版STM32驱动步进电机遇到了问题

[复制链接]
跳转到指定楼层
楼主
ID:325299 发表于 2018-12-9 13:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5黑币
在控制步进电机的过程中,实现步进电机的正传---停止---反转---停止过程,本想实现一次该过程,但每次都执行了三次。
```
int main(void)
{       
        delay_init();                     //延时函数初始化          
        Moto_Init();
        LED_Init();
        int j=0;
        int k=0;
        for(k=0;k<500;k++)
         {  
       Motorcw();   //电机正传
         }
         MotorStop();
         delay_ms(5000);
   for(j=0;j<500;j++)
         {  
       Motorccw();   //电机反传
         }
         MotorStop();
         delay_ms(5000);
}
```
请大佬指点。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:375161 发表于 2018-12-9 21:17 | 只看该作者
能说明一下电机正转和电机反转的函数具体是怎么编写的吗?
回复

使用道具 举报

板凳
ID:325299 发表于 2018-12-10 22:18 | 只看该作者
nikola 发表于 2018-12-9 21:17
能说明一下电机正转和电机反转的函数具体是怎么编写的吗?

#include "moto.h"
#include "delay.h"
#include "led.h"
//步进电机相关IO口初始化
// IN4:        PC13
// IN3:        PC0
// IN2:        PC2
// IN2:        PC2
//相序
uint16_t phasecw[4] ={0x2000,0x0001,0x0004,0x0008};// D-C-B-A 电机正传
uint16_t phaseccw[4]={0x0008,0x0004,0x0001,0x2000};// A-B-C-D 电机反转

//IO口初始化
void Moto_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);                        //使能时钟
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;           // IN4:        PC13
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽输出               
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //50MHz速率
        GPIO_Init(GPIOC, &GPIO_InitStructure);                       
        GPIO_ResetBits(GPIOC,GPIO_Pin_13);                                        //输出低电平

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;           // IN3:        PC0
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;          // IN2:        PC2
        GPIO_Init(GPIOC, &GPIO_InitStructure);  
        GPIO_ResetBits(GPIOC,GPIO_Pin_2);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;          // IN2:        PC2
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        GPIO_ResetBits(GPIOC,GPIO_Pin_3);
}


//电机正转
void Motorcw(void)
{
        uint8_t i;
          for(i=0;i<4;i++)
            {
                  GPIO_Write(GPIOC,phasecw);
                   delay_ms(3);  //最快速度
          }
}

//电机反转
void Motorccw(void)
{
        uint8_t i;
        for(i=0;i<4;i++)
          {
                  GPIO_Write(GPIOC,phaseccw);
                   delay_ms(3);
           }
}

//电机停止
void MotorStop(void)
{
        GPIO_Write(GPIOC,0x0000);
}
回复

使用道具 举报

地板
ID:669687 发表于 2020-1-7 18:40 | 只看该作者
你那个循环就是执行了三次啊,单纯循环去了,i没有传到数组下标里。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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