yurinacn 发表于 2011-9-8 20:55:31

ARM1138的步进电机驱动

电子设计大赛时急需,我临时写的,欢迎大家拍砖。

步进电机驱动ourdev_675377F8V6XU.rar(文件大小:45K) (原文件名:步进电机驱动.rar)

StepMotor.h:
/***********************************
四相步进电机驱动 for ARM1138
zhujinliang
2011.09.02ver 1.0

使用定时器控制步进电机精确走步
使用本驱动请注意修改startup_ewarm.c中的中断向量
本驱动服务函数名为: StepMoterTimer_ISR
***********************************/

#ifndef__STEP_MOTOR_H_
#define__STEP_MOTOR_H_

#include"systemInit.h"
#include<timer.h>

///设定使用的定时器
#defineSTEP_MOTOR_TIMER_PERIPH       SYSCTL_PERIPH_TIMER1
#defineSTEP_MOTOR_TIMER_BASE         TIMER1_BASE
#defineSTEP_MOTOR_TIMER_INT          INT_TIMER1A

///引脚设定,注意顺序
#defineSTEP_MOTOR_PORT               GPIO_PORTA_BASE
#defineSTEP_MOTOR_PERIPH             SYSCTL_PERIPH_GPIOA
#defineSTEP_MOTOR_PIN_1            GPIO_PIN_0
#defineSTEP_MOTOR_PIN_2            GPIO_PIN_1
#defineSTEP_MOTOR_PIN_3            GPIO_PIN_2
#defineSTEP_MOTOR_PIN_4            GPIO_PIN_3

#defineSTEP_MOTOR_FORWARD_NEVER_STOP   0x7FFFFFFF   //使电机不停旋转,此时GetStepMotorStepNow可能溢出
#defineSTEP_MOTOR_OPPOSITE_NEVER_STOP0x80000000   //使电机不停旋转,此时GetStepMotorStepNow可能溢出

#defineSTEP_MOTOR_MODE_8_BEATS       0x00   //使用八拍模式
#defineSTEP_MOTOR_MODE_4_BEATS       0x01   //使用四拍模式
#defineSTEP_MOTOR_MODE_ACTIVE_HIGH   0x00   //使用八拍模式
#defineSTEP_MOTOR_MODE_ACTIVE_LOW    0x02   //使用四拍模式

#defineSTEP_MOTOR_STATE_STOPED       0x00      //电机已停止
#defineSTEP_MOTOR_STATE_STARTED      0x01      //电机已启动

///初始化驱动
voidStepMotorInit(void);

///设置电机参数
///参数 Mode : 电机参数,参考 STEP_MOTOR_MODE_ 常量,多个参数使用 | 连接
voidSetStepMotorMode(int Mode);

///获取电机设置参数
int   GetStepMotorMode(void);

///设置电机旋转角度,正数即为正向,如果启动后再做修改,将在当前位置旋转参数指定角度而不考虑上次目标是否到达
///参数 Steps : 旋转拍数,本驱动使用八
voidSetStepMotorRotate(signed int Steps);

///设置电机旋转角度,正数即为正向,如果启动后再做修改,将在当前位置旋转参数指定角度而不考虑上次目标是否到达
///参数 Steps : 旋转拍数,本驱动使用八
voidPlusStepMotorRotate(signed int Steps);

///启动电机
voidStepMotorStart(void);

///停止电机,保持锁定状态
voidStepMotorStop(void);

///查询电机状态,详见STEP_MOTOR_STATE_常量
intGetStepMotorState(void);

///解除锁定状态
voidStepMotorRelease(void);

///获取设定的步数
int   GetStepMotorSteps(void);

///获取剩余步数
int   GetStepMotorStepNow(void);

///设定步进电机速度,实质为产生脉冲的频率,具体速度须根据设定参数以及电机指标计算
///参数 freq : 脉冲频率
voidSetStepMotorFrequency(float freq);

#endif

xiaowei0588 发表于 2011-9-22 09:04:38

不错!
页: [1]
查看完整版本: ARM1138的步进电机驱动