tom_hsh 发表于 2012-9-29 16:15:17

求助L298N和舵机不能一起使用

求助L298N和舵机不能一起使用
可以驱动舵机,但电机不工作了,求大侠帮忙
主程序:
#include <Servo.h>
#include "MotorL298N.h"

motorL298N motor;
Servo myservo;
int pos=0;
void setup()
{
motor.setpin(11,12,10);
motor.motorinit();
myservo.attach(6);
}
void loop()
{
motor.setmotorspeed(-50);
pos=0;
int p = map(pos, -100,100, 78, 108);
myservo.write(p);
}
------------------------------------------------------------------------------------------------------------
自己写的一个类,由于驱动L298N电机的
MotorL298N.h 头文件


#ifndef MotorL298NH
#define MotorL298NH
#if ARDUINO >= 100
#include <Arduino.h>
#else
#include <WProgram.h>
#endif

class motorL298N
{
public:
   int dir1Pin;   //in1 ��
   int dir2Pin;   //in2 ��
   int speedPin;//en�����ڿ����ٶ�
   int motorspeed;// �ٶ�ֵ-100��100

    motorL298N(int pdir1,int pdir2, int pspeed); //���캯��
    motorL298N();
   void setpin(int pdir1,int pdir2, int pspeed);
   void motorinit();//�������
   int readmotorspeed(); //��ȡ����ٶ�
   void setmotorspeed(int pspeed); //���õ���ٶ�
};




//---------------------------------------------------------------------------
#endif

------------------------------------------------------------------------------------------------------------
MotorL298N.cpp文件

#include "MotorL298N.h"
motorL298N::motorL298N(int pdir1,int pdir2, int pspeed) //���캯��
{
    dir1Pin=pdir1;   //in1 ��
    dir2Pin=pdir2;   //in2 ��
    speedPin=pspeed;//en�����ڿ����ٶ�
}
motorL298N::motorL298N()
{
}
void motorL298N::setpin(int pdir1,int pdir2, int pspeed)
{
    dir1Pin=pdir1;   //in1 ��
    dir2Pin=pdir2;   //in2 ��
    speedPin=pspeed;//en�����ڿ����ٶ�
}

void motorL298N::motorinit()//�������
{
pinMode(dir1Pin, OUTPUT);
pinMode(dir2Pin, OUTPUT);
pinMode(speedPin, OUTPUT);
motorspeed=0;
}
int motorL298N::readmotorspeed() //��ȡ����ٶ�
{
   return motorspeed;
}
void motorL298N::setmotorspeed(int pspeed) //���õ���ٶ�
{
    motorspeed=pspeed;
    if(pspeed<0)
   pspeed=pspeed*(-1);
int speed = map(pspeed, 0, 100, 0, 255);
analogWrite(speedPin, speed);
if (motorspeed>0)
{
    digitalWrite(dir1Pin, LOW);
    digitalWrite(dir2Pin, HIGH);
}
else if(motorspeed<0)
{
    digitalWrite(dir1Pin, HIGH);
    digitalWrite(dir2Pin, LOW);
}
}

//---------------------------------------------------------------------------

cnkids 发表于 2012-10-1 08:33:57

本帖最后由 cnkids 于 2012-10-1 08:35 编辑

单独使用的时候两个都可以?

tom_hsh 发表于 2012-10-1 12:26:32

是的,用起来都行

绿林网页 发表于 2012-10-5 20:06:07

Servo库和pwm是冲突的,所以在用Servo库的时候不能输出pwm,也就不能用pwm控制L298N调速,直接用高低电平控制正反转,是可以用的

tom_hsh 发表于 2012-10-22 09:55:06

本帖最后由 tom_hsh 于 2012-10-22 09:57 编辑

thanks 绿林网页 提供解决问题的思路
以下是我写的舵机类,大家一起研究
“myServo.h”文件

#ifndef myServoH
#define myServoH
#if ARDUINO >= 100
#include <Arduino.h>
#else
#include <WProgram.h>
#endif

class myServo
{
public:
    int servopin;//定义舵机接口数字接口
    int myangle;//定义角度变量
    int pulsewidth;//定义脉宽变量
    int val;
   
   
    void ServoInit(int pin);
   int ReadServoAngle();
   void SetServoAngale(int pmyangle);
   myServo();
};
//---------------------------------------------------------------------------
#endif



---------------------------------------------------------------------------------------------------------
"myServo.cpp"文件

#include "myServo.h"

myServo::myServo()
{
servopin=1;
}
void myServo::ServoInit(int pin)
{
   servopin=pin;
    pinMode(servopin,OUTPUT);//设定舵机接口为输出接口
}
int myServo::ReadServoAngle()
{
   return myangle;
}
void myServo::SetServoAngale(int pmyangle)
{
   for(int i=0;i<=30;i++)//给予舵机足够的时间让它转到指定角度
   {
       myangle=pmyangle;
       pulsewidth=(myangle*11)+500;//将角度转化为500-2480的脉宽值
       digitalWrite(servopin,HIGH);//将舵机接口电平至高
       delayMicroseconds(pulsewidth);//延时脉宽值的微秒数
       digitalWrite(servopin,LOW);//将舵机接口电平至低
       delay(20-pulsewidth/1000);
   }
}
-------------------------------------------------------------------------------------------------------

用法:
#include "myServo.h"
myServo servo;

void setup()
{
    servo.ServoInit(6);
Serial.begin(9600);
}
void loop()
{
int Angale;
    Angale=Serial.read();//读取串行端口的角度值,0到180度
if(Angale>'0'&&Angale<='180')
{
   servo.SetServoAngale(Angale);//引用脉冲函数
   }
}

tom_hsh 发表于 2012-10-22 10:00:16

类很简单,好处,解决Servo库和pwm的冲突,可以和我写的MotorL298N类合在一起用

芷雅焉 发表于 2012-12-11 00:48:16

本帖最后由 芷雅焉 于 2012-12-11 00:51 编辑

谢谢分享~我也出现这种问题了。。但是我的情况和你的不完全一样。。我的是控制舵机和电机一起运动,电机症状的时候一切正常,电机反转的时候就不动了,而且莫名其妙的烧坏了8个舵机。。超级郁闷中。。至今仍没有想明白为什么。。

明天去试一下你的方法~先行谢谢
页: [1]
查看完整版本: 求助L298N和舵机不能一起使用