八相驱动
引用洋桃代码

注意步进电机使用delay函数卡死正常步骤
进行项目开发时可在定时器中处理。

比如调用步进电机函数时 开启定时中断 达到设定的时间时void STEP_MOTOR_8A (u8 a,u16 speed) speed为延时的时间

void STEP_MOTOR_NUM (u8 RL,u16 num,u8 speed){//电机按步数运行u16 i;for(i=0;i<num;i++){    if(RL==1){ //当RL=1右转,RL=0左转STEP++;if(STEP>7)STEP=0;}else{if(STEP==0)STEP=8;STEP--;}STEP_MOTOR_8A(STEP,speed);}
}

去掉上面函数的STEP++或STEP-- 在中断函数中处理STEP的数值

#ifndef __CONTROLLER_H
#define __CONTROLLER_H
#include "io.h"
#include "delay.h"
extern u8 STEP; //定义单步计数 全局变量#define STEP_MOTOR_PORT    GPIOB   //定义IO接口所在组
#define STEP_MOTOR_A    GPIO_Pin_6  //定义IO接口
#define STEP_MOTOR_B    GPIO_Pin_7  //定义IO接口
#define STEP_MOTOR_C    GPIO_Pin_8  //定义IO接口
#define STEP_MOTOR_D    GPIO_Pin_9  //定义IO接口void STEP_MOTOR_Init(void);//初始化
void STEP_MOTOR_OFF (void);//断电状态
void STEP_MOTOR_8A (u8 a,u16 speed);
void STEP_MOTOR_NUM (u8 RL,u16 num,u8 speed);//电机按步数运行
void STEP_MOTOR_LOOP (u8 RL,u8 LOOP,u8 speed);//电机按圈数运行#define A(i) PBout(6)=i
#define B(i) PBout(7)=i
#define C(i) PBout(8)=i
#define D(i) PBout(9)=i#define Control_water_on         PBout(3)=1  //打开水泵
#define Control_water_off        PBout(3)=0#define Control_relay_heat_on    PAout(6)=1  //打开继电器 加热
#define Control_relay_heat_off   PAout(6)=0  #define Control_relay_filter_on  PBout(4)=1  //打开继电器 过滤
#define Control_relay_filter_off PBout(4)=0  void Controller_Init(void);//初始化
void Controller_test(void);#endif

controller.c

#include "controller.h"
#include "delay.h"
//A P1.6 PB6
//B P1.5 PB7
//C P4.4 PB8
//D P1.4 PB9#define relay_time 20
u8 STEP;
void Controller_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能PB端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                //A PB12端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;       //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_ResetBits(GPIOA,GPIO_Pin_6);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   //使能PB端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                //A PB12端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;       //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度为50MHzGPIO_Init(GPIOB, &GPIO_InitStructure);                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//B PB13GPIO_Init(GPIOB, &GPIO_InitStructure);     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;//C PB14GPIO_Init(GPIOB, &GPIO_InitStructure);   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//D PB15GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_ResetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9);
///开启复用时钟
注意PB3 PB4....是JWAG功能IO  要复用  ,,,还要用SWD下载!!!   出现问题时  一直按NRST复位键再load下载程序,不然不会显示stlink
///不要用 、GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); // 改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP)RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB , ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//JTAG-DP 禁用 + SW-DP 使能 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_ResetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_3);
}
void Controller_test(void)
{A(0);B(1);C(1);D(1);delay_ms(relay_time);A(1);B(0);C(1);D(1);delay_ms(relay_time);A(1);B(1);C(0);D(1);delay_ms(relay_time);A(1);B(1);C(1);D(0);delay_ms(relay_time);
//  A(1);delay_ms(500);A(0);delay_ms(500);
}
//void STEP_MOTOR_Init(void){ //接口初始化
//  GPIO_InitTypeDef  GPIO_InitStructure;
//  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE); //APB2外设GPIO时钟使能
//  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//启动AFIO重映射功能时钟
//    GPIO_InitStructure.GPIO_Pin = STEP_MOTOR_A | STEP_MOTOR_B | STEP_MOTOR_C | STEP_MOTOR_D; //选择端口
//    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式
//    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)
//  GPIO_Init(STEP_MOTOR_PORT, &GPIO_InitStructure);
//  //必须将禁用JTAG功能才能做GPIO使用
//  GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);// 改变指定管脚的映射,完全禁用JTAG+SW-DP
//  STEP_MOTOR_OFF(); //初始状态是断电状态
//}void STEP_MOTOR_OFF (void){//电机断电GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B | STEP_MOTOR_C | STEP_MOTOR_D);//各接口置0
}void STEP_MOTOR_8A (u8 a,u16 speed){//电机单步8拍switch (a){case 0:GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_C | STEP_MOTOR_D);//0GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_A);//1break;case 1:GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_C | STEP_MOTOR_D);//0GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B);//1break;case 2:GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_C | STEP_MOTOR_D);//0GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_B);//1break;case 3:GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_D);//0GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_C);//1break;case 4:GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B | STEP_MOTOR_D);//0GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_C);//1break;case 5:GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B);//0GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_C | STEP_MOTOR_D);//1break;case 6:GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B | STEP_MOTOR_C);//0GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_D);//1break;case 7:GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_C);//0GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_D);//1break;default:break;}delay_ms(speed); //延时STEP_MOTOR_OFF(); //进入断电状态,防电机过热
}void STEP_MOTOR_NUM (u8 RL,u16 num,u8 speed){//电机按步数运行u16 i;for(i=0;i<num;i++){  if(RL==1){ //当RL=1右转,RL=0左转STEP++;if(STEP>7)STEP=0;}else{if(STEP==0)STEP=8;STEP--;}STEP_MOTOR_8A(STEP,speed);}
}void STEP_MOTOR_LOOP (u8 RL,u8 LOOP,u8 speed){//电机按圈数运行STEP_MOTOR_NUM(RL,LOOP*4076,speed);
}

STM32F103:三.(1)步进电机相关推荐

  1. 对于STM32F103三轴机械臂控制器进行基本功能测试-关节角度读取

    ➤01 机械臂调试 1.简介 对 基于STM32对于三轴机械臂控制器设计 中对应的控制电路读取肩部和肘部两个 角度编码器 ST-3806-15-RS 数据进行调试. 2.接口电路1 ▲ 角度读取的相关 ...

  2. STM32F103:三.(3)MPU6050

    STM32F103:三.(3)MPU6050 先只上传代码 接线 VCC GND PB9 PB8 main.c #include "io.h" #include "del ...

  3. STM32F103:三.(2)红外接收

    STM32F103:三.(2)红外接收 代码参考正点原子,STM32F103C8T6正常运行. NEC 协议的高低电平辨别方式 整体思路是将PB9设置上拉输入,并开启定时器4的输入捕获功能,溢出值设置 ...

  4. 【2018】使用CD4013,CD4017,CD4053模拟三项步进电机

    想必大家小时候都玩过磁铁,两个磁铁的同极靠近彼此产生一个斥力,两个磁铁的异极靠近彼此,产生一个引力,步进电机用的便是这个原理,只是将其中的一个磁铁换成电磁铁,然后将磁铁们做成弧形,最终形成一个圆筒,三 ...

  5. 对于STM32F103三轴机械臂控制器进行基本功能测试-上下运动功能

    简 介: 本文针对基于在基于STM32对于三轴机械臂控制器设计 中设计了控制电路板.本文记录对其在机械臂实际部件进行调试的过程. 关键词: STM32F103,机械臂,三轴,上下运动 ➤01 机械臂控 ...

  6. MicroPython入门(三) 步进电机应用

    了解步进电机的工作原理 学习步进电机的驱动方法 实验器材 TPYBoard v102 1块 微型步进电机(28BYJ-48) 1个 步进电机驱动板(ULN2003APG) 1块 micro USB数据 ...

  7. Mega2560同时控制三个步进电机

    参考 https://blog.csdn.net/weixin_43272272/article/details/107836477 硬件接线 ZD-42S驱动器接线图 代码 #include < ...

  8. 对于STM32F103控制的三轴机械臂基本功能测试-关节转动控制

    ➤01 机械臂调试 1.简介 对于 基于STM32对于三轴机械臂控制器设计 的设计已经进行了如下的调试: 对于STM32F103三轴机械臂控制器进行基本功能测试-关节角度读取 对于STM32F103三 ...

  9. 三关节机械臂控制命令修改

    ▌01 机械控制臂 1.简介 在 调试机械臂一体化控制电路:STM32F103控制器初步调试 对于 三轴机械臂的 的控制,最初版本采用了 简易调试命令组合. 这个命令是为了付方便最初的调试与测试机械臂 ...

最新文章

  1. Ubuntu install of ROS Melodic
  2. 修改android virtual device路径
  3. s5-15 开放的最短路径优先_OSPF
  4. Citrix Production Features by Edition
  5. php中正则表达式中的特殊符号
  6. java认证考试例题_2016年Java认证考试题(3)
  7. 安卓端gis_微图手机版下载-微图(GIS软件工具)下载v2.1.7安卓版-西西软件下载
  8. html 粘贴 word文档,Word2019文档中粘贴文本的两种方式
  9. opengl模型加载
  10. 【保姆级】网络安全工程师学习成长路线,就业前景,薪资待遇分享
  11. Moses的安装、训练和优化
  12. SpringBoot 整合 Elasticsearch
  13. 微信小程序登录-PHP后端
  14. SecureCRT安装配置使用
  15. javascript里将函数名字符串转为函数并执行
  16. vba 定义类_VBA|工程中的四类模块的具体含义与比较
  17. 一个靠谱的成都java培训机构应该具备哪些特点?
  18. 华硕计算机硬件信息,ASUS PC Diagnostics
  19. CUDA 线程索引公式
  20. 关于mysql:Can‘t connect to MySQL server on ‘localhost:3306‘ (XX) + 关于navicat:client does not supp...

热门文章

  1. 不属于jsp构成元素_JSP构成元素-JSP基础
  2. Envi和Arcgis软件冲突的解决方法
  3. pymysql使用变化的变量,构造SQL语句
  4. pandas to_sql保存数据到数据库后,添加自增长的主键ID(PRIMARY KEY)
  5. python简体中文、繁体中文转换
  6. Linux定时向目标服务器传输文件
  7. mysql 数据库导出全部数据到excel,并保存为不同的sheet
  8. h3c 虚拟服务器 下一跳,H3C vLNS系列虚拟L2TP网络服务器 配置指导-E0324-5W100
  9. python计算存款_python入门教程NO.8 用python写个存款利息计算器
  10. python为什么import不了_解决python有时候import不了当前的包问题