舵機不能控制速度嗎?轉的太快了,一按不到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;
}
老師們,到底要怎么改,才能控制舵機速度?謝謝指導,,
- #include "STC15Fxxxx.H"
- //#include <intrins.h>
- #define uint unsigned int //定義一下方便后面使用
- //#define uchar unsigned char //定義一下方便后面使用
- #define MAIN_Fosc 11059200L//定義主時鐘
- sbit SG_PWM=P3^2;
- sbit Key_1=P5^4;
- sbit Key_2=P5^5;
- unsigned char count=0;
- unsigned char PWM_count=1; //1--0度,2--45度,3--90度,4--135度,5--180度
- void delay(unsigned char i) //延時
- {
- unsigned char j,k;
- for(j=i;j>0;j--)
- for(k=125;k>0;k--);
- }
- void Timer_Init()
- {
- TMOD=0X01; //T0定時方式1
- TH0=0Xfe;
- TL0=0X33; //計數初值設置為0.5ms 每0.5ms進入一次中斷,晶振頻率:11.0592MHZ
- ET0=1; //打開定時器0的中斷
- TR0=1; //打開定時器0
- EA=1; //開總中斷
- }
- void Timer() interrupt 1 //特別注意此處,0--外部中斷0,1--定時器中斷0,2--外部中斷1,3--定時器中斷1,4--串行口中斷1
- {
- TR0=0;
- TH0=0Xfe;
- TL0=0X33; //重新賦計數初值為0.5ms
-
- if(count<=PWM_count)
- {
- SG_PWM=1;
- }
- else
- {
- SG_PWM=0;
- }
- count++;
- if(count>=40)//原始是=40
- {
- count=0;
- }
- TR0=1;
- }
- void main()
- {
- Timer_Init();
- while(1)
- {
- if(Key_1==0)
- {
- delay(10);
- EA=0;
- if(Key_1==0)
- {
- PWM_count=1;//1--0度
-
- count=0;
- EA=1;
- }
- while(!Key_1);
- }
- if(Key_2==0)
- {
- delay(10);
- EA=0;
- if(Key_2==0)
- {
- PWM_count=5;//4--135度 轉動角度
-
- count=0;
- EA=1;
- }
- while(!Key_2);
- }
- }
- }
復制代碼
單片機源程序:
996舵機按鍵控制正反轉.rar
(24.96 KB, 下載次數: 12)
2021-8-14 10:11 上傳
點擊文件名下載附件
|