683|1

1907

帖子

0

资源

一粒金砂(高级)

说一下步进电机控制和步进电机原理 [复制链接]

调试了一个惠斯通的步进电机,原来调试过一款欧柯达的42步进电机, 本以为两个电机差不多,驱动器给的一样,结果发现死活不能动。用自己百度了一下,做一个笔记

例如这个电机 42BYGH403AA

image.png

 42 为机座尺寸, BYGH是指混合式步进电机(混合式步进电机是综合了永磁式和反应式的优点而设计的步进电机。它又分为两相、三相和五相,两相步进角一般为1.8度 ,三相步进角 一 般为 1.2度 ,而五相步进角 一 般为0.72度。
混合式步进电机的转子本身具有磁性,因此在同样的定子电流下产生的转矩要大于反应式步进电机,且其步距角通常也较小,因此,经济型数控机床一般需用混合式步进电机驱动。但混合转子的结构较复杂、转子惯量大,其快速性要低于反应式步进电机)

这个图像就能看出电机的具体的尺寸标准 绕组是星型步距角1.8度,H就是混合式,法兰是异性法兰 

  步进电机还有带行星减速的尺寸,在最后我们可以看到一个

比如这个

OK42STH47-168AG3.71

ok:是产品名,欧柯达42是尺寸其他的看不懂,3.71就是减速比

最后一句话直接买电机对应的驱动器,这个市场根本没有统一的标准,杂乱无章,还是直接买一套直接用好,这一会调好了,一般工频10k左右吧程序发给大家参考一下


#include "sydj.h"
#include "gpio.h"
#include "stmflash.h"
#include "usart.h"
 
 
 u8 DJ_Buffer_temp[4];
 u8 datatemp[4];
#define FLASH_SAVE_ADDR  0X08070000     //设置FLASH 保存地址(必须为偶数,且其值要大于本代码所占用FLASH的大小+0X08000000)
 
int32_t DJ_WEIZHI ;
u8 End_flage=0;
u8 Dj_turn=0;
u32 Dj_step=0;
u16 Dj_speed=0;
u16 Dj_set=0;
 
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
void TIM1_Init(u16 arr ,u16 psc)
{
 
    
 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟使能
 
    //定时器TIM3初始化
    TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值    
    TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
 
    TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
    
    TIM_Cmd(TIM1, ENABLE); 
    //中断优先级NVIC设置
    NVIC_InitStructure.NVIC_IRQChannel =TIM1_UP_IRQn;  //TIM7中断
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//先占优先级0级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  //从优先级3级
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
    NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
 
 //使能TIMx                    
}
 
void Sydj_move(u8 turn, u16 speed,u32 steep)
{
      
      Dj_step=steep;
      Dj_speed=speed;
    Dj_set=speed+500;
       Dj_turn=turn;
        SYDJ_DR=turn;
      TIM1_Init(71,speed);
        while(End_flage==0);
 
}
 
 
void TIM1_UP_IRQHandler()
{
    static u8 dj_flag=0;
           u8 jiyi_flag=0;
    if(TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)
    {
        dj_flag=~dj_flag;
      if(dj_flag!=0)
        {
            SYDJ_DR=Dj_turn;
            SYDJ_PR=1;
          
        }    
    else 
        {
            SYDJ_DR=Dj_turn;
            SYDJ_PR=0;
        }
        jiyi_flag++;
        Dj_step--;
//        if(jiyi_flag==50)
//        {
//            jiyi_flag=0;
//             STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)datatemp,4);
//            if(Dj_turn)
//            {
//             DJ_WEIZHI=(int32_t)(datatemp[3]<<24|datatemp[2]<<16|datatemp[3]<<8|datatemp[0]);
//              printf("%d\n",DJ_WEIZHI);
//                DJ_WEIZHI+=1;
//            }
//            else
//            {
//             DJ_WEIZHI=(int32_t)(datatemp[3]<<24|datatemp[2]<<16|datatemp[3]<<8|datatemp[0]);
//             DJ_WEIZHI-=1;
//            
//            }
//            DJ_Buffer_temp[3]=DJ_WEIZHI>>24;
//            DJ_Buffer_temp[2]=DJ_WEIZHI>>16;
//            DJ_Buffer_temp[1]=DJ_WEIZHI>>8;
//            DJ_Buffer_temp[0]=DJ_WEIZHI;            
//             STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)DJ_Buffer_temp,4);
//             
//        }
    if(Dj_step>450)
    {
    if(Dj_speed>150)
         {
        Dj_speed=Dj_speed-1;
            printf("%d\n",Dj_speed);
            TIM1->PSC=Dj_speed;
            
        }
        else 
            TIM1->PSC=150;    
     }
    else if(Dj_step<=450)
        {  Dj_speed+=1;
                printf("%d\n",Dj_speed);
            TIM1->PSC=Dj_speed;
            if(Dj_step==0)//
            {
                TIM_Cmd(TIM1,DISABLE );
                End_flage=1;
            }
        }            
        
            TIM_ClearITPendingBit(TIM1, TIM_IT_Update);    
    }
    
}


回复

35

帖子

0

资源

一粒金砂(初级)

不错不错。希望代码可用


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

最新文章 更多>>
    关闭
    站长推荐上一条 1/8 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表