找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 3224|回复: 10
收起左侧

为什么单片机按键控制电机不动,一直响,求解

[复制链接]
ID:858009 发表于 2021-5-18 11:19 | 显示全部楼层 |阅读模式
#include <reg51.h>           //头文件
#define uchar unsigned char
#define uint unsigned int
unsigned char keyval;   //存储按键值
code BeatCode[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};   //正转
code defeatcode[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //反转
void delay(uint z); //延时函数
int i;           //变量
sbit S1=P3^0;   //按键
unsigned long beats=0;
void StartMotor(unsigned long angle);
unsigned char tmp;
static unsigned char index=0;

void StartMotor(unsigned long angle)
{
        EA=0;
        beats=(angle*4076)/360;
        EA=1;
}
void moveup()
{
        tmp = P1;
        tmp = tmp & 0xF0;
        tmp = tmp | BeatCode[index];                        
        P1 = tmp;
        index++;
        index = index & 0x07;
        beats--;
}
void main()
{
        TMOD=0x01;
        EA=1;
        ET0=1;
        TR0=1;
        TH0=0xF8;
        TL0=0xCD;
        keyval=0;
        StartMotor(10);   //转动十度
        while(1)
        {
                switch(keyval)
                {
                        case 1:moveup();break;
                }
        }
}
void Time0() interrupt  1
{
        TH0=0xF8;
        TL0=0xCD;
        if((P3&0x0f)!=0x0f)
        {
                delay(5);
                if(S1==0)
                        keyval=1;
        }
}
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}

回复

举报

ID:277550 发表于 2021-5-18 12:49 | 显示全部楼层
驱动电压、电流,是否足够,不可以直接单片机的IO驱动的
回复

举报

ID:844772 发表于 2021-5-18 15:00 | 显示全部楼层
moveup() 里面没有延时啊,步进电机的每步要加个延时,否则转不起来,顶多抖动发声。
回复

举报

ID:520967 发表于 2021-5-18 15:05 | 显示全部楼层
先用指示灯看下控制是否出现错误,在查看驱动电流是否足够
回复

举报

ID:808225 发表于 2021-5-18 18:16 | 显示全部楼层
普通直流电机,51开发板可以驱动的,建议看看代码有没有错。
回复

举报

ID:858009 发表于 2021-5-18 18:20 | 显示全部楼层
漠城 发表于 2021-5-18 18:16
普通直流电机,51开发板可以驱动的,建议看看代码有没有错。

编译代码没有出错
回复

举报

ID:858009 发表于 2021-5-18 18:20 | 显示全部楼层
devcang 发表于 2021-5-18 12:49
驱动电压、电流,是否足够,不可以直接单片机的IO驱动的

使用un2003驱动
回复

举报

ID:858009 发表于 2021-5-18 18:21 | 显示全部楼层
glinfei 发表于 2021-5-18 15:00
moveup() 里面没有延时啊,步进电机的每步要加个延时,否则转不起来,顶多抖动发声。

加延时就出错
回复

举报

ID:858009 发表于 2021-5-18 18:22 | 显示全部楼层
glinfei 发表于 2021-5-18 15:00
moveup() 里面没有延时啊,步进电机的每步要加个延时,否则转不起来,顶多抖动发声。

没有任何反应
回复

举报

ID:889094 发表于 2021-5-18 21:40 来自触屏版 | 显示全部楼层
什么电机都不说一下,怎么判断?估计是5线4相小电机,换相之间延时要大于100us,这个值要自己试试,从大往小调
回复

举报

ID:889094 发表于 2021-5-18 21:43 来自触屏版 | 显示全部楼层
qwettyuio 发表于 2021-5-18 18:21
加延时就出错

加延时出错就查出错的原因
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表