51单片机控制舵机c语言代码,一文解析51单片机PWM双舵机控制(附程序)

描述

PWM简介

脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。

什么是舵机

舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。舵机是船舶上的一种大甲板机械。

本文主要介绍的是51单片机PWM双舵机控制,具体的跟随小编来了解一下。

51单片机PWM双舵机控制详解

使用的舵机——盛辉SG90舵机(标准版)

49f307bccd821889a0c76a303322002c.png

盛辉SG90舵机的工作原理

406e4761f364796b178add4b84bf2816.png

首先、在这个舵机的内部有一个基准电压。如果我们想要控制这个舵机的转动。那么我们就要通过一定信号线给它一个一定周期的直流偏置电压。

最终舵机内部会根据直流偏置电压与内部基准电压进行比较,获得电压差输出。最后电压差的正负输出到电机驱动芯片决定电机的正反转。

经过这样一个简单的叙述我们大概知道了该怎么控制舵机的正反转。

下面我们了解一下该给它什么样周期的直流偏置电压呢?

下看一下占空比的概念(图示):

2c093c0761bb44ab3575f5d10fb39ea3.png

如上图:占空比 = t / T;

想要控制舵机,那么我们就需要一个周期T = 20ms。高电平小t等于0.5ms-2.5ms之间的这样一个方波。

为什么是这个参数呢?

0b264071d1f58fc676d2afb1f40f559f.png

通过上面的一下基础概念性的知识我们已经大概了解了舵机的工作原理。接下来让我们来看一下如果用C51单片机PWM来调节控制它

对于T = 20ms 。我们可以定时器0(方式1)来计数。每次0.1ms。如果计数达到200则说明一个周期到了,计数清0

补充:

60947e255d12d7e27922c1d52888966d.png

对于t = 0.5ms—–2.5ms我们可以采用全局变量。让全局变量等于5—25之间,因为我的舵机的一个计数周期是0.1ms,这样全局变量的5—25正好就是0.5ms—2.5ms

有了这个对应关系,那么程序变的简单起来:

28bb250b1ac6620d719348fd59b2b4bf.png

c0a0eca15f7dc9fc2ea6e7e90772d392.png

0148f2aa644c5687145ee6fdd25b7cef.png

0ca1eabed41feb2ddefd8aafb09d9ef6.png

aa31857bea6bc80c6acde0df941bdbb9.png

打开APP阅读更多精彩内容

点击阅读全文

  • 20
    点赞
  • 157
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明
好的,下面是一个简单的51单片机控制舵机程序,使用定时器1产生PWM信号来控制舵机的角度,具体实现如下: ``` #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit PWM = P1^2; // PWM输出引脚 void Init_Timer1(); // 定时器1初始化函数 void Delay10us(); // 延时10us函数 void main() { Init_Timer1(); // 定时器1初始化 while(1) { // 控制舵机转动到0度 PWM = 1; Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); PWM = 0; Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); // 控制舵机转动到90度 PWM = 1; Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); PWM = 0; Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); // 控制舵机转动到180度 PWM = 1; Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); PWM = 0; Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); } } void Init_Timer1() { TMOD |= 0x10; // 定时器1工作在模式1 TH1 = 0xFC; // 定时器1初值,产生20ms的周期 TL1 = 0x18; ET1 = 1; // 允许定时器1中断 EA = 1; // 允许总中断 TR1 = 1; // 启动定时器1 } void Delay10us() // 延时10us函数 { uchar i, j; i = 1; j = 158; do { while (--j); } while (--i); } void Timer1() interrupt 3 // 定时器1中断服务程序 { static uint cnt = 0; if (cnt < 10) // 控制舵机角度的占空比 PWM = 1; else PWM = 0; cnt++; // 计数器自加 if (cnt == 20) // 计数器归零 cnt = 0; } ``` 在上面的程序中,我们使用定时器1产生20ms的周期,然后在定时器中断服务程序控制PWM信号的占空比,以达到控制舵机角度的目的。需要注意的是,我们控制舵机的角度是通过改变PWM信号的占空比来实现的,因此需要在程序中设置合适的占空比来控制舵机的角度。 希望以上内容能够对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值