2013-12-18 14:19:29 [显示全部楼层]
6045浏览
查看: 6045|回复: 0

[转载] [Arduino模块] EMG49 驱动MD49 24V 电机

[复制链接]
[Arduino模块]
EMG49 驱动MD49 24V 电机

电路示意:



代码示例:
  1. /*********************************************
  2. *       Arduino example code for MD49        *
  3. * Using LCD03 in serial mode to display data *
  4. *                                            *
  5. *         By James Henderson, 2012.          *
  6. *********************************************/
  7. #include <SoftwareSerial.h>
  8. // Values of 0 being sent over serial write have to be cast as a byte so they arent misinterpreted as NULL
  9. // This is a bug with arduino 1.0
  10. #define CMD        (byte)0x00            // MD49 command address of 0                                 
  11. #define GET_VER          0x29
  12. #define GET_ENC1         0x23
  13. #define GET_ENC2         0x24
  14. #define GET_VI           0x2C
  15. #define GET_ERROR        0x2D
  16. #define SET_ACCEL        0x33
  17. #define SET_SPEED1       0x31
  18. #define SET_SPEED2       0x32
  19. #define LCD_RX           0x02                             // RX and TX pins used for LCD0303 serial port
  20. #define LCD_TX           0x03
  21. #define LCD03_HIDE_CUR   0x04
  22. #define LCD03_HOME       0x01
  23. #define LCD03_CLEAR      0x0C
  24. #define LCD03_SET_CUR    0x02
  25. SoftwareSerial lcd03 = SoftwareSerial(LCD_RX, LCD_TX);    // Creates a serial port for the LCD03
  26. byte enc1a, enc1b, enc1c, enc1d = 0;
  27. byte enc2a, enc2b, enc2c, enc2d = 0;
  28. byte bat_volt, mot1_cur, mot2_cur = 0;
  29. byte ver = 0;
  30. byte error = 0;
  31. void setup()
  32. {
  33.    Serial.begin(38400);
  34.    lcd03.begin(9600);
  35.    
  36.    lcd03.write(LCD03_CLEAR);                                                
  37.    lcd03.write(LCD03_HIDE_CUR);
  38.    
  39. }
  40. void loop()
  41. {
  42.   Serial.write(CMD);                        // command byte
  43.   Serial.write(SET_ACCEL);                  
  44.   Serial.write(5);                          // Set accelleration to 5
  45.   Serial.write(CMD);
  46.   Serial.write(SET_SPEED1);
  47.   Serial.write(140);                        // Set motor 1 speed
  48.   Serial.write(CMD);
  49.   Serial.write(SET_SPEED2);
  50.   Serial.write(140);                        // Set motor 2 speed
  51.   Serial.write(CMD);
  52.   Serial.write(GET_VER);                    // Recieve version back
  53.   delay(50);
  54.   if(Serial.available() > 0)
  55.   {
  56.     ver = Serial.read();
  57.   }
  58.   
  59.   Serial.write(CMD);
  60.   Serial.write(GET_ERROR);                  // Recieve error byte back
  61.   delay(50);
  62.   if(Serial.available() > 0)
  63.   {
  64.     error = Serial.read();
  65.   }
  66.   Serial.write(CMD);
  67.   Serial.write(GET_VI);                     // Recieve battery volts and both motor currents back
  68.   delay(50);
  69.   if(Serial.available() > 2)
  70.   {
  71.     bat_volt = Serial.read();
  72.     mot1_cur = Serial.read();
  73.     mot2_cur = Serial.read();
  74.   }
  75.   Serial.write(CMD);
  76.   Serial.write(GET_ENC1);                   // Recieve encoder 1 value
  77.   delay(50);
  78.   if(Serial.available() > 3)
  79.   {
  80.     enc1a = Serial.read();
  81.     enc1b = Serial.read();
  82.     enc1c = Serial.read();
  83.     enc1d = Serial.read();
  84.   }
  85.   
  86.   Serial.write(CMD);
  87.   Serial.write(GET_ENC2);                   // Recieve encoder 2 value
  88.   delay(50);
  89.   if(Serial.available() > 3)
  90.   {
  91.     enc2a = Serial.read();
  92.     enc2b = Serial.read();
  93.     enc2c = Serial.read();
  94.     enc2d = Serial.read();
  95.   }
  96.   
  97.   lcd03.write(LCD03_HOME);                  // Return cursor home
  98.   
  99.   lcd03.print("Rev: ");                     // Display data to the screen
  100.   lcd03.print(ver,DEC);
  101.   lcd03.print(" Battery V: ");
  102.   lcd03.print(bat_volt, DEC);
  103.   lcd03.write(LCD03_SET_CUR);               // Set position of cursor
  104.   lcd03.write(21);
  105.   
  106.   delay(5);                                 // Delay to allow LCD03 time to process data
  107.   
  108.   lcd03.print("Encoder 1:");
  109.   lcd03.print(enc1a,HEX);
  110.   lcd03.print(enc1b,HEX);
  111.   lcd03.print(enc1c,HEX);
  112.   lcd03.print(enc1d,HEX);
  113.   lcd03.write(LCD03_SET_CUR);
  114.   lcd03.write(41);
  115.   
  116.   delay(5);
  117.   
  118.   lcd03.write("Encoder 2:");
  119.   lcd03.print(enc2a,HEX);
  120.   lcd03.print(enc2b,HEX);
  121.   lcd03.print(enc2c,HEX);
  122.   lcd03.print(enc2d,HEX);  
  123.   lcd03.write(LCD03_SET_CUR);
  124.   lcd03.write(61);
  125.   
  126.   delay(5);
  127.   
  128.   lcd03.print("Mot 1 I:");
  129.   lcd03.print(mot1_cur,DEC);
  130.   lcd03.print(" Mot 2 I:");
  131.   lcd03.print(mot2_cur,DEC);  
  132.   lcd03.print("");
  133.   delay(5);  
  134.   
  135. }
复制代码




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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail