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
***it pwm1 = P3^7; //???
//-----???????IO-----//
***it MOTOA = P2^0;
***it MOTOB = P2^1;
***it MOTOC = P2^2;
***it MOTOD = P2^3;
//-------????IO-------//
***it KEYDOWN = P3^3; //????
***it KEYUP = P3^2; //????
***it KEYSHUN = P1^0; //????
***it KEYNI = P1^1; //?????
***it KEYSTOP = P1^4; //??
//------?????IO------//
***it LSA=P2^5;
***it LSB=P2^6;
***it 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();
}
|