[*Altar小车动起来*]2. L9110S电机驱动-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 24381|回复: 12

[*Altar小车动起来*]2. L9110S电机驱动

[复制链接]
发表于 2016-11-17 20:23 | 显示全部楼层 |阅读模式
装小车是学习Arduino的好方法。现在就把跟Altar小车相关的模块和程序都写出来。
小车能跑主要是电机驱动模块,Altar小车的电机驱动用的是L9110S。原来用过L298N、L293D,这个L9110S第一次用,发现跟298、293不太一样,主要是没有Enable,直接输入PWM控制转速和方向。L298、L293是通过Enable输入PWM控制转速的。
L9110S.JPG
一个L9110S可以控制一个正反转的电机、或者两个单向转的电机。而一个L298N可以控制两个正反转电机或4个单向转的电机。所以,Altar小车的电机驱动模块上有2个L9110S,控制2个电机的正反转。 电机驱动.JPG
控制电机的程序是小车程序的主要部分,通过D3、D5、D6、D9四个引脚输出0~255的PWM值控制速度和方向,程序里可以写一个固定值,也可以通过遥控逐渐增减PWM值。示例程序是以200的速度前后左右2s停,没有控制。主要是看每部分的子函数怎么写。[mw_shl_code=cpp,true]const byte inPin_leftB = 6;
const byte inPin_leftA = 9;
const byte inPin_rightA = 3;
const byte inPin_rightB = 5;
void setup(){
  pinMode(inPin_leftA,OUTPUT);
  pinMode(inPin_leftB,OUTPUT);
  pinMode(inPin_rightA,OUTPUT);
  pinMode(inPin_rightB,OUTPUT);
}
void loop(){
  goUp(200);
delay(2000);
goLeft(80);
delay(2000);
  goBack(200);
delay(2000);
goRight(80);
delay(2000);
goStop();
}
void goUp(int up_speed)
{
  analogWrite(inPin_leftA,0);
  analogWrite(inPin_rightA,0);
  analogWrite(inPin_leftB,up_speed);
  analogWrite(inPin_rightB,up_speed);
}
void goLeft(int left_speed)
{
  analogWrite(inPin_leftA,255);
  analogWrite(inPin_rightB,255);
  analogWrite(inPin_leftB,left_speed);
  analogWrite(inPin_rightA,left_speed);
}
void goRight(int right_speed)
{
  analogWrite(inPin_leftB,255);
  analogWrite(inPin_rightA,255);
  analogWrite(inPin_leftA,right_speed);
  analogWrite(inPin_rightB,right_speed);
}
void goBack(int back_speed)
{
  analogWrite(inPin_leftB,255);
  analogWrite(inPin_rightB,255);
  analogWrite(inPin_leftA,back_speed);
  analogWrite(inPin_rightA,back_speed);
}
void goStop()
{
  analogWrite(inPin_leftA,0);
  analogWrite(inPin_leftB,0);
  analogWrite(inPin_rightA,0);
  analogWrite(inPin_rightB,0);
}
[/mw_shl_code]


发表于 2016-11-18 08:23 | 显示全部楼层
第24行与第25行参数0是不是写错了?
发表于 2016-11-18 08:39 | 显示全部楼层
另外goUp与goBack内部的4个analogwrite的速度参数不同的话,可能走不了直线,第12行与第16行出现了这个问题,建议重新设计移动方法,个人愚见
发表于 2016-11-18 11:06 | 显示全部楼层
呃,我说的好像也不对,仅凭程序经验判断的,虚心求教硬件知识
 楼主| 发表于 2016-11-18 16:01 | 显示全部楼层
LightYear 发表于 2016-11-18 11:06
呃,我说的好像也不对,仅凭程序经验判断的,虚心求教硬件知识

这个模块就是这个问题,正着写必须把数反过来(正:0-255,反255-0)。
 楼主| 发表于 2016-11-18 16:06 | 显示全部楼层
LightYear 发表于 2016-11-18 11:06
呃,我说的好像也不对,仅凭程序经验判断的,虚心求教硬件知识

Altar小车的大多数可数据读取的模块好像都是反过来的。如循迹模块,测到黑色的时候返回0,没有测到的时候是1。
发表于 2016-11-18 19:51 | 显示全部楼层
vickywong 发表于 2016-11-18 16:01
这个模块就是这个问题,正着写必须把数反过来(正:0-255,反255-0)。

受教了,电机上的两个引脚一个是正转另一个是反转吧?
 楼主| 发表于 2016-11-18 21:50 | 显示全部楼层
LightYear 发表于 2016-11-18 19:51
受教了,电机上的两个引脚一个是正转另一个是反转吧?

是啊,一高一低就正转,反过来就反转。2根线的PWM差就是转速
发表于 2016-11-18 22:22 | 显示全部楼层
vickywong 发表于 2016-11-18 21:50
是啊,一高一低就正转,反过来就反转。2根线的PWM差就是转速

代码中定义的inPinLeftA是左电机正转,inPinLeftB是左电机反转,是吧?
 楼主| 发表于 2016-11-19 12:08 | 显示全部楼层
LightYear 发表于 2016-11-18 22:22
代码中定义的inPinLeftA是左电机正转,inPinLeftB是左电机反转,是吧?

也不是,那个就是两根线。主要还是要看程序怎么写。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-28 02:12 , Processed in 0.090010 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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