伺服电机在电子和嵌入式系统中非常有用。您可以在您周围的任何地方找到伺服电机,它们被用于玩具,机器人,计算机CD托盘,汽车,飞机等。之所以如此广泛,是因为伺服电机非常可靠和精确。我们可以将其旋转到任何特定角度。它们的范围很广,从高扭矩电动机到低扭矩电动机都有。在本教程中,我们将把伺服电动机连接到8051微控制器(AT89S52)。
首先,我们需要了解伺服电机的工作原理。伺服电机基于PWM(脉冲宽度调制)原理工作,这意味着其旋转角度由施加到其控制PIN的脉冲的持续时间控制。伺服电动机基本上由直流电动机组成,该直流电动机由可变电阻器(电位计)和一些齿轮控制。直流电动机的高速力通过齿轮转换为扭矩。我们知道,工作=力X距离,在直流电动机中,力较小,距离(速度)较大,在伺服中,力较大,距离较小。电位计连接到伺服的输出轴,以计算角度并将直流电动机停在所需的角度。
伺服电动机可以从0到180度旋转,但最高可以上升到210度,具体取决于制造商。可以通过施加LOGIC 1级脉冲持续1ms到2ms的时间来控制这种旋转程度。1毫秒可以将伺服旋转到0度,1.5毫秒可以旋转到90度,而2毫秒脉冲可以将其旋转到180度。1到2毫秒的持续时间可以使伺服电机旋转到0到180度之间的任何角度。
电路图和工作说明
伺服电机有三根导线,红色表示Vcc(电源),棕色表示接地,橙色表示控制线。控制线可以连接到8051,我们已将其连接到8051的引脚2.1。现在我们必须将该引脚保持为逻辑1的时间为1ms,以将其旋转0度,将1.5ms旋转为90度,将2ms旋转为180度。我们已经使用8051的片上定时器来产生延迟。我们通过“ servo_delay”函数创建了50us的延迟,并使用“ for”循环创建了50us的倍数的延迟。
我们使用定时器0并处于模式1,因此我们将01H放入TMOD寄存器。模式1为16位定时器模式,TH0包含16位定时器的高字节,TL0包含16位定时器的低字节。我们将FFD2放入16位定时器寄存器中,将FF放入TH0中,将D2放入TL0中。将FFD2放置会产生大约10ms的延迟。以11.0592MHz的晶体频率为50 us。 TR0和TF0是TCON寄存器的位,TR引脚用于在设置位置时启动定时器并在复位(0)时停止。 TF是溢出标志,溢出时由硬件设置,需要通过软件对其进行复位。基本上,TF告知定时器已完成,由16位定时器从FFFFH转换为0000H时由硬件设置。您可以阅读有关“ 8051定时器”的信息,以了解定时器寄存器中值的计算,以创建50 us延迟。
现在,从CRO进行测量时,servo_delay函数的13个循环将提供1ms的延迟,因此我们从1ms(13个循环)开始,到2ms(26个循环)开始,将伺服器从0度旋转到180度。但是我们将延迟从1ms逐渐增加,将1ms到2 ms的窗口分为7个部分,例如1.14ms,1.28 ms,1.42ms等,因此伺服器将以大约1的倍数旋转。26度(180/7)。180度后,它将自动返回0度。