STC89C52控制舵机

STC89C52控制舵机,第1张

别的不说,我先说说我觉得不妥的地方哈:

1. 100us一次中断是不是勤了点儿,这样即使能控制舵机,也会对程序的其他功能产生不利影响,舵机需要较高频率信号的话,可以考虑使用STC的11、12系列单片机,直接能输出PWM信号的,价格也不贵,顺丰的话2天就到;

2. 舵机所需的PWM占空比范围是多少,你尝试的范围比较窄,是不是占空比不合适,可以在程序中设定一个占空比缓慢自增、自减的程序测试一下,例如每秒x自增1之类的;

3. 输出驱动是怎么做的,有没有问题。

#include<reg52.h>//51单片机头文件

#define uint unsigned int //宏定义

#define uchar unsigned char //宏定义

void delay(uint)//延时子函数声明

void enable1(void)

void enable2(void)

sbit P1_0=P1^0//PWM信号输出端

sbit K1=P1^1

sbit K2=P1^2

sbit K3=P1^3

/****************************主函数***********************************/

void main()

{

P1_0=1//置PWM初始输出为高电平

while(1)

{

if(K1==0)

{

delay(20)

if(K1==0)

{

while(!K1)

enable1()

//while(!s2)

}

}

if(K2==0)

{

delay(20)

if(K2==0)

{

while(!K2)

enable2()

}

}

/* if(K3==0)

{

delay(20)

if(K3==0)

{

Init3

}

}

*/

}

}

void delay(uint z)

{

uint x,y

for(x=zx>0x--)

for(y=110y>0y--)

}

void enable1(void)

{

TMOD=0x01//设置定时器0工作方式1后面运行TR位启动

TH0=(65536-1500)/256

TL0=(65536-1500)%256//1.5ms 的高电平

EA=1//开总中断

ET0=1//开定时器0中断

TR0=1//启动定时器0

}

void enable2(void)

{

TMOD=0x10//设置定时器1工作方式1后面运行TR位启动

TH1=(65536-900)/256

TL1=(65536-900)%256//1.5ms 的高电平

EA=1//开总中断

ET1=1//开定时器1中断

TR1=1//启动定时器1

}

//设置第三种PWM方式的初始化

/*

void Init3()

{

TMOD=0x01//设置定时器0工作方式1后面运行TR位启动

TH0=(65536-1500)/256

TL0=(65536-1500)%256//1.5ms 的高电平

}

*/

/******************************中断服务程序**********************************/

void PWM1() interrupt 1 //定时器0 中断,产生方波

{

if(P1_0==1) //如果上个电平为1,则下个低电平的时间为18.5ms

{

TH0=(65536-18500)/256

TL0=(65536-18500)%256

}

else //如果上个电平为0,则下个高电平为1.5ms

{

TH0=(65535-1500)/256

TL0=(65535-1500)%256

}

P1_0=~P1_0

}

void PWM2() interrupt 3 //定时器1中断,产生方波

{

if(P1_0==1) //如果上个电平为1,则下个低电平的时间为18.5ms

{

TH0=(65536-19000)/256

TL0=(65536-19000)%256

}

else //如果上个电平为0,则下个高电平为1.5ms

{

TH0=(65535-900)/256

TL0=(65535-900)%256

}

P1_0=~P1_0

}

//定时器2设置第三种PWM波

/* void PWM3() interrupt 5 //定时器2 中断,产生方波

{

if(P1_0==1) //如果上个电平为1,则下个低电平的时间为18.5ms

{

TH0=(65536-18500)/256

TL0=(65536-18500)%256

}

else //如果上个电平为0,则下个高电平为1.5ms

{

TH0=(65535-1500)/256

TL0=(65535-1500)%256

}

P1_0=~P1_0

}

*/

辛苦之作,如果能够回答你的问题,别忘了给分哦~~喵喵


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7910586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存