您的位置 首页 电子

51单片机驱动伺服电机程序

51单片机除了几款加强版的带pwm,很多都不带,所以要用51控制伺服电机很多时候就要软件模拟pwm。看了些代码有的是通过延时来输出pwm波,有

51单片机除了几款加强版的带pwm,许多都不带,所以要用51操控伺服电机许多时分就要软件模仿pwm。看了些代码有的是经过延时来输出pwm波,有的也用了定时器可是那些代码要驱动多路伺服电路就显得比较费事。下面的代码是经过定时器0产生每0.5ms一次的提示,程序在大循环中经过调用DJ()函数能够返还值给伺服电机信号引脚,DJ()函数能够定旋转的视点,可是由于定时器设置是0.5ms的中止这就决议了旋转呢视点只能是-45,-90,0,45,90。假如要进步精度就要经过设置定时器的初值,改动函数的num值来达到。
#include”reg52.h”
unsigned int num=0;
//舵机
sbit DJ1=P3^6;
sbit DJ2=P3^7; /*引脚界说*/
int DJ(int a); //函数声明
timerinit() //定时器中止初始化
{
TMOD=0x01; //设置定时器0为工作方式1
EA=1; //开总中止
ET0=1; //定时器0中止答应
TH0 = (65536-500)/256; //初值使得定时器0.5毫秒溢出
TL0 = (65536-500)%256;
TR0=0;
}
main()
{
timerinit();
while(1)
{
}
}
timer() interrupt 0 //0.5ms产生一次中止,20ms后定时器置0从头计数
{
num++;
DJ1=DJ(3);
DJ2=DJ(3);
if(num>=40)
{
num=0;
TH0 = (65536-500)/256; //初值使得定时器0.5毫秒溢出
TL0 = (65536-500)%256;
return;
}
}
int DJ(char a) //当a=3舵机地点的方位是0度a=2 a=1别离对应的方位是-45 -90度a=4 a=5对应方位为45 90度
{
if(num>=a||num>=5)
return 0;
if(num>=1)
return 1;
}
时刻匆促还没有测验程序的可行性(通常是没有问题呢,呵呵),等有时刻的话会持续完善程序加上能够操控舵机旋转速度的功用。假如要弄机器人的话仍是弄块专业的驱动板吧,那样调试起来会很直观很便利呢削减许多不必要的费事呢。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/255210.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部