登录
首页 单片机论坛
回帖 发帖
正文

主题:求51单片机控制三相步进电机

点击:2139 回复:3

毕业设计:   求用8051单片机C语言编程控制三相步进电机(转速,方向,起停).用在研华工控机上的
cjbmwz@163.com
06-05-15 16:51
三相六拍的
06-05-15 17:01
毕业设计:   51单片机控制三相步进电机智能驱动,程序控制三相六拍输出,有过流保护功能,电流小于十安,低压驱动VMOS管,
能不能给我一份?真诚感谢!
dahai85@163.com.cn
07-03-21 11:10
应该不难吧。看看我这个电位器调速的。参考一下。
#include

#define uchar  unsigned char
#define uint   unsigned int
#define ulong  unsigned long
__CONFIG(XT&UNPROTECT&PWRTEN&BORDIS&WDTEN);
union {
     struct {
        unsigned b0:1;
        unsigned b1:1;
        unsigned b2:1;
        unsigned b3:1;
        unsigned b4:1;
        unsigned b5:1;
        unsigned b6:1;
        unsigned b7:1;
        }tpBit;
       unsigned char tpBits;
      } tp;
#define bj0  tp.tpBit.b0
#define bj1  tp.tpBit.b1
#define bj   tp.tpBits  
const  unsigned char table[]={ 0x60,0x30,0x90,0x0C0, };
const  unsigned char tablef[]={0x0C0,0x90,0x30,0x060, };
   

uchar  i;
///////AD 延时子程序////////////////
void  ADdelay (uchar i)
{  
 while(i--) ;
}    
/////// 延时子程序////////////////
void delay(uint i)
{  
 while(i--)
 {
   uchar a=127;
    while(a--);
 }
 
}    

////系统 各I/O初始化子程序////////////////////
void  initial (void)
{   TRISB=0;
   //TRISC=0;
   TRISA=0x0ff;
}
///////A/D转换初始化子程序/////////////////////
void  adinitial()
{
       ADCON1=0;//;设置RA为A/D甬道模拟输入
                  //;RC时钟。打开A/D转换器。先中通道0
      ADCON0=0x0c1;// B'11000001'   // ;A/D时钟为RC。RA0作A/D输入等
              // ADIE=1; //时。开放中断
      ADIF=0; //清/AD中断标志位   PIR1,
              //  PEIE=1; //开放外围部件中断INTCON,
              // GIE=1;   //开放总中断   INTCON,
      TRISA0=1;
      TRISA1=1;
}

//////////////////////////A/D转换/////////////////////////////////////////////////////////
void  AD_ad()
{
        ADCON0=0x0c1;   // B'11001001'   // ;A/D时钟为RC。RA0作A/D输入等
       
        ADdelay(3);//采样时间30us
        ADGO=1;      //启动A/D转换 ADCON0,
        while(ADGO); //等待
 }
 
////////////////主程序///////////////////
void main()
 {
       initial ();  //系统 各I/O初始化子程序
       adinitial();  //A/D转换初始化子程序
       i=250;
      while(1)
      {
          unsigned char   c;
       
        for(c=0;c<4;c++)
             {
              if(bj0)PORTB=table[ c] ;      
          else   PORTB=tablef[ c] ;      
               CLRWDT();
                AD_ad();
               delay(ADRES );
         }
            i--;
             while(i==0)
              {
                i=250;bj0=!bj0;
              }
        }
  }
07-03-23 08:06

工控新闻

更多新闻资讯