最近想做一个(2011年电赛自由摆)遇到了一些问题求大神们给点宝贵经验(悬赏100)

2019-08-17 00:08发布

最近想做一个自由摆遇到了一些问题求大神们给点宝贵经,
主要是步进电机转速的问题 在摆的时候用手慢慢摆动步进电机转动正常,但是让它摆动的时候步进电机不能转动,在第一个问摆动一个周期转一周没有什么问题,这是什么原因?


我的驱动是用的L298N 步进电机是用的  35BYJ412  步进电机  用的陀螺仪MPU6050 来测量角度  具体就是这些配置

第一问是在自由摆摆动一周不进电机转一圈 这个没有问题 在摆动的时候转速那些都还好  


但是在放硬币这一问上步进电机就不行了,用手很慢的摆动时步进电机能正常转动,但是在自由摆动的时候步进电机几乎不转

(我怀疑是一下几种可能: 步进电机不行响应慢     驱动不行   陀螺仪采集不行跟不上   )  做过的大神希望给点宝贵的经验,懂步进电机的希望帮忙分析下什么原因 是硬件有问题?

在线等  在此万分感谢 仅存的100金钱全部奉上。


#include"stm32f10x.h"
#include "dianji.h"
#include  "systick.h"


u8 i,j,k;
u16 N=128*8;
u8 single_pos[4]={0x07,0x0b,0x0d,0x0e};
u8 single_rev[4]={0x0e,0x0d,0x0b,0x07};
u8 double_pos[4]={0x06,0x03,0x09,0x0c};
u8 double_rev[4]={0x0c,0x09,0x03,0x06};
u8 eight_pos[8]={0x06,0x07,0x03,0x0b,0x09,0x0d,0x0c,0x0e};
u8 eight_rev[8]={0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06};


void moto_gpio_init(void)
{
       
  GPIO_InitTypeDef GPIO_InitStructure;        //声明一个结构体变量,用来初始化GPIO
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);   /* 开启GPIO时钟 */

        /*  配置GPIO的模式和IO口 */
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_0;                //选择你要设置的IO口
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;                  //设置推挽输出模式
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;          //设置传输速率
        GPIO_Init(GPIOA,&GPIO_InitStructure);          /* 初始化GPIO */
}

void Moto_Out_Data(u8 dat)
{
        GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)(dat&0x01));
        GPIO_WriteBit(GPIOA,GPIO_Pin_2,(BitAction)(dat&0x02));
        GPIO_WriteBit(GPIOA,GPIO_Pin_3,(BitAction)(dat&0x04));
        GPIO_WriteBit(GPIOA,GPIO_Pin_4,(BitAction)(dat&0x08));
}




void m_single_pos(int C)
{          
                                for(k=0;k<C;k++)
                                                 {  
                                                         for(i=0;i<4;i++)
                                                                {
                                                                 Moto_Out_Data(single_pos[i]);
                                                                 delay_ms(3);
                                                                 
                                                         }
                                         }
        }



void m_single_rev(int C)
{
           for(k=0;k<C;k++)
                 {
                                                 for(i=0;i<4;i++)
                                                         {   
                                                                 Moto_Out_Data(single_rev[i]);
                                                                 delay_ms(3);
                                                               
                                                        }
                }
        }


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。