极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20252|回复: 15

怎么样才能转动步进机电机同时支持12864屏刷新,不会让电机转得太慢呢?

[复制链接]
发表于 2014-1-9 10:45:15 | 显示全部楼层 |阅读模式
怎么样才能转动步进机电机同时支持12864屏刷新,不会让电机转得太慢呢?
  1. #include <U8glib.h> //声明库
  2. U8GLIB_ST7920_128X64_4X u8g(12, 11, 10);
  3. #include <HX711.h>
  4. HX711 hx(8, 9,128,0.002347);
  5. #include <EEPROM.h>

  6. #include <EasyStepper.h>

  7. // define the pins
  8. #define STEP_PIN 6
  9. #define DIR_PIN 7
  10. #define EN_PIN 13

  11. // define the inverted
  12. #define DIR_PIN_INVERTED true
  13. #define EN_PIN_INVERTED true

  14. // the EasyStepper instance
  15. EasyStepper stepper1(STEP_PIN, DIR_PIN, EN_PIN, DIR_PIN_INVERTED, EN_PIN_INVERTED);

  16. // the stepps to rotate
  17. int stepps = 200;
  18. int times = 0;
  19. float x,y;
  20. const uint8_t L[] PROGMEM = {
  21.   0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,
  22.       0xC0,0x00,0x00,0x06,0x00,0x60,0x70,0x00,
  23.       0x00,0x03,0x80,0x00,0x00,0x1C,0x00,0x00,
  24.       0xC0,0x00,0x04,0x07,0x00,0x70,0x38,0x00,
  25.       0x00,0x01,0xF0,0x00,0x07,0xFE,0x00,0x00,
  26.       0xC0,0x00,0x07,0x07,0x00,0x30,0x30,0x00,
  27.       0x00,0x01,0xE0,0x00,0xFF,0x0E,0x00,0x00,
  28.       0xDC,0x00,0x1F,0x06,0x00,0x30,0x30,0x00,
  29.       0x00,0x01,0x84,0x00,0xC3,0x0C,0x00,0x03,
  30.       0xFC,0x00,0x38,0x06,0x00,0x30,0x30,0x00,
  31.       0x00,0x41,0xFF,0x00,0x63,0x0C,0x00,0x1F,
  32.       0xC0,0x00,0xDC,0x76,0x00,0x30,0x37,0x00,
  33.       0x00,0xFF,0x87,0x00,0x67,0xD8,0x00,0x01,
  34.       0xC0,0x00,0x08,0x36,0x00,0x30,0x7E,0x00,
  35.       0x00,0xE0,0x26,0x00,0x6F,0x98,0x00,0x01,
  36.       0x70,0x00,0x0B,0x06,0x00,0x7D,0xF0,0x00,
  37.       0x00,0xC7,0xE0,0x00,0x23,0x18,0x00,0x03,
  38.       0x38,0x00,0x1F,0x66,0x03,0xF0,0x20,0x00,
  39.       0x01,0x8F,0x00,0x00,0x23,0x38,0x00,0x06,
  40.       0x1B,0xE3,0xF8,0x76,0x01,0x30,0x20,0x00,
  41.       0x00,0x13,0x38,0x00,0x37,0xF0,0x00,0x0D,
  42.       0xFF,0xF7,0x98,0x16,0x00,0x30,0x3C,0x00,
  43.       0x00,0x3B,0x98,0x00,0x3E,0x30,0x03,0xFF,
  44.       0xF0,0x00,0x3F,0x06,0xF0,0x38,0xFE,0x00,
  45.       0x00,0x76,0xC0,0x00,0x00,0x03,0x83,0xC0,
  46.       0x18,0x00,0x3A,0x1F,0xF0,0x33,0x8C,0x00,
  47.       0x00,0xCC,0x70,0x01,0x03,0x01,0xC0,0x01,
  48.       0x18,0x00,0x69,0xFE,0x00,0xF1,0x98,0x00,
  49.       0x00,0x0C,0xFC,0x01,0x23,0x80,0xE0,0x3F,
  50.       0xD8,0x00,0xD8,0x06,0x03,0xA0,0xD8,0x00,
  51.       0x00,0x1F,0xFF,0x83,0x21,0xC8,0x40,0x31,
  52.       0x98,0x01,0x98,0x06,0x0F,0x30,0x78,0x00,
  53.       0x00,0x38,0x37,0xF3,0x30,0x8C,0x00,0x11,
  54.       0x18,0x03,0x18,0x06,0x0E,0x30,0x70,0x00,
  55.       0x00,0xFF,0xB1,0xE7,0x10,0x06,0x00,0x1F,
  56.       0x98,0x04,0x18,0x06,0x00,0x30,0x78,0x00,
  57.       0x01,0x9C,0x30,0x06,0x1C,0x07,0x00,0x18,
  58.       0x18,0x00,0x18,0x06,0x00,0x30,0xFC,0x00,
  59.       0x07,0x1F,0xB0,0x02,0x0F,0x0F,0x80,0x10,
  60.       0x18,0x00,0x18,0x06,0x00,0x37,0x8F,0x80,
  61.       0x00,0x1F,0x30,0x00,0x07,0xFF,0x00,0x00,
  62.       0x18,0x00,0x18,0x06,0x00,0xE6,0x07,0xF0,
  63.       0x00,0x18,0xF0,0x00,0x00,0x00,0x00,0x00,
  64.       0x18,0x00,0x18,0x06,0x00,0x60,0x01,0xC0,
  65.       0x00,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,
  66.       0xF8,0x00,0x00,0x06,0x00,0x00,0x00,0x00,
  67.       0x00,0x18,0x70,0x00,0x00,0x00,0x00,0x00,
  68.       0x78,0x00,0x00,0x06,0x00,0x00,0x00,0x00,
  69.       0x00,0x60,0x00,0x01,0x00,0x00,0x08,0x00,
  70.       0x00,0x00,0x00,0x00,0x80,0x00,0x10,0x00,
  71.       0x00,0x90,0x00,0x01,0x00,0x00,0x00,0x00,
  72.       0x00,0x00,0x00,0x00,0x80,0x00,0x10,0x00,
  73.       0x00,0x8B,0x39,0xCD,0x72,0x80,0x01,0x60,
  74.       0x08,0xBA,0x56,0x00,0xB7,0x2C,0xD7,0x80,
  75.       0x01,0xE4,0xC6,0x33,0x8D,0x40,0x08,0x90,
  76.       0x08,0xC6,0x49,0x00,0xC8,0x93,0x38,0x00,
  77.       0x00,0x84,0x7B,0xD1,0x8D,0x40,0x08,0x90,
  78.       0x09,0xC6,0x48,0x00,0x8B,0x93,0x17,0x00,
  79.       0x00,0x84,0x42,0x13,0x8D,0x40,0x08,0x90,
  80.       0x06,0xC6,0x48,0x00,0x8C,0x93,0x30,0x80,
  81.       0x00,0x84,0x39,0xCD,0x75,0x40,0x08,0x90,
  82.       0x00,0xB9,0xA8,0x00,0x8B,0x52,0xDF,0x00,
  83.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  84.       0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  85.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  86.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  87.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  88.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  89.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  90.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  91.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  92.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  93.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  94.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  95.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  96.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  97.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  98.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  99.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  100.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  101.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  102.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  103.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  104.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  105.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  106.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  107.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  108.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  109.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  110.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  111.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  112.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  113.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  114.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  115.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  116.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  117.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  118.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  119.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  120.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  121.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  122.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  123.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  124.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  125.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  126.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  127.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  128.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  129.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  130.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  131.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  132.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  133.       0x1D,0x00,0x00,0x10,0x00,0x00,0x3C,0x04,
  134.       0x00,0x10,0x00,0x70,0x00,0x08,0x20,0x20,
  135.       0x23,0x00,0x00,0x10,0x00,0x00,0x22,0x04,
  136.       0x00,0x10,0x00,0x88,0x00,0x08,0x20,0x20,
  137.       0x21,0x67,0x5B,0xF6,0x75,0x80,0x22,0x0F,
  138.       0xB9,0xD6,0x00,0x83,0x80,0x08,0x7D,0xA0,
  139.       0x1D,0x98,0xA4,0x59,0x8A,0x40,0x3D,0xF4,
  140.       0x46,0x39,0x00,0x84,0x40,0x08,0x22,0x60,
  141.       0x03,0x1F,0x24,0x91,0xF2,0x40,0x28,0x04,
  142.       0x7A,0x11,0x00,0x84,0x40,0xC8,0x22,0x20,
  143.       0x23,0x18,0x25,0x11,0x82,0x40,0x24,0x04,
  144.       0xC2,0x11,0x00,0x8C,0x58,0x88,0x26,0x6C,
  145.       0x1D,0x17,0x27,0xF1,0x72,0x40,0x22,0x03,
  146.       0x39,0xD1,0x00,0x73,0x99,0x0F,0x99,0xAC,
  147.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  148.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  149. };

  150. int hx711()
  151. {
  152. double sum = 0;    // 为了减小误差,一次取出10个值后求平均值。
  153.   for (int i = 0; i < 10; i++) // 循环的越多精度越高,当然耗费的时间也越多
  154.    sum +=hx.bias_read();  // 累加
  155.   return sum/10; // 求平均值进行均差
  156. }

  157. void motor()
  158. {
  159. if (times < 10)
  160.   {
  161.     stepper1.run();
  162.     if (stepper1.isDone())
  163.     {
  164.       // go back
  165.       stepps *= -1;
  166.       stepper1.rotate(2000.0, stepps);
  167.       times++;
  168.       if(times==10)times=0;
  169.     }
  170.   }
  171. }

  172. void setup()
  173. {
  174.   hx.set_offset(5350);
  175.   hx.tare();
  176. u8g.firstPage();  
  177.    do {
  178.     u8g.drawBitmapP( 0, 0, 16  , 64, L);
  179.      u8g.setFont(u8g_font_7x14);  //写文字
  180.      u8g.drawStr(5,49,"E-cig Test Ver1.0");  
  181.     } while( u8g.nextPage() );
  182.    delay(5000);
  183.    stepper1.debugMode(false);
  184.   stepper1.startup();
  185.   stepper1.rotate(800.0, stepps);
  186.    
  187. }
  188. void loop()
  189. {
  190.   u8g.firstPage( );
  191.   int data=hx711();
  192.   motor();
  193.   //delay(100);
  194.   do               //显示
  195.    
  196.      {
  197.      u8g.setFont(u8g_font_5x7);  //写文字
  198.      u8g.drawStr(2,6,"Arduino Oscilloscope V0.1");
  199.      u8g.setFont(u8g_font_5x7);  //写文字
  200.      u8g.drawStr(5,64,"Shenzhen R-tech Co.,Ltd.");
  201.      u8g.setPrintPos(50, 50);
  202.       
  203.      {
  204.     u8g.setFont(u8g_font_9x18);
  205.     u8g.print(data);
  206.    
  207.      }   
  208.      //  u8g.drawLine(64,0,64,63);  // 画坐标轴
  209.      
  210.       // u8g.drawLine(0,32,128,32);
  211.      //  for(x=0;x<128;x+=8)        //画坐标轴刻度
  212.      //  u8g.drawLine(x,31,x,33);
  213.       // for(x=0;x<64;x+=8)
  214.       // u8g.drawLine(63,x,65,x);   
  215.     //   u8g.drawFrame(19,6,90,52); //画边框  
  216.     }
  217.    while( u8g.nextPage( ));
  218. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-1-9 10:47:10 | 显示全部楼层
有人支招吗?》
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-9 10:47:39 | 显示全部楼层
发现电机转得特别慢如何解决呀?
回复 支持 反对

使用道具 举报

发表于 2014-1-9 11:32:30 | 显示全部楼层
你确定如果将下面的代码去掉之后电机转速会变快么?

  do               //显示

     {
     u8g.setFont(u8g_font_5x7);  //写文字
     u8g.drawStr(2,6,"Arduino Oscilloscope V0.1");
     u8g.setFont(u8g_font_5x7);  //写文字
     u8g.drawStr(5,64,"Shenzhen R-tech Co.,Ltd.");
     u8g.setPrintPos(50, 50);

     {
    u8g.setFont(u8g_font_9x18);
    u8g.print(data);

     }   
     //  u8g.drawLine(64,0,64,63);  // 画坐标轴

      // u8g.drawLine(0,32,128,32);
     //  for(x=0;x<128;x+=8)        //画坐标轴刻度
     //  u8g.drawLine(x,31,x,33);
      // for(x=0;x<64;x+=8)
      // u8g.drawLine(63,x,65,x);   
    //   u8g.drawFrame(19,6,90,52); //画边框  
    }
   while( u8g.nextPage( ));
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-9 13:55:48 | 显示全部楼层
能确定!我试过了
回复 支持 反对

使用道具 举报

发表于 2014-1-9 14:03:53 | 显示全部楼层
fairsky 发表于 2014-1-9 13:55
能确定!我试过了

那我的建议就是继续在这段代码中一直删除东西试试

看看是因为某条语句耗时太长导致的。

当然有可能有2个结果:1.是某条语句导致的 2.放在一起整体导致的

先试试看吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-9 14:10:06 | 显示全部楼层
我现在希望能找到能够电机和显示同时执行互不干扰的方法就好了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-9 14:11:20 | 显示全部楼层
因为我还有一个HX711称重传感器。执行一次要105ms{:soso_e101:}
回复 支持 反对

使用道具 举报

发表于 2014-1-9 14:15:14 | 显示全部楼层
要不你试试多线程库?我没用过,但是有可能解决你的问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-9 14:35:00 | 显示全部楼层
我试了那个PT库。我1.05版本表示执行不了~{:soso_e101:}
回复 支持 反对

使用道具 举报

发表于 2014-1-9 14:55:29 | 显示全部楼层
fairsky 发表于 2014-1-9 14:35
我试了那个PT库。我1.05版本表示执行不了~

呃 我觉得那你的目标应该就是修改库,让他能在你的板子上运行啊~

这应该是最简单的方法了,特别是你还有一个耗时100多ms的传感器
回复 支持 反对

使用道具 举报

发表于 2014-1-10 19:43:38 | 显示全部楼层
我是用定时器产生脉冲来控制步进电机驱动器,再由驱动器驱动步进电机的,屏幕当时用的IIC通讯的1602,没有发生什么延迟,至少感觉不到。所以不清楚对你有没有帮助
回复 支持 反对

使用道具 举报

发表于 2014-1-11 10:52:50 | 显示全部楼层
用iic总线通讯连上几块板子,每块完成一个或者两个工作也行吧
回复 支持 反对

使用道具 举报

发表于 2014-1-11 10:59:28 | 显示全部楼层
步进电机是需要独占定时器或者时钟频率的。。多轴步进电机联动一直是个科研难题,更别提步进电机+屏幕刷新了。。。。最简单的方法就是用总线连接两个小的arduino,一个用来控制步进电机,另一个用来绘图。再把这些连接到一个控制器(主机)上……然后让两个从机根据主机发送的数据各自运转
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-13 11:02:13 | 显示全部楼层
friskit 发表于 2014-1-11 10:59
步进电机是需要独占定时器或者时钟频率的。。多轴步进电机联动一直是个科研难题,更别提步进电机+屏幕刷新了 ...

那三D打印机四轴是怎么弄的~~~
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 03:24 , Processed in 0.044062 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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