单片机STC89C52 如何控制舵机 10
我的单片机扩展板上只有一个VCC+DC-的直流电机(普通的1块钱的马达)接口,和一个5线式的步进电机控制接口。(D,C,B,A,VCC+5个针脚)但是就是没有舵机的接口(...
我的单片机扩展板上只有一个VCC+ DC-的直流电机(普通的1块钱的马达)接口,和一个5线式的步进电机控制接口。(D,C,B,A,VCC+ 5个针脚)
但是就是没有舵机的接口(单片机有40个引出针,可以接其他东西,不知道可以直接接舵机么),而机器人都是用舵机进行摆臂控制的吧,我应该怎么做,难道还要买新的机器人控制器吗?
如何让 FUTABA S3003 动起来 展开
但是就是没有舵机的接口(单片机有40个引出针,可以接其他东西,不知道可以直接接舵机么),而机器人都是用舵机进行摆臂控制的吧,我应该怎么做,难道还要买新的机器人控制器吗?
如何让 FUTABA S3003 动起来 展开
6个回答
展开全部
#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=z;x>0;x--)
for(y=110;y>0;y--);
}
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;
}
*/
辛苦之作,如果能够回答你的问题,别忘了给分哦~~喵喵
#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=z;x>0;x--)
for(y=110;y>0;y--);
}
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;
}
*/
辛苦之作,如果能够回答你的问题,别忘了给分哦~~喵喵
推荐于2017-09-02 · 知道合伙人数码行家
关注
展开全部
1、舵机控制信号一般是50HZ的PWM波,占空比在10%-20%之间,51自己写程序用定时器实现占空比控制就可以。
2、如果是步进电机,我知道要在他们(电机和单片机)之间加个ULN2003控制心片就可以了。
3、舵机的控制信号时周期为20毫秒的信号,高电平时间为1ms到2ms,因此用任何一个I/0口输出中信号就可以控制舵机运转。
2、如果是步进电机,我知道要在他们(电机和单片机)之间加个ULN2003控制心片就可以了。
3、舵机的控制信号时周期为20毫秒的信号,高电平时间为1ms到2ms,因此用任何一个I/0口输出中信号就可以控制舵机运转。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不需要的。但是你可能得需要一个高于5V的电源,该电源给舵机供电(具体是多少要看舵机的需求了,因为5V电源可能驱动不起来舵机)。单片机随便一个I/O口生成方波信号送给舵机的信号线就可以了。别忘了电源与单片机的电源共地哦!
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用单片机io口产生周期固定,占空比可调的信号
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询