51智能小车系列文章目录
第一节
基于51单片机霍尔编码器测速、PID算法电机调速系统设计
第一节连接
第二节
基于51单片机的舵机旋转任意指定角度的程序设计
前言
在介绍控制舵机前先简单介绍一下PWM脉宽调制和舵机控制原理。
1.PWM
1.1什么是PWM
PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进 行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通 过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的 时间占据整个信号周期的百分比,例如方波的占空比就是50%。
1.2如何实现PWM信号输出
- 通过芯片内部模块输出,一般观察手册或者芯片IO口都会标明这个是否是PWM口。
- 如果没有集成PWM功能,可以通过IO口软件模拟,相对硬件PWM来说精准度略差。
2.控制舵机
2.1什么是舵机
如下图所示,最便宜的舵机sg90,常用三根或者四根接线,黄色为PWM信号控制。
尺寸:21.5mm * 11.8mm * 22.7mm 重量:9克 (1kg=1公斤=2斤) 无负载速度:0.12秒/60度(4.8V) 0.002s/度 堵转扭矩:1.2-1.4公斤/厘米(4.8V) 使用温度:-30~~+60摄氏度 死区设定:7us (7MHZ) 工作电压:4.8V-6V 位置等级:1024级 脉冲控制精度为2us。
用处:垃圾桶项目开盖用、智能小车的全比例转向、摄像头云台、机械臂等等。
常见的有0-90°、0-180°、0-360°
2.2如何控制舵机
采用PWM控制的方式来进行舵机的操纵,舵机的控制需要MCU产生一个20ms的脉冲信号,以0.5ms到2.5ms的高电平来控制舵机的角度。对于180°舵机的控制数据如下:
0.5ms-------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;
一、接线
舵机的电源线依次对应连接,信号线连接51单片机P2.7口。
二、程序源码
代码如下(示例):
#include <reg52.h>
#include <intrins.h>
sbit PWM = P2^7; //设定PWM输出的I/O端口
unsigned char count = 0;
unsigned char timer1 ;
unsigned char angle=15;
/*
对于小车
angle=10————左转45度
angle=15————不转0度
angle=20————右转45度
*/
void Timer2_Init(void)
{
// T2MOD = 0; //初始化模式寄存器
T2CON = 0; //初始化控制寄存器
TL2 = 0xA4; //设置定时初值
TH2 = 0xFF; //设置定时初值
ET2=1;
EA=1;
PT2=0;
TR2 = 1; //定时器2开始计时
}
void S_pwm()
{
if(count <= timer1) //5==0° 15==90°
{
PWM = 1;
}
else
{
PWM = 0;
}
count++;
if (count >= 200) //T = 20ms清零
{
count = 0;
}
TR0 = 1; //开启T0
}
//中断服务函数模板
void Timer2_Routine() interrupt 5
{
TF2 = 0; //中断标志复位
RCAP2L = 0xA4; //设置低位定时初值
RCAP2H = 0xFF; //设置高位定时初值
S_pwm();
}
void turn(signed char angle)
{
timer1 =angle;
count=0;
}
void mian()
{
//定时器初始化
Timer2_Init();
turn(15);//默认0度
while(1)
{
turn(10);//左转45度
}
}
总结
以上就是今天要讲的内容,本文仅仅简单介绍了舵机旋转指定角度的使用,本人也是小白,如有错误还望指正。