基于51单片机的电动机控制系统的设计

文章目录

  • 前言
  • 资料获取
  • 设计介绍
  • 功能介绍
    • 程序代码部分参考
  • 设计清单
  • 具体实现截图
  • 参考文献
  • 设计获取


前言

💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

资料获取

文章底部名片,详细资料联系我。

设计介绍

基于单片机的步进电机控制系统。步进电机是一种常用的机电元件,其转动控制是通过向相绕组输送电脉冲信号来控制电机向一定的方向转动,每个脉冲信号都能使电机转动指定的角度。步进电机的位置误差不会积累,运行可靠、结构简单、可以快速启停等优点,而且容易实现开环精确控制,所以被普遍运用于各个经济领域。
本篇毕业设计报告简单介绍了一种利用51单片机、驱动芯片ULN二零零三、LED数码管按键等元器件组成的一个单片机步进电机控制系统设计方案,并进行了深入探讨了硬件软件作用原理。步进电机是一种非常常见的电机种类,本文简单介绍了电机的发展经历和中国的各方面应用大概情况,同时也讨论最常见的应用驱动技术。通过对步进电机的工作原理探讨分析,提出了基于单片机的硬件设计总方案,并对电路各板块进行详细设计研究讨论。最终,本文重点阐述控制系统的软件设计部分,包括程序编写和如何优化等各方面,围绕步进电机控制系统的设计方案详细展开,旨在提供一种可行的实现方案和实践指南。

功能介绍

单键驱显电源控制系统(步进电机)由单片机、键盘控制模块、电机驱动模块、数码显示模块以及电源模块五个部分组成。键盘控制模块、电机驱动模块和数码显示模块是本次设计的重点。按键作为一个外部中断源,设置了步进电机的正反转、加减速、启停等功能,按键按下后,单片机检测到信号调用相应的按键程序控制驱动芯片ULN2003,进而控制步进电机,同时显示器显示正反转、速度等级等状态。设计系统框图如下图2-5.

在这里插入图片描述

图 2-3 系统设计框图

程序代码部分参考

//数码管位 高位-----低位
//四个按键控制步进电机:正转,反转,加1,减1
//上电时电机启动,数码管上显示速度最小档1,加减档位均能通过数码管显示出来,电机采用单双八拍方式
//电机转速一共10档,通过按键调节转速 
//电机正转时最高位数码管显示0,反转时显示1  
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define led P0//数码管段选
#define haha P2
sbit s1 = P1^0;
sbit s2 = P1^1;
sbit s3 = P3^0;
sbit s4 = P3^1;
sbit s5 = P3^2;//按键定义,s1正转,s2反转,s3加1,s4减1
sbit wei3 = P2^3;sbit wei2 = P2^2;sbit wei1 = P2^1;sbit wei0 = P2^0;//数码管位选定义
sbit a = P2^7;sbit b = P2^6;sbit c = P2^5;sbit d = P2^4;//脉冲信号输入端定义uchar code tab[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阳数码管驱动信号0---9,不显示
uchar code time_counter[10][2]={{0xda,0x1c},{0xde,0xe4},{0xe1,0xec},{0xe5,0xd4},{0xe9,0xbc},  //9.7 ----1ms{0xed,0xa4},{0xf1,0x8c},{0xf5,0x74},{0xf9,0x5c},{0xfc,0x18}};
uchar num1 = 0;//控制取励磁信号变量                        
uchar num2 = 8;char k=0;//加减档位控制,1为最小档
char pause=1;//暂停时保存之前的转速,开机默认1
bit flag1 = 0;//初始正转,正反转标志
uchar buf[4]={0,10,0,0};//数码管显示缓存,正转,不显示,不显示,显示1档位,高----低  
//================================定时器0/1初始化函数================================
void T0_T1_init()
{TMOD = 0x11;//定时器0/1均工作于方式1,16位计时方式TH1 = time_counter[k-1][0];TL1 = time_counter[k-1][1];//定时器1,定时10ms用于步进电机转速控制TR1 = 0;ET1= 1;//开定时器中断EA = 1;//开总中断
}
//================================ms级延时函数=======================================
void delay1m(uint x)
{uint i,j;for(i=0;i<x;i++)      //连数x次,约 x msfor(j=0;j<120;j++);   //数120 次,约1 ms
} 
void display()     //显示函数
{wei3=1;wei2=1;wei1=1;wei0=0;led = tab[buf[3]];delay1m(1);led=0xff;//第四个数码管点亮wei3=1;wei2=1;wei1=0;wei0=1;led = tab[buf[2]];delay1m(1);led=0xff;//第三个数码管点亮wei3=1;wei2=0;wei1=1;wei0=1;led = tab[buf[1]];delay1m(1);led=0xff;//第二个数码管点亮wei3=0;wei2=1;wei1=1;wei0=1;led = tab[buf[0]];delay1m(1);led=0xff;//第一个数码管点亮
}
//================================主函数=============================================
void main()//主函数
{T0_T1_init();//初始化定时器buf[1] = 10;//不显示a=b=c=d=0;while(1){display();if(s1 == 0)//正转按键按下{delay1m(3);//延迟消抖if(s1 == 0)//正转确实按下了{flag1 = 0;//正转buf[0] = 0;//最高位显示0//      haha = 0x00;//停止}while(!s1) display();//松手检测}if(s2 == 0 )//反转按键{delay1m(3);if(s2 == 0){flag1 = 1;//反转buf[0] = 1;//最高位显示1//      haha = 0x00;//停止}while(!s2) display();}if(s3 == 0)    //速度加1档{delay1m(3);if(s3 == 0){k++;//自加一TR1=1;//开启定时器if(k > 10 ){k = 1;}buf[2]= k/10;//档位的十位buf[3]= k%10;//档位的个位} while(!s3) display();}if(s4 == 0)  //速度减1档{delay1m(3);if(s4 == 0){k--;//自减1TR1=1;//开定时器if(k <= 0){k = 10;}buf[2]= k/10;buf[3]= k%10;}while(!s4) display();}if(s5==0)//暂停启动{delay1m(3);if(s5==0){if(TR1==1)//如果定时器是打开的{pause=k;//用于暂存档位值k=0;TR1=0;//关定时器a=b=c=d=0;}else if(TR1==0)//如果定时器是关闭的{k=pause;//读取档位值TR1=1;//打开定时器}buf[2]= k/10;buf[3]= k%10;while(!s5) display();}}}
}
//==================================定时器1中断函数,用于脉冲频率控制=====================================
void time1_interrupt()interrupt 3
{   static num1 = 0;static num2 = 0;TH1 = time_counter[k-1][0];TL1 = time_counter[k-1][1];//定时器1,定时1 用于步进电机转速控制if(flag1 == 0)//正转{switch(num1){case 0:a = 1;b = 0;c = 0;d = 0;break;case 1:a = 1;b = 1;c = 0;d = 0;break;case 2:a = 0;b = 1;c = 0;d = 0;break;case 3:a = 0;b = 1;c = 1;d = 0;break;case 4:a = 0;b = 0;c = 1;d = 0;break;case 5:a = 0;b = 0;c = 1;d = 1;break;case 6:a = 0;b = 0;c = 0;d = 1;break;case 7:a = 1;b = 0;c = 0;d = 1;break;}num1++;if(num1 == 8)num1 = 0; }else          //反转{switch(num2){case 0:a = 1;b = 0;c = 0;d = 1;break;case 1:a = 0;b = 0;c = 0;d = 1;break;case 2:a = 0;b = 0;c = 1;d = 1;break;case 3:a = 0;b = 0;c = 1;d = 0;break;case 4:a = 0;b = 1;c = 1;d = 0;break;case 5:a = 0;b = 1;c = 0;d = 0;break;case 6:a = 1;b = 1;c = 0;d = 0;break;case 7:a = 1;b = 0;c = 0;d = 0;break;}num2++;if(num2 == 8)num2 = 0;  }
}

设计清单

步进电机元件清单
1.7*9万用板
2.四位一体共阳.36数码管
3.STC89C51
4.步进电机

具体实现截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

参考文献

[1] 宋建成,石宗义,耿太荣.ZDB系列单片机电动机综合保护器[J].工矿自动化, 1993, 000(004):21-24.
[2] 曲弋.电动机热特性研究及单片机电动机热保护器的研制[D].沈阳工业大学,2002.
[3] 玄子玉,薛佳楣.基于AVR单片机电动机智能保护器的设计[J].煤矿机械, 2009, 30(6):2.DOI:10.3969/j.issn.1003-0794.2009.06.089.
[4] 秦佳.基于C51的单片机电动机控制器制作[J].科协论坛:下半月, 2013(1):3.DOI:CNKI:SUN:KXLT.0.2013-01-048.
[5] 付云强,宋凤娟,韩来吉.AT89C51单片机在步进电动机控制系统中的应用[J].煤矿机械, 2007, 28(8):3.DOI:10.3969/j.issn.1003-0794.2007.08.037.
[6] 王晓明.电动机的单片机控制[M].北京航空航天大学出版社,2002.
[7] 张强,吴红星,谢宗武.基于单片机的电动机控制技术[M].中国电力出版社,2008.
[8] 尹作菲.基于单片机PIC18F2431的无刷直流电动机控制系统[D].华中农业大学,2009.DOI:10.7666/d.y1994149.
[9] 闵次凡.基于单片机的无刷直流电动机控制系统设计[J].机电一体化, 2012.DOI:CNKI:SUN:JDTH.0.2012-08-018.
[10] 王瑾.基于单片机的直流电动机控制系统研究[J].中国科技信息, 2011.DOI:CNKI:SUN:XXJK.0.2011-02-052.
[11] CHEN De-yi.基于嵌入式单片机的电机控制系统设计[J].计算机仿真, 2010(001):027.
[12] 马宪民.采用MCS-96单片机控制的开关磁阻电动机调速系统[C]//全国煤矿自动化学术年会.2002.
[13] 黄延球.基于16位单片机的无刷直流电动机控制系统[J].世界电子元器件, 2008(05):25-26.DOI:CNKI:SUN:SDYQ.0.2008-05-008.
[14] 王华荣,李丽.基于数据分析的单片机的直流电动机正反转控制[J].科学与信息化, 2017(4):2.
[15] 丁婷.基于单片机的步进电机的最优化控制[J]. 2008.
[16] 崔晶,刘和平,郑连清,等.基于PIC单片机的同步电动机新型智能励磁控制系统的设计[J].电子设计应用, 2003(11):3.DOI:CNKI:SUN:YYDZ.0.2003-11-016.
[17] 陈德益.基于嵌入式单片机的电机控制系统设计[J].计算机仿真, 2010(1):4.DOI:10.3969/j.issn.1006-9348.2010.01.097.
[18] Dobra M , Sita I V , Dobra P .Efficient implementation of sliding mode control for BLDC PM motor using TMS320F28335 microcontroller[C]//Education & Research Conference.IEEE, 2014.DOI:10.1109/EDERC.2014.6924361.
[19] Jaziri I , Charaabi L , Jelassi K .A closed Loop DC Motor Control using low cost single-board microcontroller based on embedded Linux[C]//2016 International Conference on Electrical Sciences and Technologies in Maghreb (CISTEM).2016.DOI:10.1109/CISTEM.2016.8066800.
[20]Wardhana A W , Nugroho D T .Stepper Motor Control with DRV 8825 Driver Based on Square Wave Signal from AVR Microcontroller Timer[J]. 2019.DOI:10.1063/1.5097484.

设计获取

文章下方名片联系我即可~

精彩专栏推荐订阅:在下方专栏👇🏻

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/416486.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM大模型学习:AI时代,敏感词过滤,如何精准且高效,方法+代码实现

前言 自从我开始搞大模型应用&#xff0c;就一直有一个头疼的问题困扰着我的团队&#xff0c;那就是避免敏感信息。 传统的做法是通过一些匹配算法&#xff0c;过滤掉敏感词&#xff0c;这个后面我们再讲。 但大模型的对话中&#xff0c;想要防止他做一些不合法的事情&#…

论文速读|重新审视奖励设计与评估:用于强健人型机器人站立与行走控制的方法

论文地址&#xff1a;https://arxiv.org/pdf/2404.19173 这篇论文为类人机器人站立和行走&#xff08;SaW&#xff09;控制器的持续可衡量改进奠定了基础。通过引入一套定量实际基准测试方法&#xff0c;作者展示了现有控制器的优缺点&#xff0c;并通过基准测试指导新控制器的…

Linux malloc内存分配实现原理

目录 一、用户进程虚拟内存空间布局 二、malloc工作原理 2.1 malloc实现流程 2.1.1 brk方式申请内存 2.1.2 mmap方式分配内存 2.2 核心代码 2.3 malloc分配物理内存的时机 2.4 malloc分配的实际内存大小 三、虚拟内存与物理内存 3.1 如何建立映射 3.2 分配物理内存 …

大数据采集与分析实训室解决方案

随着信息技术的飞速发展&#xff0c;大数据已成为推动产业升级、社会进步的重要力量。为了培养适应未来社会需求的大数据专业人才&#xff0c;构建一套科学、先进的大数据采集与分析实训室解决方案显得尤为重要。为此&#xff0c;唯众特推出全面升级的大数据采集与分析实训室解…

使用实例:xxl-job应用在spring cloud微服务下

1、首先下载&#xff0c;从github上下载&#xff0c;选择zip然后直接解压 https://github.com/xuxueli/xxl-job/releases 2、解压完后用idea启动。 启动这个启动类&#xff0c;然后按照路径访问 http://localhost:8080/xxl-job-admin/ 3、在你的项目里编写一个单独的微服务&a…

mac的使用

mac使用python的问题 对于python的虚拟环境&#xff0c;其实是基于已经安装到本地的python来安装不同的包。&#xff08;之前我的mac上只安装了python3.9.6 &#xff0c;安装的位置为/usr/bin/python3&#xff09;然后我在vscode里怎么找都找不到如何弄一个python3.7.6 的版本…

Nginx部署前端vue项目操作步骤和方法~小皮

部署前端Vue.js项目到Nginx上&#xff0c;是开发流程中至关重要的一步&#xff0c;它意味着将静态文件托管在Web服务器上&#xff0c;使应用程序能够被用户访问和交互。下面将详细介绍如何使用Nginx部署前端Vue项目的操作步骤和方法&#xff1a; 准备构建Vue项目 安装Node.js和…

k8s集群环境搭建(一主二从--kubeadm安装)

前置条件 版本&#xff1a;CentOS Linux release 7.5.1804 (Core) 内存&#xff1a;2G CPU&#xff1a;2 主机名解析 vim /etc/hosts 192.168.109.100 master 192.168.109.101 node1 192.168.109.102 node2时间同步&#xff0c;这里直接使用chronyd服务从网络同步时间syste…

2024.9.2

还没写完 #include <iostream> #include <cstring> using namespace std;class myString { private:char *str; //字符串int size; //实际字符长度int len; //字符串容量 public:myString():size(10) //无参构造函数{len siz…

ES6语法详解

以下是ES6常用的一些语法和特性&#xff1a; 声明变量的关键字变化&#xff1a;使用let和const、var来声明变量。 箭头函数&#xff1a;使用箭头&#xff08;>&#xff09;定义函数&#xff0c;简化函数的写法。 模板字符串&#xff1a;使用反引号&#xff08;&#xff0…

学习大数据DAY52 Docker中的Mysql主从配置

Mysql 数据库主从同步 上机练习 1 容器生成命令 压缩包获取镜像 docker image load -i /root/mysql.tar 创建并开启两个镜像&#xff1a; docker run --name mysql1 -d -p 3333:3306 \ -v /opt/mysql1/conf:/etc/mysql/conf.d/ \ -v /opt/mysql1/data:/var/lib/mysql \…

★ 算法OJ题 ★ 力扣1089 - 复写零

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将和大家一起做一道双指针算法题--复写零~ 目录 一 题目 二 算法解析 2.1 算法思路 2.2 算法流程 三 编写算法 一 题目 1089. 复写零 - 力扣&#xff08;LeetCode&#xff09; 二 算法解析 2.1 算法思路 …

国内独家首发 | OpenCSG开源中文版fineweb edu数据集

01 背景 近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术&#xff0c;特别是自然语言处理&#xff08;NLP&#xff09;的飞速发展深刻影响着各个行业。从智能客服到内容生成&#xff0c;从语音识别到翻译工具&#xff0c;NLP的应用已经无处不在。在这一领域中&…

【Datawhale X 李宏毅苹果书 AI夏令营】深度学习自适应学习率(AdaGrad/RMSProp/Adam)及其调度

1、自适应学习率 理论上&#xff1a;在训练一个网络&#xff0c;训练到现在参数在临界点附近&#xff0c;再根据特征值的正负号判断该 临界点是鞍点还是局部最小值实际上&#xff1a;①在训练的时候&#xff0c;要走到鞍点或局部最小值非常困难&#xff1b;②多数还未走到临界…

一次性了解Neo4j图形数据库

Neo4j高性能的NoSQL图形数据库 它将结构化数据存储在网络&#xff08;从数学角度叫做图&#xff09;上而不是传统的表格中。 Neo4j是一个嵌入式的、基于磁盘的、具备完全事务特性的Java持久化引擎。 但它在数据表示上采用了图形模型&#xff0c;即数据以节点&#xff08;Nod…

基于Yolov5_6.1、LPRNet、PySide6开发的车牌识别系统

项目概述 项目背景 随着车辆数量的不断增加&#xff0c;车牌识别系统在交通管理、停车场自动化等领域变得越来越重要。本项目利用先进的深度学习技术和现代图形用户界面框架来实现高效的车牌识别功能。 项目特点 高效识别&#xff1a;采用 YOLOv5_6.1 进行车牌定位&#xff…

【Day08】

目录 MySQL-多表查询-概述 MySQL-多表查询-内连接 MySQL-多表查询-外连接 MySQL-多表查询-[标量、列]子查询 MySQL-多表查询-[行、表]子查询 MySQL-多表查询-案例 MySQL-事务-介绍与操作 MySQL-事务-四大特性 MySQL-索引-介绍 MySQL-索引-结构 MySQL-索引-操作语法 …

Datawhale X 李宏毅苹果书 AI夏令营-深度学习入门task3:实践方法论

在应用机器学习算法时&#xff0c;实践方法论能够帮助我们更好地训练模型。 1.模型偏差 模型偏差可能会影响模型训练。举个例子&#xff0c;假设模型过于简单&#xff0c;即使找到的最好的函数也不能满足需求。这种情况就是想要在大海里面捞针&#xff08;一个损失低的函数&am…

2023 ICPC 江西省赛K. Split

K. Split time limit per test: 3 seconds memory limit per test: 512 megabytes You are given a positive integer n and a non-increasing sequence ai of length n , satisfying ∀i∈[1,n−1],. Then, you are given a positive integer m, which represents the tot…

传统CV算法——背景建模算法介绍

帧差法 由于场景中的目标在运动&#xff0c;目标的影像在不同图像帧中的位置不同。该类算法对时间上连续的两帧图像进行差分运算&#xff0c;不同帧对应的像素点相减&#xff0c;判断灰度差的绝对值&#xff0c;当绝对值超过一定阈值时&#xff0c;即可判断为运动目标&#xf…