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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+舵機不能控制速度嗎?轉的太快了,能不能慢慢的轉?

  [復制鏈接]
跳轉到指定樓層
樓主
舵機不能控制速度嗎?轉的太快了,一按不到1秒時間就轉到位了。能不能慢慢的轉?轉它割10秒鐘到位

我的舵機是
MG996R按一個按鈕旋轉180度,按另一個按鈕反轉回來,
感覺速度太快了。能不能慢慢的旋轉?
我用的8腳單片機型號是STC15W204S,其實用89C52單片機測試也是一樣的效果,換下頭文件即可,


下面是單片機代碼,
網上資料說改定時器中斷初始時間,我也改過不同時間(0.1MS至5ms),都沒有效果。
  TH0=0Xfe;
  TL0=0X33; //計數初值設置為0.5ms


又說改PWM時間,下面40我改為10至500也還是改變不了速度,還是老樣子
  count++;
  if(count>=40)//原始是=40
  {
    count=0;
  }


老師們,到底要怎么改,才能控制舵機速度?謝謝指導,,
  1. #include        "STC15Fxxxx.H"
  2. //#include <intrins.h>
  3. #define uint  unsigned int            //定義一下方便后面使用
  4. //#define uchar unsigned char     //定義一下方便后面使用
  5. #define MAIN_Fosc 11059200L//定義主時鐘
  6. sbit SG_PWM=P3^2;
  7. sbit Key_1=P5^4;
  8. sbit Key_2=P5^5;
  9. unsigned char count=0;
  10. unsigned char PWM_count=1;             //1--0度,2--45度,3--90度,4--135度,5--180度
  11. void delay(unsigned char i)          //延時
  12. {
  13.   unsigned char j,k;
  14.   for(j=i;j>0;j--)
  15.     for(k=125;k>0;k--);
  16. }




  17. void Timer_Init()
  18. {
  19.   TMOD=0X01;      //T0定時方式1
  20.   TH0=0Xfe;
  21.   TL0=0X33;       //計數初值設置為0.5ms          每0.5ms進入一次中斷,晶振頻率:11.0592MHZ
  22.   ET0=1;          //打開定時器0的中斷
  23.   TR0=1;          //打開定時器0
  24.   EA=1;           //開總中斷
  25. }
  26. void Timer() interrupt 1   //特別注意此處,0--外部中斷0,1--定時器中斷0,2--外部中斷1,3--定時器中斷1,4--串行口中斷1
  27. {
  28.   TR0=0;
  29.   TH0=0Xfe;
  30.   TL0=0X33;       //重新賦計數初值為0.5ms

  31.   if(count<=PWM_count)
  32.   {
  33.     SG_PWM=1;
  34.   }
  35.   else
  36.   {
  37.     SG_PWM=0;
  38.   }
  39.   count++;
  40.   if(count>=40)//原始是=40
  41.   {
  42.     count=0;
  43.   }
  44.   TR0=1;
  45. }
  46. void main()
  47. {
  48.   Timer_Init();
  49.   while(1)
  50.   {
  51.    if(Key_1==0)
  52.    {
  53.      delay(10);
  54.      EA=0;
  55.      if(Key_1==0)
  56.      {
  57.       PWM_count=1;//1--0度
  58.                
  59.       count=0;
  60.       EA=1;
  61.      }
  62.      while(!Key_1);
  63.    }
  64.    if(Key_2==0)
  65.    {
  66.      delay(10);
  67.      EA=0;
  68.      if(Key_2==0)
  69.      {
  70.       PWM_count=5;//4--135度  轉動角度
  71.                
  72.       count=0;
  73.       EA=1;
  74.      }
  75.      while(!Key_2);
  76.    }   
  77.   }
  78. }
復制代碼

單片機源程序: 996舵機按鍵控制正反轉.rar (24.96 KB, 下載次數: 12)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:807591 發表于 2021-8-14 11:23 | 只看該作者
把180度分解開,每間隔一定時間轉一個角度。。這種問題哪怕自己動腳趾頭想一想也就知道了。。非得動手發帖。。
回復

使用道具 舉報

板凳
ID:959346 發表于 2021-8-14 12:10 | 只看該作者
不要一次轉180度,慢慢加到180度試一下。
回復

使用道具 舉報

地板
ID:342822 發表于 2021-8-14 12:38 | 只看該作者
計數初值設置為0.5ms每次步進0.1ms暫停?直到2.5ms試試看
回復

使用道具 舉報

5#
ID:951194 發表于 2021-8-14 12:41 | 只看該作者
控制pwm的占空比來調速
回復

使用道具 舉報

6#
ID:161164 發表于 2021-8-14 12:50 | 只看該作者
你的角度分辨率太低了
而且角度改變又太突然,沒有緩沖
以下是舵機控制信號


可以見到由0到90度之間的高電平時間差為500us
即5.55us一度
如不需太細分角度,可把定時器設為55us
count的最大值為:20000us / 55us = 363
而PWM_count對應各角度的值就自己算吧


緩沖問題可以在按鍵時不直接對PWM_count賦值
而是另開一個暫存變數如PWM_count_buff
再另加程序
if(PWM_count_buff > PWM_count){
PWM_count++;
}
if(PWM_count_buff < PWM_count){
PWM_count--;
}
以上兩個If的更新速度就是轉動速度

回復

使用道具 舉報

7#
ID:960487 發表于 2021-8-14 13:50 | 只看該作者
舵機一步高電平, 一步低電平, 然后等待一個時間段, 再循環如此, 就可以慢了
回復

使用道具 舉報

8#
ID:475031 發表于 2021-8-14 18:55 | 只看該作者
Jiang_YY 發表于 2021-8-14 12:10
不要一次轉180度,慢慢加到180度試一下。
  1. if(Key_2==0)
  2.    {
  3.      delay(10);
  4.      EA=0;
  5.      if(Key_2==0)
  6.      {
  7.        delay_ms(1000);//1000ms毫秒=1s秒
  8.                          PWM_count=1;/0度  角度
  9.                          delay_ms(1000);/
  10.                          PWM_count=2;//45度  角度
  11.                          delay_ms(1000);/
  12.                          PWM_count=3;//90度  角度
  13.                          delay_ms(1000);/
  14.                          PWM_count=4;//135度  角度
  15.                          delay_ms(1000);//
  16.                          PWM_count=5;//180度  角度
  17.        
  18.                
  19.       count=0;
  20.       EA=1;
  21.      }
復制代碼
這樣嗎?試過了; 。沒有效果。依然快速旋轉的,
回復

使用道具 舉報

9#
ID:475031 發表于 2021-8-14 18:55 | 只看該作者
szb314 發表于 2021-8-14 11:23
把180度分解開,每間隔一定時間轉一個角度。。這種問題哪怕自己動腳趾頭想一想也就知道了。。非得動手發帖 ...

你這個方案不行,我試過
回復

使用道具 舉報

10#
ID:424598 發表于 2021-8-14 21:24 | 只看該作者
uchar最大才支持255,你輸1000有啥用,要換成uint
回復

使用道具 舉報

11#
ID:475031 發表于 2021-8-14 21:25 | 只看該作者
lkc8210 發表于 2021-8-14 12:50
你的角度分辨率太低了
而且角度改變又太突然,沒有緩沖
以下是舵機控制信號

大師,你說的根本不可能實現。資料網上找遍了,。
沒有一例能成功控制舵機速度的,
都是只是停留在紙上談兵理論,,,
根本不可能實現速度控制, 是我多想了。
回復

使用道具 舉報

12#
ID:161164 發表于 2021-8-14 22:04 | 只看該作者
鬼推磨 發表于 2021-8-14 18:55
這樣嗎?試過了; 。沒有效果。依然快速旋轉的,

你知道EA=0;和EA=1;代表什么嗎?
回復

使用道具 舉報

13#
ID:959346 發表于 2021-8-14 22:39 | 只看該作者
鬼推磨 發表于 2021-8-14 18:55
這樣嗎?試過了; 。沒有效果。依然快速旋轉的,

你在開始的時候EA=0; 都不進中斷了,一直到 EA=1; 之前,這段時間都沒有進中斷,舵機都沒有操作,直到EA=1; 開中斷后,舵機才開始操作,這時候你的角度已經是直接到最后的角度了,中間的操作根本沒有起到作用。你先把EA=0 改成 EA=1; 簡單點看看效果,再自己細調吧。
回復

使用道具 舉報

14#
ID:161164 發表于 2021-8-15 00:24 | 只看該作者
鬼推磨 發表于 2021-8-14 21:25
大師,你說的根本不可能實現。資料網上找遍了,。
沒有一例能成功控制舵機速度的,
都是只是停留在紙上 ...

呵呵,不是不可能,只是你不能以下片段示范了-90/0/+90 及 快慢速控制
Key1 = -90, Key2 = 0, Key3 = +90, Key4 = 快慢速
示波器顯示了PWM轉換速度


回復

使用道具 舉報

15#
ID:939710 發表于 2021-8-15 06:37 | 只看該作者
自己設個目標值,可以用pid或者其他方法平滑增加或減少到目標值
回復

使用道具 舉報

16#
ID:420836 發表于 2021-8-15 09:04 | 只看該作者
這是個好信息,謝謝分享。
回復

使用道具 舉報

17#
ID:475031 發表于 2021-8-15 12:21 | 只看該作者
Jiang_YY 發表于 2021-8-14 22:39
你在開始的時候EA=0; 都不進中斷了,一直到 EA=1; 之前,這段時間都沒有進中斷,舵機都沒有操作,直到EA= ...
  1. void main()
  2. {
  3.   Timer_Init();
  4.   while(1)
  5.   {
  6.    if(Key_1==0)
  7.    {
  8.      delay(10);
  9.      EA=1;
  10.      if(Key_1==0)
  11.      {
  12.         delay_ms(100);//1000ms毫秒=1s秒
  13.                          PWM_count=5;//0度  角度
  14.                                  delay_ms(100);//1000ms毫秒=1s秒
  15.                          PWM_count=4.9;//0度  角度
  16.                                  delay_ms(100);//1000ms毫秒=1s秒
  17.                          PWM_count=4.8;//0度  角度
  18.                                  delay_ms(100);//1000ms毫秒=1s秒
  19.                          PWM_count=4.7;//0度  角度
  20.                          delay_ms(100);//1000ms毫秒=1s秒
  21.                          PWM_count=4.6;//0度  角度
  22.                          
  23.                          delay_ms(100);//1000ms毫秒=1s秒
  24.                          PWM_count=4.5;//0度  角度
  25.                          delay_ms(100);//1000ms毫秒=1s秒
  26.                          PWM_count=4.4;//0度  角度
  27.                          delay_ms(100);//1000ms毫秒=1s秒
  28.                          PWM_count=4.3;//0度  角度
  29.                          delay_ms(100);//1000ms毫秒=1s秒
  30.                          PWM_count=4.2;//0度  角度
  31.                          delay_ms(100);//
  32.                          PWM_count=4.1;//45度  角度
  33.                                                                                                                    delay_ms(100);//
  34.                          PWM_count=4;//45度  角度
  35.                                                                                                                    delay_ms(100);//
  36.                          PWM_count=3.9;//45度  角度
  37.                                                                                                                    delay_ms(100);//
  38.                          PWM_count=3.8;//45度  角度
  39.                                                                                                                    delay_ms(100);//
  40.                          PWM_count=3.7;//45度  角度
  41.                          delay_ms(100);//1000ms毫秒=1s秒
  42.                          PWM_count=3.6;//0度  角度
  43.                           delay_ms(100);//1000ms毫秒=1s秒
  44.                          PWM_count=3.5;//0度  角度
  45.                                                                                                   delay_ms(100);//1000ms毫秒=1s秒
  46.                          PWM_count=3.4;//0度  角度
  47.                                                                                                   delay_ms(100);//1000ms毫秒=1s秒
  48.                          PWM_count=3.3;//0度  角度
  49.                                                                                                   delay_ms(100);//1000ms毫秒=1s秒
  50.                          PWM_count=3.2;//0度  角度
  51.                                                                                                  
  52.                          delay_ms(100);//
  53.                          PWM_count=3.1;//90度  角度
  54.                                                                                                  delay_ms(100);//
  55.                          PWM_count=3;//90度  角度
  56.                                                                                                  delay_ms(100);//
  57.                          PWM_count=2.9;//90度  角度
  58.                                                                                                  delay_ms(100);//
  59.                          PWM_count=2.8;//90度  角度
  60.                                                                                                  delay_ms(100);//
  61.                          PWM_count=2.7;//90度  角度
  62.                          delay_ms(100);//1000ms毫秒=1s秒
  63.                          PWM_count=2.6;//0度  角度
  64.                          delay_ms(100);//
  65.                          PWM_count=2.5;//90度  角度
  66.                                                                                                  delay_ms(100);//
  67.                          PWM_count=2.4;//90度  角度
  68.                                                                                                  delay_ms(100);//
  69.                          PWM_count=2.3;//90度  角度
  70.                                                                                                  delay_ms(100);//
  71.                          PWM_count=2.2;//90度  角度
  72.                                                                                                  
  73.                                                                                                  
  74.                          delay_ms(100);//
  75.                          PWM_count=2.1;//135度  角度
  76.                                                                                                  delay_ms(100);//
  77.                          PWM_count=2;//135度  角度
  78.                                                                                                  delay_ms(100);//
  79.                          PWM_count=1.9;//135度  角度
  80.                                                                                                  delay_ms(100);//
  81.                          PWM_count=1.8;//135度  角度
  82.                                                                                                  delay_ms(100);//
  83.                          PWM_count=1.7;//135度  角度
  84.                          delay_ms(100);//1000ms毫秒=1s秒
  85.                          PWM_count=1.6;//0度  角度
  86.                          delay_ms(100);//
  87.                          PWM_count=1.5;//135度  角度
  88.                                                                                                  delay_ms(100);//
  89.                          PWM_count=1.4;//135度  角度
  90.                                                                                                  delay_ms(100);//
  91.                          PWM_count=1.3;//135度  角度
  92.                                                                                                  delay_ms(100);//
  93.                          PWM_count=1.2;//135度  角度
  94.                          delay_ms(100);//
  95.                          PWM_count=1.1;//180度  角度
  96.                                                                                                                           delay_ms(100);//
  97.                          PWM_count=1;//180度  角度
  98.                
  99.       count=0;
  100.       EA=1;
  101.      }
  102.      while(!Key_1);
  103.    }
  104.    if(Key_2==0)
  105.    {
  106.      delay(10);
  107.      EA=1;
  108.      if(Key_2==0)
  109.      {
  110.         delay_ms(100);//1000ms毫秒=1s秒
  111.                          PWM_count=1.1;//0度  角度
  112.                                  delay_ms(100);//1000ms毫秒=1s秒
  113.                          PWM_count=1.2;//0度  角度
  114.                                  delay_ms(100);//1000ms毫秒=1s秒
  115.                          PWM_count=1.3;//0度  角度
  116.                                  delay_ms(100);//1000ms毫秒=1s秒
  117.                          PWM_count=1.4;//0度  角度
  118.                          delay_ms(100);//1000ms毫秒=1s秒
  119.                          PWM_count=1.5;//0度  角度
  120.                          
  121.                          delay_ms(100);//1000ms毫秒=1s秒
  122.                          PWM_count=1.6;//0度  角度
  123.                          delay_ms(100);//1000ms毫秒=1s秒
  124.                          PWM_count=1.7;//0度  角度
  125.                          delay_ms(100);//1000ms毫秒=1s秒
  126.                          PWM_count=1.8;//0度  角度
  127.                          delay_ms(100);//1000ms毫秒=1s秒
  128.                          PWM_count=1.9;//0度  角度
  129.                          delay_ms(100);//
  130.                          PWM_count=2;//45度  角度
  131.                                                                                                                    delay_ms(100);//
  132.                          PWM_count=2.1;//45度  角度
  133.                                                                                                                    delay_ms(100);//
  134.                          PWM_count=2.2;//45度  角度
  135.                                                                                                                    delay_ms(100);//
  136.                          PWM_count=2.3;//45度  角度
  137.                                                                                                                    delay_ms(100);//
  138.                          PWM_count=2.4;//45度  角度
  139.                          delay_ms(100);//1000ms毫秒=1s秒
  140.                          PWM_count=2.5;//0度  角度
  141.                           delay_ms(100);//1000ms毫秒=1s秒
  142.                          PWM_count=2.6;//0度  角度
  143.                                                                                                   delay_ms(100);//1000ms毫秒=1s秒
  144.                          PWM_count=2.7;//0度  角度
  145.                                                                                                   delay_ms(100);//1000ms毫秒=1s秒
  146.                          PWM_count=2.8;//0度  角度
  147.                                                                                                   delay_ms(100);//1000ms毫秒=1s秒
  148.                          PWM_count=2.9;//0度  角度
  149.                                                                                                  
  150.                          delay_ms(100);//
  151.                          PWM_count=3;//90度  角度
  152.                                                                                                  delay_ms(100);//
  153.                          PWM_count=3.1;//90度  角度
  154.                                                                                                  delay_ms(100);//
  155.                          PWM_count=3.2;//90度  角度
  156.                                                                                                  delay_ms(100);//
  157.                          PWM_count=3.3;//90度  角度
  158.                                                                                                  delay_ms(100);//
  159.                          PWM_count=3.4;//90度  角度
  160.                          delay_ms(100);//1000ms毫秒=1s秒
  161.                          PWM_count=3.5;//0度  角度
  162.                          delay_ms(100);//
  163.                          PWM_count=3.6;//90度  角度
  164.                                                                                                  delay_ms(100);//
  165.                          PWM_count=3.7;//90度  角度
  166.                                                                                                  delay_ms(100);//
  167.                          PWM_count=3.8;//90度  角度
  168.                                                                                                  delay_ms(100);//
  169.                          PWM_count=3.9;//90度  角度
  170.                                                                                                  
  171.                                                                                                  
  172.                          delay_ms(100);//
  173.                          PWM_count=4;//135度  角度
  174.                                                                                                  delay_ms(100);//
  175.                          PWM_count=4.1;//135度  角度
  176.                                                                                                  delay_ms(100);//
  177.                          PWM_count=4.2;//135度  角度
  178.                                                                                                  delay_ms(100);//
  179.                          PWM_count=4.3;//135度  角度
  180.                                                                                                  delay_ms(100);//
  181.                          PWM_count=4.4;//135度  角度
  182.                          delay_ms(100);//1000ms毫秒=1s秒
  183.                          PWM_count=4.5;//0度  角度
  184.                          delay_ms(100);//
  185.                          PWM_count=4.6;//135度  角度
  186.                                                                                                  delay_ms(100);//
  187.                          PWM_count=4.7;//135度  角度
  188.                                                                                                  delay_ms(100);//
  189.                          PWM_count=4.8;//135度  角度
  190.                                                                                                  delay_ms(100);//
  191.                          PWM_count=4.9;//135度  角度
  192.                          delay_ms(100);//
  193.                          PWM_count=5;//180度  角度
  194.                
  195.       count=0;
  196.       EA=1;
  197.      }
  198.      while(!Key_2);
  199.    }   
  200.   }
  201. }
復制代碼

回復

使用道具 舉報

18#
ID:959346 發表于 2021-8-16 11:07 | 只看該作者

你這個沒有說明,是啥情況?跟你最開始的比較,應該會有點變化了吧。你的 delay_ms(100); 時間要大于你定時器中斷count從0到最大值(你程序內是40吧)一個循環用的時間,這樣你調起來才會根據你的設想變化。
回復

使用道具 舉報

19#
ID:959346 發表于 2021-8-16 11:11 | 只看該作者
lkc8210 發表于 2021-8-15 00:24
呵呵,不是不可能,只是你不能以下片段示范了-90/0/+90 及 快慢速控制
Key1 = -90, Key2 = 0, Key3 = +9 ...

你這個的調速函數里應該就是平滑變化的,樓主的調速函數在中斷內直接跳到了最后需要的角度,所以你們說不到一處
回復

使用道具 舉報

20#
ID:161164 發表于 2021-8-16 13:55 | 只看該作者
Jiang_YY 發表于 2021-8-16 11:11
你這個的調速函數里應該就是平滑變化的,樓主的調速函數在中斷內直接跳到了最后需要的角度,所以你們說不 ...

對啊~但樓主好像看不到
回復

使用道具 舉報

21#
ID:916499 發表于 2021-8-17 15:35 | 只看該作者
一步一步的走,或者對轉矩要求不大的時候,加個電阻
回復

使用道具 舉報

22#
ID:960619 發表于 2021-11-5 22:15 | 只看該作者
本帖最后由 baobao125 于 2021-11-5 22:26 編輯

剛接觸舵機,這是延時減速旋轉的,調整a和PWM_count可以實現更平滑旋轉
#include <STC15F2K60S2.H>
sbit SG_PWM=P1^1;
unsigned int count=0;
unsigned int PWM_count=115;                  
unsigned int a=0;






void Timer_Init()        //5微秒@11.0592MHz
{
        AUXR |= 0x80;                //定時器時鐘1T模式
        TMOD &= 0xF0;                //設置定時器模式
        TL0 = 0xC9;                //設置定時初始值
        TH0 = 0xFF;                //設置定時初始值
        TF0 = 0;                //清除TF0標志
        TR0 = 1;                //定時器0開始計時
        ET0=1;          //打開定時器0的中斷
        EA=1;           //開總中斷
}

void Timer() interrupt 1   
{

TR0 = 0;
  if(count<=PWM_count)
  {
    SG_PWM=1;
  }
  else
  {
    SG_PWM=0;
  }
  count++;
  if(count>=4000)
  {
    count=0;
    a++;
  }
  TR0 = 1;
}
void main()
{
  Timer_Init();
  while(1)
  {
      
      if(a>=10)
      {
              PWM_count+=5;
        a=0;
    }
  }
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 9999精品视频 | 国产91视频一区二区 | 精品国产欧美一区二区三区成人 | 一区二区在线观看免费视频 | 欧美男人天堂 | 日韩毛片在线免费观看 | 国产精品国产馆在线真实露脸 | 伊人网综合 | 国产高清在线观看 | 精品视频久久久久久 | 国产高清视频一区 | 九九综合 | 99福利网| 久久51 | 日韩在线免费播放 | 日韩在线精品视频 | 国产二区精品视频 | 亚洲免费观看视频 | 一级毛片视频在线 | 精品欧美激情在线观看 | 97精品一区二区 | 91精品国产91| 国产精品久久久久久婷婷天堂 | 国内自拍偷拍视频 | 日日操网站 | 中文字幕精品一区 | 国产午夜精品一区二区三区嫩草 | 欧美一区在线看 | 久久精品综合网 | 午夜在线小视频 | 午夜在线观看视频 | a在线观看免费 | 欧美综合一区二区三区 | 国产999精品久久久 精品三级在线观看 | 天天躁日日躁狠狠的躁天龙影院 | 中文字幕视频在线观看 | 久久精品视频一区二区 | 中文字幕第100页 | 国产天堂| 伊人免费网 | 国产成人jvid在线播放 |