舵机问题,请教大哥!

2020-02-05 08:46发布

我用的是TX-1开发板,做舵机实验(控制舵机0,,45,90,135,180四个角度,按jia键,舵机增加45°,按jian则减少45°,并将度数显示在数码管上)
现在这样开发板上电程序烧不进,把舵机拔了才能烧进,且数码管和键盘都ok。但是把舵机再插上,数码管显示000并跳动,按键没反应。
实验标准舵机参数:工作电压4.8v~6v,静态电流10mA,力矩3kg/cm,转速0.22ms/60°,重48g,尺寸41x42x20mm
本人用舵机参数:工作电压4.8v~6v,静态电流1mA,力矩3.5kg/cm,速度0.16s/60°,重36g,尺寸41x20x36mm

ourdev_684432VJV81R.xls(文件大小:860K) (原文件名:电路图.xls)
#include<reg52.h>
unsigned char count;        //0.5ms次数标志
sbit pwm=P3^0;                        //PWM信号输出
sbit jia=P3^7;                        //按一下,加45度角
sbit jian=P3^6;                        //按一下,减45度角
unsigned  char jd;                //角度标识
sbit dula=P2^6;                        //锁存器
sbit wela=P2^7;
//unsigned char num=0,show_num=1,gao_num=1,di_num=3;
unsigned char code table[]={                                //数码管显示字符编码
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(unsigned char i)                                //延时
{
        unsigned char j,k;
        for(j=i;j>0;j--)
                for(k=125;k>0;k--);

}
void Time0_Init()                //定时器初始化
{       
        TMOD=0x01;                        //定时器0工作方式1(16位定时器)
        IE=0x82;                        //1000 0010即EA=1(开全局中断),ET0=1(打开T0中断)
        TH0=0xfe;                        //0.5ms
        TL0=0x33;
        TR0=1;                                //启动定时器0
}
void Time0_Int() interrupt 1        //中断程序
{
        TH0=0xfe;                                        //重装初值
        TL0=0x33;
        if(count<jd)                                //判断0.5ms次数是否小于角度标识
                pwm=1;                                        //小于,pwm输出高电平
        else
                pwm=0;
                count=(count+1);                //0.5ms次数加1
                count=count%40;                        //次数始终保持40,即周期为20ms

}
void keyscan()                                //按键扫描
{
        if(jia==0)
        {
                delay(10);
                if(jia==0)                        //jia键被按下
                {
                        jd++;                        //角度标识加1
                        count=0;                //按键按下,则20ms周期重新开始
                        if(jd==6)
                                jd=5;                //已经是180度,则保持
                        while(jia==0);        //等待按键释放
                }
        }
        if(jian==0)
        {
                delay(10);
                if(jian==0)
                {
                        jd--;
                        count=0;
                        if(jd==0)
                                jd=1;
                                while(jian==0);
                }
        }
}
void display()                                        //数码管显示
{
        unsigned char bai,shi,ge;
        switch(jd)
        {
                case 1:                        //角度标识为1,则转角为0度,显示000
                        bai=0;
                        shi=0;
                        ge=0;
                        break;
                case 2:                        //角度标识为2,则转角为45度,显示045
                        bai=0;
                        shi=4;
                        ge=5;
                        break;
                case 3:
                        bai=0;
                        shi=9;
                        ge=0;
                        break;
                case 4:
                        bai=1;
                        shi=3;
                        ge=5;
                        break;
                case 5:
                        bai=1;
                        shi=8;
                        ge=0;
                        break;
        }
//        dula=0;
        dula=1;
        P0=table[bai];
       
        dula=0;
        P0=0xff;
//        wela=0;

        wela=1;
        P0=0xfe;
        wela=0;
        delay(5);
       
        dula=1;
        P0=table[shi];
       
        dula=0;
        P0=0xff;
        //wela=0;
       
        wela=1;
        P0=0xfd;
        wela=0;
        delay(5);

       
        dula=1;
        P0=table[ge];
        dula=0;
        P0=0xff;
//        wela=0;
       
        wela=1;
        P0=0xfb;
        wela=0;
        delay(5);
}
void main()
{
        jd=1;
        count=0;
        Time0_Init();
        while(1)
        {
                keyscan();
                display();
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
15条回答
not_at_all
2020-02-06 05:37
哥驱动16个13kg舵机,电源和信号都全部隔离的
是不是电源容量不够,接舵机运行时测一下电源电压
舵机内部有声音说明处于动态,电流较大。你的电源容量多大应该知道吧!
可以加个led作为电源指示,看看接上舵机与没接舵机亮度有没有变化
ps  连万用表都舍不得买 不要玩电子了  便宜的才10来块   少吃一顿饭就行!饿不死的   哥亲身验证过,还可以到处跑

一周热门 更多>