搜索
bottom↓
回复: 9

舵机为什么抖的很厉害?

[复制链接]

出0入0汤圆

发表于 2008-8-12 17:26:31 | 显示全部楼层 |阅读模式
最近在做机器人,用的是mega16芯片,但是舵机总是不停的抖动,按理说,每个舵机信号给定以后,应该停在该位置不动的啊,
下面是源程序:
# include<avr/io.h>
# include<avr/interrupt.h>
# include<avr/signal.h>
//时钟频率为10MHz


#define m1_1 PORTA=PORTA | 0X01        //舵机1置高电平
#define m1_0 PORTA=PORTA & 0XFE        //舵机1置低电平
#define m2_1 PORTA=PORTA | 0X02        //舵机2置高电平
#define m2_0 PORTA=PORTA & 0XFD        //舵机2置低电平
#define m3_1 PORTA=PORTA | 0X04        //舵机3置高电平
#define m3_0 PORTA=PORTA & 0XFB        //舵机3置低电平
#define m4_1 PORTA=PORTA | 0X08        //舵机4置高电平
#define m4_0 PORTA=PORTA & 0XF7        //舵机4置低电平
#define m5_1 PORTA=PORTA | 0X10        //舵机5置高电平
#define m5_0 PORTA=PORTA & 0XEF        //舵机5置低电平
#define m6_1 PORTA=PORTA | 0X20        //舵机6置高电平
#define m6_0 PORTA=PORTA & 0XDF        //舵机6置低电平
#define m7_1 PORTA=PORTA | 0X40        //舵机7置高电平
#define m7_0 PORTA=PORTA & 0XBF        //舵机7置低电平
#define m8_1 PORTA=PORTA | 0X80        //舵机8置高电平
#define m8_0 PORTA=PORTA & 0X7F        //舵机8置低电平
#define m9_1 PORTB=PORTB | 0X01        //舵机9置高电平
#define m9_0 PORTB=PORTB & 0XFE        //舵机9置低电平
#define m10_1 PORTB=PORTB | 0X02//舵机10置高电平
#define m10_0 PORTB=PORTB & 0XFD//舵机10置低电平


float N=50.0;//过程完成分步数
unsigned int N1=500; //状态间延时长度
unsigned char N2=20; //每一微分间隔延时长度
static int orderA=0;
static int orderB=0;

int t[20];//t[0],t[1]控制一号舵机;t[2],t[3]控制二号舵机;如此类推··

float         angle[2][10]={{94,101,84,50,89,91,108,91,96,84},                  //站立状态OK
                    {94,136,24,27,89,91,77,155,122,84}};                //蹲的状态OK
                                                

         
unsigned int i,j;

SIGNAL(SIG_OVERFLOW0)//中断函数只有计数和重置计数初值
{

        switch(orderA){
         
        case 1: TCNT0=t[0];m1_1;break;
        case 2: TCNT0=t[1];m1_0;break;
        case 3: TCNT0=t[2];m2_1;break;
        case 4: TCNT0=t[3];m2_0;break;
        case 5: TCNT0=t[4];m3_1;break;
        case 6: TCNT0=t[5];m3_0;break;
        case 7: TCNT0=t[6];m4_1;break;
        case 8: TCNT0=t[7];m4_0;break;
        case 9: TCNT0=t[8];m5_1;break;
        case 10: TCNT0=t[9];m5_0;break;
        case 11: TCNT0=t[10];m6_1;break;
        case 12: TCNT0=t[11];m6_0;break;
        case 13: TCNT0=t[12];m7_1;break;
        case 14: TCNT0=t[13];m7_0;break;
        case 15: TCNT0=t[14];m8_1;break;
        case 16: TCNT0=t[15];m8_0;orderA=0;break;
        default: orderA=0;break;
        }
        orderA++;


}

SIGNAL(SIG_OVERFLOW2)//中断函数只有计数和重置计数初值
{

        switch(orderB){
         
        case 1: TCNT2=t[16];m9_1;break;
        case 2: TCNT2=t[17];m9_0;break;
        case 3: TCNT2=t[18];m10_1;break;
        case 4: TCNT2=t[19];m10_0;break;
        case 16: TCNT2=-49;orderB=0;break;
        default: TCNT2=-49;break;

        }
        orderB++;
}

void delay_ms(int s)
{
        for(i=0;i<s;i++)
                for(j=0;j<1000;j++)
                {}
}




void SetDegree(unsigned int number,float  angle)
{
        unsigned int j;
        for(j=0;j<20;j++)
        {
                if(j==number) t[j]=-(int)(19+angle*2.0/(185*0.0256)+0.5);//四舍五入         
        }
        t[number+1]=-98-t[number];
}


void status(unsigned int x)
        {         
                unsigned int i;
                for(i=0;i<5;i++)
                {
                        SetDegree(2*i,angle[x]);
                        SetDegree((10+2*i),angle[x][i+5]);
                }
                 
        }




int main(void)
{         
        PORTB=0XFF;
        DDRA=0XFF;
        DDRB=0XFF;
         
        TCCR0=0X04;
        TCCR2=0X06;//256分频,0.0256ms
        TCNT0=-19;
        TCNT2=-19;
        TIMSK=0X41;
        sei();
         
        status(0);
}
   有同学用一样的舵机,但是不抖,是不是产生的信号不稳啊,求高手指教,先行谢过了。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2008-8-12 20:09:13 | 显示全部楼层
舵机的问题。我以前有些舵机也这样。后来发现用手摸舵机电路板抖动就没了,于是胡乱加了个电阻在摸到的地方就好了。主要是不清楚舵机里面的芯片是如何工作的,型号都没有,只能试验解决。

出0入0汤圆

 楼主| 发表于 2008-8-13 16:48:38 | 显示全部楼层
加什么电阻啊?加在哪个地方啊?

出0入0汤圆

发表于 2009-4-17 12:16:08 | 显示全部楼层
问个问题,我用辉胜的SG90模拟舵机,给的脉冲信号 50HZ,高电平1.5ms ,周期20ms这样的周期方波。我每个周期将高电平增加10us,让舵机缓慢旋转。 发生抖动很厉害。
我又用数字舵机 MD933  ,同样的控制信号,还是抖动的厉害,是什么问题??

出0入0汤圆

发表于 2009-8-21 15:26:07 | 显示全部楼层
顶一下了..

出100入0汤圆

发表于 2009-8-25 22:15:47 | 显示全部楼层
最好用示波器或者Proteus仿真一下,看看你的程序产生的波形是否稳定,我以前玩舵机开始也抖的很厉害,用示波器看,主要还是程序没编好,产生的波形抖动。

出0入0汤圆

发表于 2009-8-26 21:00:18 | 显示全部楼层
至少去弄个::示波器啊。。。搞这个开发,,最好是用::带深存储的示波器,,例如 HP 54622A

每个通道 1百万个采样点。。用稍慢的时基,,可以看更长的时间,,并且可以“放大”来看细节!!

出0入0汤圆

发表于 2010-2-2 18:13:22 | 显示全部楼层
是不是上电不稳定呢? 插针那松了造成掉电再上电舵机会动一下!

出0入0汤圆

发表于 2010-5-3 20:30:11 | 显示全部楼层
应该是舵机运动时把电平拉的太低,才会一直抖个不停

出0入0汤圆

发表于 2010-5-3 22:20:21 | 显示全部楼层
我以前用LM3写过舵机控制程序,你的脉冲输出必须能被这款舵机正确识别,主要是占空比与频率,占空比的变化量(比如10us)有可能你的舵机是无法精确控制的,导致来回摆动。建议用示波器好好看看波形的输出变化情况是否符合要求。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 14:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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