找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3086|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)控制SG90舵機(jī) 如何精準(zhǔn)一些?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:370407 發(fā)表于 2020-3-4 12:17 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 363249 于 2020-3-4 15:09 編輯

怎么把 n 的值變成填入 2500  ?

這樣就不局限于 5-20 個(gè)位置了?    即使有誤差也可以接受 或者做到每一度一個(gè)控制角度

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit pwm=P1^0;      //信號(hào)輸出
sbit k1=P3^1;        //按鍵k1接P3^5,控制順時(shí)針旋轉(zhuǎn)
sbit k2=P3^2;        //按鍵k2接P3^4,控制逆時(shí)針旋轉(zhuǎn)
sbit k3=P3^3;
uchar count=0;

uchar n=5;       //初始位置-在0°附近  改變n值可以改變舵機(jī)的初始位置

//這個(gè)n值在不同的舵機(jī)可能存在一點(diǎn)誤差,可以改變他的值來(lái)試試具體位置
void delay5ms()
{
    unsigned char a,b;
    for(b=19;b>0;b--)
        for(a=130;a>0;a--);
}
void key()
{
  if(k1==0)
  {
            delay5ms();
          n=5;               //  0度

  }
    if(k2==0)
  {
            delay5ms();
         n=15;               //  90度

  }                        
   if(k3==0)
  {
            delay5ms();
         n=25;                // 180度

  }
}

void InitTimer()        //  0.1ms   11.0592Mhz
{
    TMOD = 0x01;
    TH0 = 0xFF;
    TL0 = 0XA4;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}

void main()
{
    InitTimer();
        while(1)
        {
          key();
        }
}

void Timer() interrupt 1      //特別注意此處,0--外部中斷0,1--定時(shí)器中斷0,2--外部中斷1,3--定時(shí)器中斷1,4--串行口中斷1
{
    TH0 = 0xFF;
    TL0 = 0xA4;
        count++;
        if(count<=200)
        {
           if(count<=n)
           {
                      pwm=1;
           }
           else
           {
                      pwm=0;
           }
        }
        else
        {
           count=0;
           pwm=0;
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:648281 發(fā)表于 2020-3-4 14:29 | 只看該作者
你好!
這個(gè)應(yīng)該可以做到每一度一個(gè)控制角度;
再精確估計(jì)是不行了,沒(méi)有進(jìn)一步試過(guò)。
回復(fù)

使用道具 舉報(bào)

板凳
ID:687694 發(fā)表于 2020-3-4 17:41 | 只看該作者
受限于舵機(jī)精度,單片機(jī)驅(qū)動(dòng)可以做到十分之一度。甚至更高
回復(fù)

使用道具 舉報(bào)

地板
ID:526831 發(fā)表于 2020-4-26 14:34 | 只看該作者
樓主  根據(jù)你的程序修改的   如有問(wèn)題還請(qǐng)見(jiàn)諒  
不能達(dá)到你所說(shuō)的一度一度的   但是還是可以達(dá)到你所寫(xiě)的那三個(gè)固定值以外的角度

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit pwm=P1^0;      //信號(hào)輸出
sbit k1=P3^1;        //按鍵k1接P3^5,控制順時(shí)針旋轉(zhuǎn)
sbit k2=P3^2;        //按鍵k2接P3^4,控制逆時(shí)針旋轉(zhuǎn)
sbit k3=P3^3;
uchar count=0;

uchar n=5;       //初始位置-在0°附近  改變n值可以改變舵機(jī)的初始位置

//這個(gè)n值在不同的舵機(jī)可能存在一點(diǎn)誤差,可以改變他的值來(lái)試試具體位置
void delay5ms()
{
    unsigned char a,b;
    for(b=110;b>0;b--)
        for(a=130;a>0;a--);
}
void delay1ms()
{
    unsigned char a;
    for(a=130;a>0;a--);
}
void key()
{
  if(k1==0)
  {
                delay5ms();
                if(k1==0)
                {
                         delay5ms();
          n++;               //  0度
                if(n >= 25)
                        n = 25;
                }
  }
    if(k2==0)
  {
                delay5ms();
                if(k2==0)
                {
            delay5ms();
         n--;               //  90度
                if(n <= 5)
                        n = 5;
          }
  }                        
}

void InitTimer()        //  0.1ms   11.0592Mhz
{
    TMOD = 0x01;
    TH0 = 0xFF;
    TL0 = 0XA4;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}

void main()
{
    InitTimer();
        while(1)
        {
          key();
        }
}

void Timer() interrupt 1      //特別注意此處,0--外部中斷0,1--定時(shí)器中斷0,2--外部中斷1,3--定時(shí)器中斷1,4--串行口中斷1
{
    TH0 = 0xFF;
    TL0 = 0xA4;
        count++;
        if(count<=200)
        {
           if(count<=n)
           {
                      pwm=1;
           }
           else
           {
                      pwm=0;
           }
        }
        else
        {
           count=0;
           pwm=0;
        }
}
回復(fù)

使用道具 舉報(bào)

5#
ID:861088 發(fā)表于 2020-12-16 08:49 | 只看該作者
zheng0401 發(fā)表于 2020-4-26 14:34
樓主  根據(jù)你的程序修改的   如有問(wèn)題還請(qǐng)見(jiàn)諒  
不能達(dá)到你所說(shuō)的一度一度的   但是還是可以達(dá)到你所寫(xiě)的 ...

你好,從if(count<=200)以后是什么意思呀?能解釋一下嗎?不理解。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表