STM32+ULN2003驱动步进电机
选用的步进电机的型号为28BYJ-48(或MP28GA,5V,转速比1/64),驱动电路选用uln2003芯片的驱动板,其控制时序图如下:
四相八拍:A->AB->B ->BC ->C ->CD ->D ->DA
其A、B、C、D指的是uln2003芯片驱动板的1N1、1N2、1N3、1N4,波形在上表示有输入信号。
此外至少需要4根杜邦线,还需提供一个5V的直流电源,接线方式如下:
PE0接IN1
PE1接IN2
PE2接IN3
PE3接IN4
5V电源(一个是地,一个是正)。
- /***************************************************************************//**
- * @file : stm32_pio.h
- * @brief : STM32F1xx CoX PIO Peripheral Interface
- * @version : V1.0
- * @date : 28 Feb. 2011
- * @author : CooCox
- *******************************************************************************/
- #ifndef __STM_PIO_H
- #define __STM_PIO_H
- #include "cox_pio.h"
- /***************************************************************************//**
- * Define STM32F1xx CoX PIO Peripheral Interface
- *******************************************************************************/
- extern COX_PIO_PI pi_pio;
- #endif
- /***************************************************************************//**
- * @file : stm32_pio.c
- * @brief : STM32F1xx CoX PIO Peripheral Interface
- * @version : V1.0
- * @date : 28 Feb. 2011
- * @author : CooCox
- ******************************************************************************/
- #include "stm32_pio.h"
- #include "stm32f10x.h"
- /***************************************************************************//**
- * @brief Get pointer to GPIO peripheral due to GPIO port
- * @param[in] portNum : Port Number value, should be in range from 0 to 6.
- * @return Pointer to GPIO peripheral
- *******************************************************************************/
- static GPIO_TypeDef* STM32_GetGPIO(uint8_t port)
- {
- GPIO_TypeDef *pGPIO = COX_NULL;
- switch(port)
- {
- case 0: pGPIO = GPIOA; break;
- case 1: pGPIO = GPIOB; break;
- case 2: pGPIO = GPIOC; break;
- case 3: pGPIO = GPIOD; break;
- case 4: pGPIO = GPIOE; break;
- case 5: pGPIO = GPIOF; break;
- case 6: pGPIO = GPIOG; break;
- default: break;
- }
- return pGPIO;
- }
- /***************************************************************************//**
- * @brief Initializes the PIO peripheral
- * @param[in] pio : The specified peripheral
- * @return Result, may be :
- * -COX_ERROR : Error occurred, parameter is not supported
- * -COX_SUCCESS : Previous argument of the specified option
- *******************************************************************************/
- static COX_Status STM32_PIO_Init (COX_PIO_Dev pio)
- {
- GPIO_TypeDef* pGPIO = COX_NULL;
- uint8_t port, pin;
- port = (pio >> 8) & 0xFF;
- pin = (pio >> 0) & 0xFF;
- pGPIO = STM32_GetGPIO(port);
- if(port >6 || port<0 || pin<0 || pin > 15)
- return COX_ERROR;
- /* Enable GPIO and AFIO clocks */
- switch(port)
- {
- case 0: RCC->APB2ENR |= (RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN); break;
- case 1: RCC->APB2ENR |= (RCC_APB2ENR_IOPBEN | RCC_APB2ENR_AFIOEN); break;
- case 2: RCC->APB2ENR |= (RCC_APB2ENR_IOPCEN | RCC_APB2ENR_AFIOEN); break;
- case 3: RCC->APB2ENR |= (RCC_APB2ENR_IOPDEN | RCC_APB2ENR_AFIOEN); break;
- case 4: RCC->APB2ENR |= (RCC_APB2ENR_IOPEEN | RCC_APB2ENR_AFIOEN); break;
- default: break;
- }
- return COX_SUCCESS;
- }
- /***************************************************************************//**
- * @brief Set direction (Input or Output)
- * @param[in] pio : The specified PIO peripheral
- * @param[in] dir : Direction, should be
- * -0: Input
- * -1: Output
- * @return Result, may be :
- * -COX_ERROR : Error occurred, parameter is not supported
- * -COX_SUCCESS : Previous argument of the specified option
- *******************************************************************************/
- static COX_Status STM32_PIO_SetDir(COX_PIO_Dev pio, uint8_t dir)
- {
- GPIO_TypeDef* pGPIO = COX_NULL;
- uint8_t port, pin;
- port = (pio >> 8) & 0xFF;
- pin = (pio >> 0) & 0xFF;
- pGPIO = STM32_GetGPIO(port);
- /* Direction is input:GPIO_Mode_IN_FLOATING */
- if(dir == 0){
- if(pin>7)
- {
- /* Configure the eight high port pins */
- pin = pin-8;
- /* MODE[1:0]=00 */
- pGPIO -> CRH &= ~(0x3 << (pin*4));
- /* CNF[1:0] =01 */
- pGPIO -> CRH &= ~(0x8 << (pin*4));
- pGPIO -> CRH |= (0x4 <<(pin*4));
- }
- else
- {
- /* Configure the eight low port pins */
- pGPIO -> CRL &= ~(0x3 << (pin*4));
- pGPIO -> CRL &= ~(0x8 << (pin*4));
- pGPIO -> CRL |= (0x4 << (pin*4));
- }
- }
- /* Direction is output:GPIO_Mode_Out_PP */
- else {
- if(pin>7)
- {
- pin = pin-8;
- /* MODE[1:0]=11 */
- pGPIO -> CRH |= (0x3 <<(pin*4));
- /* CNF[1:0] =00 */
- pGPIO -> CRH &= ~(0xc <<(pin*4));
- }
- else
- {
- pGPIO -> CRL |= (0x3 << (pin*4));
- pGPIO -> CRL &= ~(0xc<<(pin*4));
- }
- }
- return COX_SUCCESS;
- }
- /******************************<span s
uln2003 驱动 继电器及步进电机
28byj48步进电机工作时序图和stm32+uln2003驱动代码
2013-04-30 11:30:41| 分类: 单片机 | 标签:stm32 28byj48 步进电机 |举报|字号 订阅
void init_stepmotor_GPIO(void)
28BYJ48型步进电机的控制方法
2011-03-13 23:02:00| 分类: 单片机技术|举报|字号 订阅
前不久弄到一只28BYJ48型步进电机,没有资料,从网上查找,搜到一些资料,但按照网上介绍的程序实验,都没有成功。后来根据资料的原理部分,试着自己编写了一段程序,经过多次实验调试,终于成功了。
哈哈,收获不小!!!
步进电机是一种将电脉冲转化为角位移的执行设备。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角)。我们可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时我们可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
28BYJ48型步进电机是四相八拍电机,电压为DC5V~DC12V。当对步进电机按一定顺序施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号使得步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A……),双(双相绕组通电)四拍(AB-BC-CD-DA-AB……),四相八拍(A-AB-B-BC-C-CD-D-DA-A……)。本例是使用四相八拍驱动方式实现的。
下面是我写的C语言控制程序实现28BYJ48型步进电机正转五圈然后倒转五圈的效果:
//********************************************************************************
//* 标题: 步进电机正反转演示程序 *
//* 文件: 步进电机正反转演示.C *
//* 日期: 2011-3-13 *
//* 环境: 使用自制单片机最小系统板测试通过 *
//********************************************************************************
//* 描述: 28BYJ-48步进电机正反转控制 *
//* 电机使用端口:P1.0、P1.1、P1.2、P1.3 *
//* 单双八拍工作方式:A-AB-B-BC-C-CD-D-DA *
//********************************************************************************
#include <reg51.h>
#include <intrins.h>
//**********************正向旋转相序表*****************************
unsigned char code FFW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
//**********************反向旋转相序表*****************************
unsigned char code REV[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};
//***********************延时子程序********************************
void delay(unsigned int t)
{
unsigned int k;
while(t--)
{
for(k=0; k<125; k++)
{}
}
}
//**********************步进电机正转******************************
void motor_ffw(unsigned int n)
{
unsigned char i;
unsigned int j;
for (j=0; j<8*64*n; j++)
{
for (i=0; i<8; i++)
{
P1 = FFW[i];
delay(1);
}
}
}
//*********************步进电机反转********************************
void motor_rev(unsigned int n)
{
unsigned char i;
unsigned int j;
for (j=0; j<8*64*n; j++)
{
for (i=0; i<8; i++)
{
P1 = REV[i];
delay(1);
}
}
}
//*************************主程序*********************************
main()
{
while(1)
{
motor_ffw(5); //电机正转5圈
delay(1000);
motor_rev(5); //电机反转5圈
delay(1000);
}
}
STM32+ULN2003驱动步进电机相关推荐
- 【Proteus仿真】Arduino+uln2003驱动步进电机+单按键启保停正反转控制
[Proteus仿真]Arduino+uln2003驱动步进电机+单按键启保停正反转控制 Proteus仿真 功能实现 采用外部中断来获取按键信息 程序代码 #define LED ( 13 )#de ...
- 【Proteus仿真】Arduino UNO利用Stepper库实现uln2003驱动步进电机转动
[Proteus仿真]Arduino UNO利用Stepper库实现uln2003驱动步进电机转动 Proteus仿真 Proteus说明 Proteus软件里面的步进电机的步距角默认是90,和代码中 ...
- 【Proteus仿真】Arduino UNO+uln2003驱动步进电机+按键启保停正反转控制
[Proteus仿真]Arduino UNO+uln2003驱动步进电机+按键启保停正反转控制 Proteus仿真演示 功能说明 正反转采用2和3 引脚外部中断,3和4引脚调节加减速. 示例程序代码 ...
- 【Proteus仿真】Arduino UNO+ uln2003驱动步进电机+按键启保停控制
[Proteus仿真]Arduino UNO+ uln2003驱动步进电机+按键启保停控制 Proteus演示 功能说明 加减速采用外部中断引脚2和3实现调速控制,调速方位,110-250,也就是代码 ...
- VSM Studio uln2003驱动步进电机+单按键启保停正反转八拍控制
VSM Studio uln2003驱动步进电机+单按键启保停正反转八拍控制 Proteus仿真演示 基于51单片机,步进电机采用8节拍控制 VSM Studio代码 /* Main.c file g ...
- STM32控制ULN2003驱动步进电机28BYJ-48
步进电机 步进电动机又称脉冲电动机,是一种将电脉冲信号转换成相应角位移或线位移的电动机.每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正 ...
- STM32+DRV8711驱动步进电机
步进电机的驱动原理 步进电机的知识涉及到比较多的东西,这里只是简单介绍一下,关于具体的知识之后再补充. 步进电机的驱动原理时期就是电磁感应现象,给步进电机供电流,然后会产生磁场,再合成磁场的方向,驱动 ...
- 【51单片机】 ULN2003模块 驱动步进电机(5线)正反转 代码以及接线图(简单教学,一看就会)
步进电机有四相(A-B-C-D) 正向转动思路为A→B→C→D 反向转动思路为D→C→B→A 通过给每一相轮流供电,实现电机轴的360度转动 ..以下代码可直接复制使用: #include <r ...
- 【Proteus仿真】【STM32单片机】步进电机控制系统设计
文章目录 一.主要功能 二.硬件资源 三.软件设计 四.实验现象 联系作者 一.主要功能 本项目使用Proteus8仿真STM32单片机控制器,使用ULN2003电机模块.LCD1602模块.按键模块 ...
最新文章
- Erlang error?
- WindowsPE 第七章 资源表
- 用事件标志组实现多事件的单向同步
- C# 之不安全代码(2)
- mysql在mac上的坑
- 图片播放器小项目(详解)
- 最近公共祖先_leetcode No.236 二叉树的最近公共祖先
- ie11用不了html5,HTML5拖放不能在IE11上运行
- nginx php-fpm 安装,Linux下nginx php-fpm安装配置笔记
- GDB中应该知道的几个调试方法-转
- 怎样追求心仪的女孩子
- 形容计算机专业好句子,关于形容专业水平高的句子大全 精于专业的名言警句...
- 【mfc】vs2019创建MFC基于对话框的项目没有插入任何代码运行报错:0xC0000005:读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突
- 计算机桌面文件如何发送给qq好友,桌面文件如何发到qq
- java对接dhl_DHL接口—数据交互
- 【英语学习】【医学】20种氨基酸的中英文名称与词源
- 华为人工智能atlasA800-9000物理服务器离线安装及CANN安装和MindSpore安装和Tensorflow安装
- SDIO wifi Marvell8801/Marvell88w8801 介绍(三) ---- Marvell8801/Marvell88w8801寄存器介绍
- ^[A-Za-z\\d]*$ 正则表达式
- 计算机大二学什么,本科计算机科学与技术大二下学期学什么,女的适合什么专业好...
热门文章
- 1-3 js基础还是看caicia吧(老师说小游戏)
- 五子棋 java 课设,五子棋java课程设计
- 电路交换,报文交换,分组交换简介与优缺点
- 网络工程师知识点整理—第五章:无线通信网
- 苹果手机(ipone)点击元素,事件不执行
- 测试的职责是什么,就是不当背锅侠
- php 短信验证 云之讯,python3.7实现云之讯、聚合短信平台的短信发送功能
- 前端常用工具库方法整理
- Ubuntu20.04中fastdfs,nginx的安装和配置(apt-get安装nginx添加fastdfs-nginx-module模块)
- 音频知识点(5)- VAD/CNG/DTX