切换到宽版
  • 102089阅读
  • 104回复

玩具机脱机手控 v2.0 (请教PCB走线问题) [复制链接]

上一主题 下一主题
离线super169

发帖
502
M币
764
专家
3
粉丝
19
只看该作者 40楼 发表于: 2016-01-22
回 wsy0315 的帖子
wsy0315:
早就答应楼主发个lay文件的
今天上传自己雕刻的板子文件
先上个图
[图片]
....... 回 wsy0315 的帖子



谢谢你的分享, 有些地方想向你请教.

1. 我看到你的板子上加入了一些电容, 我自己是硬小白, 不知在什麽情况下要加上, 可否简单说说.
(不好意思, 这个可能是很基本的电子知识, 但我一直是做软件的, 这方面的知识几乎是零, 你看我的PCB就明白, 基本上也只是接通了可用, 其他都没考虑)

2. 你的板子好像不是插上 nano / mini 的, 你是直接把芯片插上去的吗?

3. 你说把 SD 直接焊上, 那之後怎样把档案抄进去?


此外, 程式使用上有问题吗?  或者有什麽功能需要加上去的?
现在的程式大约用了 27K, 应该还有 4K 左右可用, 简单的功能应该还可以的.

至於转用 u8glib, 我还在考虑中, 因为相关的库 (例如菜单的库) 也要作出修改, 可能需要一段时间.
因为程式中几乎把所有相关的文字放在 flash memory,  才可以把程式压至 32K 以下.
当中有些是以 array 形式存放, 我之前看过别的库, 都不支援的.
而且选单要配合 keypad 用, 更加难以转用别人的库了.
离线wsy0315
发帖
67
M币
801
专家
1
粉丝
5
只看该作者 41楼 发表于: 2016-01-22
回 super169 的帖子
super169:谢谢你的分享, 有些地方想向你请教.
....... (2016-01-22 09:47) 回 super169 的帖子

电容的作用主要是电源的滤波,我也没有详细的计算容量,就随便弄了两个比较常规的,简单解释就是为了让电源稳定点!ATMEGA328P-pu芯片是在uno板子上烧录好的,芯片的tx,rx,rst都引出来了,所以也好重新更改程序!只要芯片内有uno的bootload就可以。用这个DIP封装的原因主要也是为了大家焊接方便,焊接的是SD卡的卡座,就是读卡器上的那种!不是焊接的SD卡,是我没说明白!不好意思
离线wsy0315
发帖
67
M币
801
专家
1
粉丝
5
只看该作者 42楼 发表于: 2016-01-23
回 super169 的帖子
super169:"感觉就是操控性不是很舒服,有待改进" <- 可以详细一点说说是什麽问题吗, 我看看是否有办法在程式上作改进.
至於库的问题, 可能因为自己本身写开程式, 早期接触到 OLED 时, u8glib 好像还字有支援, 所以自己做了个库出来.
之後也有考虑过转用其他常用的库, 但由於 .. (2016-01-22 09:27) 回 super169 的帖子

只能说是个人的使用习惯问题,但是我想很多人都有我一样的习惯,就是取消键实在是用着很不舒服,还是弄个选单的好,另外就是还是建议用旋转编码器进行控制,因为用到全部按键的菜单也只有JOG菜单,说到jog菜单,是不是能添加个输入坐标位置进行移动呢!例如:输入+/-数字值然后进行移动!以前看见过一些其它设备上的旋转编码器是每一位的输入的,不知道你能不能理解,就是先输入+/-,然后输入百位数,然后输入十位数,然后输入个位数,然后输入小数,总之吧输入完了,进行选择移动或是退出,最后确定退出!当然了咱们可以先输入要移动的轴!然后再数值,这个对你来说应该好解决吧?

还有就是那剩余的几个针脚是不是可以连接几个按键直接进行雕刻机的移动呢,或是利用你原来的读取模拟值进行直接移动呢?就是实现X+,X-,Y+,Y-,Z+,Z- (当然也不会嫌弃什么go0.0.0或是set0.0.0和一键雕刻功能ps:就是直接读取存储卡内的第一个文件进行发送)可以用A1~A3针脚实现!

我心目中的最理想的版本是旋转编码器控制外加直接移动按键版本(按键如果谁不喜欢可以不进行连接,旋转编码器如果谁不喜欢也可以用我设想的键盘进行简单的雕刻操作!)
期待你的改进啊!因为我这水平实在是有点提不起来啊!所以只有期待你了!自学了这点东西,是真的看不明白你那么多的代码啊

下面弄点旋转编码器模块资料,希望你能看看,



旋转编码器模块 360度   FOR 模块  编码模块 编码器

Arduino  旋转编码器模块

工作电压:5V
一圈脉冲数:20
旋转编码器可通过旋转可以计数正方向和反方向转动过程中输出脉冲的次数,旋转计数不像电位计,这种转动计数是没有限制的。配合旋转编码器上的按键,可以复位到初始状态,即从0开始计数。

工作原理:

增量编码器是一种将旋转位移转换为一连串数字脉冲信号的旋转式传感器。这些脉冲用来控制角位移。在Eltra编码器中角位移的转换采用了光电扫描原理。读数系统以由交替的透光窗口和不透光窗口构成的径向分度盘(码盘)的旋转为依据,同时被一个红外光源垂直照射,光把码盘的图像投射到接收器表面上。接收器覆盖着一层衍射光栅,它具有和码盘相同的窗口宽度。接收器的工作是感受光盘转动所产生的变化,然后将光变化转换成相应的电变化。再使低电平信号上升到较高电平,并产生没有任何干扰的方形脉冲,这就必须用电子电路来处理。读数系统通常采用差分方式,即将两个波形一样但相位差为180°的不同信号进行比较,以便提高输出信号的质量和稳定性。读数是再两个信号的差别基础上形成的,从而消除了干扰。
增量编码器:回 super169 的帖子
增量编码器给出两相方波,它们的相位差90°,通常称为A通道和B通道。其中一个通道给出与转速相关的信息,与此同时,通过两个通道信号进行顺序对比,得到旋转方向的信息。还有一个特殊信号称为Z或零通道,该通道给出编码器的绝对零位,此信号是一个方波与A通道方波的中心线重合。
回 super169 的帖子

增量型编码器精度取决于机械和电气两种因素,这些因素有:光栅分度误差、光盘偏心、轴承偏心、电子读数装置引入的误差以及光学部分的不精确性。确定编码器精度的测量单位是电气上的度数,编码器精度决定了编码器产生的脉冲分度。以下用360°电气度数来表示机械轴的转动,而轴的转动必须是一个完整的周期。要知道多少机械角度相当于电气上的360度,可以用下列公式来计算:电气360 =机械360°/n°脉冲/转

回 super169 的帖子

图:A、B换向时信号
编码器分度误差是以电气角度为单位的两个连续脉冲波的最大偏移来表示。误差存在于任何编码器中,这是由前述各因素引起的。Eltra编码器的最大误差为±25电气角度(在已声明的任何条件下),相当于额定值偏移±7%,至于相位差90°(电气上)的两个通道的最大偏差为±35电气度数相当于额定值偏移±10%左右。
UVW信号增量型编码器
除了上述传统的编码器外,还有一些是与其它的电气输出信号集成在一起的增量型编码器。与UVW信号集成的增量型编码器就是实例,它通常应用于交流伺服电机的反馈。这些磁极信号一般出现在交流伺服电机中,UVW信号一般是通过模拟磁性原件的功能而设计的。在Eltra编码器中,这些UVW信号是用光学方法产生,并以三个方波的形式出现,它们彼此偏移120°。为了便于电机启动,控制电动机用的启动器需要这些正确的信号。这些UVW磁极脉冲可在机械轴旋转中重复许多次,因为它们直接取决于所连接的电机磁极数,并且用于4、6或更多极电机的UVW信号。
***************************************************************************
ARDUINO测试代码:
int redPin = 2;
int yellowPin = 3;
int greenPin = 4;
int aPin = 6;
int bPin = 7;
int buttonPin = 5;

int state = 0;
int longPeriod = 5000; // Time at green or red
int shortPeriod = 700; // Time period when changing
int targetCount = shortPeriod;
int count = 0;

void setup()
{
  pinMode(aPin, INPUT);
  pinMode(bPin, INPUT);
  pinMode(buttonPin, INPUT);
  pinMode(redPin, OUTPUT);
  pinMode(yellowPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
}

void loop()
{
  count++;
  if (digitalRead(buttonPin))
  {
    setLights(HIGH, HIGH, HIGH);
  }
  else
  {
    int change = getEncoderTurn();
    int newPeriod = longPeriod + (change * 1000);  
    if (newPeriod >= 1000 && newPeriod <= 10000)
    {
      longPeriod = newPeriod;
    }
    if (count > targetCount)
    {
      setState();
      count = 0;
    }
  }
  delay(1);
}

int getEncoderTurn()
{
  // return -1, 0, or +1
  static int oldA = LOW;
  static int oldB = LOW;
  int result = 0;
  int newA = digitalRead(aPin);
  int newB = digitalRead(bPin);
  if (newA != oldA || newB != oldB)
  {
    // something has changed
    if (oldA == LOW && newA == HIGH)
    {
      result = -(oldB * 2 - 1);
    }
  }
  oldA = newA;
  oldB = newB;
  return result;
}

int setState()
  {
    if (state == 0)
    {
      setLights(HIGH, LOW, LOW);
      targetCount = longPeriod;
      state = 1;
    }
    else if (state == 1)
    {
      setLights(HIGH, HIGH, LOW);
      targetCount = shortPeriod;
      state = 2;
    }
    else if (state == 2)
    {
      setLights(LOW, LOW, HIGH);
      targetCount = longPeriod;
      state = 3;
    }
    else if (state == 3)
    {
      setLights(LOW, HIGH, LOW);
      targetCount = shortPeriod;
      state = 0;
    }
  }

void setLights(int red, int yellow, int green)
{
  digitalWrite(redPin, red);
  digitalWrite(yellowPin, yellow);
  digitalWrite(greenPin, green);
}  






[ 此帖被wsy0315在2016-01-27 21:44重新编辑 ]
离线super169

发帖
502
M币
764
专家
3
粉丝
19
只看该作者 43楼 发表于: 2016-01-24
回 wsy0315 的帖子
wsy0315:只能说是个人的使用习惯问题,但是我想很多人都有我一样的习惯,就是取消键实在是用着很不舒服,还是弄个选单的好,另外就是还是建议用旋转编码器进行控制,因为用到全部按键的菜单也只有JOG菜单,说到jog菜单,是不是能添加个输入坐标位置进行移动呢!例如:输入+/-数字值然后进 .. (2016-01-23 15:30) 回 wsy0315 的帖子

你说的 旋转编码器, 会否就是测速传感器模块 一样的原理, 不过一般 测速会用中断去做.
如果是用作数值输入, 比如 顺时针转就增大, 逆时针就减少, 应该不太困难.
这个改动真不少, 需要研究一下.  因为先要做出硬件才可以测试.
至於取消键, 可能是个人习惯问题, 我反而是习惯用取消键离开当前的动作.

其实选单的编排真的有点乱的, 我是想到一个就加一个, 只是简单组织了一下.
有些功能自己也不知怎分配好, 就放入 setting 中算了.

有关馀下的针脚, 当然可以用来装上不同的键, 但就要先考虑键的作用.
理论上只要电阻选得好, 单一个针脚, 已可以有 10 个键的组合.
因为我只需要用 6 个键, 所以没有加上去.

如果想直接一点, 可以一个键一个针脚, 但就会很浪费了.
也可以一个 Analog pin 用一个 keypad, 就可以相同的设定支援更多键.
以现在 6 key 去算, 4 个针脚 A0, A1, A2, A3 已经可以有 24 键了.
问题是, 太多 key 会记不了, 或者你想想, 有那几个功能需要直接加上去.
比如多接六个 key 去 A1 - hard reset, set 0, probe Z, ...
在选单直接按下去就执行.
又可以多加六个, 在 jog mode 时, X+/X-/Y+/Y-/Z+/Z- 可以直接按.
这些应该不难改的.
离线wsy0315
发帖
67
M币
801
专家
1
粉丝
5
只看该作者 44楼 发表于: 2016-01-24
回 super169 的帖子
super169:
你说的 旋转编码器, 会否就是测速传感器模块 一样的原理, 不过一般 测速会用中断去做.
如果是用作数值输入, 比如 顺时针转就增大, 逆时针就减少, 应该不太困难.
这个改动真不少, 需要研究一下.  因为先要做出硬件才可以测试.
至於取消键, 可能是个人习惯问题, 我反而是习惯用取消键离开当前的动作.
....... 回 super169 的帖子

旋转编码器就是和测速那个一个原理
看了看,改用这个确实菜单改动比较大,你看看可不可以改成四个方向键:
                                                  上(选择菜单,调整)
左(取消按键,退回上级菜单)                                   右(确定)
                                                  下(选择菜单,调整)
jog菜单可以这么改,你看看:2.Jog Mode >KEY> 21.Continue >KEY> 211.X-Jog >KEY> >UP> X-
                                                                                                                                          >DOWN> X+
                                                                                                                                          >OK/CANEL> Return
                                                                                                             212.Y-Jog >KEY> >UP> Y-
                                                                                                                                          >DOWN> Y+
                                                                                                                                          >OK/CANEL> Return
                                                                                                             213.Z-Jog >KEY> >UP> Z-
                                                                                                                                          >DOWN> Z+
                                                                                                                                          >OK/CANEL> Return

就是取消你以前那两个左右键,因为那个用到的情况不是很多!


添加的快捷键最好不要用到选单,最好可以在任何菜单都直接执行!

至于添加什么吗!当然是多多益善了,因为对我们来说该代码太难了,还是你一次解决的好,如果谁不喜欢哪个按键可以不用,想用了就弄个键盘就可以实现,考虑到你改代码太辛苦,所以还是选用你以前的方式,还是每个模拟引脚最多六个按键:
A0--1.上,
       2.下,
       3.左(取消),
       4.右(确定),

A1--1.X+,
       2.X-,
       3.Y+,
       4.Y-,
       5.Z+,
       6.Z-,

A2--1.GO X0,
       2.GO Y0,
       3.GO Z0,
       4.SET X0,
       5.SET Y0,
       6.SET Z0,

A3--1.GO X0 Y0 Z0,
       2.SET X0 Y0 Z0,
       3.SEND,
       4.Probe Z,
       5.Hard Reset(这个按键其实硬件可以连接的,直接连接GRBL板Reset引脚,如果能够添加应该会方便控制板和GRBL板的连线,你不是已经弄好了             原来的D3脚了吗,最好改到D2引脚)
       6.Soft Reset(这个按键其实硬件可以连接的,直接连接GRBL板A0引脚,如果能够添加应该会方便控制板和GRBL板的连线,可以通过发送代码的方式           解决吧



       注:1.Hard Reset和Soft Reset这两个按键不知道你放在A0,还是A3比较方便,所以就随你编程方便了!如不好解决就由我来用硬件连接!
              2.还有两个按键比较主要,就是控制按键的移动步距的!但是涉及到显示的问题,不是很好弄,就算了!这功能就够完美的了!
              3.看见人家的上位机还有发送这几个也不知道是干什么的 $H,$X,$C,$G。有用你就用在剩余的那两个位置上,没用就算了!
              4.为了美观,能不能把check status内的Idle,删除了啊,最好是两个坐标能上下对应起来,这样看起来比较直观!



离线super169

发帖
502
M币
764
专家
3
粉丝
19
只看该作者 45楼 发表于: 2016-01-26
回 wsy0315 的帖子
wsy0315:旋转编码器就是和测速那个一个原理
看了看,改用这个确实菜单改动比较大,你看看可不可以改成四个方向键:
                          &nb .. (2016-01-24 21:57) 回 wsy0315 的帖子



选单跟 keypad 是分开的, 选单用的键是完全可以重新设定的.

在 menuSetting.ino 中, 建立选单时, 会设定四个 key.

myMenu appMenu(myOLED, 3, 7, false,
               myKey, KEY_UP, KEY_DOWN, KEY_SELECT, KEY_CANCEL,
               mainMenu, 4, true, '>');

如果想改为 左 = cancel, 右 = select, 只要改成这样就可以了:


myMenu appMenu(myOLED, 3, 7, false,
               myKey, KEY_UP, KEY_DOWN, KEY_RIGHT, KEY_LEFT,
               mainMenu, 4, true, '>');


至於 jog mode 的改动, 可能会比较大, 因为本身不想要经常回到选单中, 所以现在是进入了 Jog mode 後, 用 左/右 去选 X/Y/Z 轴.
你说的也可以的, 只要把 XYZ 变成一个参数进入 Jog mode, 再修改一下 Job mode 工作用的 key 就可以.

加上 A1, A2, A3 不是问题, 但 选单中要作修改.  因为现在进入选单後, 必须要选出一个项目才会离开.
在选单内只会对一个 KeyPad 作出反应.  可能要加入另一组 keyPad, 当其他 keyPad 有按键时, 要作出另一组回传.
这里比较复杂, 因为要改动现有的库, 而且需要有硬件测试.  或者在看看年假时会否有空, 尝试修改这部份吧.

步距是指每次按下的距离吧.  这个其实有一定的问题, 我现在设定的距离, 其实也有可以因为不同的步进也有分别.
我每次送出後, 需要停一停的, 是为了让 GRBL 执行了之前的移动再发出新的指令.
时间太短, 有可能会把拍令累积起来, 当你放手的时候, 就不可以即时停下来了.
时间太长, 就会觉得不是连续的移动.  这里之前也花了一点时间去调整的.

如果随便改变步距, 就很难预先设定每一步所要预留的时间了.  
这个时间并不是线性的, 走 0.2mm 的时间, 不可以用 0.1mm 的时间 X 2 推出来, 因为当中还有传送以及反应的时间.
所以, 要做到可以随便改变步距, 必须要先计算出执行每一步所需的时间, 否则, 连续运行时, 放手後可能会多走一段才停下来.

或者, 可能加入用家设家单独执行一个移动, 可能会更好.  比如 X 轴移动 10mm 之类.  又或把 X 轴移到 +10mm 的位置.

至於 $H, $X, $C, $G 我也不知是什麽用途.  我是买了 CNC 才开始学 Gcode 的, 基本上只看了一些指令的解说就去做了.
而且, $ 作开头的, 好像共非 通用的 code, 要看看 GRBL 的解说才可以肯定是什麽意思.

有关 check status 内的显示, 因为自己有点懒, 直接把回传的讯息显示出来.  由於可以看到了, 所以没认真去改.
但因为回傅的资料, 会因为设定而改变, 我也要看看是否容易就出拆解资料的程式.


离线wsy0315
发帖
67
M币
801
专家
1
粉丝
5
只看该作者 46楼 发表于: 2016-01-27
Re:回 wsy0315 的帖子
super169:
选单跟 keypad 是分开的, 选单用的键是完全可以重新设定的.
....... Re:回 wsy0315 的帖子

那就智能希望你年假有空了话说我的板子都已经做好了呢!









本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
离线wsy0315
发帖
67
M币
801
专家
1
粉丝
5
只看该作者 47楼 发表于: 2016-02-18
看来没有最新进展啊,哈哈,回复下,以增加你的紧张感!
离线super169

发帖
502
M币
764
专家
3
粉丝
19
只看该作者 48楼 发表于: 2016-02-18
回 wsy0315 的帖子
wsy0315:
看来没有最新进展啊,哈哈,回复下,以增加你的紧张感! 回 wsy0315 的帖子


不好意思, 新年時跟你的測試結果跟想像中有點出入, 所以停了下了.  自己也有其他事忙了一會.
已經買了 4 個編碼器的模塊, 只可惜店家新年一直沒出現, 昨天才開始發貨.



收到後會就把有關的庫配合作出修改.
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
离线飞刀太子

发帖
3532
M币
1492
专家
3
粉丝
32
只看该作者 49楼 发表于: 2016-02-20
慢慢改进吧,设计成焊点,走跳线
快速回复
限80 字节
“新手上路”发帖需审核后才能显示(请认真发帖),达到数码9级后取消此限制
 
上一个 下一个