佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 4502|回复: 20

DC motor 的控制 应用:Automated Storage and Retrieval System

  [复制链接]
发表于 24-1-2010 03:54 AM | 显示全部楼层 |阅读模式
本帖最后由 pic 于 25-1-2010 08:41 AM 编辑

我是MMU mechanical final year 的学生 (在忙着FYP)。基本上,这是一个问功课的帖。。
我的FYP题目是Automated Storage and Retrieval System. 属于warehouse management吧~
我必须在电脑弄一个简单的GUI,来控制一个mechanism,以准确的store/retrieve 一些item/part 在2个架子上(2x2x两个架子)

由于在整个大学里都是忙着学生活动,而忽略很多practical 的机会, 现在FYP的时候真的是从头学起~

我已经用Visual Basic 2008写好了我的GUI, 并试验了,它能和我的MCU沟通~
我的概念是做一个小型的robot base, 它能载着我的linear motor 和我的storage and retrieval arm(一个dc motor,配合rack and pinion method控制aluminum bar向左,或向右), 去到特定的位置上,它会停下,并执行其他的command, (伸展linear motor, 储存,或领取物件)

所以我的整个project, 会用到好几个dc motor。

由于真的缺乏电子上的知识和贪图方便,我向cytron买了SK40B PIC Start Up KitMotor Driver 。 所以版主要求的circuit diagram 我真的没法提供~

1。 你要想做什么? 你的应用是什么?
基本上,我现在还处于开端,我需要试验dc motor 会不会在配合limit switch 时,停止转动,或到反转动~


2。你想要拿到什么效果
我用两个dc motor, 和两个limit switch, 当limit switch A没被按时, 两个dc motor会持续顺时针方向转动,当li
limit switch A 被按时,他们会停止。 然后进入逆时针方向转动,直到limit switch B 被按。 一直重复~


3。你做了什么
我用了PIC版主提供的电路图~ (因为我需要控制多个dc motor, 所以除了向cytron买的,我也自己做)




我做了两套同样的motor driver (还没焊接,只是在breadboard 上试验罢了)。


4。你遇到了什么问题。
我用multimeter test了我的program code, 证实我的coding 是能像我要求般的运作。 (click limit switch, test port output (high/low) )。 可是当我接到motor driver时,状况就来了。
状况A. dc motor不能配合limit switch, 停止/反转
状况B。dc motor 会自动停止,或自动反转
状况C。relay会tak tak 声,只是motor 不会转
等等~ 很乱就是了~


ps:
1。我用cytron 的 motor driver 试验过,的确能做到我要的效果(配合limit switch A 和 B) (虽然只是控制一粒motor)
2。我尝试过用PIC版主的电路图,控制我的2粒 dc motor(没配合limit switch)。要求它做简单的动作(顺时针3秒,然后逆时针3秒,一直重复)它也能做要~ (是不是证明了我接的没错啊?,可为什么要配合limit switch 时,却状况连连呢?)


5。你用什么MCU?
用着 PIC16F877A


6。你用什么语言? ASM /C/PICBasic/Keil?Compiler 版本?
C language, mikroC PRO for PIC


7. 有源码吗?

(codeA: 要做到的效果/做不到的效果)

  1. void forward();
  2. void backward();


  3. void main() {

  4. TRISB = 0b11000001; //RB0 as on board push button, RB6 and RB7 as limit switch input
  5. TRISD = 0;         //RD2/3 as motorA output pin, RD6/7 as motorB output pin
  6. PORTB = 0;
  7. PORTD = 0;



  8. while (PORTB.F0 == 1) continue;

  9. while (1) {
  10. forward();
  11. backward();
  12. }

  13. }

  14. void forward() {
  15. while(PORTB.F6 == 0) {     //当limit switch A 没被按时,motor 顺时钟转动)
  16. PORTD.F2 = 1;
  17. PORTD.F3 = 0;
  18. PORTD.F6 = 0;
  19. PORTD.F7 = 1; }        //当limit switch A 被按时, motor逆时针停止
  20. PORTD.F2 = 0;
  21. PORTD.F3 = 0;
  22. PORTD.F6 = 0;
  23. PORTD.F7 = 0;
  24. delay_ms(3000); }

  25. void backward() {       //当limit switch B 没被按时,motor 逆时钟转动)
  26. while(PORTB.F7 == 0) {
  27. PORTD.F2 = 0;
  28. PORTD.F3 = 1;
  29. PORTD.F6 = 1;
  30. PORTD.F7 = 0;}        //当limit switch A 被按时, motor逆时针停止
  31. PORTD.F2 = 0;
  32. PORTD.F3 = 0;
  33. PORTD.F6 = 0;
  34. PORTD.F7 = 0;
  35. delay_ms(3000); }
复制代码




(codeB: 用同样circuit 做到的效果)

  1. void main() {
  2. TRISB = 0b00000001;
  3. TRISD = 0;
  4. PORTB = 0;
  5. PORTD = 0;

  6. while (PORTB.F0 = 1) continue;

  7. while(1){
  8. PORTD.F2 = 1;
  9. PORTD.F3 = 0;
  10. PORTB.F6 = 1;
  11. PORTB.F7 = 0;
  12. delay_ms(5000);
  13. PORTD.F2 = 0;
  14. PORTD.F3 = 1;
  15. PORTB.F6 = 0;
  16. PORTB.F7 = 1;
  17. delay_ms(5000); }

  18. }
复制代码




8. 有电路图吗?
motor driver 的电路图是上述的。 cytron 的产品电路图,没办法提供


9。 有照片/图片补充吗?
没有~


10。你住的地区在哪里? 如要买东西可能同区域的朋友能给予建议。
马六甲


11。你google 了吗?如有,搜索关键字是什么?
google了relay function problem.. 因为真的不懂要google什么  T。T


备注:我用的DC Motor :
DC12VOutput Power: 3.4 WattMaximum Current: 1.1ARated Speed: 17RPMRated Torque: 1960mN.m










后序:
希望各位能帮帮我看看出了什么问题。 我会用心学的。 C language, limit switch connection, motor driver, relay operation, vb 2008 code ,等等我也是为了这project慢慢google 慢慢学习回来的(真的好像是从头开始酱)~ 只是这次真的遇到了瓶颈, 没法不麻烦大家~

评分

参与人数 1积分 +30 收起 理由
pic + 30 按版规发帖。

查看全部评分

回复

使用道具 举报


ADVERTISEMENT

发表于 25-1-2010 08:12 AM | 显示全部楼层
4。你遇到了什么问题。
我用multimeter test了我的program code, 证实我的coding 是能像我要求般的运作。 (click limitswitch, test port output (high/low) )。 可是当我接到motor driver时,状况就来了。
状况A. dc motor不能配合limit switch, 停止/反转
状况B。dc motor 会自动停止,或自动反转
状况C。relay会tak tak 声,只是motor 不会转
等等~ 很乱就是了~
whkang07 发表于 24-1-2010 03:54 AM

首先, 谢谢你按版规发帖, 奖励30分。

你的limit switch 怎样接去MCU?Active Low 还是 Active High?
你需要debounce 那个limit switch, 可以用 Software debounce 或hardware debounce

你可以参考waiweng大大建议的电路:S1 换去你的limit Switch。
必要时, 把C1的电容值加大。(0.47~1uF)
http://cforum3.cari.com.my/viewthread.php?tid=1841821&extra=page%3D1&page=2
#31楼


加入debounce后再试试看吧。。。
回复

使用道具 举报

 楼主| 发表于 25-1-2010 12:59 PM | 显示全部楼层
回复 2# pic


谢谢版主的回复。

我的limit switch 是这样接的~


5V------------4.7K Resistor-----------Limit Switch NC Pin--------------MCU I/O POrt


                                                  Limit Switch Com Pin-----------GND


哦,是debouncing 的问题吗?我会去试试再回来报告的~


昨天也问了一些electronics 朋友的意见~ 他们说有可能是因为我没装Flyback diode 的关系~  Google 了一下,得到了以下的接法~



如果是如上图这样,diode 要选什么型号的? 1N4001 能吗? 还是需要到1N5817?
回复

使用道具 举报

发表于 25-1-2010 01:12 PM | 显示全部楼层
Flyback diode,最好是用 Schottky diode,给 relay 的话,1N4148 就可以了。
回复

使用道具 举报

发表于 25-1-2010 01:22 PM | 显示全部楼层
哦,是debouncing 的问题吗?我会去试试再回来报告的~
whkang07 发表于 25-1-2010 12:59 PM

90% 是这个问题。你可以从硬体或软体来解决。
google 吧。。。


昨天也问了一些electronics 朋友的意见~ 他们说有可能是因为我没装Flyback diode 的关系~  Google 了一下,得到了以下的接法~
  那个diode 是要保护Transistor, 除非你的Relay很大一颗, 不然不放也无所谓。
反而, 在你的motor 那里放cap, 0.01uF, 要靠近你的motor的输入。
MCU 的VDD Gnd 放0.1uF 的cap。。。
motor在驱动时会产出杂讯。。有可能会干扰MCU。。
回复

使用道具 举报

 楼主| 发表于 27-1-2010 06:48 AM | 显示全部楼层
本帖最后由 whkang07 于 27-1-2010 06:51 AM 编辑

回复 5#
pic

   不好意思,又要麻烦各位了~


我昨天试验了,加了HardwareDebouncer Flyback diode 1N4148

我的Dc motor 还是不能够和limit switch 配合。


HardwareDebounce 是照waiweng提供的电路图接的。(用了0.47uF cap0.1uF 的也是同样效果)


Motor Drivercircuit limit switch circuit 因该都没接错~

仍然能够执行Loop Forever左转3秒,右转3秒的Simple Program

我也用Multimeter 试了limit switch (+hardware debounce),没问题~ switch被按时,RB6 / RB7都能被test5V

coding和一楼的一样


面对了几个状况~

program开始跑了,dc motor 开始转动(这时RC6/RC7都是0V)。但突然间dc motor会停止转动(RC6/RC7 突然间sense +-3V,然后RC6 RC7 pin都会被维持在+-3V

*我没activatelimit switchdc motor 是自动停止的

*dc motor 停止后,不管我按limit switchA / B都没反应,还是维持在+-3V,除非我reset 我的circuit, 他们才恢复正常(按 - 5V不按 - 0V


我的limit switch circuit 2 set motor driver circuit 都是build在同一片breadboard上,不懂会有影响吗?

版主,我不是很明白这两段~

在你的motor 那里放cap 0.01uF要靠近你的motor的输入。

是整样的接法呢?是MCU Pin -----capacitor-----motor terminal 吗?还是直接across terminals?

MCU VDD Gnd 0.1uF cap。。。

VDD ---- capacitor ---GND 吗?


这两样还没试。。
如果问了过于笨的问题,还请见谅

回复

使用道具 举报

Follow Us
发表于 27-1-2010 08:27 AM | 显示全部楼层
当program开始跑了,dc motor 开始转动(这时RC6/RC7都是0V)。但突然间dc motor会停止转动(RC6/RC7 突然间sense 到+-3V,然后RC6 和RC7 的pin都会被维持在+-3V)
*我没activatelimit switch,dc motor 是自动停止的
*dc motor 停止后,不管我按limit switchA / B,都没反应,还是维持在+-3V,除非我reset 我的circuit, 他们才恢复正常(按 - 5V,不按 - 0V)
whkang07 发表于 27-1-2010 06:48 AM

几种可能性。
1。 你的电力是什么? 电池, 还是adaptor? 电流足够吗?
2。你的MCU 有启动Brownout reset 吗? 暂时关掉再试
3. 你的MCU 被干扰, 当机了。。  

你一定要找出停机的原因, 不然不要继续。。

是整样的接法呢?是MCU Pin -----capacitor-----motor terminal 吗?还是直接across terminals?
是 VDD ---- capacitor ---GND 吗?

像这样 , 这个遥控直升机, 它有三个Cap, motor在高速运转时会产生干扰, 电容会吸收掉高频波。
diode 你就不要放了, 因为你的极性会 正负倒反, 除非放clamping Diode /TVS 之类的







你在MCU 的VDD-GND, 就在MCU底下, 越靠近越好, 一定要放一粒0.1uF 的cap。

还有, 你的PIC MCU 的MCLR怎样接?我想知道。
回复

使用道具 举报

 楼主| 发表于 27-1-2010 09:28 AM | 显示全部楼层
回复 7# pic


首先,先谢谢版主的用心回复。 感激~

由于真的缺乏电子上的知识和贪图方便,我向cytron买了
SK40B PIC Start Up Kit 所以关于MCLR pin 的接法,真的没办法知道~


SK40B 是用adapter提供power的, 12VDC, 350mA, 而dc motor是用12V 1.2Ah 的


我会去接上capacitor 和关掉 brown out reset 再试的。

回复

使用道具 举报


ADVERTISEMENT

发表于 27-1-2010 10:52 AM | 显示全部楼层
回复  pic
SK40B 是用adapter提供power的, 12VDC, 350mA, 而dc motor是用12V 1.2Ah 的
whkang07 发表于 27-1-2010 09:28 AM

马达 motor 的电源也是从 Adaptor 取得? 还是什么?
回复

使用道具 举报

发表于 27-1-2010 11:14 AM | 显示全部楼层
从你的 coding 看来,应该不是 debouncing 问题。试试看如果不接 motor,只是量 relay 那边的 output,能够操作吗?
回复

使用道具 举报

 楼主| 发表于 27-1-2010 07:33 PM | 显示全部楼层
回复 9# pic


   dc motor 的 power 是 lead acid rechargable battery 来的~
回复

使用道具 举报

 楼主| 发表于 28-1-2010 12:09 AM | 显示全部楼层
回复 10# waiweng83


   用multimeter 量了, 不接motor, 只是拿relay的output, 没问题~ 可是一接上motor, 有sot sot了。
那就是说motor 的noise 影响了MCU吗?
回复

使用道具 举报

发表于 28-1-2010 09:53 AM | 显示全部楼层
很大可能性是 motor noise 影响了。你用的是什么 motor?很大 amp 的?如果用 cytron 的 motor driver 的话没有问题?

你可以先用一粒 motor 来试:

1)放 free wheeling diode。如果 amp 不大,可以用 1N5817。
2)Motor ground 和 Circuit ground 不要接在一起。
3)如果你有其它比较小的 motor,用它来试一试。
回复

使用道具 举报

 楼主| 发表于 29-1-2010 12:43 AM | 显示全部楼层
回复 13# waiweng83


我已经装上了1N4148 as Flyback Diode 了~ 一定要1N5817吗?

Motor ground 和 Circuit ground 不要接在一起?如何说呢?

我的dc motor
DC12V
Output Power: 3.4 Watt
Maximum Current: 1.1A
Rated Speed: 17RPM
Rated Torque: 1960mN.m

@PIC版主,

我已装上了capacitor (3 x 0.01uF)在我的motor 了, 和0.1uF 在 5v - GND 了。。 情况有好转”一些“
有时候motor能正确地配合limit switch input转动, 但更多的时候,它还是有点sot sot (普遍上,有好过之前)

想问,那0.01uF 和 0.1 uF 的value 是fix的吗? 还是我能换更大的电容?
回复

使用道具 举报

发表于 29-1-2010 09:01 AM | 显示全部楼层
回复  waiweng83
   用multimeter 量了, 不接motor, 只是拿relay的output, 没问题~ 可是一接上motor ...
whkang07 发表于 28-1-2010 12:09 AM


可以放照片吗? 想看看你的motor, 你的电路板, 你的电线的长度 等等。
还有你的电路, 真正的线路, 会帮助大家了解你的问题。

先了解, 然后, 我再告诉你如何把motor 的noise 拿掉。
回复

使用道具 举报

发表于 29-1-2010 09:15 AM | 显示全部楼层
1)放 free wheeling diode。如果 amp 不大,可以用 1N5817。
waiweng83 发表于 28-1-2010 09:53 AM

他的motor 的+-极性会变, 可能要放zener,back to back, 或低压的TVS Diode。
回复

使用道具 举报


ADVERTISEMENT

发表于 29-1-2010 10:43 AM | 显示全部楼层
本帖最后由 waiweng83 于 29-1-2010 10:46 AM 编辑
回复  waiweng83
我已经装上了1N4148 as Flyback Diode 了~ 一定要1N5817吗?
whkang07 发表于 29-1-2010 12:43 AM


你的 1N4148 是装在 relay 还是 motor?我指的是在 motor 的。好像这样:


Diode 最好是用 1N5817,如果 flyback current 太高的话,1N4148 可能会烧掉。

他的motor 的+-极性会变, 可能要放zener,back to back, 或低压的TVS Diode。
pic 发表于 29-1-2010 09:15 AM

zener diode 怎样接???
回复

使用道具 举报

发表于 29-1-2010 06:12 PM | 显示全部楼层
你好,我现在大学3年级 也是要做类似你的 ASRS sytem,请问你用什么motor ?
回复

使用道具 举报

发表于 31-1-2010 02:11 PM | 显示全部楼层
file:///C:/DOCUME%7E1/lee/LOCALS%7E1/Temp/moz-screenshot-3.pngfile:///C:/DOCUME%7E1/lee/LOCALS%7E1/Temp/moz-screenshot-4.pngfile:///C:/DOCUME%7E1/lee/LOCALS%7E1/Temp/moz-screenshot-5.png
你的 1N4148 是装在 relay 还是 motor?我指的是在 motor 的。好像这样:


Diode 最好是用 1N5817,如果 flyback current 太高的话,1N4148 可能会烧掉。

你的电路会比较理想。 如果用1N400x 可以吗?


你的 1N4148 是装在 relay 还是 motor?我指的是在 motor 的。好像这样:
Diode 最好是用 1N5817 ...
waiweng83 发表于 29-1-2010 10:43 AM

哦, 我是这样想的。。 但是你上面的电路会更恰当
回复

使用道具 举报

发表于 31-1-2010 02:31 PM | 显示全部楼层
你的电路会比较理想。 如果用1N400x 可以吗?
pic 发表于 31-1-2010 02:11 PM


这个我也不确定。但最好是用 schottky diode,或其它快速的 diode。这样从 reverse polarity 到 diode turn on 的时间比较短,spark 也会比较小。

哦, 我是这样想的。。 但是你上面的电路会更恰当


这个我到真的没见过。不过理论上看起来也是行得通的。
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 29-3-2024 01:49 AM , Processed in 0.076655 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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