qq点赞怎么取消
zgq
数字舵机和模拟舵机的相同和不同:
舵机分为模拟舵机和数字舵机两大类:数字舵机区别于传统的模拟舵机,模拟舵机需要给它不停的发送PWM信号,才能让它保持在规定的位置或者让它按照某个速度转动,数字舵机则只需要发送一次PWM信号就能保持在规定的某个位置。而且模拟舵机对于脉冲宽度很窄的脉冲,它的动作会显得比较的迟钝,数字舵机因为它的脉冲的周期比较的短这样就会给马达足够的动力,但这样它的耗电量就会大大的增加。控制方法基本相同,给舵机的信号端输入一定脉宽的方波脉冲控制舵机的转角。接口电路:黄色的为信号线,红色的为电源线,黑色的为地线。
/********
基本思想:利用定时器0先进行0.5ms定时,再利用定时器1对舵机的转角进行另外2ms的控制,总共定时时间为20ms,数字舵机只需要向其发送一次20ms脉冲即可以对舵机的位置进行控制,利用参数化的控制方法,利用宏定义定义每个位置的舵机的转角,从而实现对机械手的位置控制
********/
#include<reg52.h>
uint position[6]={0}//定义位置
/******标志位参数******/
uchar count0=0;//初始化计数值
uchar count=0;//初始化计数值
/*******具体位置舵机位置参数根据情况给定*****/
#define INITRUDER1 29
#define INITRUDER2 18
#define INITRUDER3 18
#define INITRUDER4 18
#define INITRUDER5 18
#define INITRUDER6 18
#define PUTDOWNRUDER1 18
#define PUTDOWNRUDER2 18张学良夫人
#define PUTDOWNRUDER3 29
#define PUTDOWNRUDER4 10
#define PUTDOWNRUDER5 18
#define PUTDOWNRUDER6 18
#define GRASPRUDER1 18
#define GRASPRUDER2 18
#define GRASPRUDER3 29
#define GRASPRUDER4 10
#define GRASPRUDER5 18
#define GRASPRUDER6 18
#define PUTUPRUDER1 18
#define PUTUPRUDER2 18
#define PUTUPRUDER3 16
#define PUTUPRUDER4 10
#define PUTUPRUDER5 18
#define PUTUPRUDER6 18
#define ROTRUDER1 18
#define ROTRUDER2 18
#define ROTRUDER3 16
#define ROTRUDER4 10
#define ROTRUDER5 18
#define ROTRUDER6 18
#define PUTDOWN1RUDER1 18
#define PUTDOWN1RUDER2 18
#define PUTDOWN1RUDER3 29
#define PUTDOWN1RUDER4 10
#define PUTDOWN1RUDER5 18
#define PUTDOWN1RUDER6 18
#define DROPRUDER1 18
#define DROPRUDER2 18
#define DROPRUDER3 29
#define DROPRUDER4 10
#define DROPRUDER5 18
#define DROPRUDER6 18
#define PUTUP1RUDER1 18
#define PUTUP1RUDER2 18
#define PUTUP1RUDER3 16
#define PUTUP1RUDER4 10
#define PUTUP1RUDER5 18
#define PUTUP1RUDER6 18
#define RESETRUDER1 18
#define RESETRUDER2 18
#define RESETRUDER3 16
#define RESETRUDER4 10
#define RESETRUDER5 18
#define RESETRUDER6 18
/*******初始化定时器函数********/
void initial()
{
P1=0x00;
TMOD=0x22;//定时器0和1工作在方式2
TL0=206;
论文页码怎么设置 TH0=206;//每次中断定时50us
TL1=106;
TH1=106;//每次中断定时100us凤凰甘油
EA=1; //打开总中断
ET0=1;//打开定时器1的中断
}
/****当计数器0工作满0.5ms时关闭定时器0计数打开计数器1计数进行舵机控制****/
喜欢用英语怎么写 void Move(uchar p0,uchar p1,uchar p2,uchar p3,uchar p4,uchar p5)
{
position[0]=p0;
position[1]=p1;
position[2]=p2;
position[3]=p3;
position[4]=p4;
position[5]=p5;
TR0=1;//定时器0开始计时
TR1=0;//定时器1停止计时
for(i=1;i<6;i++)
{
position[i]+=position[i-1];
}
信心十足
if(count0==5)
{大学生谈恋爱
count0=0;
TR0=0;//定时器0停止计时
TR1=1;//定时器1开始计时
P1=0x01;
while(count<position[0]){};
P1=0x02;
while(count<position[1]){};
P1=0x04;
while(count<position[2]){};
P1=0x08;
while(count<position[3]){};
P1=0x30;
while(count<position[4]){};
P1=0x40;
while(count<position[5]){};
P1=0x00;
while(count<390){};
count=0;
TR0=1;//打开定时器0
TR1=0;//关闭定时器1
}
}
/********定时器0中断*******/
void interr0() interrupt 1
{
count0++;
}
/********定时器1中断*******/
void interr1() interrupt 2
{
count++
}
void main(void)
{
initial();//对定时器进行初始化
while(1)
{
/************在while(1)死循环中反复执行舵机动作**********/
Move(INITRUDER1,INITRUDER2,INITRUDER3,INITRUDER4,INITRUDER5,INITRUDER6);
Move(PUTDOWNRUDER1,PUTDOWNRUDER2,PUTDOWNRUDER3,PUTDOWNRUDER4,PUTDOWNRUDER5,PUTDOWNRUDER6);
Move(GRASPRUDER1,GRASPRUDER2,GRASPRUDER3,GRASPRUDER4,GRASPRUDER5,GRASPRUDER6);
Move(PUTUPRUDER1,PUTUPRUDER2,PUTUPRUDER3,PUTUPRUDER4,PUTUPRUDER5,PUTUPRUDER6);
Move(ROTRUDER1,ROTRUDER2,ROTRUDER3,ROTRUDER4,ROTRUDER5,ROTRUDER6);
Move(PUTDOWN1RUDER1,PUTDOWN1RUDER2,PUTDOWN1RUDER3,PUTDOWN1RUDER4,PUTDOWN1RUDER5,PUTDOWN1RUDER6);
Move(DROPRUDER1,DROPRUDER2,DROPRUDER3,DROPRUDER4,DROPRUDER5,DROPRUDER6);
Move(PUTUP1RUDER1,PUTUP1RUDER2,PUTUP1RUDER3,PUTUP1RUDER4,PUTUP1RUDER5,PUTUP1RUDER6);
Move(RESETRUDER1,RESETRUDER2,RESETRUDER3,RESETRUDER4,RESETRUDER5,RESETRUDER6);
}
经营管理模式 }