极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 33672|回复: 19

码盘测速的极限, 以及 D2 D3 的分别

[复制链接]
发表于 2014-4-29 01:35:09 | 显示全部楼层 |阅读模式
今天终於收到了车架电机及驱动了, 由於没有安装的工具, 暂时先测试有关的库.

电机测试正常, 码盘是用这里的 encoder 读法去做
http://playground.arduino.cc/Main/RotaryEncoders#.UxqAlXkUFfs
简单而言, 是用 D2, D3 的 interrupt 配合 CHANGE event.

但出来的数字很奇怪, D2 的数字几乎是 D3 的三倍.
初时以为是电机的分别, 就把电机换转了, 同样 D2 大约是 D3 的三倍.
因为 interrupt 执行时会封锁其他 interrupt, 为免有互相影响, 尝试只接一个码盘分开测试.
同样, 只要是接到 D2, 不论用那一个电机, 结果都会比接 D3 的要多很多.

D2, D3 的测量是同一个程式,  只改了针脚及计数器, 完全没有分别.  但出来的读数就是不同.
由於那个码盘号称一圈可发出 4200个AB相脉冲 , 不知会否因太频密而有影响.
但同样的情况下, D2 及 D3 的读数应该是一样的.

请问 Arduino 的 interrupt 是否有极限?  D2 跟 D3 会有分别吗?

有没有朋友用过 一圈可发出 4200个AB相脉冲 的光栅测速圈, 你们的读数正常吗?

附上測試用的程式作參考


本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2014-4-30 02:10:15 | 显示全部楼层
今天晚上用了最原始的方法, 手動去測量碼盤的數據, 發覺每轉一圈就觸發了 27000 次 interrupt.

如果兩個輪胎都開動, 在 60rpm 時, 就會每秒接收 54000 個 interrupt, 全速250 rpm 時, 就有 225000 個 interrupt, 即每 4 micro second 就觸發一次, 肯定要當機了.  看來這個碼盤太精細了, 我的計算中角度也不會去到 0.013 度, 以 1 度為單位已足夠有餘了.  

請問大家一般用的碼盤, 輪胎轉一圈, 會觸發多少次 interrupt?
回复 支持 反对

使用道具 举报

发表于 2014-4-30 07:38:32 | 显示全部楼层
{:soso_e103:}这么高级的码盘。。。。轮胎转一圈触发几百次的足够了。。。
回复 支持 反对

使用道具 举报

发表于 2014-4-30 09:13:54 | 显示全部楼层
是这样,看了楼主的代码,想问一下, STBY中的引脚含义,以及程序中没有直接读取码盘速度的语句呀,本来是要直接用换算的方法测出转速的,但是貌似这种电机本身就可以读取,楼主怎么做的?
回复 支持 反对

使用道具 举报

发表于 2014-4-30 09:14:53 | 显示全部楼层
Super169 发表于 2014-4-30 02:10
今天晚上用了最原始的方法, 手動去測量碼盤的數據, 發覺每轉一圈就觸發了 27000 次 interrupt.

如果兩個 ...

楼主的电机是334脉冲的吗?  我还没有直接读取到数据,准备直接用换算的方法测出转速了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-30 09:17:20 | 显示全部楼层
弘毅 发表于 2014-4-30 07:38
这么高级的码盘。。。。轮胎转一圈触发几百次的足够了。。。

oh...那我尝试找找, 换过 300 左右的码盘, 相信已经很足够了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-30 09:24:46 | 显示全部楼层
本帖最后由 Super169 于 2014-4-30 09:30 编辑
一叶萧然 发表于 2014-4-30 09:14
楼主的电机是334脉冲的吗?  我还没有直接读取到数据,准备直接用换算的方法测出转速了。


我在测试的并非 L298N, 而是 TB6612FNG 模块, 它有一个 standby 的功能, STBY 就是那针脚的 PIN.





补充: 由於测速模块需要用到带 interrupt 的针脚, 而 TB6612FNG 中的连接 pin3 的 PWMA 只需要 PWM 针脚就可以了, 所以我改了插到 pin6, 而非图中的 pin3.  Pin2-4, 3-7 分别留给两个测速模块用.


我还在研究中, 我放出来的测试程式, 是用模块的测试程式, 再加入 encoder 程式做的.


电机只是二线的减速电机, 当然没有测速功能, 只是在尾端装上码盘, 再加个测速模块, 就变成有测速功能的电机了.  至於测速的方法, 就是根据这里 (http://playground.arduino.cc/Main/RotaryEncoders#.UxqAlXkUFfs) 的 encoder 程式做的.

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2014-4-30 09:52:11 | 显示全部楼层
Super169 发表于 2014-4-30 09:24
我在测试的并非 L298N, 而是 TB6612FNG 模块, 它有一个 standby 的功能, STBY 就是那针脚的 PIN.

嗯同样的,只是一个测速的程式,所以看看直接用analog的引脚读取然后换算吧
回复 支持 反对

使用道具 举报

发表于 2014-4-30 09:56:31 | 显示全部楼层
Super169 发表于 2014-4-30 09:24
我在测试的并非 L298N, 而是 TB6612FNG 模块, 它有一个 standby 的功能, STBY 就是那针脚的 PIN.

那楼主试验过电机的驱动效果了吗,如果不用测速的PID算法的话感觉就是顿感很严重,当输出为正的时候还好,一旦输出为负的时候就会突然从静止加速。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-30 10:03:57 | 显示全部楼层
一叶萧然 发表于 2014-4-30 09:52
嗯同样的,只是一个测速的程式,所以看看直接用analog的引脚读取然后换算吧

analog 可能不行.  它要讀取兩個針腳的資料比較去計算轉速.
pin2 , 3 只是觸發事件, 當中還要比較另一針腳的.
回复 支持 反对

使用道具 举报

发表于 2014-4-30 10:59:40 | 显示全部楼层
如果把attachInterrupt的CHANGE改成RISING,可以少触发一半的次数,去掉方向判断,用电机方向来定,可以减小硬件负担
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-30 11:05:04 | 显示全部楼层
春泥蛋炒饭 发表于 2014-4-30 10:59
如果把attachInterrupt的CHANGE改成RISING,可以少触发一半的次数,去掉方向判断,用电机方向来定,可以减小 ...

看来不错, 今晚回家尝试修改程式看看.  谢谢.
回复 支持 反对

使用道具 举报

发表于 2014-5-1 11:53:41 | 显示全部楼层
Super169 发表于 2014-4-30 10:03
analog 可能不行.  它要讀取兩個針腳的資料比較去計算轉速.
pin2 , 3 只是觸發事件, 當中還要比較另一針 ...

但貌似好像有人做PWM的直线行走的时候读取两电机差速的时候用到了这种读取方式,也没试验,到时候看看能不能通过换算读取吧,主要是我直接用的L298N,所以那个程序貌似不是通用。
回复 支持 反对

使用道具 举报

发表于 2014-8-31 21:33:12 | 显示全部楼层
怎么没有继续了?还等着学习呢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-31 21:37:33 | 显示全部楼层
smallfivecn 发表于 2014-8-31 21:33
怎么没有继续了?还等着学习呢。

不好意思, 遇上了一點硬問題, 不會解決, 而且近排比較忙, 暫時擱置左.  
最近準備再研究, 但要先解決電機跟 6050 的問題.
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 05:24 , Processed in 0.039767 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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