步进电机圈数测试


下面代码已经修改过,圈数改为1圈

/***************   writer:shopping.w   ******************/
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code FFW[]=
{0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09
};uchar code REV[]=
{0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01
};sbit K1 = P3^0;
sbit K2 = P3^1;
sbit K3 = P3^2;void DelayMS(uint ms)
{uchar i;while(ms--){for(i=0;i<120;i++);}
}void SETP_MOTOR_FFW(uchar n)
{uchar i,j;for(i=0;i<1*n;i++) //n控制圈数,运行1次,正转144°,转够5次,电机才能回到0°{for(j=0;j<8;j++){if(K3 == 0)  break;P1 = FFW[j];DelayMS(100);}}
}void SETP_MOTOR_REV(uchar n)
{uchar i,j;for(i=0;i<5*n;i++){for(j=0;j<8;j++){if(K3 == 0)    break;P1 = REV[j];DelayMS(25);}}
}void main()
{uchar N = 1;while(1){if(K1 == 0)//正转{P0 = 0xfe;SETP_MOTOR_FFW(N);if(K3 == 0) break;}else if(K2 == 0)//反转{P0 = 0xfd;SETP_MOTOR_REV(N);if(K3 == 0) break;}else//停止{P0 = 0xfb;P1 = 0x03;}}
}

步进电机速度测试(用延迟进行调速)+按键控制+数码管显示延迟时间


上图有点杂乱,下面代码只用到:数码管,AT89c51芯片,步进电机,ULN2003A驱动,按键

#include "main.h"
#include <intrins.h>
#include "Stepper motor.h"unsigned int Sec_5=0,Sec_4=0,Sec_3=0 ,Sec_2 = 0,Sec_1 = 0,Sec_0=0;//千百十个位数字
code unsigned char table[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
code unsigned char chage[] = { 0xfe,0xfd,0xfb,0xf7,0xef,0xdf };//2-7位//显示位{}
//主函数                         0     1     2    3   4   5    unsigned int c = 0;//位数刷新
unsigned int cnt = 0;//数码管刷新时间
unsigned long int time = 1;//电机转动延迟时间
unsigned int num ;
unsigned int Sec = 0;//时间单位,秒
unsigned int mode = 1;//按键模式(正转)//**********************************************************
//主函数
//**********************************************************
void main()
{Init_Timer0();while(1){scan_key();//按键扫描if(mode==0)Phase_B();if(mode==1)Phase_A();if(mode==2)move=0x03;//复位delay_10um(time);}
}//****************************************************
//初始化定时器1
//****************************************************
void Init_Timer0()
{TMOD = 0X01;          //T0, 工作模式1TH0 = (65536 - 10000)/256;TL0 = (65536 - 10000)%256;TR0 = 1;              //开启定时器ET0 = 1;                //开启定时器中断EA = 1;                   //开启总中断
}//*****************************************************
//中断函数
//****************************************************
void Timer0() interrupt 1
{TH0 = (65536 - 1000)/256;//1ms  定时  模式1非自动重装需要手动重装再次定时TL0 = (65536 - 1000)%256;//刷新显示 c个位Sec++;cnt++;num=time;
//数据处理Sec_0 =  num%10;Sec_1 = num/10%10;Sec_2 = num/100%10;Sec_3 = num/1000%10;Sec_4 = num/10000%10;Sec_5 =   num/100000;
//每1000us*10=10ms刷新一次if(cnt==10){cnt=0;SEG_DATA=0x00;delay_10um(10);COM0=chage[c];    switch(c){case 5:SEG_DATA=table[Sec_0];break;//显示万位case 4:SEG_DATA=table[Sec_1];break;//显示千位case 3:SEG_DATA=table[Sec_2];break;//显示百位case 2:SEG_DATA=table[Sec_3];break;//显示十位case 1:SEG_DATA=table[Sec_4];break;//显示个位case 0:SEG_DATA=table[Sec_5];break;//显示单位default:break;}c++;if(c==6)c=0;}//1000*1ms=1s刷新一次
if(Sec==1000)//这个判断必须有,也不能在其他地方,不然不能刷新显示!!!我也不清楚,调试了好久{Sec=0;  //num++;  测试数码管显示,每1s数字加1}
}
//*******************************************************************************
//按键扫描
//*******************************************************************************
void scan_key()
{//-------------------------------------------------//电机正转if(key1==0)//正转{mode=1;}
//  while(key1==0);//-------------------------------------------------//电机反转if(key2==0)//反转{mode=0;}
//  while(key2==0);//-------------------------------------------------//电机停止if(key3==0){mode=2;}while(key3==0);//-------------------------------------------------//转速调控if(key4==0){time-=1;delay_10um(10);if(time==-1)time=100;
//      num++;
//      if(num==3)
//          num=0;
//    switch(num)
//               {//                   case 0:time=100;break;
//                   case 1:time=300;break;
//                   case 2:time=50;break;
//               }}
//      while(key4==0);//-------------------------------------------------}//延时n毫秒
void Delay_ms(unsigned int n)
{unsigned int i=0,j=0;for(i=0;i<n;i++)for(j=0;j<123;j++);
}//延时10*n微秒
void delay_10um(unsigned int n)
{while(n--);
}

main.c头文件

#ifndef __MAIN__H__
#define __MAIN__H__#include <reg51.h>
#define COM0 P0
#define SEG_DATA P2sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;//函数声明
extern void Delay_ms( unsigned int m);
extern void delay_10um( unsigned int n);
extern void Init_Timer0();
extern void scan_key();
extern void forward();//extern void Phase_B();
//extern void Phase_C();
//extern void Phase_D();
extern unsigned long int time;#endif

下面是步进电机控制程序,每执行一次,转一个指定的角度

#include "Stepper motor.h"unsigned int a= 0;
unsigned char code right[8]={0x03,0x02,0x06,0x04,0x0c,0x08,0x09,0x01,}; //顺时针A-AB-B-BC-C-CD-D-DA  方法四使用void Phase_A()//正转
{//方法一
//    switch(cnt)
//      {//      case 0: move=0x01;break;
//      case 1: move=0x03;break;
//      case 2: move=0x02;break;
//      case 3: move=0x06;break;
//      case 4: move=0x04;break;
//      case 5: move=0x0c;break;
//      case 6: move=0x08;break;
//      case 7: move=0x09;break;
//      default:break;
//      }
//      cnt++;
//      if(cnt==8)
//          cnt=0;
//方法二
//   for(;a<8;a++)//方法三
//      move=0x01<<a++;
//    if(a==4)a=0;
//
//方法四move=right[a++];if(a==8)a=0;
}void Phase_B()//反转
{move=right[a--];if(a==-1)a=7;
}

Stepper motor.h头文件

#ifndef __STEPPER MOTOR__H__
#define __STEPPER MOTOR__H__#include <reg51.h>#define move P1
extern void Phase_A();
extern void Phase_B();//extern void delay_ms( unsigned int m);#endif

步进电机+protues相关推荐

  1. 51单片机控制步进电机Protues仿真设计

    一.概述 1.1步进电机简介 步进电机(Stepper Motor)是一种将电信号转换为机械运动的电动机,是一种专用于精密控制的电机.一般步进电机运行稳定,并且精度较高,因此常用于精密仪器.自动化设备 ...

  2. 74HC245_键盘与8段数码管共有一个IO口_控制步进电机【Protues】

    完成功能: 数码管显示 '键盘输入角度-实际运动角度-运动状态-速度等级'初始显示 "Ent Act P 3" 键盘控制 步进电机 左转 右转 暂停 加减速 键盘输入0~9 ENT ...

  3. 51单片机的步进电机控制系统(仿真+程序+报告+原理图)

    1.主要功能 该系统由AT89C51单片机+数码管模块+步进电机模块+按键模块构成. 可实现功能: 1.按键控制步进电机正反转.加减速.停止: 2.2个发光二极管显示正反转,1位7段LED数码管显示当 ...

  4. 遥控51单片机控制42步进电机(TB6600驱动)控制方向、速度

    遥控51单片机控制步进电机控制方向.速度 控制开发板自带步进电机 遥控控制 控制42步进电机 大二在做srtp时做到了这部分内容,感觉C51控制起来挺简单的,之后有做关于MSP430的魂斗罗游戏和st ...

  5. stm32f302实现斩波控制步进电机_什么是步进电机控制器?

    在工业控制中难免会用到步进电机,步进电机如何控制,步进电机的速度.方向.驱动电流等等改如何设置,这就需要用到步进电机控制器,那么什么是步进电机控制.步进电机控制器与步进电机驱动器有什么区别.步进电机控 ...

  6. python控制电机_利用树莓派控制步进电机——Python语言

    步进电机的优点在于它能够被精确定位,正向或反向一次性转动"一步",并且也能够连续转动. #!/usr/bin/env python ######################## ...

  7. python 步进电机_【Applied Motion Products】伺服电机|步进电机也可以python编程啦

    EV编辑部 近期Applied Motion Products提供了一套免费Python电机编程库.用户可以很方便的使用Python对伺服电机和步进电机进行控制. ·建立Python应用程序和运动控制 ...

  8. 蓝牙模块hc05原理图_使用步进电机和Android App的蓝牙控制迷你升降机

    背景知识视频教程 使用App Inventor创建Android应用​viadean.com Arduino微控制器:学习Arduino制作项目 - 国外课栈​viadean.com Arduino ...

  9. 微型计算机步进电机控制,步进电机的微型计算机控制

    步进电机的微型计算机控制 维普资讯 http://doc.xuehai.net 第 5期 20 0 7年 5月 山西焦煤科技 S a x o ig C a ce c& T c n l g h ...

最新文章

  1. 碉堡的小程序:用 Python 制作演示迷宫算法的 gif 动画
  2. 点在多边形内算法,C#判断一个点是否在一个复杂多边形的内部
  3. Java高级工程师实战经验图谱
  4. PAT1047 编程团体赛 (20 分)
  5. efcore技巧贴-也许有你不知道的使用技巧
  6. JAVA知识基础(二):基本语法
  7. Android——build.prop 解析
  8. Redis事务和分布式锁
  9. 27.将 VMware 服务器上的虚拟机备份到 Azure(上)
  10. QDebug输出彩色消息
  11. 安装计算机的更新每次更新失败,win7电脑自动更新失败怎么办,电脑自动更新失败解决方法...
  12. exchange无法收发邮件_MAPI session超过Exchange最大限制,邮件发送失败的终极解决方法...
  13. 诺诺开放平台(电子发票、智能编码、发票查验接口调用)
  14. 创意无价,优化 百度、Bing、Duckduckgo 三大国际搜索引擎
  15. php实现按一下button显示的数字加1_24h只能加一次,javascript - 连续点击按钮后,数据如何不会累加显示?...
  16. iPhone信号太差?学会这三招,信号差也能瞬间满格!
  17. 淘宝新上架的产品如何在站内SEO优化
  18. T480s安装Ubuntu16
  19. 记账的优缺点分析 聊聊记账这些事
  20. FreeModbus开源协议简介

热门文章

  1. pyhon 函数 输入输出
  2. 2019-2020-2 20175227张雪莹《网络对抗技术》 Exp1 PC平台逆向破解
  3. 【5. ROS机器人的运动控制】
  4. 【老生谈算法】matlab实现图像压缩算法源码——图像压缩
  5. 凤舞丹心东方美,中华才女竞风采 ——黛兰娜杯《中华才女大赛》七月汇演
  6. 【狮子数学】chapter6-05-阿贝尔定理(第99讲)
  7. Heavy Transportation(Dijkstra算法)
  8. POJ 1417 True Liars (种类并查集+DP)
  9. CaEGCN: Cross-Attention Fusion based Enhanced Graph Convolutional Network for Clustering 2021
  10. Android NDK thread 回收crash, signal 4 (SIGILL), code 1 (ILL_ILLOPC) , fault addr 地址