新人报道区
登录
直播中
徐童旭
8年用户
74经验值
擅长:控制/MCU
私信
关注
用51单片机(STC89C52)控制MG995舵机不动的问题
开启该帖子的消息推送
本人最近参加一个智能小车比赛,现在遇到这个问题,即不能用51
单片机
控制MG995舵机。针对这个问题,我也在网上查了一些资料,感觉有几个原因1.程序问题,希望大神来看一下,下面给程序;
2.给舵机的电压和电流不够;(用的是4节1.5V干电池,用万用表测过有5.3V)
3.没有共地;(最后有共地)
4.单片机IO口要接一个电阻才能与舵机控制线连接。(这个还没有测试)
如果有其他原因请大神赐教。
程序:
//***********************************************************************************//
//蓝牙参考程序
//Designed by caizx
//2015.4.14
//单片机型号:STC89C52
//晶振:11.0592MHz
//***********************************************************************************//
//注意晶振用11.0592MHz!
#include
#define uchar unsigned char
#define uint unsigned int
//L298N的输入控制引脚INT1~4
***it IN1=P1^0;
***it IN2=P1^1;
***it ENA=P1^2;
***it PWM1=P1^6;//舵机信号控制线
uchar i=0,g;
uchar m=0,n;
//用于接收蓝牙数据的变量,之后可以通过判断这个变量实现你要的动作
unsigned char bluetooth_data;
//定时器初化,用为波特率发生器,串口与蓝牙模块
通信
void
ti
mer_Init(void)
{
TMOD=0x20;//设置串口
TH1=0xfd;//设波特率为9600bps
TL1=0xfd;
TR1=1; //打开定时器
}
//串口设置,同样为与蓝牙通信的串口作准备
void UART_Init(void)
{
REN=1;//开始接收
SM0=0;//8位UART
SM1=1;
EA=1;//中断
ES=1;
}
//定时器中断服务程序 舵机控制部分
void DigDisplay(uchar g)
{
TH0=0xff;//(65535-1830)/256; //给定时器赋初值,定时100us
TL0=0xa4;//(65535-1830)%256;
if(i
PWM1=1;
else
PWM1=0;
i++;
if(i>200)
i=0;
}
//定时器中断服务程序 电机调速控制部分
void DigDisplay1(uchar n)
{
TH0=0xff;//(65535-1830)/256; //给定时器赋初值,定时100us
TL0=0xa4;//(65535-1830)%256;
if(m
ENA=1;
else
ENA=0;
m++;
if(m>200)
m=0;
}
//直流电机正反转
/*
ENA=1;
IN1=0; //正转
IN2=1;
ENA=1;
IN1=1;//反转
IN2=0; */
//主函数
void main()
{
Timer_Init(); //定时器初始化
UART_Init(); //串口设置初始化
while(1)
{
switch(bluetooth_data)//判断bluetooth_data的值,这个值应与
手机
app上你设置的值保持一致
{
//下面是假设的动作,具体动作定义由你而定
case 'F':ENA=1;IN1=0;IN2=1;DigDisplay(15);break;//前进
case 'B':ENA=1;IN1=1;IN2=0;DigDisplay(15);break;//后退
case 'L':ENA=1;IN1=0;IN2=1;DigDisplay(10);break;//左转45度
case 'R':ENA=1;IN1=0;IN2=1;DigDisplay(20);break;//右转45度
case '1':ENA=1;IN1=0;IN2=1;DigDisplay(15);DigDisplay1(n++);break;//加速 按键A
case '3':ENA=1;IN1=0;IN2=1;DigDisplay(15);DigDisplay1(n--);break;//减速 按键C
case '0':ENA=0;IN1=0;IN2=0;DigDisplay(15);break; //停止
}
}
}
//中断服务程序,在这里接收蓝牙发来的数据,在SBUF里面
void Uart_Isr() interrupt 4//串口中断
{
RI=0; //清除接收标志
bluetooth_data=SBUF; //接收数据
}
已退回
5
积分
回帖
(4)
徐童旭
2016-7-20 22:12:12
希望有大神来帮忙
希望有大神来帮忙
举报
徐童旭
2016-7-20 22:13:24
我也只是大一学电气的一名学生,有问题请多多赐教
我也只是大一学电气的一名学生,有问题请多多赐教
举报
徐童旭
2016-7-20 22:13:47
谢谢啦
谢谢啦
举报
徐童旭
2016-7-20 22:15:04
我也只是大一学生,学电气的,这是第一个比赛,希望有人指点
我也只是大一学生,学电气的,这是第一个比赛,希望有人指点
举报
更多回帖
rotate(-90deg);
回复
相关问答
单片机
控制
MG995
舵机
程序
2013-08-14
13168
如何去制作一个基于
51
内核的
stc89c52
板子呢
2021-10-15
1855
AT
89C51
与
STC89C52
的区别
2014-05-11
47394
STC89C51
单片机
怎么样灵活的
控制
舵机
?
2023-11-07
348
基于
51
内核的
stc89c52
板子是如何去
控制
步进电机的?
2021-06-29
850
如何利用
STC89C52
单片机
做出一个简易的计算器?
2021-09-28
1315
求一种基于
STC89C52
单片机
的电子万年历设计方案
2021-07-19
1981
如何利用
STC89C52
单片机
实现多路温度采集系统的设计?
2022-02-17
1619
STC89C52
单片机
和LCD1602
2018-11-08
3451
如何去实现一种基于
STC89C52
单片机
点亮LED灯的设计
2021-09-23
1587
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分