切换到宽版
  • 3286阅读
  • 7回复

[AVR]arduino控制的电火花打孔装置 [复制链接]

上一主题 下一主题
离线windily
 

发帖
68
M币
427
专家
3
粉丝
9
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2018-09-02
这是个几年前流行的老话题了,因为有个断了的丝锥要打掉,所以我也做了一个。
第一版是用arduino nano在面包板上做的,用的L293D电机驱动扩展板和28BYJ-48减速电机,机械装置是光驱做的,电源是明伟改的27v可调电源,很容易就验证了方案是可行的,不过没法连续放电,效率太低,而且面包板很容易接触不良,出各种问题。27v电压也太低了,电压低的后果是放电间隙也相应减小,更难控制。
第二版用的arduino pro mini,和L298N板子焊在一起,控制部分用了3个开关,分别是升降和自动,还有3个可调电阻,用来控制进给速度,放电电流和快慢进给切换。为了能连续放电,用了94E霍尔侦测放电电流。电源也换成了48v充电器。目前还不能稳定连续放电,不是特别理想,基本是重复放电-短路循环,不过用美工刀片试了一下,10分钟不到就能打穿,应该可以用了。
网上好像还没有分享出来的单片机控制程序,这个其实重要的是控制思路,也没啥好藏着掖着的。

具体的连线可以看程序中的注释。








// 电火花加工,步进电机送料控制系统--自动版
// 使用Arduino pro mini + L298N + 28BYJ-48减速电机(电压5~12v,USB无法驱动)
// 20180828 从nano转到pro mini

// 电机引线顺序 blue(out1)-pink(out2)-yellow(out3)-orange(out4)
// 使用D8/9/10/11与Arduino相连
// pin4-向上, 3-自动开关,2-向下
// pinA0(14)-进给速度控制,A1(15)-火花放电参考电压/进给停止电压,A2(16)-快速进给停止电压/转慢速进给电压,A3(17)-霍尔电压代表工作状态

int pin0 = 8;
int pin1 = 9;
int pin2 = 10;
int pin3 = 11;
int swdown = 2; // 2-向下
int swauto = 3; // 3-自动进给开关
int swup = 4; // 4-向上
int pinspeed = 14; //A0/14-分压表示进给速度
int pinsparkvoltage = 15; //A1(15)-火花放电参考电压/进给停止电压
int pinmovevoltage = 16; //A2(16)-快速进给停止电压/转慢速进给电压
int pinhol = 17; // A3(17)-霍尔电压代表工作状态

bool running1 = false;  //自动进给开关
bool running2 = false;
unsigned long time1;  //进给速度控制中间变量
unsigned long time2;
unsigned long time3;  //电机正常转动控制中间变量
unsigned long time4;
int safevoltage = 490; //短路电流对应电压
int _step = 0 ;
int stepperSpeed = 1500;//电机转速,XX us一步, larger than 1500um

int run(int stepa) {
  switch (stepa) {
    case 0:
      digitalWrite(pin0, LOW);
      digitalWrite(pin1, LOW);
      digitalWrite(pin2, LOW);
      digitalWrite(pin3, HIGH);
      break;
    case 1:
      digitalWrite(pin0, LOW);
      digitalWrite(pin1, LOW);
      digitalWrite(pin2, HIGH);
      digitalWrite(pin3, HIGH);
      break;
    case 2:
      digitalWrite(pin0, LOW);
      digitalWrite(pin1, LOW);
      digitalWrite(pin2, HIGH);
      digitalWrite(pin3, LOW);
      break;
    case 3:
      digitalWrite(pin0, LOW);
      digitalWrite(pin1, HIGH);
      digitalWrite(pin2, HIGH);
      digitalWrite(pin3, LOW);
      break;
    case 4:
      digitalWrite(pin0, LOW);
      digitalWrite(pin1, HIGH);
      digitalWrite(pin2, LOW);
      digitalWrite(pin3, LOW);
      break;
    case 5:
      digitalWrite(pin0, HIGH);
      digitalWrite(pin1, HIGH);
      digitalWrite(pin2, LOW);
      digitalWrite(pin3, LOW);
      break;
    case 6:
      digitalWrite(pin0, HIGH);
      digitalWrite(pin1, LOW);
      digitalWrite(pin2, LOW);
      digitalWrite(pin3, LOW);
      break;
    case 7:
      digitalWrite(pin0, HIGH);
      digitalWrite(pin1, LOW);
      digitalWrite(pin2, LOW);
      digitalWrite(pin3, HIGH);
      break;
    default:
      digitalWrite(pin0, LOW);
      digitalWrite(pin1, LOW);
      digitalWrite(pin2, LOW);
      digitalWrite(pin3, LOW);
      delay(1000);
      break;
  }
}

void setup() {

  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("Stepper test!");

  pinMode(LED_BUILTIN, OUTPUT); //Pin13,LED
  pinMode(pinspeed, INPUT); //A0/14-分压表示进给速度
  pinMode(pinsparkvoltage, INPUT); //A1(15)-火花放电参考电压/进给停止电压
  pinMode(pinmovevoltage, INPUT); //A2(16)-快速进给停止电压/转慢速进给电压
  pinMode(pinhol, INPUT); // A3(17)-霍尔电压代表工作状态
  pinMode(pin0, OUTPUT); //电机控制
  pinMode(pin1, OUTPUT); //电机控制
  pinMode(pin2, OUTPUT); //电机控制
  pinMode(pin3, OUTPUT); //电机控制
  pinMode(swdown, INPUT);
  pinMode(swauto, INPUT);
  pinMode(swup, INPUT);
  time1 = millis();
  time2 = millis();
  time3 = micros();
  time4 = micros();

}

void loop() {
/*
  //参数输出
  Serial.print("hol,");
  Serial.print(analogRead(pinhol));
  Serial.print(",");
  Serial.print("pinmovevoltage,");
  Serial.print(analogRead(pinmovevoltage));
  Serial.print(",");
  Serial.print("pinsparkvoltage,");
  Serial.print(analogRead(pinsparkvoltage));
  Serial.print(",");
  Serial.print("safevoltage,");
  Serial.print(safevoltage);
  Serial.print(",");
  Serial.print("pinspeed,");
  Serial.println(analogRead(pinspeed));
*/

  while (digitalRead(swauto) == HIGH)  {
    running2 = !running1;
  }
  running1 = running2;

  if (running1 == true) { //自动模式

    //快进
    if (((analogRead(pinhol) < analogRead(pinmovevoltage)) && (analogRead(pinmovevoltage) < analogRead(pinsparkvoltage))) && (analogRead(pinsparkvoltage) < safevoltage)) {
      time4 = micros() ;
      if ((time4 - time3) > stepperSpeed) {
//        digitalWrite(LED_BUILTIN, HIGH);
        _step--;
//        Serial.println(_step);
        if (_step < 0) {
          _step = 7;
        }
        run(_step);
        time3 = micros() ;
//        Serial.println("fast down!");
//        digitalWrite(LED_BUILTIN, LOW);
      }
    }

    //慢进
    if ((analogRead(pinhol) < analogRead(pinsparkvoltage)) && (analogRead(pinhol) > analogRead(pinmovevoltage)) && (analogRead(pinmovevoltage) < analogRead(pinsparkvoltage)) && (analogRead(pinsparkvoltage) < safevoltage)) {
      time2 = millis();
      if ((time2 - time1) > analogRead(pinspeed)) { //根据pinspeed脚的电压,等待0~1023毫秒
        digitalWrite(LED_BUILTIN, HIGH);
        _step--;
//        Serial.println(_step);
        if (_step < 0) {
          _step = 7;
        }
        run(_step);
        time1 = millis();
//        Serial.println("slow down!");
        digitalWrite(LED_BUILTIN, LOW);
      }
    }

    //火花放电
    if ((analogRead(pinhol) > analogRead(pinsparkvoltage)) && (analogRead(pinhol) < safevoltage) && (analogRead(pinmovevoltage) < analogRead(pinsparkvoltage)) && (analogRead(pinsparkvoltage) < safevoltage)) {
      Serial.println("spark!");
    }

    //短路,快退
    while (analogRead(pinhol) > safevoltage) {
      time4 = micros() ;
      if ((time4 - time3) > stepperSpeed) {
//        digitalWrite(LED_BUILTIN, HIGH);
        _step++;
//        Serial.println(_step);
        if (_step > 7) {
          _step = 0;
        }
        run(_step);
        time3 = micros() ;
//        Serial.println("fast up!");
//        digitalWrite(LED_BUILTIN, LOW);
      }
    }

  }


  while (digitalRead(swup) == HIGH) {
    time4 = micros() ;
    if ((time4 - time3) > stepperSpeed) {
//      digitalWrite(LED_BUILTIN, HIGH);
      _step++;
//      Serial.println(_step);
      if (_step > 7) {
        _step = 0;
      }
      run(_step);
      time3 = micros() ;
//      Serial.println("continue up!");
//      digitalWrite(LED_BUILTIN, LOW);
    }
  } //swup开关按下时,持续向上


  while (digitalRead(swdown) == HIGH) {
    time4 = micros() ;
    if ((time4 - time3) > stepperSpeed) {
//      digitalWrite(LED_BUILTIN, HIGH);
      _step--;
//      Serial.println(_step);
      if (_step < 0) {
        _step = 7;
      }
      run(_step);
      time3 = micros() ;
//      Serial.println("continue down!");
//      digitalWrite(LED_BUILTIN, LOW);
    }
  } //swdown开关按下时,持续向下


}



本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共3条打赏 ,M币+43
dongxueqi520 M币 +15 - 2018-09-16
数码家园 M币 +13 謝謝分享 2018-09-03
zeze10000 M币 +15 不错,有时间也做一个 2018-09-02
离线zeze10000

发帖
2858
M币
8559
专家
35
粉丝
112
只看该作者 1楼 发表于: 2018-09-02
请登录后查看
离线nan77240

发帖
368
M币
1
专家
2
粉丝
20
只看该作者 2楼 发表于: 2018-09-03
请登录后查看
离线windily

发帖
68
M币
427
专家
3
粉丝
9
只看该作者 3楼 发表于: 2018-09-03
回 nan77240 的帖子
请登录后查看
离线windily

发帖
68
M币
427
专家
3
粉丝
9
只看该作者 4楼 发表于: 2018-09-07
请登录后查看
离线caizhangyu

发帖
51
M币
48
专家
0
粉丝
2
只看该作者 5楼 发表于: 2018-11-23
请登录后查看
离线malot

发帖
276
M币
1379
专家
0
粉丝
4
只看该作者 6楼 发表于: 2018-11-24
请登录后查看
离线mddd
发帖
3
M币
0
专家
0
粉丝
2
只看该作者 7楼 发表于: 2019-04-03
请登录后查看
快速回复
限80 字节
温馨提示:欢迎交流讨论,请勿发布纯表情、纯引用等灌水帖子;以免被删除
 
上一个 下一个