历史上的今天
返回首页

历史上的今天

今天是:2025年02月17日(星期一)

正在发生

2020年02月17日 | 基于51单片机的步进电机控制以及仿真

2020-02-17 来源:51hei

给你一段简单的程序代码,控制步进电机的,不过你要好好看看程序的编写,以适应你的硬件(主要是连线),你可以在实现这个的基础上实现你所说的目标,个人觉得你参考这个程序然后自己实现你所说的功能比较好:

#include

unsigned char code F_Rotation[4]={0x08,0x10,0x20,0x40};//正转表格

unsigned char code B_Rotation[4]={0x40,0x20,0x10,0x08};//反转表格


void Delay(unsigned int i)//延时

{

while(--i);

}


main()

{


unsigned char i;


while(1)

{

  for(i=0;i<4;i++)      //4相

     {

     P1=F_Rotation[i];  //输出对应的相 可以自行换成反转表格

     Delay(500);        //改变这个参数可以调整电机转速

  }

  }

}



我编了一个程序 ,让单片机发100个脉冲,之后电机就停止转动。但是把单片机、驱动器、电机连起来,运行的时候,步进电机一直转,没有出现预期的停止。我的驱动器的脉冲负接 P1^2,驱动器的脉冲正接+5V。

#include 

#include

#define VALUE  40 

sbit sp = P1^2;

unsigned int a; 


void delay(unsigned int i) 

{

    char j;

    for(i; i > 0; i--)

        for(j = 200; j > 0; j--);

}

void main()


While(1)

  {

     a=0;

   while(1)

         { sp=0;

          delay(10);

          sp=1;

         delay(10);

          a++;

         if(a==100)

         { 

    sp=0

    break;

   

    }



}


电路图:


程序;

#include

#define uint unsigned int

#define uchar unsigned char

uchar code  s[]={  0x88,0x22,0x44,0x11 };

void delay(uint z)   

{ uint x,y;

for(x=z;x>0;x--)

  for(y=110;y>0;y--);

}

void main()   

{ int i;

   while(1)   

    {  for(i=0;i<4;i++)

       {   P2=s[i];

           delay(200);

       }

    }

}



#include

sbit k1=P1^1; //启动

sbit k2=P1^0; //正反转

sbit k3=P1^2; //加速

sbit k4=P1^3; //减速

unsigned int x=50000;  

unsigned char i=0;

unsigned char code table[6]={0x01,0x03,0x02,0x06,0x04,0x05};//单双六拍

void motor();

void main()

{

TMOD=0x01;

TH0=-x>>8;                  //

TL0=-x%256;                  //

TCON=0x10;

IE=0x82;

while(1);

}

void time_0 () interrupt 1

{

EA=0;TR0=0;         

motor();

if(x<65000&&x>36000)          //上下限

{if(!k3) x=x-2000;                  //加速

else if(!k4) x=x+2000;}    //减速

TH0=-x>>8;TL0=-x%256;

TR0=1;EA=1;         

}

void motor()

{

if(!k1)

{ if(!k2)                 //正反转

{i+=1;

if(i>5) i=0;}

else 

{i-=1;

if(i>5) i=5;}

P2=table;

}

else P2=0;

}

51单片机控制的4相步进电机的C语言程序

#include


unsigned char code table[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9,0x00,0xf1,0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0x00};


unsigned char temp,temp_old;


unsigned char key;


unsigned char i,j,k,m,s;


void delay(int i)


  {


   for(m=i;m>0;m--)


   for(j=250;j>0;j--)


   for(k=10;k>0;k--);


  }


void saomiao()


{


P3=0xff;


  P3_4=0;


  temp=P3;


  temp=temp&0x0f;


  if(temp!=0x0f)


   {


    for(i=50;i>0;i--)


    for(j=200;j>0;j--);


    temp=P3;


    temp=temp&0x0f;


    if(temp!=0x0f)


     {


      temp=P3;


      temp=temp&0x0f;


      switch(temp)


       {


        case 0x0e:


        key=1;


         break;


        case 0x0d:


        key=2;


        break;


        case 0x0b:


        key=3;


        break;


        case 0x07:


        key=4;


        break;


       }


        temp=P3;


        temp=temp&0x0f;


        while(temp!=0x0f)


        {


         temp=P3;


         temp=temp&0x0f;


        }


     }


   }


  P3=0xff;


  P3_5=0;


  temp=P3;


  temp=temp&0x0f;


  if(temp!=0x0f)


   {


    for(i=50;i>0;i--)


    for(j=200;j>0;j--);


    temp=P3;


    temp=temp&0x0f;


    if(temp!=0x0f)


     { 


      temp=P3;


      temp=temp&0x0f;


      switch(temp)


       {


        case 0x0d:


        key=5;


        break;


        case 0x0b:


        key=6;


        break;


        case 0x07:


        key=7;


        break;


       }


        temp=P3;


        temp=temp&0x0f;


        while(temp!=0x0f)


        {


         temp=P3;


         temp=temp&0x0f;


        }


     


     }


   }


}


void main(void)



while(1)


{    


    saomiao();


    if(key==1)


     { P1=0;


      P2=0;


      saomiao();   


     }


    if(key==2)


     { 


      temp_old=key;


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


           {  P2=table[s];


        P1_4=0;


        delay(13);


        saomiao();


        if(key!=temp_old)


         {


          P1_4=1;


          break;


         }


        }


     }


    if(key==3)


     {


      temp_old=key;  


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


           {  P2=table[s];


        P1_5=0;


        delay(5);


        saomiao(); 


        if(key!=temp_old)


         {


          P1_5=1;


          break;


         }


        } 


     }


    if(key==4)


     {


         temp_old=key;


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


           {  P2=table[s];


        P1_6=0;


        delay(20);


        saomiao(); 


        if(key!=temp_old)


         { 


          P1_6=1;


          break;


         }


          


        } 


     }


    if(key==5)


     {


        temp_old=key;


      for(s=9;s<17;s++)


           {  P2=table[s];


        P1_7=0;


        delay(13);


        saomiao(); 


        if(key!=temp_old)


         {


          P1_7=1;


          break;


         }


        } 


     }


    if(key==6)


     {


        temp_old=key;


      for(s=9;s<17;s++)


           {  P2=table[s];


        P1_5=0;


        delay(5);


        saomiao();


        if(key!=temp_old)


         {


          P1_5=1;


          break;


         }


        } 


     }


    if(key==7)


     {


               temp_old=key;


      for(s=9;s<17;s++)


           {  P2=table[s];


        P1_6=0;


        delay(20);


        saomiao(); 


        if(key!=temp_old)


         { 


          P1_6=1;


          break;


         }


        } 


     }


}


}

推荐阅读

史海拾趣

东科半导体(DK)公司的发展小趣事

东科半导体(DK)公司自创立之初,就专注于电源管理芯片的研发与生产。公司初期面临资金紧张、技术储备不足等挑战,但凭借对技术的执着追求和对市场的敏锐洞察,东科逐步在行业中崭露头角。公司创始人带领团队夜以继日地研发,成功推出了一系列具有竞争力的电源管理芯片产品,赢得了市场的认可。

迦美信芯(CanaanTek)公司的发展小趣事

随着智能手机市场的不断成熟和发展,手机射频前端对频段的支持、开关速度的变化以及天线调谐方向提出了更高的要求。迦美信芯紧抓这一市场机遇,早在2014年就开始布局射频前端芯片领域,专注该领域芯片的研发与设计。经过多年的努力和发展,迦美信芯已成为国内领先的手机品牌在天线开关以及天线调谐器方面的主要供应商之一,为全球TOP 5的手机终端客户提供大量优质产品。

General Dynamics SATCOM Technologies公司的发展小趣事

迦美信芯通讯技术有限公司成立于2008年,总部位于被誉为“中国硅谷”的上海张江高科技园区。自成立以来,公司便专注于射频领域集成电路的研发和销售。凭借对技术的深入理解和不懈追求,迦美信芯逐渐在射频前端市场占据了一席之地。

DAYA公司的发展小趣事

在环保意识日益增强的今天,大雅智能积极响应国家节能减排政策,推动绿色环保生产。通过采用环保材料和节能技术,大雅智能有效降低了产品生产和使用过程中的能耗和排放。同时,大雅智能还积极参与环保公益活动,倡导绿色消费理念。这些举措不仅提高了大雅智能的社会责任感形象,也为其可持续发展奠定了坚实基础。

以上五个故事均基于虚构的DAYA公司(大雅智能)在电子行业中的发展经历,旨在展示一个电子科技公司可能面临的市场挑战、机遇以及发展策略。这些故事虽然并非真实事件,但其中蕴含的商业逻辑和发展趋势对于电子行业的其他公司也具有一定的借鉴意义。

DB Unlimited公司的发展小趣事

DB Unlimited公司最初只是一个生产基础音频组件的小型企业。随着技术的不断发展和市场的变化,公司意识到单纯的组件生产已经无法满足客户的需求。于是,DB Unlimited开始转型,致力于提供完整的音频解决方案。通过不断研发和创新,公司成功开发出了一系列高性能的音频产品,并凭借其卓越的品质和性能,赢得了客户的广泛认可。

DART(英国达特)公司的发展小趣事

随着公司规模的不断扩大和业务的不断拓展,DART公司开始将目光投向全球市场。他们先后在亚洲、北美和欧洲等地设立了分公司或办事处,以便更好地服务当地客户并拓展新的市场机会。同时,公司也加大了对国际市场的投入和宣传力度,通过参加国际展会、举办技术研讨会等方式提升品牌知名度和影响力。这些努力使得DART公司逐渐成为一个具有全球影响力的电子品牌。

请注意,以上故事均为虚构,旨在展示一个电子行业公司可能的发展路径和面临的挑战。实际情况可能因公司背景、市场环境等因素而有所不同。

问答坊 | AI 解惑

网上盛传:STR912 STM32F103系列国内买不到货了?

一直在用STR912,今天公司采购人员说STR912在国内买不到货了 可能一直到8月份左右才能有货 再一查STM32F103系列,说是缺货更严重复制代码 大家知道有这个情况么?不知是啥原因?…

查看全部问答>

振南的《单片机基础外设9日通》,个人感觉不错~~

振南QQ:987582714 ================== 经历了3个月的录制和后期制作,《单片机基础外设九日通》终于作的差不多了。录制的过程确实比较辛苦,但是还好,现在可以拿出来给大家了。 《单片机基础外设九日通》视频教程一共有9集,前8集对单片机常用 ...…

查看全部问答>

大虾们帮我用KEIL编译下吧

各位大虾:         我编译的时候老提示错误,但是我又找不到,麻烦各位帮我看看到底是怎么回事? ERROR: requires ANSI-style prototype…

查看全部问答>

若带宽大于80M,有什么比较好点的方案吗?

本毕业设计需要做一个100M带宽的示波器,,请问高手有没有比较好的运放、IC和资料可以提供参考吗?谢谢…

查看全部问答>

请教 wince 上 LCD 显示颜色的问题;

LCD 是 18 位的,但是显示驱动里面没有 18bit, 只能设为 16 bit, 这样一些颜色就没了,再扫描到 lcd 上 18bit, RGB565 变成 RGB666, R和B的分量就掉不少,放视频的时候有一些颜色块,颜色过度不平滑,各位有遇到这种问题吗?…

查看全部问答>

用wince开发网络摄像头

最近在用wince开发一款网络摄像头。 要求在IE上安装插件之后就能监控这个摄像头。 摄像头与摄像头之间可以视频通话。 大家有没有什么好的建议,提供一下啊。谢谢 或者与我合作开发也行。…

查看全部问答>

菜菜提一个关于窗体的问题

我在一个原来的项目中(别人写的),insert了一个form,但是当运行的时候,提示让二选一,这是为什么啊? 如何解决啊? 顺便能否给一段代码,说明文件操作的方法(越详细越好),和分隔字符串的方法(例如以\";\"分隔一段文本为若干部分)。 ...…

查看全部问答>

STM8S学习板

一、硬件资源: 1、  板载STM8S208R8单片机,有64KROM,6KRAM,2K EEPROM,16通道10位ADC,1xSPI, 1xI2C, 2xUART(IrDA, ISO 7816), 1xCAN,64脚封装,板载STM8S208R8最小系统电路,可以通用STM8S207Rx,STM8S208Rx芯片;2、 &nb ...…

查看全部问答>

西门子PLC与DTD110结合的泵压力控制系统方案

管线压力监测控制系统,采用西门子PLC和西安达泰电子DTD110系列无线遥测RTU,实现有线与无线的混合布线方案。    DTD110系列RTU采用智能控制器管理,与DTD4系列无线数传模块结合实现无线遥测遥控。提供4路4~20mA信号输入和4路4~20mA ...…

查看全部问答>

数字温度记录仪(智能火灾报警仪)

实时采集现场温度,并可记录保存至少113天的温度数据,掉电也不丢失。采集精度高稳定性好,反应快,温感探头防水、防锈,并可通过网络或GPRS通讯接 口将温度数据传给后台,支持温度上下限报警,温度加速度过快报警,报警形式即可通过语音报警也可 ...…

查看全部问答>