51单片机,舵机控制程序的问题。 把程序写到单片机里,只能感觉到舵机在轻微震动的,但是舵机却没有转。

我设置了两个定时器模拟PWM。以下是我的程序,求大神们看看我错哪里了。。最好定时器的时间也帮我看看有没有算错,在这里谢谢大家了。#include <reg51.h>//51单片机 11.0592MHZ晶振//功能:舵机1秒转动10° 满方向之后反方向转unsigned char target;sbit OUT=P1^0;void delay(void) //误差 -0.651041666667us{ unsigned char a,b; for(b=102;b>0;b--) for(a=3;a>0;a--);}void SetTimer0(unsigned char i){ unsigned char a; a=65535-(500000+111111*i)/1085; // i增加1,舵机转角增加10° TH0=a/256; TL0=a%256; }void InitTimer0(void){ TMOD=0x01;//0000 0001 设置为定时器0且工作于模式1 TH0=0xfe; //0.5ms不知道算错没 TL0=0x33; }void InitTimer1(void){ TMOD = TMOD|0x10;//0001 0001 设置为定时器1且工作于模式1 TH1 = 0xB7; //20ms不知道算错没 TL1 = 0xFE;}void Timer0Interrupt(void) interrupt 1{ TR0=0; //关闭定时器0 一个周期只中断1次 OUT=0; //PWM输出口为低}void Timer1Interrupt(void) interrupt 3{ OUT=1; //PWM输出口为高 SetTimer0(target); //改变脉冲宽度 TR0=1; //开启定时器0}void main(){ unsigned char b; IE=0x8A; //1000 1010 开启 总中断、T0中断、T1中断 允许位 InitTimer0(); InitTimer1(); TCON|=0x50;//TR1=1;TR0=1; while(1) { if(b==0) { target++; if(target==18) b=1; delay(); } else { target--; if(target==0) b=0; delay(); } }}

如果是直流电机的话,PWM只能调节速度,不能控制转角,这么说来,显然程序的控制思路是不正确的。追问

审题要仔细,我写的是舵机。哥哥,舵机PWM可以调节转角的,直流电机PWM只能调节转速不能调节转角这个大家都知道。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答