舵机不能控制速度吗?转的太快了,一按不到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)
|