51单片机驱动伺服电机程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机驱动伺服电机程序
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;sb it DJ2=P3; /*引脚定义*/int DJ(int a); //函数声明timerinit() //定时器中断初始化{TMOD=0x01; //设置定时器0 为工作方式1EA=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;} 时间仓促还没有测试程序的可行性(通常是没有问题呢,呵呵),等有时间的话会继续完善程序加上可以
控制舵机旋转速度的功能。如果要弄机器人的话还是弄块专业的驱动板吧,那
样调试起来会很直观很方便呢减少许多不必要的麻烦呢。tips:感谢大家的阅读,
本文由我司收集整编。仅供参阅!