步进电机驱动

/*stepmotor.h*/
#ifndef _STEPMOTOR_H
#define _STEPMOTOR_H
#include "sys.h"
#include "delay.h"
#define AA PDout(8)
#define aa PDout(9)
#define BB PDout(10)
#define bb PDout(11)
//单4
#define ON_1 {AA=1;aa=0;BB=0;bb=0;}
#define ON_2 {AA=0;aa=0;BB=0;bb=1;}
#define ON_3 {AA=0;aa=1;BB=0;bb=0;}
#define ON_4 {AA=0;aa=0;BB=1;bb=0;}
//双4
#define ON_D1 {AA=0;aa=1;BB=1;bb=0;}
#define ON_D2 {AA=1;aa=0;BB=1;bb=0;}
#define ON_D3 {AA=1;aa=0;BB=0;bb=1;}
#define ON_D4 {AA=0;aa=1;BB=0;bb=1;}
//单双8拍
#define ON_DD1 {AA=0;aa=1;BB=0;bb=0;}
#define ON_DD2 {AA=0;aa=1;BB=1;bb=0;}
#define ON_DD3 {AA=0;aa=0;BB=1;bb=0;}
#define ON_DD4 {AA=1;aa=0;BB=1;bb=0;}
#define ON_DD5 {AA=1;aa=0;BB=0;bb=0;}
#define ON_DD6 {AA=1;aa=0;BB=0;bb=1;}
#define ON_DD7 {AA=0;aa=0;BB=0;bb=1;}
#define ON_DD8 {AA=0;aa=1;BB=0;bb=1;}

#define OFF_ALL {AA=0;aa=0;BB=0;bb=0;}
extern void Motor_GPIO_Init(void);
extern void Motor_4(u16 time);
extern void Motor_D4(u16 time);
extern void Motor_8(u16 time);
extern void Motor_8_back(u16 time); //反转
#endif
/*stepmotor.c*/
#include "stepmotor.h"
void Motor_GPIO_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);     

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
    //GPIO_SetBits(GPIOD,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
}
void Motor_4(u16 time)
{
    ON_1;
    delay_ms(time);
    ON_2;
    delay_ms(time);
    ON_3;
    delay_ms(time);
    ON_4;
    delay_ms(time);
}
void Motor_D4(u16 time)
{
    ON_D1;
    delay_ms(time);
    ON_D2;
    delay_ms(time);
    ON_D3;
    delay_ms(time);
    ON_D4;
    delay_ms(time);
}
void Motor_8(u16 time)  //执行一次转7.2度
{//循环50次转360度,8拍每拍0.9度
    ON_DD1;
    delay_us(time);
    ON_DD2;
    delay_us(time);
    ON_DD3;
    delay_us(time);
    ON_DD4;
    delay_us(time);
    ON_DD5;
    delay_us(time);
    ON_DD6;
    delay_us(time);
    ON_DD7;
    delay_us(time);
    ON_DD8;
    delay_us(time);
}
void Motor_8_back(u16 time) //反转
{
    ON_DD8;
    delay_us(time);
    ON_DD7;
    delay_us(time);
    ON_DD6;
    delay_us(time);
    ON_DD5;
    delay_us(time);
    ON_DD4;
    delay_us(time);
    ON_DD3;
    delay_us(time);
    ON_DD2;
    delay_us(time);
    ON_DD1;
    delay_us(time);
}
时间: 2024-08-11 05:44:27

步进电机驱动的相关文章

[每日电路图] 6、看一个步进电机驱动电路【转】

          !!!come from elecfans :http://www.elecfans.com/article/88/131/194/2015/20151010385722.html [导读] 步进电机在控制系统中具有广泛的应用.它可以把脉冲信号转换成角位移,并且可用作电磁制动轮.电磁差分器.或角位移发生器等. 一.前言: 步进电机在控制系统中具有广泛的应用.它可以把脉冲信号转换成角位移,并且可用作电磁制动轮.电磁差分器.或角位移发生器等.有时从一些旧设备上拆下的步进电机(这种

FPGA Verilog HDL 系列实例--------步进电机驱动控制

[连载] FPGA Verilog HDL 系列实例 Verilog HDL 之 步进电机驱动控制 步进电机的用途还是非常广泛的,目前打印机,绘图仪,机器人等等设备都以步进电机为动力核心.那么,下面我们就了解下什么是步进电机,它是怎么控制的. 一.步进电机相关知识简介 1.步进电机概述 步进电机是一种能够将电脉冲信号转换成角位移或线位移的机电元件,它实际上是一种单相或多相同步电动机.单相步进电动机有单路电脉冲驱动,输出功率一般很小,其用途为微小功率驱动.多相步进电动机有多相方波脉冲驱动,用途很广

[51单片机] 四相五线减速比为1/64步进电机驱动设计

一.大致介绍: 步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件.在非超载的情况下,电机的转速.停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的.可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的:同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的.        图1 常见的几种步进电机 图2 步进电机

基于DRV8825的步进电机驱动

文章摘自:http://bbs.21ic.com/forum.php?mod=viewthread&tid=279798&fromuid=835218 1. 步进电机主要参数介绍相数:    步进电机的相数就是指线圈的组数.分别有二相,三相,四相,五相.通          常情况,相数高,步距角小,精度高.额定电流:电机正常运转时的电流大小.步距角:  它表示控制系统每发一个步进脉冲信号,电机所转动的角度.该参数反           映了步进电机的实际精度.保持转矩: 是指步进电机通电

Arduino 入门程序示例之步进流电机(2015-06-28)

概述 演示单极步进电机的控制.没有现成的 H 桥模块,双极步进电机就不做实验啦. 这里没有使用 stepper 库,用 IO 粗糙地原始地驱动,更增进对步进电机驱动的理解. 示例程序 整步驱动 // ---------------------------------------------------------------------------- // unipolarStepperTest_fullStep.ino // // Created 2015-06-27 // By seesea

[Arduino] Arduino猪头笔记

1. 步进电机驱动 今天才发现....原来在不同的步进电机驱动模块里面,循环时钟是不一样的.... 步进电机驱动模块以及电路配置: 驱动代码的主要部分: int sp_param = 16383; digitalWrite(MotorStp_A, HIGH);delayMicroseconds(sp_param); digitalWrite(MotorStp_A, LOW);delayMicroseconds(sp_param); (上面的16383为unsigned int的最大数字,即16m

[DIY激光雕刻机] 1.拆光驱

最近看了果壳上的一篇文章<激光雕刻机:废旧光驱的涅槃之路>之后开始手痒,准备自己做一个.但手头没有废旧光驱,好在这东西二手的价格便宜,10块钱一个,于是上某宝搞了两台.我买的是普通DVD光驱,如果你不想再单独买激光头可以买DVD刻录机,但是拆的时候要小心不要把激光头损坏. 拆机所需工具:螺丝刀(十字和一字)和镊子. 首先需要把后盖拆下来,把光驱反过来可以看到有4颗螺丝,用螺丝刀拧下后就可以打开后盖. 下一步先不用着急拆主板,通过观察可以发现只要将前面板拆下来就可以把光驱的主体部分整体拆下来,但

步进电机转台设计

步进电机驱动设置: STM32单片机程序: 配置STM32的定时器模式,TIM2为主定时器,TIM3为从定时器,其中PulseFrequency为TIM输出PWM的频率.其主要功能,将TIM2的输出中断TR1指定到TIM3的计数器输入中,每当TIM2输出完成,TIM3就进行一次计数,当TIM3完成计数时,向系统提出一次中断. void TIM2_Master__TIM3_Slave_Configuration(u32 PulseFrequency) { TIM_TimeBaseInitTypeD

2017年1月19、20日活动记录

日程 2017.1.19 1.完成十进制转二进制的VB程序2.下载并安装3D打印软件3.学习arduino中流水灯,呼吸灯,HELLO WORD的程序代码,存在老是少打分号和不能完全理解程序的问题4.针对学习代码时对一些名称不懂的问题,学会用arduino下的reference,并大致了解了arduino中每个保留字符的意义5.玩了继电器,因为对其构造和原理的错误理解,以为其两端有对应连通关系,尝试了各种接法都只能使其自己运作而不能控制led灯亮灭,后在老师的指导下成功完成6.玩了舵机,可控舵机