如何使用单片机控制伺服电机?

伺服电机是我们常用的一种电机,在本文的案例中,将学习如何使用单片机控制伺服电机,案例以pic16f877a单片机作为接口的连接与控制示例。
什么是伺服电机?
伺服电机是一种根据给定指令运行的特殊电机。它提供了精确的角度控制,这也意味着与其他电机通电即旋转不同。伺服电机仅旋转到一定程度或直到需要下一次旋转,在这之前电机会停止不动并等待下一条指令,才能执行进一步的动作。所以,伺服电机需要借助伺服机电路进行控制才能按要求旋转,它的角旋转和最终运动由位置反馈决定,其控制线的输入也决定了输出轴所需的位置。
伺服电机与pic16f877a接口的伺服电机电路图:
它有一个非常简单的电路图。伺服电机的控制线直接连接到单片机的rb0引脚。该销将提供电机所需的角位移。在这个项目中,假设我们正在使用一个角旋转被限制在0°-180°的伺服电机。我们可以通过使用宽度变化的脉冲以最高精度控制电机的旋转以达到所需的角度。
每20毫秒(20000微秒)后向伺服电机提供一个脉冲。电机的角位置由该脉冲的长度决定。角度位置0°、90°和180°在代码中演示。
下面是用于控制伺服电机的pic单片机接口的c代码,我们在编译器中编写以下与pic接口的伺服电机代码:
void rotation0() //0度
{
unsigned int i;
for(i=0;i<50;i++)
{
portb.f0 = 1;
delay_us(800); //800us 脉冲
portb.f0 = 0;
delay_us(19200);
}
}
void rotation90() //90度
{
unsigned int i;
for(i=0;i<50;i++)
{
portb.f0 = 1;
delay_us(1500); //1500us 的脉冲
portb.f0 = 0;
delay_us(18500);
}
}
void rotation180() //180 度
{
unsigned int i;
for(i=0;i<50;i++)
{
portb.f0 = 1;
delay_us(2200); //2200us 的脉冲
portb.f0 = 0;
delay_us(17800);
}
}
void main()
{
trisb = 0; // portb作为输出端口
do
{
rotation0(); //0度
delay_ms(2000);
rotation90(); //90度
delay_ms(2000);
rotation180(); //180度
}while(1);
}
代码开头已经声明了电机角旋转0°、90°和 180°的各个函数。在本教程中,我们没有使用pic16f877a的实际脉冲宽度调制功能来生成脉冲。而是,脉冲是在程序延迟的帮助下产生的。特定角度的延迟持续时间等于电机旋转到相应角度所需的脉冲长度。也就是说,对于0°角,脉冲宽度约为800ms,因此在port引脚rb0设置为高时引入了800ms的延迟。同样,旋转90°需要1500ms的脉冲,180°角度需要2200ms。
在主程序中,将portb设置为输出端口,三个函数都被调用,它们之间有2000ms的延迟。该程序使电机以某种模式旋转,比如0°–90°–180°–0°等等。这将在无限循环“do-while”循环中持续运行,直到程序中止。

曝AirPods2将在明年第一季度推出 AirPods3迎全新外观设计
河姆渡66企业购是什么节日?你想要的省钱攻略都在这里了!
人工智能和IoT物联网将是未来彩电破局的关键点
超300亿晶体管——3倍于最高端服务器CPU
鹿客智能猫眼青春版高清图赏
如何使用单片机控制伺服电机?
探索如何构建一个强大的视觉层次,使其成为高性能的图像特征提取器
嵌入式设计应具备的基本技能
苹果盟友多变 如今高通携手三星反击苹果
造车新势力就像一场资本豪赌,新势力们量产也只能续上0.01条命
Intel对现售酷睿i9-10900K包装进行变更
新思科技发布具有 AI 智能传感功能的电池供电型智能设备-ARC 处理器
60V低IQ、双输出同步降压控制器,具有可调栅极驱动
多款搭载紫光展锐新一代6nm 5G SoC的智能终端量产上市
承包年轻人618痛快夜!创维王海邀《乡村爱情》谢大脚开痛快超市
新的苹果电池需要激活吗?
非洲猪瘟检测仪器基本介绍,技术参数是什么?
软通动力携手华为云ROMA Connect成立行业生态联盟,共创企业应用新未来
labview和Proteus区别是什么
厉害了,15岁少年制造出一个3D仿真机器人!