51单片机驱动伺服电机程序
- 格式:docx
- 大小:10.03 KB
- 文档页数:1
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:感谢大家的阅读,
本文由我司收集整编。仅供参阅!