单片机交流
直播中

申根换

7年用户 1627经验值
私信 关注
[问答]

如何用AVR单片机控制VID6606步进电机去驱动VID29

VID6606步进电机是什么?
VID6606步进电机的功能和特点有哪些?
如何用AVR单片机控制VID6606步进电机去驱动VID29?

回帖(1)

李峰

2021-9-22 15:51:18
  概述
  VID29系列步进电机是一种精密的微型步进电机,内置减速比180/1的齿轮系,主要应用于车辆的仪表显示盘,也可用于其它仪器仪表装置中,将数字信号直接准确快速地转为模拟的显示输出,完全兼容X27 X25 XC5 168 等电机。
  VID29系列步进电机需要两路逻辑脉冲信号驱动,可以工作于5-10V的脉冲下,输出轴的步距角最小可以达1/12°,最大角速度600°/s。可以分步模式或微步模式驱动。
  VID6606 是一款专为驱动微型步进电机而设计的CMOS集成威廉希尔官方网站 ,每个驱动芯片可同时驱动四路电机。它在驱动芯片的频率控制端输入脉冲序列 F(scx),输出端可以控制步进电机的输出轴以微步转动,每个脉冲对应电机输出轴转动1/12°,最大角速度可达600°/s。 VID6606采用28脚封装工艺。
  一、VID6606的功能和特点
  以微步驱动
  简单易用,每个电机只需速度F(scx)和方向(CW/CCW)两个控制端,大大节约了单片机控制引脚
  所有输入脚都有干扰过滤器
  宽工作电压
  低电磁干扰辐射
  二、VID6606引脚功能
  三、VID6606典型应用威廉希尔官方网站
  如何用AVR单片机控制VID6606驱动VID29
  一、头文件
  #ifndef VID6606_H
  #define VID6606_H
  #include “Main.h”
  #ifdef VID6606_IsValid
  #define VID6606_MotorNum 4//定义控制电机的数量
  #define VID6606_Speed 10 //定义指针旋转速度
  #define VID6606_RST_GPIOx GPIOC
  #define VID6606_RST_PINx BIT1
  //--------------A---------------------------
  #define VID6606_FSCXA_GPIOx GPIOC
  #define VID6606_FSCXA_PINx BIT3
  #define VID6606_CCWA_GPIOx GPIOC
  #define VID6606_CCWA_PINx BIT2
  //--------------B---------------------------
  #define VID6606_FSCXB_GPIOx GPIOA
  #define VID6606_FSCXB_PINx BIT7
  #define VID6606_CCWB_GPIOx GPIOC
  #define VID6606_CCWB_PINx BIT7
  //--------------C---------------------------
  #define VID6606_FSCXC_GPIOx GPIOA
  #define VID6606_FSCXC_PINx BIT6
  #define VID6606_CCWC_GPIOx GPIOA
  #define VID6606_CCWC_PINx BIT5
  //--------------D---------------------------
  #define VID6606_FSCXD_GPIOx GPIOC
  #define VID6606_FSCXD_PINx BIT0
  #define VID6606_CCWD_GPIOx GPIOD
  #define VID6606_CCWD_PINx BIT7
  #define VID6606_ON *AvrGPIOx[VID6606_RST_GPIOx][PORTx] |= VID6606_RST_PINx;
  #define VID6606_OFF *AvrGPIOx[VID6606_RST_GPIOx][PORTx] &= ~VID6606_RST_PINx;
  //-------------------------------------------------
  // #define VID6606_CW(x) *VID6606_Diver[x].CCW_GPIO |= VID6606_Diver[x].CCW_PINx
  // #define VID6606_CCW(x) *VID6606_Diver[x].CCW_GPIO &= ~VID6606_Diver[x].CCW_PINx
  // #define VID6606_FSCX_H(x) *VID6606_Diver[x].FSCX_GPIO |= VID6606_Diver[x].FSCX_PINx
  // #define VID6606_FSCX_L(x) *VID6606_Diver[x].FSCX_GPIO &= ~VID6606_Diver[x].FSCX_PINx
  #define VID6606_CW(x) *VID6606_Diver[x].CCW_GPIO |= VID6606_Diver[x].CCW_PINx
  #define VID6606_CCW(x) *VID6606_Diver[x].CCW_GPIO &= ~VID6606_Diver[x].CCW_PINx
  #define VID6606_FSCX_H(x) *VID6606_Diver[x].FSCX_GPIO |= VID6606_Diver[x].FSCX_PINx
  #define VID6606_FSCX_L(x) *VID6606_Diver[x].FSCX_GPIO &= ~VID6606_Diver[x].FSCX_PINx
  /union Vid6606_Flag
  {
  struct
  {
  uint8_t A :1;
  uint8_t B :1;
  uint8_t C :1;
  uint8_t D :1;
  uint8_t RE4:4;
  }Bit;
  uint8_t Byte;
  };/
  typedef struct
  {
  volatile uint8_tFSCX_GPIO;
  volatile uint8_t FSCX_PINx;
  volatile uint8_t CCW_GPIO;
  volatile uint8_t CCW_PINx;
  }Vid6606_Diver;
  struct Vid6606_Data
  {
  int16_t Angle[2][4];
  int32_t * Clock;
  uint8_t step[4];
  };
  extern Vid6606_Diver const VID6606_Diver[4];
  //extern union Vid6606_Flag VID6606_Flag;
  extern struct Vid6606_Data VID6606_Data;
  extern void VID6606_Init(void);
  extern void VID6606_GPIO_Config(void);
  extern void VID6606_Main(void);
  extern void VID6606_Run(void);
  extern void VID6606_GetAngle(void);
  #endif
  #endif
  二、主体程序
  程序包括函数:
  名称:VID6606_Init
  功能:VID6606初始化
  名称:VID6606_Main
  功能:VID6606主题函数,需要扫描
  名称:VID6606_GetAngle
  功能:得到偏转角度
  说明:这是一个函数接口,在这里实现角度的转换
  名称:VID6606_Run
  功能:电机运转
  说明:VID6606根据VID6606_Data.Angle[x]数据信息将指针角度调整到对应的位置
  名称:VID6606_GPIO_Config
  功能:控制VID6606的io口配置
  完整的程序文件请在我上传的资源处下载:AVR-VID6606.DOC
举报

更多回帖

发帖
×
20
完善资料,
赚取积分