标题:
stm32与51控制舵机108度来回运动的源程序与原理(动态图片演示)
[打印本页]
作者:
黑哈哈
时间:
2018-4-25 15:47
标题:
stm32与51控制舵机108度来回运动的源程序与原理(动态图片演示)
通过stm32实现舵机108度来回运动
根据工作原理,舵机的具体控制方法就是需要一个20ms左右的时基脉冲,
该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。
脉冲宽度从0.5ms~2.5ms,相对应舵盘的位置为0~180度,呈线性变化。
***************一般舵机脉冲宽度20ms,高电平宽度与角度对应关系***********
0.5ms————0度;
1.0ms————45度;
1.5ms————90度;
2.0ms————135度;
2.5ms————180度;
根据上面的原理,我们知道单片机只要产生20ms的脉冲信号,通过改变高电平时间从0.5ms到2.5ms变化,就能使舵机转动到对应的角度
舵机控制原理动态图片演示:
Servo.gif
(112.72 KB, 下载次数: 85)
下载附件
2018-4-25 19:05 上传
stm32单片机源程序如下:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "pwm.h"
int main(void)
{
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
TIM1_PWM_Init(199,7199);//不分频。PWM频率===(7200*200)/72000000=0.02=20ms
while(1)
{
TIM_SetCompare1(TIM1,195);
delay_ms(500);
TIM_SetCompare1(TIM1,190);
delay_ms(500);
TIM_SetCompare1(TIM1,185);
delay_ms(500);
TIM_SetCompare1(TIM1,180);
delay_ms(500);
TIM_SetCompare1(TIM1,175);
delay_ms(500);
TIM_SetCompare1(TIM1,170);
delay_ms(500);
TIM_SetCompare1(TIM1,175);
delay_ms(500);
TIM_SetCompare1(TIM1,180);
delay_ms(500);
TIM_SetCompare1(TIM1,185);
delay_ms(500);
}
}
复制代码
51单片机:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit pwm=P0^0;
sbit key7=P3^7;
uchar count=0;
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void Timer0_Init()
{
TMOD=0x01;
TH0=(65536-200)/256;
TL0=(66636-200)%256;
EA=1;
ET0=1;
TR0=0;
}
void Timer0()interrupt 1
{
TH0=(65536-200)/256;
TL0=(66636-200)%256;
if(count<30)
pwm=1;
else
pwm=0;
count++;
if(count==100)
{
TR0=0;
count=0;
}
}
void keyscan()
{
if(key7==0)
{
delayms(10);
if(key7==0)
{
while(!key7);
TR0=1;
}
}
}
void main()
{
Timer0_Init();
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.jpg
(34.71 KB, 下载次数: 61)
下载附件
2018-4-25 19:05 上传
所有资料51hei提供下载:
PWM舵机.zip
(3.04 MB, 下载次数: 126)
2018-4-25 15:46 上传
点击文件名下载附件
舵机程序
下载积分: 黑币 -5
作者:
1246698540
时间:
2019-3-10 20:03
感谢分享
作者:
wangjiexiang
时间:
2019-8-4 15:14
谢谢分享
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1