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

来源:互联网 发布:互联网大数据查询 编辑:程序博客网 时间:2024/04/25 18:59

驱动方式为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ÉèÖÃΪ512u32 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



阅读全文
0 0
原创粉丝点击