久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9494|回復: 6
打印 上一主題 下一主題
收起左側

控制舵機歸中問題 舵機轉動大約60度后就停了一下 求大神回答

[復制鏈接]
跳轉到指定樓層
樓主
ID:80930 發表于 2015-6-7 00:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在查閱了有關舵機的一些知識后,自己寫了一些代碼。本來想控制舵機歸中的?墒嵌鏅C轉動大約60度后就停了一下,然后就像鐘表一樣,一下一下的轉動。一直轉到180度。然后再轉到約60度的地方。繼續像鐘表一樣的轉動。
這是控制代碼。幫忙看看哪里有錯。

#include <reg52.h>
#define int unsigned int
sbit pwm =P1^0;  //舵機信號線。
int i=0,b=10;  //定義變量。


void dingshi()   //打開定時器。
{
  TMOD |=0x01;
  TH0=0xff;
  TL0=0xa4;
  EA=1;
  ET0=1;
  TR0=1;
}

void main()
{
  dingshi();
  while(b)
  {
     if (i>=0&&i<=10)  //1毫秒的高電平。
        {
         pwm =1;
        }
         if (i>=11&&i<=200)   //20毫秒的周期。
        {
         pwm=0;
         if(i==200)   
         {
           i=0;
           b--;
        }
  }  
}  
}

void jishiqi()interrupt 1   //定時100微秒
{
  TH0=0xff;
  TL0=0xa4;
  i++;
}

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

使用道具 舉報

沙發
ID:1 發表于 2015-6-7 01:16 | 只看該作者
回復

使用道具 舉報

板凳
ID:80930 發表于 2015-6-7 10:12 | 只看該作者
admin 發表于 2015-6-7 01:16
舵機教程:http://www.zg4o1577.cn/mcu/2672.html
舵機程序:http://www.zg4o1577.cn/mcu/2056.html

可是我用的是51單片機啊。
回復

使用道具 舉報

地板
ID:79544 發表于 2015-7-25 19:47 | 只看該作者
zhageweiwu 發表于 2015-6-7 10:12
可是我用的是51單片機啊。

給你個51控制舵機居中,左右轉動45度的程序。注意單片機的型號和晶振
  1. /****************************************************
  2. 功能:正確的3路舵機控制左,右,歸中,程序
  3.         單片機:STC89C52
  4.         晶振:11.0592M
  5.         作者:蘇義江
  6.         時間:2014-3-5
  7.         可以通過按鍵和傳感器控制
  8. *****************************************************/
  9. //#include<12c5a.h>
  10. #include<reg52.h>
  11. //#define uchar unsigned char
  12. //#define uint unsigned int
  13. //#define moto_pwm  P1_4  //PWM輸出腳控制舵機

  14. sbit moto_pwm=P1^0;//PWM輸出腳控制舵機
  15. sbit moto_pwm1=P1^1;//PWM輸出腳控制舵機
  16. sbit moto_pwm2=P1^2;//PWM輸出腳控制舵機

  17. sbit xiaocheting=P1^3;//按鍵控制
  18. sbit xiaochehouti=P1^4;
  19. sbit xiaocheqianjin=P1^5;

  20. uchar pwm_lefr=0;//定義 定時器自加1變量
  21. uchar pwm_lefr1=0;//定義 定時器自加1變量
  22. uchar pwm_lefr2=0;//定義 定時器自加1變量
  23. uchar duojiguizhong=12;//舵機歸中1.5ms
  24. uchar duojiguizhong1=12;//舵機歸中1.5ms
  25. uchar duojiguizhong2=12;//舵機歸中1.5ms


  26. void pwmmaic()//產生PWM
  27. {
  28.         if(pwm_lefr<=duojiguizhong)
  29.        
  30.                 moto_pwm=1;
  31.                 else
  32.                 moto_pwm=0;
  33.                 if(pwm_lefr>=200)
  34.                 pwm_lefr=0;       
  35. if(pwm_lefr1<=duojiguizhong1)
  36.        
  37.                 moto_pwm1=1;
  38.                 else
  39.                 moto_pwm1=0;
  40.                 if(pwm_lefr1>=200)
  41.                 pwm_lefr1=0;       
  42. if(pwm_lefr2<=duojiguizhong2)
  43.        
  44.                 moto_pwm2=1;
  45.                 else
  46.                 moto_pwm2=0;
  47.                 if(pwm_lefr2>=200)
  48.                 pwm_lefr2=0;       
  49. }
  50. void time1() interrupt 3
  51. {
  52. //        TH1=0XFf;//100us的賦值11.0592M
  53. //        TL1=0XAE;
  54.         TH1=(65536-60)/256;//100us的賦值
  55.         TL1=(65536-60)%256;
  56.         pwm_lefr++;
  57.         pwm_lefr1++;
  58.         pwm_lefr2++;
  59.         pwmmaic();
  60. }
  61. void inttime()
  62. {
  63. //        TMOD=0X10;
  64.         TMOD=0X11;
  65.         TH1=(65536-60)/256;//100us的賦值12M
  66.         TL1=(65536-60)%256;
  67. //        TH1=0XFf;//100us的賦值11.0592M
  68. //        TL1=0XAE;
  69.         ET1=1;
  70.         TR1=1;
  71.         EA=1;
  72. }
  73. void delay(uint z)
  74. {
  75.         uint x,y;
  76.         for(x=z;x>0;x--)
  77.         for(y=240;y>0;y--);
  78. }
  79. void main()
  80. {
  81.         duojiguizhong=12;
  82.         duojiguizhong1=12;
  83.         duojiguizhong2=12;
  84.         inttime();
  85.         while(1)
  86.         {
  87.                 if(xiaocheting==0)       
  88.                 {
  89.                         delay(10);
  90.                         if(xiaocheting==0)       
  91.                         {
  92.                                 duojiguizhong=4;
  93.                                 delay(2000);

  94.                                 duojiguizhong1=6;
  95.                                 delay(1000);

  96.                                 duojiguizhong=14;
  97.                                 delay(2000);

  98.                                 duojiguizhong1=14;
  99.                                 delay(2000);

  100.                                 while(xiaocheting==0);
  101.                                 duojiguizhong=12;//歸中
  102.                                 delay(2000);
  103.                          }
  104.                          
  105.                 }
  106.        

  107.         }
  108. }
復制代碼
回復

使用道具 舉報

5#
ID:86938 發表于 2015-7-27 11:31 | 只看該作者
回復

使用道具 舉報

6#
ID:227369 發表于 2017-10-13 20:03 | 只看該作者
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
//sbit KEY1 = P3^2;        //定義調速的按鍵
sbit DC1 = P0^0;                //定義舵機的控制端口
sbit DC2 = P0^1;
sbit DC3 = P0^2;
sbit DC4 = P0^3;
sbit DC5 = P0^4;
sbit DC6 = P0^5;
uchar CYCLE;                  //定義周期
uchar PWM1,PWM2,PWM3,PWM4,PWM5,PWM6;                    //定義低電平時間
/*********************************
函數:Delay_1ms()
參數:t
返回:無
功能:延時子程序,延時時間為 1ms * del。
          使用晶振是11.0592M。                  g
**********************************/
void Delay_1ms(uint t)
{
        uint i,j;
        for(i=0;i<t;i++)
                for(j=0;j<=100;j++);
               
}
/*********************************
函數:Time0Init()
參數:無
返回:無
功能:設置定時器0的工作方式2定時時長為100微秒,
      并打開中斷和啟動定時器。
          該例中使用的單片機晶振為11.0592M。
**********************************/
void Time0Init(void)
{
        TMOD = 0x02;        //設定定時器0工作在方式0模式
        TH0  = 0xA4;    //定時時長為100微秒的初值自動重載
        TL0  = 0xA4;    //定時時長為100微秒的初值
        ET0 = 1;        //打開定時器0中斷
        EA = 1;                    //打開總中斷
        TR0 = 1;            //啟動定時器
}
/*********************************
函數:Time0Int()
參數:無
返回:無
說明:定時器0中斷函數。用于處理PWM的信號。
**********************************/
void Time0Int() interrupt 1
{
        static        uchar Count;
        Count++;
        if(Count >= PWM1)
               
        {
                DC1= 1;                
               
        } else  DC1 = 0;
        if(Count >= PWM2)   
        {
                DC2 = 1;                
               
        }  else  DC2 = 0;
        if(Count >= PWM3)   
        {
                DC3 = 1;                
               
        }  else  DC3 = 0;
        if(Count >= PWM4)   
        {
                DC4 = 1;                
               
        } else  DC4 = 0;
                if(Count >= PWM5)   
        {
                DC5 = 1;                
               
        } else  DC6 = 0;
                        if(Count >= PWM6)   
        {
                DC6 = 1;                
               
        } else  DC6 = 0;
        Count++;
       
        if(Count == CYCLE)  
        {
               
                Count=0;
               
        }

       
}


//void PWMInit()
//{
//          PWM1=146;
//        Delay_1ms(5);
//        PWM2=186;
//             Delay_1ms(5);       
//        PWM3=189;
//         Delay_1ms(5);
//        PWM4=170;
//         Delay_1ms(5);
//        PWM5=146;
//         Delay_1ms(5);
//        PWM6=148;
//         Delay_1ms(5);
//}

// void PWMna()
// {
//          PWM1=158; Delay_1ms(5);
//         PWM2=158; Delay_1ms(5);
//         PWM3=182; Delay_1ms(5);
//         PWM4=189; Delay_1ms(5);
//         PWM5=174; Delay_1ms(5);
//         PWM6=185; Delay_1ms(5);
// }

//void PWMfang()
//{
//        PWM1=174; Delay_1ms(5);
//        PWM2=174; Delay_1ms(5);
//        PWM3=154; Delay_1ms(5);
//        PWM4=189; Delay_1ms(5);
//        PWM5=146; Delay_1ms(5);
//        PWM6=169; Delay_1ms(5);
//}

void main()
{
        Time0Init();    //定時器0初始化
        CYCLE = 200;        //定義PWM周期為20毫秒
/*傳統舵機 必須連續發信號,,數字舵機去掉while(1)就ok了*/
        while(1)
        {
//                PWMInit();       
//                Delay_1ms(1000);
//                PWMna();
//                Delay_1ms(1000);
//                PWMfang();
//                Delay_1ms(1000);
                //Delay_1ms(500);
                PWM1=176; Delay_1ms(250);
  //        PWM2=174; Delay_1ms(500);
            PWM3=176; Delay_1ms(500);
          // PWM4=189; Delay_1ms(50);
  //        PWM5=179; Delay_1ms(50);
          //PWM6=169; Delay_1ms(5)
                        Delay_1ms(1000);
                        PWM1=190; Delay_1ms(250);
                //        PWM2=186; Delay_1ms(500);
                         PWM3=192; Delay_1ms(500);
                        Delay_1ms(1000);
               
        }
               
       
}


       
       
                                                          



       
       
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99reav| 一区二区三区欧美在线观看 | 久久精彩视频 | 97av在线| 国产黄色免费网站 | 久久99精品久久久久久国产越南 | 精品国产一区二区三区四区在线 | 夜夜爽99久久国产综合精品女不卡 | 成人免费视频网 | 91资源在线| 亚洲日韩中文字幕一区 | 成年人在线视频 | 欧美日韩久久精品 | 91久久精品国产91久久 | 成人一区二区三区在线 | 国产福利在线 | 天天干人人 | 一级亚洲| 欧美日韩手机在线观看 | a免费视频 | 国产色片| 日本三级网站在线 | 久久大全 | 日本在线视频一区二区 | 精品欧美| 成人亚洲一区 | 国产高清在线精品一区二区三区 | 成av在线 | 欧美不卡网站 | 日韩激情在线 | 国产成人精品一区二区三区网站观看 | 日本精品久久久久久久 | 久久久久久国产精品久久 | 视频一区二区在线观看 | 午夜在线视频一区二区三区 | 亚洲一区在线免费观看 | 欧美成人免费 | 久久蜜桃资源一区二区老牛 | 日本久久网站 | 91久久精品一区二区二区 | 日日操夜夜摸 |