STM32控制步进电机实现精确转动

驱动方式为A-AB-B-BC-C-CD-D-DA-A

使用延时函数实现


主函数

#include "dj.h"
#include "delay.h"
#include "sys.h"
#include "key_led.h"

//ALIENTEK miniSTM32¿ª·¢°åʵÑé1
//ÅÜÂíµÆʵÑé  
//¼¼ÊõÖ§³Ö£ºwww.openedv.com
//¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾
        
      
int main()
{	
	 int i=512;   //ÕâÀïתһȦÐèÒª4096¸öÂö³åÐźŠתһȦiÉèÖÃΪ512
	u32 t=550;    //¼ÆËãµÃ305Ϊ10sµÄʱ¼ä£¬ÕâÀïÓÐ1sµÄÎó²î£¬¹Ê¼õÈ¥ÁË1sµÄʱ¼ä   
								//													1s¼ÆËãµÃµ½ËùÐèÑÓʱΪ30     305-30=275
								//´ËÍ⣬¼ÆËãÁË5sËùÐèµÄÑÓʱ£¬275/2=137.5 È¡137  ²âµÃʱ¼äÎó²îÔÚ0.2s×óÒÔÄÚ																										 
	delay_init();	    	 //ÑÓʱº¯Êý³õʼ»¯					
	Dj_Init();		  	//³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú  
  
 while(1)
 {
	 while(i)
   {
		 A1_H;B1_L;C1_L;D1_L;
	   delay_us(t);
     A1_H;B1_H;C1_L;D1_L;
	   delay_us(t);
     A1_L;B1_H;C1_L;D1_L;
	   delay_us(t);
     A1_L;B1_H;C1_H;D1_L;
	   delay_us(t);
     A1_L;B1_L;C1_H;D1_L;
	   delay_us(t);
     A1_L;B1_L;C1_H;D1_H; 
	   delay_us(t);
     A1_L;B1_L;C1_L;D1_H;	 
	   delay_us(t);
     A1_H;B1_L;C1_L;D1_H;
	   delay_us(t);
		 i--;
	 }

 }
}


dj.c

#include "stm32f10x.h"
#include "sys.h"
#include "dj.h"
#include "delay.h"





void Dj_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	 //ʹÄÜPA,PD¶Ë¿ÚʱÖÓ
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				 //LED0-->PA.8 ¶Ë¿ÚÅäÖÃ
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //ÍÆÍìÊä³ö
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO¿ÚËÙ¶ÈΪ50MHz
 GPIO_ResetBits(GPIOA,GPIO_Pin_0);						 //PA.8 Êä³ö¸ß
	 GPIO_Init(GPIOA, &GPIO_InitStructure);					 //¸ù¾ÝÉ趨²ÎÊý³õʼ»¯GPIOA.8


 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;	    		 //LED1-->PD.2 ¶Ë¿ÚÅäÖÃ, ÍÆÍìÊä³ö
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //ÍÆÍìÊä³ö
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO¿ÚËÙ¶ÈΪ50MHz
 GPIO_ResetBits(GPIOA,GPIO_Pin_1); 						 //PD.2 Êä³ö¸ß 
GPIO_Init(GPIOA, &GPIO_InitStructure);					 //¸ù¾ÝÉ趨²ÎÊý³õʼ»¯GPIOA.8

	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;	    		 //LED1-->PD.2 ¶Ë¿ÚÅäÖÃ, ÍÆÍìÊä³ö
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //ÍÆÍìÊä³ö
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO¿ÚËÙ¶ÈΪ50MHz
 GPIO_ResetBits(GPIOA,GPIO_Pin_2); 						         //PD.2 Êä³ö¸ß 
GPIO_Init(GPIOA, &GPIO_InitStructure);					

	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;	    		 //LED1-->PD.2 ¶Ë¿ÚÅäÖÃ, ÍÆÍìÊä³ö
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //ÍÆÍìÊä³ö
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO¿ÚËÙ¶ÈΪ50MHz
 GPIO_ResetBits(GPIOA,GPIO_Pin_3); 						 //PD.2 Êä³ö¸ß 
 GPIO_Init(GPIOA, &GPIO_InitStructure);					 //¸ù¾ÝÉ趨²ÎÊý³õʼ»¯GPIOA.8

}


dj.h
#ifndef __DJ_H
#define __DJ_H	 
#include "sys.h"
//	 
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK miniSTM32开发板
//按键驱动代码	   
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2012/9/3
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved									  
//   	 

#define A1_H   GPIO_SetBits(GPIOA,GPIO_Pin_0)					
#define A1_L   GPIO_ResetBits(GPIOA,GPIO_Pin_0)

#define B1_H   GPIO_SetBits(GPIOA,GPIO_Pin_1)						
#define B1_L   GPIO_ResetBits(GPIOA,GPIO_Pin_1)

#define C1_H   GPIO_SetBits(GPIOA,GPIO_Pin_2)					
#define C1_L   GPIO_ResetBits(GPIOA,GPIO_Pin_2)

#define D1_H   GPIO_SetBits(GPIOA,GPIO_Pin_3)						
#define D1_L   GPIO_ResetBits(GPIOA,GPIO_Pin_3)
/*电机转动指令*/
/*
#define a {A1_H,B1_L,C1_L,D1_L}
#define b {A1_H,B1_H,C1_L,D1_L}
#define c {A1_l,B1_H,C1_L,D1_L}
#define d {A1_L,B1_H,C1_H,D1_L}
#define e {A1_L,B1_L,C1_H,D1_L}
#define f {A1_L,B1_L,C1_H,D1_H}
#define g {A1_L,B1_L,C1_L,D1_H}
#define h {A1_H,B1_L,C1_L,D1_H}
*/

void Dj_Init(void);      //IO初始化
		    
#endif





你可能感兴趣的:(#,单片机)