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

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

相关文章

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

Python中如何控制小数点精度与对齐方式

《Python中如何控制小数点精度与对齐方式》在Python编程中,数据输出格式化是一个常见的需求,尤其是在涉及到小数点精度和对齐方式时,下面小编就来为大家介绍一下如何在Python中实现这些功能吧... 目录一、控制小数点精度1. 使用 round() 函数2. 使用字符串格式化二、控制对齐方式1. 使用

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Spring IOC控制反转的实现解析

《SpringIOC控制反转的实现解析》:本文主要介绍SpringIOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者... 目录1. IOC的基本概念1.1 什么是IOC1.2 IOC与DI的关系2. IOC的设计目标3. IOC

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用