1、自制的51单片机最小系统板。
2、加入了一个7805CV稳压模块,使用12V直流供电,随便找了个电源适配器。输出12V,1A
3、问题:确保程序无误,接线无误,上电之后舵机有轻微咔咔声,无法正确运行。或者有时候反复重新执行。根据观察判断是单片机运行几条指令之后就自动断电复位。
解决;经过网上查询,基本确定是供电问题。由于公用一个电源,导致供电不足,都无法正常运行。但是又不想用2个电源,太麻烦,因此用一个电源分出两路7805分别带动单片机和舵机,两路共地,运行之后一切正常,在面包板上测试没问题。
4、改进之后:
5、程序代码:
#include "reg52.h"
//开发板做信号,自制板做电源可以稳定运行(共地)。
//自制版做信号,外接直连5V,可稳定运行(共地)。
sbit sg90_con = P1^0;
sbit light = P1^1; //设置指示灯以判断程序是否正确运行
int jd;
int cnt = 0;
void Delay2000ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 15;
j = 2;
k = 235;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Time0Init()
{
TMOD = 0x01;
TL0=0x33;
TH0=0xFE;
TR0 = 1;
TF0 = 0;
ET0 = 1;
EA = 1;
}
void Delay300ms()
{
unsigned char i, j, k;
i = 2;
j = 15;
k = 50;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
Delay300ms();
Time0Init();
jd = 1;
cnt = 0;
sg90_con = 1;
jd = 3;
cnt = 0;
Delay2000ms();
jd = 1;
cnt = 0;
Delay300ms();
Time0Init();
jd = 1;
cnt = 0;
sg90_con = 1;
jd = 3;
cnt = 0;
while(1) //让舵机只动一次,然后进入死循环,我是用来开电脑的,有别的需求自己改。
{
light = 0;
Delay300ms();
light = 1;
Delay300ms();
}
}
void Time0Handler() interrupt 1
{
cnt++;
TL0=0x33;
TH0=0xFE;
if(cnt < jd)
{
sg90_con = 1;
}
else
{
sg90_con = 0;
}
if(cnt == 40)
{
cnt = 0;
sg90_con = 1;
}
}
5、总结:由于本人模电一窍不懂,所以走了很多弯路,双电源确实能解决问题,但是觉得过于麻烦,此方法使用一个电源就能正常工作。电源适配器选功率高一点的,太低的话可能也无法正常运行,毕竟舵机运行时候需要几百毫安的电流。
6、改进:可以装一个红外接收,用于控制舵机功能。也可根据需要添加其他功能。
文章来源:https://www.toymoban.com/news/detail-633340.html
文章来源地址https://www.toymoban.com/news/detail-633340.html
到了这里,关于51单片机驱动SG90舵机抖动或者无反应问题解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!