历史上的今天

今天是:2024年11月19日(星期二)

2019年11月19日 | 51单片机实现三相六拍的步进电机控制

发布者:huijiazi5210 来源: 51hei关键字:51单片机  三相六拍  步进电机控制 手机看文章 扫描二维码
随时随地手机看文章

单片机源程序如下

#include      

    

#define uchar unsigned char

#define uint  unsigned int

uint speed = 100;                                                //初始转速

uint max = 200;                                                        //最慢转速

uint min = 20;                                                        //最快转速


sbit swich = P2^0;                                           //总开关

sbit dir = P2^1;                                        //电机旋转方向

sbit le1=P2^6;

sbit le2=P2^7;

sbit speedadd=P3^2;

sbit speedsub=P3^3;                                   


unsigned char uca_MotorStep[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};    //励磁电流数组。

                                                                                                             


uchar leddata[]={ 


                0x3F,  //"0"

                0x06,  //"1"

                0x5B,  //"2"

                0x4F,  //"3"

                0x66,  //"4"

                0x6D,  //"5"

                0x7D,  //"6"

                0x07,  //"7"

                0x7F,  //"8"

                0x6F,  //"9"

                0x40,  //"-"

                0x00,  //熄灭

                         };



void delay1ms(void)   //误差 0us

{

    unsigned char a,b,c;

    for(c=1;c>0;c--)

        for(b=142;b>0;b--)

            for(a=2;a>0;a--);

}


void delay(uint x )                          //多功能毫秒延时

{

    uint i;

        for(i=0;i        {

          delay1ms();

        }

}




void display(void)

{        

  if(swich==1)

  {

                   P0=        leddata[11];

                delay(1);

                le2=1;

                le1=1;

                delay(1);

                le2=0;                

                le1=0;


  }        

  else

  {

  if(dir==1)

                {

                P0=        leddata[11];

                delay(1);

                le2=1;

                delay(1);

                le2=0;

                }

        else

            {

                P0 =leddata[10];

                delay(1);

                le2=1;

                delay(1);

                le2=0;

                }  


        P0=leddata[9-(speed-20)/20];

        delay(30);

        le1=1;

        delay(5);

        le1=0;

                   

}        

}



void Init_INT0()

{

EX0=1;    //开启外部中断 0

IT0=1;          //设置成低电平触发,1为下降沿触发

EX1=1;    //开启外部中断 1

IT1=1;          //设置成低电平触发,1为下降沿触发

EA=1;   //开启总中断

}


void Interrupt0_handler() interrupt 0

{

    EA=0;   //首先关闭总中断,以消除按键出现的抖动所产生的干扰

    delay(20); //同样是为了消除抖动而产生新的中断

    if(speed>min)

       {speed=speed-20;}        //限制最快转速

        else

                {speed=min;}

        while(speedadd==0);

    EA=1;            //恢复中断

}



void Interrupt1_handler() interrupt 2

{

    EA=0;   //首先关闭总中断,以消除按键出现的抖动所产生的干扰

    delay(20); //同样是为了消除抖动而产生新的中断

    if(speed       {speed=speed+20;}

        else

                {speed=max;}         //限制最慢转速

        while(speedsub==0);

    EA=1;            //恢复中断

}


void main()

{

int i;                                   //初始化

dir=1;

le1=0;

le2=0;



start:

if(swich==0)

     {Init_INT0();}                  //总开关开启,初始化中断,开始转动

   else

         {display(); goto start;        }



        if(dir==1)

  seq:

        { 

          while(1)

          {         

             display();

                 for (i=0; i<8; i++)    

                {

                  P1 = uca_MotorStep[i];         //取数据

                  delay(speed);            //调节转速

                }

                 if(dir==0)                                                         //是否换向

                    {

                        delay(5);                                                 //        换向延时

                        goto oppo;                                                 //换向

                        }

                if(swich==1)                                                 //总开关运行中关闭

                   goto start;                                                 //等待开启

         

          } 

         

        }

        else

        oppo:

……………………



关键字:51单片机  三相六拍  步进电机控制 引用地址:51单片机实现三相六拍的步进电机控制

上一篇:89c52单片机仿真ILI9341液晶屏驱动程序
下一篇:最后一页

推荐阅读

Maxim Integrated Products, Inc (NASDAQ: MXIM) 宣布推出三款模块化高度集成模拟IC,帮助设计者为日益小型化的电子系统提供更高的效率和性能。MAX41464 sub-1GHz无线发送器、MAX38888备用电源稳压器和MAX16141 36V逻辑“或”FET控制器,广泛用于楼宇自动化、工业、汽车和便携式应用。上述产品将于11月13日至16日亮相2018慕尼黑电子展。 MAX41464...
据外媒报道,当地时间11月18日,汽车安全系统全球领导者奥托立夫(Autoliv)宣布,研发了一款新型前排中央安全气囊(front center airbag),以在发生侧面碰撞事故时,挽救乘员生命。当地时间11月19日,该款安全气囊将在犹他州奥格登技术中心举行的奥托立夫资本市场日(Capital Markets Day)上展出。(图片来源:奥托立夫)在任何道路碰撞事故中,头...
以“芯随心动,智能互联”为主题的2020年英特尔杯大学生电子设计竞赛嵌入式系统专题邀请赛(以下简称“英特尔嵌入式大赛”)圆满落下帷幕,获奖名单已于今日公布。本届大赛共有来自89所大学的140支队伍参赛,大赛共收到132份创新应用作品。经过参赛团队的线上实时演示以及各分赛区和全国专家组的评选,共决出了一等奖8支队,二等奖16支队,三等奖35支队。...
今(18)日,2021(第十三届)传感器与MEMS产业化技术国际研讨会(暨成果展)于厦门海沧正式召开。厦门半导体投资集团有限公司董事总经理王汇联发表了以《问题导向——探寻中国半导体产业发展之路》为主题的演讲。王汇联指出,新冠疫情蔓延对全球的影响非常大,暴露了全球脆弱的产业链、供应链,不过从另一个方面来说,让老百姓普遍认识到半导体是一个关乎...

史海拾趣

问答坊 | AI 解惑

求教nanosim仿真

小弟在用nanosim做功耗分析,用的是caliber xRC题取得网表,可我载网表文件中找不到block 和 node 对应的是什么? 似乎网表中并没有什么block啊 , node 又是指的什么?是需要自己指定node 名字吗?…

查看全部问答∨

达芬奇技术简介

TI 的 DaVinci™ 技术是一组专门为高效和引人注目的数字视频而设计的基于 DSP 的系统解决方案 – 适用于数码摄像机、视频安全设备、高级医疗成像设备、便携式视频播放器或任何其它您能想象得到的视频应用。   成功实现数字视频需要四大要素 ...…

查看全部问答∨

嵌入式十三法则

1 资源有限性法则     嵌入式计算不仅需要网络快速、一致的计算,而 且也要求系统能够井然有序地将其执行代码和数 据,存储在一个“ 共同” 的“ 狭小” 的空间内。 2 鲁棒性法则     嵌入式计算不仅要求系统迅速而有效的计 ...…

查看全部问答∨

数字频率合成器的FPGA实现

摘要: 介绍了DDFS的原理和Altera公司的FPGA器件ACEX 1K的主要特点,给出了用ACEX 1K系列器件EP1K10TC144-1实现数字频率合成器的工作原理、设计思路、电路结构和仿真结果。 关键词: DDFS;FPGA;快速通道互连;仿真 1 概述 1971年, ...…

查看全部问答∨

新手学FPGA的好视频(欢迎一起交流)

[qq]312439136[/qq] http://group.ednchina.com/1375/32390.aspx 这真的是一个不错的网站,想学FPGA的朋友可以去看看。。。祝大家学得开心!!!…

查看全部问答∨

开发模拟语音卡的问题(深圳飞环FI3208型号的语音卡)

我想请问大家一下这个问题: 现在有一个4路的模拟语音卡.先由A打电话给B.但是B的电话全部都在通话中.但是.过30-40秒的时候.B的电脑面前会谈出一个对话框.提示A在打电话找B.这种情况该如何处理..麻烦大家告诉我一下.在Delphi的环境下. 还有这样一个 ...…

查看全部问答∨

如何对嵌入式CPU进行性能测试?

麻烦请提供测试方法及基本测试原理? 目前有A、B两款嵌入式设备,其主要参数如下: A款: CPU: Arca-GT2000 主频:330MHz 文件系统:yaffs B款: CPU:IXP425      主频:266MHz 文件系统:reiserfs 1、两者,采用不同的 ...…

查看全部问答∨

希望大虾们能来帮帮忙啊!!!

小弟现在想实现下面的一个控制(C语言):有三组开关,每组三个开关,第一组开关任意一个闭合,那么1号灯立刻亮,延时5秒4号灯亮;                         &n ...…

查看全部问答∨

wince驱动输出信息

我在编译一个键盘驱动的时候提示了这个错误。 1>d:\\我的文档\\visual studio 2005\\projects\\userkey v1\\userkey v1\\Pkfuncs.h(940) : error C2061: 语法错误 : 标识符“LPDBGPARAM” 我双击后定位在 BOOL SetDbgZone(DWORD dwProcid, LPV ...…

查看全部问答∨

关于AD采集在运行一段时间数据不再更新的问题

最近做了个项目出了,需要与一个串口设备进行通讯,并且采集7路AD,结果运行一段时间后,串口还在工作,AD数据却不更新了,那位大哥知道这是什么问题啊?? 下面是我的程序: #include <MSP430x14x.h> // Standard Definition Contro ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

更多每日新闻

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved