发 帖  
原厂入驻New

[经验] 请问Proteus仿真软件伺服电机步进电机如何接线?

2020-4-26 21:36:11  553 proteus 伺服电机
分享
0
1、伺服电机引脚如何仿真接线,再此就不介绍伺服电机此处只介绍三个引脚的仿真元件以及在仿真中如何用的,仿真中伺服电机分为三个引脚如图所示电源,接地,数据引脚。如图所示,程序可以通过定时器模拟pwm脉冲输出控制。
2、步进电机此处仿真采用4相6线制,图中标识的a,b供电其余四个引脚分别是a,b,c,d通过对a,b,c,d时序编程即可。此处只是介绍在仿真中的接线用法,
3,此处本人简单的改了一个代码可以采用5个按键控制伺服电机转和步进电机转,
代码仅此验证仿真中的伺服电机和步进电机接线正确是可以转的,代码是本人简单的改的,主要是分享伺服电机和步进电机的接线方法,大佬勿喷
/**************************************************************************************
*???????
??????
P3^2; //-????-//
P3^3; //-????-//
P2^0; //????//
P2^1; //?????//
P2^2; //-??-//
?????????K1~K8????????,????????????OK~                     
***************************************************************************************/
#include "reg52.h"    //??????ж????????????Щ??????????
#define uint  unsigned int  //?????????.
#define uchar unsigned char
sbit pwm1 = P3^7; //???
//-----???????IO-----//
sbit MOTOA = P2^0;
sbit MOTOB = P2^1;
sbit MOTOC = P2^2;
sbit MOTOD = P2^3;  
//-------????IO-------//
sbit KEYDOWN = P3^3; //????
sbit KEYUP  = P3^2; //????
sbit KEYSHUN = P1^0; //????
sbit KEYNI  = P1^1; //?????
sbit KEYSTOP = P1^4; //??
//------?????IO------//
sbit LSA=P2^5;
sbit LSB=P2^6;
sbit LSC=P2^7;
//------????????------//
uint SPEED  = 500; //???
uchar Direction = 0; //??

unsigned int target =12,percent = 0;  //???
unsigned char code Disp_Tab[ ] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71,0x40} ; /*('0'~'F''-')?С????*/  
void Timer0Initial();  
void initial_Timer();  
/*******************************************************************************
* ?? ?? ??         : delay
* ????????     : ?????????i=1?????????10us
*******************************************************************************/
void delay(uint i)
{
while(i--);
}

void Motor()
{
char i;
unsigned char Motor_Data[]={0XFB,0XFE,0XF7,0XFD};//4??//
IF(Direction==1) //???
  for(i=0; i<4; i++)
  {
   MOTOA = (Motor_Data&0X01);
   MOTOB = (Motor_Data&0X02);
   MOTOC = (Motor_Data&0X04);
   MOTOD = (Motor_Data&0X08);
   delay(SPEED);
  }
else if(Direction==2) //???
  for(i=4; i>0; i--)
  {
   MOTOA = (Motor_Data&0X01);
   MOTOB = (Motor_Data&0X02);
   MOTOC = (Motor_Data&0X04);
   MOTOD = (Motor_Data&0X08);
   delay(SPEED);
  }
else       //??
{
  P1 = (P1|0X0F);//???4λ????,?????????λ//
}
}
void INT_Init()
{
/*???ж?0*/
IT0  = 1;       //(ITx =1)????????,(ITx =0)????????
EX0  = 1;       //?????ж?0????

/*???ж?1*/
IT1  = 1;       //(ITx =1)????????,(ITx =0)????????
EX1  = 1;       //?????ж?1????

EA   = 1;       //?????ж?
}
void SMG_T1_Init() //??????ж?????????
{
TMOD = 0X10;    //?????T1,???????1
TH1  = 0XEC;    //5MS
TL1  = 0X78;
EA   = 1;       //?????ж?
ET1  = 1;       //?????1?ж?????
TR1  = 1;       //???????1
PT1  = 1;  //?????1????????
}
///////////////////////////
void Timer0Initial()  
{   
TH0 = (65536-65)/256;  
  TL0 = (65536-65)%256;  
  }  
   void initial_Timer()
    {    EA = 1;  
  ET0 = 1;
   TMOD = 0x01;
    Timer0Initial();  
   TR0 = 1;
   }  
/////////////////////
void initial()  
{  
KEYSHUN = 1;  
  KEYNI = 1;  
  initial_Timer();  
}  
////////////
void KEY(void)
{
if(!KEYSTOP) //??
{
  delay(20);//???????
  if(!KEYSTOP)
  {
   Direction=0;
  }
}
else if(!KEYSHUN) //????
{
  delay(20);//???????
  if(!KEYSHUN)
  {
    if(target >= 5)  
    /////////////////
    target -= 1;  
   Direction=1;
  }
}
else if(!KEYNI)  //?????
{
  delay(20);//???????
  if(!KEYNI)
  {
   Direction=2;
   /////////////////
   if(target <= 25)  
    target += 1;   
  }
}
}//END OF KEY(void)
/*******************************************************************************
* ?? ?? ??       : main
* ????????   : ??????
* ??    ??       : ??
* ??    ??      : ??
*******************************************************************************/
void main()
{
INT_Init();
SMG_T1_Init();
   initial();  
while(1)
{
pwm1=0;
  Motor(); //???????????//      
}
}
void Int0() interrupt 0   //???-//?????IO???P3^2
{
delay(20);//???????
if(!KEYDOWN)
{
  SPEED -= 20;
  if(SPEED < 80)
  SPEED = 80;

}
while(!KEYDOWN);//??????
}
void Int1() interrupt 2   //???+//?????IO???P3^3
{
delay(20);//???????
if( ! KEYUP)
{
  SPEED += 20;
  if(SPEED > 300)
  SPEED = 300;
}
while( ! KEYUP);//??????
}
//-------------------???+????--------------------//
void SMG_Timer1()  interrupt 3   //?????1???????//
{
uchar  SMG_XZ[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};//??????????Ч//
uchar i,m;//static
char n;
TH1  = 0XEC;    //5MS
TL1  = 0X78;
  
P0   = 0X00;    //???
//--λ?--//
LSA=(i&0X01);   
LSB=(i&0X02);
LSC=(i&0X04);
i=(++i)%4;  //λ?//?????Χ0~3//
if(++m >= 30) //?????????(5MS*30)//
{
  m=0;  //????????
  if(Direction==1) //??????????
  {
   n=++n%6;  //?????_???????
  }
  else    //??????????
  {
   n--;   //?????_????????
   if(n<0)   //??Χ????
    n=5;  //С??0?,n=5;??????
  }
}
//---??谴??---//
KEY();  //????????????//  
}
////////////
void Timer0() interrupt 1 using 0  
{  percent+=1;
  if(percent<=target)
  pwm1=1;
  else
   pwm1=0;
   if(percent==200)
    percent=0;
     Timer0Initial();
      }



步进电机.png
伺服电机.png

相关经验

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发经验
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表