标题:
求助如何用51单片机精准地控制舵机的角度(新人贴)
[打印本页]
作者:
手写从前156
时间:
2018-9-27 12:03
标题:
求助如何用51单片机精准地控制舵机的角度(新人贴)
这是目前我写的程序,有问题的是只要上电舵机就会自动地转动,然后就没反应了:
#include<reg52.h>
//引脚位定义
sbit key1 = P3^2;
sbit key2 = P3^3; //独立按键引脚
sbit pwm1 = P1^2; //读取脉宽
sbit led1 = P2^2; //点亮led3
sbit led2 = P2^1; //点亮led2
unsigned int JD = 90;//角度累加
unsigned int T0NUM = 0; //中断累加
void init_time()//初始化定时器
{
// AUXR &= 0x7F; //定时器时钟12T模式
TMOD = 0x01; //设置定时器模式
TL0 = 0xF5; //设置定时初值
TH0 = 0xFF; //设置定时初值
EA = 1; //中断总开关
TR0 = 1; //定时器0开始计时
ET0 = 1; //打开中断允许开关
}
void Delay10ms() //12晶振
{
unsigned char i, j;
i = 117;
j = 184;
do
{
while (--j);
} while (--i);
}
/*void PWMOUT(unsigned jiaodu)
{
if(T0NUM <= jiaodu+45)
pwm1 = 1;
else
pwm1 = 0;
if(T0NUM >= 1801)
T0NUM = 0;
} */
void main()
{
init_time();
while(1)
{
if(key1 == 0)
{
Delay10ms();
if(key1 == 0)
{
JD ++ ;
led1 = ~led1;
while(key1 == 0);
}
}
//----------------------------
if(key2 == 0)
{
Delay10ms();
if(key2 == 0)
{
JD -- ;
led2 = ~led2;
while(key2 == 0);
}
}
//------------------------------
if(JD > 180)
JD = 180 ;
if(JD < 1)
JD = 1 ;
//------------------------------
}
}
void time0_init() interrupt 1
{
TR0 = 0;
TL0 = 0xF5; //设置定时初值
TH0 = 0xFF; //设置定时初值
T0NUM++;
TR0 = 1;
if(T0NUM <= JD+45)
pwm1 = 1;
else
pwm1 = 0;
if(T0NUM >= 1801)
T0NUM = 0;
}
复制代码
作者:
cccc888
时间:
2018-9-27 15:32
从你的源码看 可能是 P1^2接电机信号线。定时时间可能是11微秒,频率11-12M
void time0_init() interrupt 1这个程序如果mcu是12t的,那么这个程序没处理完,就又进入
中断了。
作者:
喵唧唧
时间:
2018-9-27 20:09
学到了厉害
作者:
小玺
时间:
2020-2-25 01:44
感觉这种中断次数太多,耗费cpu太大。请问哪位大神还有更好的舵机小角度调整办法吗?
作者:
haierzaifei11
时间:
2020-2-25 08:31
我也感觉中断次数太多,耗费cpu太大
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1