单片机控制步进电机_用AT89C52单片机作为控制器,设计简单实用的步进电机控制系统...

本文详细介绍了使用AT89C52单片机设计的两相混合式步进电机控制系统,包括系统结构、硬件和软件设计。该系统具备启动/停止、方向、速度控制功能,采用双H桥式电路驱动,具有良好的动态响应和精度。通过实验验证,该系统操作简单、运行可靠。
摘要由CSDN通过智能技术生成

作者介绍了基于AT89C52单片机的两相混合式步进电机控制系统的设计方案,增加了步进电机控制系统设计的灵活性。控制系统采用AT89C52单片机作为控制器,由达林顿功率管BUW49组成的双H桥式电路作为驱动器,加入按键控制及LCD1602显示。控制系统的电路结构简单、设计思路清晰。实验表明,控制系统操作简单、运行可靠,具有较强的实用性。

1 引言

作为工业领域广泛应用的控制电机,步进电机具有出色的开环性能,易于实现数字化、智能化控制。步进电机组成的控制系统具有结构简单、性能稳定、造价便宜等特点,在工业控制领域中得到了广泛的应用。单片机对步进电机的控制成本低、操作灵活,在步进电机的控制中得到了广泛的应用。本文以AT89C52单片机作为控制器设计一种新型的两相混合式步进电机的控制系统。

2 系统结构设计

控制系统主要由单片机、键盘、显示、驱动、PC上位机等5个模块组成,其中PC上位机用于编写及烧录程序。控制器通过相应的IO接口,将控制指令发送至驱动电路,可以控制步进电机的运行,完成系统的伺服控制。

控制系统可实现以下功能:(1)控制步进电机的启动和停止、运行方向、运行速度。(2)显示步进电机的运行状态、方向、转速。(3)通过软件实现细分控制。图1为控制系统总体结构图。

2b5b29ad13e4c0dfd97299d223f346d8.png

图1 控制系统总体结构图

3 系统硬件设计

3.1 单片机模块

单片机模块主要由AT89C52单片机及外围滤波、电源管理、晶振和复位电路组成。AT89C52单片机具有8KB内存的可编程可擦除只读存储器,便于反复的进行程序的编写。电源管理电路提供的3.5V和5V电压分别给单片机、晶振、LED和控制电路供电。12MHZ的晶振给单片机提供时钟信号。单片机的串口用于和PC上位机的通信以及烧录软件程序。P1口控制驱动电路开关管的通断。P0和P2口控制LCD1602和LED组成的显示模块。P3口检测键盘信号及外部中断信号。

3.2 键盘及显示模块

一次控制两个电机#include #define GPIO_MOTOR P1 sbit K1=P3^6; sbit K2=P3^5; sbit K3=P3^4; sbit K4=P3^3; unsigned char code ZHENG1 [8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //正转顺序编码 unsigned char code FAN1 [8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //反转顺序编码 unsigned char code ZHENG2 [8]={0x1f,0x3f,0x2f,0x6f,0x4f,0xcf,0x8f,0x9f}; //正转顺序编码 unsigned char code FAN2 [8]={0x9f,0x8f,0xcf,0x4f,0x6f,0x2f,0x3f,0x1f}; //反转顺序编码 char Motor1_Step,Motor2_Step,Speed,Speed2; void Delay(unsigned int t); void Motor1_zheng(); void Motor1_fan(); void Motor2_zheng(); void Motor2_fan(); void main() { unsigned int i; Motor1_Step=1; Motor2_Step=3; Speed=10; Speed2=40; while(1) { while(K1==0) { for(i=0;i<10;i++) { Motor1_zheng(); } } while(K2==0) { for(i=0;i<10;i++) { Motor1_fan(); } } while(K3==0) { for(i=0;i<10;i++) { Motor2_zheng(); } } while(K4==0) { for(i=0;i<10;i++) { Motor2_fan(); } } } } void Motor1_fan() { unsigned int i; for(i=0;i<8;i++) { //GPIO_MOTOR = FFW[i]&0x1f; //取数据 GPIO_MOTOR = FAN1[i]; Delay(Speed); //调节转速 } } void Motor1_zheng() { unsigned int i; for(i=0;i<8;i++) { //GPIO_MOTOR = FFZ[i]&0x1f; GPIO_MOTOR = ZHENG1[i]; Delay(Speed); //调节转速 } } void Motor2_fan() { unsigned int i; if(Motor1_Step==0) { for(i=0;i<8;i++) { //GPIO_MOTOR = FFW2[i]&0xf1; //取数据 GPIO_MOTOR = FAN2[i]; Delay(Speed2); //调节转速 } } Motor1_Step=1; } void Motor2_zheng() { unsigned int i; if(Motor1_Step==1) { for(i=0;i<8;i++) { //GPIO_MOTOR = FFZ2[i]&0xf1; GPIO_MOTOR = ZHENG2[i]; Delay(Speed2); //调节转速 } } Motor1_Step=0; } void Delay(unsigned int t) { unsigned int k; while(t--) { for(k=0; k<80; k++) { } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值