AT89S52控制混合式步进电机 C程序

发布者:rnm888最新更新时间:2016-02-26 来源: eefocus关键字:AT89S52控制  混合式  步进电机 手机看文章 扫描二维码
随时随地手机看文章
#include  //包含串口通信头文件(里面含有reg52.h)

#include  //包含printf头文件
#define uint unsigned int
#define uchar unsigned char

sbit cp  = P2^0;  //脉冲输入端
sbit dir = P2^1;  //方向控制端
sbit free = P2^2;  //脱机控制端,一般接高即可

sbit jia_su = P1^0;  //加速键key1声明
sbit jian_su = P1^1; //减速键key2声明
sbit fang_xiang = P1^2; //切换方向键key3声明
sbit ting = P1^3;  //停止键key4声明
uint num;
void uart_Init();  //串口初始化子函数声明

void delay(uint z)  //ms子函数

 uint x,y;
 for(x = 0;x   for(y = 0;y<120;y++);
}

void delay1(uint z)  //电机延时子函数us级

 uint x;
 for(x = 0;x   
}

void init()   //初始化电机、串口子函数

 num = 2;
    dir = 1;
 free = 1;
 uart_Init();
}

void key_scan()  //键盘控制子函数
{
 if(jia_su == 0)  //判断有加速键按下
 {
  delay(5);  //延时消抖
  if(jia_su == 0) //再次判断有加速键按下
  {
   num++;  //num(代表电机转速)增加
   if(num>4)  
   {num=4;}
   while(!jia_su);  //松手检测
     delay(5);
     while(!jia_su);
    printf("num = %dn",num);//通过串口查看num值
  }
 }
 if(jian_su == 0)  //判断有减速键按下
  {
   delay(5);  //延时消抖
   if(jian_su == 0) //再次判断有减速键按下
   {
    num--;  //num(代表电机转速)减小
    if(num<1)
    {num=0;} 
    while(!jian_su); //松手检测
     delay(5);
     while(!jian_su);
    printf("num = %dn",num); //通过串口查看num值
   }
  }
 if(fang_xiang ==0)  //判断是否有方向切换键按下
 
  delay(5);   //延时消抖
  if(fang_xiang == 0)
  {
   dir =~dir;  //方向改变
   while(!fang_xiang);  //松手检测
    delay(5);
    while(!fang_xiang);
   printf("dir = %dn",dir);
  }
 }
 if(ting ==0)  //判断是否有停止键按下
 
  delay(5);   //延时消抖
  if(ting == 0)
  {
   num = 0;  //停止
   while(!ting);  //松手检测
    delay(5);
    while(!ting);
  }
 }
 
 switch(num)
 
  case 0: cp = 1; break;  //电机停止
  case 1:     //以低速转动
  
   
   
    cp = 1;
    delay1(20);
    cp = 0;
    delay1(20); 
  
  }
  break;

  case 2:   //以中速转动
  
   
   
    cp = 1;
    delay1(15);
    cp = 0;
    delay1(15); 
   
  }
  break;
  
  case 3:   //以高速转动
  
   
   
    cp = 1;
    delay1(10);
    cp = 0;
    delay1(10); 
   
  }
  break;

  case 4:   //以更高速转动
  
   
   
    cp = 1;
    delay1(5);
    cp = 0;
    delay1(5);
    
  }
  break;
 }
 
}
void main()

 init();  //调用初始化子函数
 while(1)
 
  key_scan();  //不停键盘扫描
 
 
}

关键字:AT89S52控制  混合式  步进电机 引用地址:AT89S52控制混合式步进电机 C程序

上一篇:基于51单片机的多任务多进程
下一篇:用C51写的单片机音乐彩灯程序

推荐阅读最新更新时间:2024-03-16 14:45

步进电机加减速程序,适合做GPIO设置
#include stm32f10x_lib.h #include main.h TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; GPIO_InitTypeDef GPIO_InitStructure; ErrorStatus HSEStartUpStatus; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; int pulse; int StepCount; int pulse1; int pulse2; int t1; int t2; int r1; int r2; void RCC_Configuration(void); void
[单片机]
TMC428型3轴步进电机控制器的原理及应用
摘要:TMC428是TRINAMIC公司最新开发的步进电机运动控制器,它可减少电机控制软件设计的工作量,降低开发成本。以它为核心(包括TMC236型步进电机驱动器)构成的3轴步进电机驱动控制系统具有尺寸小、控制简单的优点,可同时控制3个两相步进电机。 关键词:步进电机 控制器 TMC428 1 主要性能特点 TMC428是小尺寸、高性价比的二相步进电机控制芯片。它带有二个独立的SPI口,可分别与微处理器和带有SPI接口的步进电机驱动器相连以构成完整的系统。其控制指令可由微处理器通过SPI接口给定。TMC428提供了所有与数字运动控制有关的功能,包括位置控制、速度控制及微步控制等步进电机常用的控制功能。这些功能如果让微处理器
[传感技术]
步进电机驱动器直流电源设计的原理图
整流变压器的设计 三相整流变压器的设计包括:一、二次绕组的联结方式,二次侧电压的计算,一、二次侧电流的计算,容量的计算与确定,结构形式的选择等环节。其中一、二次绕组的联结方式及二次侧电压的确定是我们重点分析的内容。本文以某一步进电机驱动器的3个直流电源设计为例进行详细介绍,原理图如图1。 图1 步进电机驱动器直流电源设计的原理图 1、二次侧电压的确定 二次电压不仅与负载电压(即要设计的直流稳压电源电压)和整流 电路 有关,而且与稳压器件有关。对于要求高的选桥式整流 电路 ,用 电容 滤波稳压和稳压器稳压,对于要求低的则可以不稳压或用 电容 稳压。如在图1中,+7V低压驱动,主要是用来锁相,其电流小、电压
[电源管理]
<font color='red'>步进电机</font>驱动器直流电源设计的原理图
单极性步进电机控制器电路
单极性步进电机控制器电路--Unipolar Stepper Motor Controller This is a very good integrated circuit. There is no need for any external glue logic to drive the circuit, there is only 2 pins to drive the motor, one for controlling the direction and the other to trigger the stepping pulses. It provides a very compact design that
[工业控制]
单极性<font color='red'>步进电机</font><font color='red'>控制</font>器电路
【51单片机】 ULN2003模块 驱动步进电机(5线)正反转 代码以及接线图
步进电机有四相(A-B-C-D) 正向转动思路为A→B→C→D 反向转动思路为D→C→B→A 通过给每一相轮流供电,实现电机轴的360度转动 、、以下代码可直接复制使用: #include reg52.h #define uchar unsigned char //宏定义 把unsigned char简写为uchar #define uint unsigned int // 把unsigned int 简写为uint uint i,j; //定义全局变量,执行电机for循环转动时间需要用到 sbit A1 = P1^0; //定义给步进电机四相连接的IO口 sbit B1 = P1^1;
[单片机]
【51单片机】 ULN2003模块 驱动<font color='red'>步进电机</font>(5线)正反转 代码以及接线图
让我们开启步进电机操作之旅吧!
步进电机操作之旅 芝识课堂已经带大家认识了步进电机的应用、特点和工作原理,现在朋友们应该跃跃欲试想动手让你的步进电机工作起来吧?别急,在驱动步进电机之前,让我们先学会步进电机的驱动方式并选择合适的步进电机驱动IC,从而让你第一次步进电机操作之旅更加美妙。 在上期内容中,我们知道步进电机作为能逐步驱动至指定旋转角度的电机,它的旋转是以固定的角度(称为“步距角”)一步一步运行的。步进电机的运行需要电子装置进行驱动,即步进电机驱动器。它把控制系统发出的脉冲信号转化为步进电机的角位移,或者可以说控制系统每发一个脉冲信号,驱动器就使步进电机旋转一步距角,所以步进电机的转速与脉冲信号的频率成正比。 步进电机的驱动需要专用的电机驱动
[嵌入式]
让我们开启<font color='red'>步进电机</font>操作之旅吧!
步进电机控制芯片UDN2916LB原理及应用
UDN2916LB是SANKEN公司推出的一款两相步进电机双极驱动集成电路,能够驱动双绕组双极步进电机,特别适用于目前国内税控市场双步进微型打印机电机的控制。 UDN2916LB适用的电机电压范围为10~45V,逻辑电压不能超过7V;通过内部脉宽调制控制器(PWM)可实现最大750mA的输出电流;内置1/3和2/3分割器;逻辑输入实现1相/2相/W1-2phase激励模式;内置过热和交叉电流保护功能;集成钳位二极管;内置防止低压误操作等保护功能。UDN2916LB内部结构如图所示,芯片有两组电路构成,每组电路由PWM控制器、电桥及辅助电路组成。 图1 UDN2916LB内部结构框图 PWM电流控制电路 每个PWM控制器
[工业控制]
步进电机一顿一顿是为什么_步进电机堵转检测方法
  步进电机一顿一顿是为什么   步进电机一顿一顿的情况通常是由于驱动信号的不稳定或者电机负载过大引起的。具体来说,步进电机的转动需要通过驱动器向电机提供一系列脉冲信号来控制电机转动的步长和速度。如果驱动信号不稳定,就会导致电机转动不平稳,出现一顿一顿的情况。此外,如果电机负载过大,电机就需要消耗更多的能量来转动,也会导致转动不稳定。   解决步进电机一顿一顿的问题需要从多个方面入手:   提高电机驱动信号的稳定性。可以通过检查电路连接是否牢固、电缆是否损坏、信号传输线路是否受干扰等方式,排除信号不稳定的因素。   优化电机驱动参数。电机驱动参数包括起始速度、加速度、脉冲频率等,需要根据具体情况进行优化和调整,以提高电机转速和
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved