极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15731|回复: 7

h桥 电机控制正反转

[复制链接]
发表于 2014-11-22 10:59:00 | 显示全部楼层 |阅读模式
今天花了几个小时仿照书籍编写了一个程序,程序的功能是控制电机正反转 和速度,用到的电子元器件 在电路图上看。
电路图是我根据用的硬件来画的,我实际用的是下面这个。
在来看看代码吧,代码如下。

[pre lang="arduino" line="1" file="代码"]#define switchPin 2    //控制开关1 (引脚2)
#define switchPin2 3    //控制开关2 (引脚3)
#define motorPin1 5    //电机正转 (引脚 PWM5)
#define motorPin2 6    //电机反转 (引脚 PWM6)
#define ledPin 7    //报警灯 (引脚7)
#define potPin 0    //电位器 (模拟引脚0)
int pinValue;    //存储电位器的值

/************** setup函数 只执行一次 *****************/
void setup()
{
    pinMode(switchPin,INPUT);    //开关1输入模式
    pinMode(switchPin2,INPUT);    //开关2输入模式
    pinMode(motorPin1,OUTPUT);    //电机正转输出模式
    pinMode(motorPin2,OUTPUT);    //电机反转输出模式
    pinMode(ledPin,OUTPUT);     // 报警LED输出模式
}

/************** loop函数 反复循环执行 *************/
void loop()
{
pinValue = analogRead(potPin);    //获取引脚的模拟量值,将其保存在pinValue中
pinValue = map(pinValue,0,1023,0,255);    //将pinValue的值除以4以对应到0至255的范围内

/************** 下面的if控制电机正转 ************/
if (digitalRead(switchPin))    //如果开关1按下
{
    analogWrite(motorPin1,pinValue);    //电机正转(电压器调节速度)
}

    else    //如果开关松开
    {
        analogWrite(motorPin1,LOW);    //电机停止
    }
   
/************** 下面的if控制电机反转 *****************/
if (digitalRead(switchPin2))
{
    analogWrite(motorPin2,pinValue);
}

    else
    {
        analogWrite(motorPin2,LOW);
}

/************* 下面的if控制报警灯 ************/
if(digitalRead(switchPin) && digitalRead(switchPin2))    //如果两个开关按钮同时按下
{   
      analogWrite(motorPin1,LOW);
      analogWrite(motorPin2,LOW);
      analogWrite(potPin,LOW);
      digitalWrite(ledPin,HIGH);
}
    else
    {
      digitalWrite(ledPin,LOW);
    }
}
到这里就结束了,我不做太多的解释,大家都能看清楚。
这个程序还有一个不足之处就后面的代码。
/************* 下面的if控制报警灯 ************/
if(digitalRead(switchPin) && digitalRead(switchPin2))    //如果两个开关按钮同时按下
{   
      analogWrite(motorPin1,LOW);  //关闭正转
      analogWrite(motorPin2,LOW);         //关闭反转
      analogWrite(potPin,LOW);    //关闭电位器控制
      digitalWrite(ledPin,HIGH);    开报警灯
}
    else
    {
      digitalWrite(ledPin,LOW);     、、关闭报警灯
    }
问题就是:当同时按下两个按钮时 电机正反转引脚不能完全关闭,还有小电流,不知如何解决。     
    所以我就把这个程序共享出来给大家 供大家学习和参考。如果你能解决问题或比我编写的更好,别忘了也共享出来让大家也学习一下,取长补短,这样你的学习就有提高,学习的更快,更熟练。谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-11-22 22:48:25 | 显示全部楼层
本帖最后由 bacon6581 于 2014-11-22 22:49 编辑

如果(开关1、2同时按下){
         报警;
}否则{
        停止报警;
       如果(开关1按下){
                正转;
        }否则{
                 停止;
         }

          如果(开关2按下){
                反转;
        }否则{
                 停止;
         }

}
回复 支持 反对

使用道具 举报

发表于 2014-11-22 22:53:57 | 显示全部楼层
你写的代码,当两个按键均按下时,每Loop一次
正转执行一点点时间(符合按键1按下的条件)
反转也执行一点点时间
报警也执行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-23 09:59:55 | 显示全部楼层
原来是这样啊
回复 支持 反对

使用道具 举报

发表于 2014-11-23 13:53:05 | 显示全部楼层
我上次也用这个桥做 了电机正反转  就是电流很小  用5v的电源马达都不转  但是用led是亮的 就是这个与arduino板的电源是一样的 5v
电机是24v的怎么办  三极管触发电压可以用arduino的板子输出吗 还是要升压模块??
回复 支持 反对

使用道具 举报

发表于 2014-11-23 20:58:41 | 显示全部楼层
图画得有问题,二极管的方向错了,三极管都用的是NPN型,右侧两个三极管的驱动直接拉低了,你的电机是怎么工作起来的呀?
回复 支持 反对

使用道具 举报

发表于 2014-11-24 10:29:05 | 显示全部楼层
本帖最后由 hubertdong 于 2014-11-24 10:30 编辑

感觉电路图有问题!见附件
这样,供电电压可以增加了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-24 13:20:49 | 显示全部楼层
hubertdong 发表于 2014-11-24 10:29
感觉电路图有问题!见附件
这样,供电电压可以增加了!

我看着资料画的 我改正
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 04:24 , Processed in 0.037502 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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