您好,欢迎访问三七文档
SG90舵机一:实物图、引脚及其参数二:内部电路三:结构四:工作原理五:PWM控制六:注意事项(1)舵机的转动需要时间的,因此,程序中a值的变化不能太快,不然舵机跟不上程序。根据需要,选择合适的延时,用一个a递增循环,可以让舵机很流畅的转动,而不会产生像步进电机一样的脉动。(2)当舵机SG90无法正常工作一般为两个原因,工作电压不稳定或PWM值不正确七:程序实现在此设计的定时100us中断中:角度Angle度数5094513901713521180#includereg52.hsbitP32=P3^2;//K1(P32),按下时舵机向左转sbitP33=P3^3;//K2(P33),按下时舵机向右转sbitP10=P1^0;//P17与舵机的信号线相接unsignedintTime=0;//定义周期并初始化为0,其量程范围为0~175,即周期为175*100us≈20ms//也可不写此语句,可在T0中断函数中写此语句:staticunsignedcharTime=0;unsignedcharAngle=5;//定义角度,其可为任意角度,所以此处不需初始化voidT_0()interrupt1//用PWM方式控制舵机的转动及其角度,即导通时间比上周期,只要改变导通的时间,即可改变其转动的角度{TH0=0x9c;TL0=0x9c;//初值为156,即计数100usif(TimeAngle){P10=1;//舵机控制线置高电平}else{P10=0;//舵机控制线置低电平}Time++;if(Time==175){Time=0;//周期查询及周期清0}}voiddelay(unsignedinti)//此软件延时函数用于按键的防抖动{for(;i0;i--);}voidmain(void){P3=0xff;//P3并行口寄存器初始化/**********************************下面的程序语句是对进行PWM*调制的定时器T0进行初始化*********************************/TMOD=0x02;//00000010,T0、软启、定时、工作方式二(8位自动重载)TH0=0x9c;TL0=0x9c;//初值为156,即计数100usTR0=1;//启动定时器T1ET0=1;EA=1;//切记开源、总允位/***********************************************下面的程序语句是对按键进行扫描并执行相应按键的动作*因按下弹性按键(因其是机械按键)时会在在抖动,所以要*进行判断并去抖*************************************/while(1){if(P3!=0xff)//判断有按键按下与否,没有时全部为高电平{delay(2500);//软件编程防抖动,大约10msif(P3!=0xff)//再次判断有按键按下与否,没有时全部为高电平{switch(P3){case0xfb:Angle=21;break;//按下K1(P32),左转case0xf7:Angle=5;break;//按下K2(P33),右转}}}}}
本文标题:SG90舵机
链接地址:https://www.777doc.com/doc-1825510 .html