专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
电路设计
感觉好奇怪,能够红外控制LED灯却控制不了电机
2019-07-16 18:17
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
电路设计
1746
1
1619
本帖最后由 愚蠢的萝卜 于 2015-3-24 22:31 编辑
控制电机三种工作状态:全速,减速,停(电机是
单片机
Moto引脚低电平的时候转动)
但是我开启单片机后
全速的控制是可以的,
但是接着按 减速和停的按钮就不管用了,
只能重新打开单片机,按减速按钮,电机能减速转动,但是很奇怪,电机低速转了一会又自动进入全速状态接着自动停止(我并没有控制它)
但是我控制2个LED灯却很正常。
原理图如下
复制代码
PS:我用延时而不用红外控制时电机的全速和低速都能成功实现。
新发现:红外遥控启动电机后LED灯也无法控制了,没反应。
问题总结:
1.一旦红外遥控启动电机后,红外遥控就失效了;
2.红外遥控低速启动自动回到全速并且停止的问题
程序代码如下
/*测试电机能否由红外线控制*/
#include<reg52.h>
sbit IRIN=P3^2;
sbit Moto=P2^1;
sbit LED1=P2^2; //
sbit LED2=P2^3; //
unsigned char IrValue[3];
int
ti
me;
void DelayMs(unsigned int x);
void Init_0();
void Delay_100us();
void LessSpeed();
void Control();
void main()
{
LED1=LED2=1;
IrValue[2]=0x45;//默认停止
Init_0();
while(1)
{
Control();
}
}
/****************************************************解码程序************************************************************/
void ReadIr() interrupt 0
{
unsigned char j,k;
unsigned int err;
Time=0;
DelayMs(70);
if(IRIN==0) //确认是否真的接收到正确的信号
{
err=1000; //1000*10us=10ms,超过说明接收到错误的信号
/*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时
侯,程序死在这里*/
while((IRIN==0)&&(err>0)) //等待前面9ms的低电平过去
{
DelayMs(1);
err--;
}
if(IRIN==1) //如果正确等到9ms低电平
{
err=500;
while((IRIN==1)&&(err>0)) //等待4.5ms的起始高电平过去
{
DelayMs(1);
err--;
}
for(k=0;k<4;k++) //共有4组数据
{
for(j=0;j<8;j++) //接收一组数据
{
err=60;
while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去
{
DelayMs(1);
err--;
}
err=500;
while((IRIN==1)&&(err>0)) //计算高电平的时间长度。
{
DelayMs(1);//0.14ms
Time++;
err--;
if(Time>30)
{
EX0=1;
return;
}
}
IrValue[k]>>=1; //k表示第几组数据
if(Time>=8) //如果高电平出现大于565us,那么是1
{
IrValue[k]|=0x80;
}
Time=0; //用完时间要重新赋值
}
}
}
if(IrValue[2]!=~IrValue[3])
{
return;
}
}
}
/***********************************************************************************************************/
void DelayMs(unsigned int x) //0.14ms误差 0us
{
unsigned char i;
while(x--)
{
for (i = 0; i<13; i++)
{}
}
}
void Init_0()
{
IT0=1;//外部中断0跳变沿触发方式(下降沿)
EX0=1;//打开INT0的中断允许
EA=1;//打开总中断
}
void Delay_100us()
{
unsigned char a,b,c;
for(a=0;a<1;a++)
for(b=0;b<1;b++)
for(c=0;c<28;c++);
}
void LessSpeed()
{
while(IrValue[2]==0x15)
{
Moto=0;
Delay_100us();
Moto=1;
Delay_100us();
}
}
void Control()
{
if(IrValue[2]==0x44)
Moto=0;
else if(IrValue[2]==0x45)
Moto=1;
else if(IrValue[2]==0x15)
LessSpeed();
else if(IrValue[2]==0x0c)
LED1=1,LED2=0;
else if(IrValue[2]==0x5e)
LED1=0,LED2=1;
else if(IrValue[2]==0x18)
LED1=LED2=0;
}
复制代码
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
愚蠢的萝卜
1楼-- · 2019-07-16 18:22
求帮助 呜呜~~~~~~~~~~~~~~~~~~~~~~~~~~
加载中...
一周热门
更多
>
相关问题
如何打开.DDB后缀的文件
2 个回答
关于AD20 使用出现GPU设备暂停提示
1 个回答
[求助]什么是振荡器?
3 个回答
武汉大学电子科学与技术系2009年工程硕士研究生(集成电路工程和电子与通信工程)招
1 个回答
有做激光测距或相关产品的同行请加入这个群,交流一下技术经验
4 个回答
[推荐]国家制定并执行的电路术语与技术质量标准大全。
1 个回答
Sequential Logic Design principles--时序逻辑设计原则
15 个回答
一个PNP三极管的问题
3 个回答
相关文章
DXP,AD不用新建PCB完美解决 Unknown Pin 和Failed to add class
0个评论
protel Altium Designer的使用总结:覆铜 打印 设置 netlable 快捷键等
0个评论
0805,0603,1206这些封装的名字是什么来的
0个评论
这些机房布线规范你都知道吗
0个评论
AD18集成库无法使用解决办法
0个评论
PCB设计中专业英译术语之综合词汇(基础介绍)
0个评论
PCB设计中的电源信号完整性的考虑
0个评论
PCB-从零开始
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
电路设计
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
一周热门 更多>