目录

1  ULN2003A步进电机简介

2  步进电机电路设计

3 旋转角度控制函数

4 程序设计

motor.c

motor.h

前期LCD参考文章:​​​​​​​

内  容:编程实现控制步进电机旋转不同角度

学  时:3学时

知识点: GPIO配置、步进电机电路设计、编程实现旋转角度控制

重点: 步进电机电路设计、编程实现旋转角度控制

难点:编程实现旋转角度控制

时间:2022年12月27日9:00~11:50

总结:

1 步进电机使用GPIOA进行输入输出,需要进行GPIO配置;

2 使用proteus设计步进电机电路;

3 编程实现步进电机旋转角度控制。

51单片机Proteus仿真+Keil工程-实验4-外部中断-步进电机驱动_轩笑鹄的博客-CSDN博客_51单片机外部中断实验

掌握外部中断的打开方式;掌握步进电机的基本控制。

步进电机控制系统+LCD状态显示+详细源码注释+proteus仿真(超详细)_HNU_刘yuan的博客-CSDN博客_步进电机驱动设计实现电机lcd按键加减速


1  ULN2003A步进电机简介

ULN2003A是一个七路反向器电路,即输入端高电平时ULN2003A输出端低电平,相反当输入端低电平的时ULN2003A输出端高电平

ULN2300A内部结构如下图所示,两个三极管串联,第一个管子的发射极接第2个管子的基极,所以整个电路的放大倍数是两个三极管放大倍数的乘积,具有很大的放大倍数。IN端接到单片机上,当IN端接入高电平时,两个三极管均导通,OUT端则能输出较大的电流

图1 ULA2300A内部结构

步进电机原理图如图2,电机共有六个引脚线,其中有两条线与供电电源相接,剩下四条线(A、B、C、D)用来控制电机的旋转。每个引脚线相当于有一个控制开关,通电后则可旋转一定的角度。

 图2 步进电机原理图

2  步进电机电路设计

步进电机电路设计如下图所示,其中步进电机的引脚通过网络与单片机引脚进行连接。

图2 步进电机电路

我的电路连接图如下:

四相步进电机有单四拍(A-B-C-D)和双四拍(AB-BC-CD-DA)和八拍(A-AB-B-BC-C-CD-D-DA)这三种工作方式。

第一种工作方式扭矩小,功耗小,但震动大。

第二种工作方式扭矩较大,功耗也大,震动小。

第三种工作方式步距角小,输出更平滑,推荐采用这种方式。

只需要控制单片机的IO口使得ULN2003芯片按A-AB-B-BC-C-CD-D-DA的次序输出低电平(ULN2003A会使电平反向输出,因此STM32在输出高电平时,到达步进电机的电平才会为低电平)即可完成步进电机转动的一轮循环。如果要按相反方向转动,只要把上面A-AB-B-BC-C-CD-D-DA的次序反过来即可。

3 旋转角度控制函数

ULN2003A有四条线(A、B、C、D)用来控制电机的旋转,本实训使用八拍方式来驱动电机的旋转,每一拍旋转45°。经过proteus仿真试验发现,当节拍为A时,对应角度为-45°,当节拍为AB时,对应角度为0°,故为使电机顺时针旋转一周,我们采用如下节拍方式:B-BC-C-CD-D-DA-A-AB,八拍驱动方式逻辑时序如下表所示。

4 程序设计

motor.c

#include "stm32f10x.h"//PA2 PA3 PA4 PA5
/*void delay(void){uint32_t cnt = 0x20000;while(cnt--);}*/void motor_init(void){//定义GPIO结构体GPIO_InitTypeDef GPIO_InitStruct;//打开时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//PB引脚GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;    // 初始化4个引脚GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; // ?????????????GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;// 输出速率为50MHzGPIO_Init(GPIOA, &GPIO_InitStruct);    // ???????GPIO_ResetBits(GPIOA, GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5); }void motor_45(void){//BGPIO_SetBits(GPIOA, GPIO_Pin_3);  GPIO_ResetBits(GPIOA, GPIO_Pin_2 | GPIO_Pin_4 | GPIO_Pin_5);delay();}void motor_180(void){//BGPIO_SetBits(GPIOA, GPIO_Pin_3);  // 45°GPIO_ResetBits(GPIOA, GPIO_Pin_2 | GPIO_Pin_4 | GPIO_Pin_5);delay();//BCGPIO_SetBits(GPIOA, GPIO_Pin_3 | GPIO_Pin_4 );  // LED ONGPIO_ResetBits(GPIOA, GPIO_Pin_2 | GPIO_Pin_5);delay();//CGPIO_SetBits(GPIOA, GPIO_Pin_4 );  // LED ONGPIO_ResetBits(GPIOA, GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5);delay();//CDGPIO_SetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5);  // LED ONGPIO_ResetBits(GPIOA, GPIO_Pin_2 | GPIO_Pin_3);delay();
}

药品信息管理系统 :

#include "motor.h"
#include "stm32f10x.h"
#include "delay.h"void delay(void){uint32_t cnt=0x20000;while(cnt--);}void Motor_GPIOInit (void)
{GPIO_InitTypeDef GPIO_InitStructure;   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);//GPIO_Write(GPIOB,0x0000);           /?????GPIO_ResetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3|   GPIO_Pin_4| GPIO_Pin_5);    }void Motor_CW(void)
{//BGPIO_SetBits(GPIOA,GPIO_Pin_3);GPIO_ResetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_5);delay();//BCGPIO_SetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_4);GPIO_ResetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_5);delay();//GPIO_SetBits(GPIOA,GPIO_Pin_1);//SysTick_Delay_Ms(DELAY_TIME);//GPIO_ResetBits(GPIOA,GPIO_Pin_1);//GPIO_SetBits(GPIOA,GPIO_Pin_2);//SysTick_Delay_Ms(DELAY_TIME);//GPIO_ResetBits(GPIOA,GPIO_Pin_2);//GPIO_SetBits(GPIOA,GPIO_Pin_3);//SysTick_Delay_Ms(DELAY_TIME);//GPIO_ResetBits(GPIOA,GPIO_Pin_3);
}
void Motor_RW(void){            GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3);GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5);delay();//BGPIO_SetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5);GPIO_ResetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3);delay();//BC//GPIO_SetBits(GPIOA,GPIO_Pin_1);//SysTick_Delay_Ms(DELAY_TIME);//GPIO_ResetBits(GPIOA,GPIO_Pin_1);//GPIO_SetBits(GPIOA,GPIO_Pin_2);//SysTick_Delay_Ms(DELAY_TIME);//GPIO_ResetBits(GPIOA,GPIO_Pin_2);//GPIO_SetBits(GPIOA,GPIO_Pin_3);//SysTick_Delay_Ms(DELAY_TIME);//GPIO_ResetBits(GPIOA,GPIO_Pin_3);
}
void Motor_SW(void)
{GPIO_SetBits(GPIOA,GPIO_Pin_3);//SysTick_Delay_Ms(DELAY_TIME);GPIO_ResetBits(GPIOA,GPIO_Pin_3);GPIO_SetBits(GPIOA,GPIO_Pin_2);//SysTick_Delay_Ms(DELAY_TIME);GPIO_ResetBits(GPIOA,GPIO_Pin_2);GPIO_SetBits(GPIOA,GPIO_Pin_1);//SysTick_Delay_Ms(DELAY_TIME);GPIO_ResetBits(GPIOA,GPIO_Pin_1);GPIO_SetBits(GPIOA,GPIO_Pin_0);//SysTick_Delay_Ms(DELAY_TIME);GPIO_ResetBits(GPIOA,GPIO_Pin_0);
}void Motor_ctrl_angle(int dire ,int angle)     //dire??????,angle??????
{int j=0;if(dire==0)     {               for(j=0;j<64*angle/45;j++)    {Motor_SW();}MotorStop();}else          {       for(j=0;j<64*angle/45;j++){Motor_CW();}   MotorStop();}
}
void Motor_ctrl_motor(int dire,float cycle)         //dire??????;cycle??????,?????
{int angle=cycle*360;Motor_ctrl_angle(dire , angle);}void MotorStop(void)
{  GPIO_Write(GPIOB,0x0000);
}void SysTick_Delay_Ms(__IO uint32_t ms)
{uint32_t i;SysTick_Config(72000);for(i=0; i<ms ; i++){while(!(SysTick->CTRL)&(1<<16));}SysTick->CTRL &= SysTick_CTRL_ENABLE_Msk;
}

motor.h

#include "stm32f10x.h"void motor_init(void);void motor_45(void);
void motor_180(void);

药品信息管理系统 :

#ifndef __BSP_GPIO_H
#define __BSP_GPIO_H
#include "delay.h"void Motor_GPIOInit (void);
void Motor_CW(void);
void SysTick_Delay_Ms(__IO uint32_t );
void Motor_SW(void);
void Motor_ctrl_angle(int dire ,int angle);
void Motor_ctrl_motor(int dire,float cycle);
void MotorStop(void);   void Motor_RW(void);#endif

2学分

了解RFID应用

了解RFID系统组成

完成完整的实训项目设计


前期LCD参考文章:

LCD12864液晶显示模块的使用与分析_楼上小白_1001号的博客-CSDN博客_lcd12864

STM32 LCD12864使用教程_是along不是alone的博客-CSDN博客_lcd12864复位

引脚介绍
1.一共有20个引脚,重要的只有那么几个;
3~VO就是调节对比度的,相当于调节每个点显示出来的深浅,虽然只有亮与不亮两种选择,但亮的模式下相当于可以调节每个点到底多亮;
4~RS,为1的时候表示发送的发送的数据,为0表示发送命令;
5~RW,就是控制我们是往LCD12864读数据(1)还是写数据(0),我们要控制LCD,当然是往里面写数据(0);
6~E,使能信号;
17~RST复位引脚;
接下来的DB0~DB7就是用来传输我们的数据,一个字节八个位刚好。

一、LCD12864(带字库的)使用教程:_布鲁格若门的博客-CSDN博客_lcd12864

51单片机——LCD12864_小白变形计的博客-CSDN博客_单片机lcd12864

STM32/51单片机实训day7——电机驱动|ULN2003A步进电机|Proteus电路设计|旋转角度控制函数|驱动函数|Keil5程序设计相关推荐

  1. STM32/51单片机实训day6(一)——Proteus8.6版本+STM32F103驱动LCD12864显示|Keil5单片机程序设计

    内  容:实现LCD显示 学  时:4学时 知识点:LCD12864芯片介绍,读写操作时序,电路设计 重点: 读写操作时序 难点:读写操作时序 时间:2022年12月26日 9:00-11:50 总结 ...

  2. STM32/51单片机实训day8——基于Keil5+Proteus8使用DHT11温度传感器实现温湿度采集并在LM016L液晶屏上显示

    目录 任务指导 1 DHT11产品概述 2 应用领域 3 传感器性能说明 4 接口说明 5 电源引脚 6 串行接口(单线双向) 通讯过程如图3所示: 任务实现​​​​​​​ 内 容:本任务使用DHT1 ...

  3. STM32/51单片机实训day3——点亮LED灯、闪烁LED灯(一)理论

    内  容:编写代码实现LED灯的点亮功能 学  时:2学时 知识点:分析原理图.LED灯控制原理 重点:GPIO参数配置.LED原理图分析 难点:编写 GPIO参数配置函数.LED点亮函数 时间:20 ...

  4. 51单片机实训(一)————基于Proteus的光控小夜灯

    文章目录 前言 一.项目概述 1.1 系统概述 1.2 功能设计 二.项目硬件设计 2.1 AT89C51单片机最小系统 2.2 外设电路 三.项目软件设计 3.1 程序代码设计 四.项目调试与分析 ...

  5. 51单片机实训(二)————基于Proteus的花样流水灯设计

    文章目录 前言 一.项目概述 1.1 系统概述 1.2 功能设计 二.项目硬件设计 2.1 AT89C51单片机最小系统 2.2 外设电路 三.项目软件设计 3.1 程序代码设计 四.项目调试与分析 ...

  6. 51单片机c语言学习感想,51单片机实训心得体会

    [www.hywsbj.com--心得体会] 单片机实训有哪些心得体会呢?下面是小编为大家收集的资料,欢迎阅读哦. 51单片机实训心得体会 通过为期一周的单片机实训,是我们对这门课有了许多新的了解,弥 ...

  7. 单片机c51语言实训总结,大学生51单片机实训心得体会

    <大学生51单片机实训心得体会>由会员分享,可在线阅读,更多相关<大学生51单片机实训心得体会(1页珍藏版)>请在人人文库网上搜索. 1.大学生51单片机实训心得体会实践是检验 ...

  8. 51单片机实训项目之“万年历”代码原理详解

    一.原理图 二.芯片器件 STC89C52 DS18B20(温度传感器) DS1302(时钟芯片) LCD1602液晶显示 独立按键 杜邦线 三.仿真图 四.程序代码详解 (一).子程序 EEPROM ...

  9. 51单片机实训-4×4矩阵键盘电子琴

    制作说明: 晶振可以使用11.0592或12MHz: 扬声器应该按照图中给出的附图加上驱动电路: 显示器及七段译码器不接,单片机电子琴也可以正常工作. 74LS47 和数码管之间,应该接上" ...

最新文章

  1. ICML2020 | PGFS:如何保证生成分子是可合成的?强化学习来帮忙
  2. 18python入门到精通_《Python从入门到精通(60课)》18 序列类型之元组
  3. antd 轮播图样式_React - AntD 走马灯组件前后切换面板
  4. Linux 系统应用编程——网络编程(常用命令解析)
  5. c# 配置文件App.config操作类库
  6. 企业需求的Java程序员是什么样子的
  7. linux头文件怎么编译,microsoft编译器怎么使用Linux头文件
  8. 如何输入已经以新的TTY运行的Docker容器
  9. SPFA算法判断负环
  10. FreeMarker下拉列表选中值回显
  11. Science和Nature杂志论文异同简述
  12. Kotlin - 函数
  13. 软考高级 真题 2011年上半年 信息系统项目管理师 案例分析
  14. 为什么很少人用redmine_为什么古代书法家要把字写歪?
  15. 计算机分辨率无法调整,电脑分辨率调不了怎么办?电脑分辨率不能调的解决方法...
  16. Python--快递收费小程序
  17. 【Android 】零基础到飞升 | Service初涉
  18. Android拉取微信公众号列表,Xposed实时获取微信公众号推送
  19. 4、数据库服务的启动与登录
  20. 人脸识别技术的简单认识(含原理)

热门文章

  1. BVT测试(冒烟测试)
  2. (4.0系统)安卓神器XPOSED框架不用root激活指南
  3. 《大象:thinking in uml 》(第二版) 5章 UML核心模型
  4. 软件测试5年外包的感想,最后被领导直接逼退。
  5. 摄像头(Pi Cam) 配置方法
  6. BUUCTF-HAVE FUN
  7. 计算机网络摩尔定律芯片运算速度,需要定时刷新的半导体存储器芯片是什么 答案:DRAM...
  8. Vue.js基础特性、生命周期及常用指令
  9. python如何读取word中超链接的文本_如何使用python从docx文件中提取超链接中的url...
  10. Gecco学习笔记(十)