基于单片机的四相步进电机控制设计(电路+程序)

2024-01-02 22:20

本文主要是介绍基于单片机的四相步进电机控制设计(电路+程序),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

博主福利:100G+电子设计学习资源包!

http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect
--------------------------------------------------------------------------------------------------------------------------

 

步进电机控制应用实例

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

设计要求:

  • 采用定时中断方式控制步进机的转速,定时单位时长为10ms。
  • 速度设置在1/2/3/4四个档位,1档最快,依次递减,能够控制步进电机的停、转和方向,同时显示步进机的当前档位。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

设计思路:

  • 通过P1控制步进电机的转动,P1.0->a,P1.1->b,P1.2->c,P1.3->d,ULN2003A作为步进电机驱动
  • P2.0-P2.3对应数码管显示(使用7447芯片对应将BCD码转换成7端LED数码管),通过7447简单驱动数码管(P2只需要发送1/2/3/4即可)
  • 通过定时器计数,到达设定值时步进电机转动1/4圈,计数清零

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

元件清单:

  • AT89C51
  • BUTTON
  • MOTOR-STEPPER
  • RESPACK-8
  • 7SEG-COM-ANODE
  • ULN2003A
  • 7447

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

实现代码:

#include <reg52.h>
typedef unsigned char uchar;
uchar direction = 0;  //0为正转,1为反转
uchar onoff = 0; //关为0,开为1
uchar n = 0; //每次定时器中断触发时n++,当n==max时电机转动1/4
uchar max = 10;
uchar index = 0; //通过index指示电机转动,AB,BC,CD,DA
sbit LED = P3 ^ 7; //当n==max时LED闪烁提示
int main()
{/* LED */P2 = 0xff;/* 初始化中断 */EA = 1;EX0 = 1; //要用到的中断是两个外部中断和定时器中断0IT0 = 1;EX1 = 1;IT1 = 1;ET0 = 1;/* 定时器0 */TMOD = 0x01; //使用定时器0,方式1TH0 = (65536 - 10000) / 256; //12MHz晶振下,定时器为10ms触发中断,更方便观察转动情况TL0 = (65536 - 10000) % 256;TR0 = 1;while(1){switch(P0){case 0xfe: //11111110max = 1;P2 = 1;break;case 0xfd: //11111101max = 10;P2 = 2;break;case 0xfb: //11111011max = 50;P2 = 3;break;case 0xf7: //11110111max = 100;P2 = 4;break;}}
}
void Stop()interrupt 0
{onoff++;if (onoff > 1)onoff = 0;
}
void int1()interrupt 2
{direction++;if (direction > 1)direction = 0;
}
void delay50ms(void)
{unsigned char a, b;for(b = 173; b > 0; b--)for(a = 143; a > 0; a--);
}
void time()interrupt 1
{TH0 = (65536 - 10000) / 256;TL0 = (65536 - 10000) % 256;if (onoff == 1) //在开状态下{if (n == max) //设定档位速度,经过了max次中断后,步进电机转1/4圈{LED = 0; //每次n==max时LED闪烁delay50ms();LED = 1;if (direction == 0){switch(index) //正转时以AB,BC,CD,DA顺序{case 0:P1 = 0x03;break; //00000011 AB高电平case 1:P1 = 0x06;break; //00000110 BC高电平case 2:P1 = 0x0c;break; //00001100 CD高电平case 3:P1 = 0x09;break; //00001001 DA高电平}index ++; if (index == 4) //步进电机转完一圈时index清零index = 0;n = 0; //到达max,n重置为0}if (direction == 1){switch(index) //反转时以DA,CD,BC,AB顺序{case 0:P1 = 0x09;break;case 1:P1 = 0x0c;break;case 2:P1 = 0x06;break;case 3:P1 = 0x03;break;}index ++;if (index == 4)index = 0;n = 0;}else n = 0;}n++; //n!=max时,n++}else n = 0; //在关状态下,n始终为0,无法触发电机转动
}

 

这篇关于基于单片机的四相步进电机控制设计(电路+程序)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/563796

相关文章

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、