fairsky 发表于 2014-1-9 10:45:15

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

怎么样才能转动步进机电机同时支持12864屏刷新,不会让电机转得太慢呢?#include <U8glib.h> //声明库
U8GLIB_ST7920_128X64_4X u8g(12, 11, 10);
#include <HX711.h>
HX711 hx(8, 9,128,0.002347);
#include <EEPROM.h>

#include <EasyStepper.h>

// define the pins
#define STEP_PIN 6
#define DIR_PIN 7
#define EN_PIN 13

// define the inverted
#define DIR_PIN_INVERTED true
#define EN_PIN_INVERTED true

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

// the stepps to rotate
int stepps = 200;
int times = 0;
float x,y;
const uint8_t L[] PROGMEM = {
0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,
      0xC0,0x00,0x00,0x06,0x00,0x60,0x70,0x00,
      0x00,0x03,0x80,0x00,0x00,0x1C,0x00,0x00,
      0xC0,0x00,0x04,0x07,0x00,0x70,0x38,0x00,
      0x00,0x01,0xF0,0x00,0x07,0xFE,0x00,0x00,
      0xC0,0x00,0x07,0x07,0x00,0x30,0x30,0x00,
      0x00,0x01,0xE0,0x00,0xFF,0x0E,0x00,0x00,
      0xDC,0x00,0x1F,0x06,0x00,0x30,0x30,0x00,
      0x00,0x01,0x84,0x00,0xC3,0x0C,0x00,0x03,
      0xFC,0x00,0x38,0x06,0x00,0x30,0x30,0x00,
      0x00,0x41,0xFF,0x00,0x63,0x0C,0x00,0x1F,
      0xC0,0x00,0xDC,0x76,0x00,0x30,0x37,0x00,
      0x00,0xFF,0x87,0x00,0x67,0xD8,0x00,0x01,
      0xC0,0x00,0x08,0x36,0x00,0x30,0x7E,0x00,
      0x00,0xE0,0x26,0x00,0x6F,0x98,0x00,0x01,
      0x70,0x00,0x0B,0x06,0x00,0x7D,0xF0,0x00,
      0x00,0xC7,0xE0,0x00,0x23,0x18,0x00,0x03,
      0x38,0x00,0x1F,0x66,0x03,0xF0,0x20,0x00,
      0x01,0x8F,0x00,0x00,0x23,0x38,0x00,0x06,
      0x1B,0xE3,0xF8,0x76,0x01,0x30,0x20,0x00,
      0x00,0x13,0x38,0x00,0x37,0xF0,0x00,0x0D,
      0xFF,0xF7,0x98,0x16,0x00,0x30,0x3C,0x00,
      0x00,0x3B,0x98,0x00,0x3E,0x30,0x03,0xFF,
      0xF0,0x00,0x3F,0x06,0xF0,0x38,0xFE,0x00,
      0x00,0x76,0xC0,0x00,0x00,0x03,0x83,0xC0,
      0x18,0x00,0x3A,0x1F,0xF0,0x33,0x8C,0x00,
      0x00,0xCC,0x70,0x01,0x03,0x01,0xC0,0x01,
      0x18,0x00,0x69,0xFE,0x00,0xF1,0x98,0x00,
      0x00,0x0C,0xFC,0x01,0x23,0x80,0xE0,0x3F,
      0xD8,0x00,0xD8,0x06,0x03,0xA0,0xD8,0x00,
      0x00,0x1F,0xFF,0x83,0x21,0xC8,0x40,0x31,
      0x98,0x01,0x98,0x06,0x0F,0x30,0x78,0x00,
      0x00,0x38,0x37,0xF3,0x30,0x8C,0x00,0x11,
      0x18,0x03,0x18,0x06,0x0E,0x30,0x70,0x00,
      0x00,0xFF,0xB1,0xE7,0x10,0x06,0x00,0x1F,
      0x98,0x04,0x18,0x06,0x00,0x30,0x78,0x00,
      0x01,0x9C,0x30,0x06,0x1C,0x07,0x00,0x18,
      0x18,0x00,0x18,0x06,0x00,0x30,0xFC,0x00,
      0x07,0x1F,0xB0,0x02,0x0F,0x0F,0x80,0x10,
      0x18,0x00,0x18,0x06,0x00,0x37,0x8F,0x80,
      0x00,0x1F,0x30,0x00,0x07,0xFF,0x00,0x00,
      0x18,0x00,0x18,0x06,0x00,0xE6,0x07,0xF0,
      0x00,0x18,0xF0,0x00,0x00,0x00,0x00,0x00,
      0x18,0x00,0x18,0x06,0x00,0x60,0x01,0xC0,
      0x00,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,
      0xF8,0x00,0x00,0x06,0x00,0x00,0x00,0x00,
      0x00,0x18,0x70,0x00,0x00,0x00,0x00,0x00,
      0x78,0x00,0x00,0x06,0x00,0x00,0x00,0x00,
      0x00,0x60,0x00,0x01,0x00,0x00,0x08,0x00,
      0x00,0x00,0x00,0x00,0x80,0x00,0x10,0x00,
      0x00,0x90,0x00,0x01,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x80,0x00,0x10,0x00,
      0x00,0x8B,0x39,0xCD,0x72,0x80,0x01,0x60,
      0x08,0xBA,0x56,0x00,0xB7,0x2C,0xD7,0x80,
      0x01,0xE4,0xC6,0x33,0x8D,0x40,0x08,0x90,
      0x08,0xC6,0x49,0x00,0xC8,0x93,0x38,0x00,
      0x00,0x84,0x7B,0xD1,0x8D,0x40,0x08,0x90,
      0x09,0xC6,0x48,0x00,0x8B,0x93,0x17,0x00,
      0x00,0x84,0x42,0x13,0x8D,0x40,0x08,0x90,
      0x06,0xC6,0x48,0x00,0x8C,0x93,0x30,0x80,
      0x00,0x84,0x39,0xCD,0x75,0x40,0x08,0x90,
      0x00,0xB9,0xA8,0x00,0x8B,0x52,0xDF,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x1D,0x00,0x00,0x10,0x00,0x00,0x3C,0x04,
      0x00,0x10,0x00,0x70,0x00,0x08,0x20,0x20,
      0x23,0x00,0x00,0x10,0x00,0x00,0x22,0x04,
      0x00,0x10,0x00,0x88,0x00,0x08,0x20,0x20,
      0x21,0x67,0x5B,0xF6,0x75,0x80,0x22,0x0F,
      0xB9,0xD6,0x00,0x83,0x80,0x08,0x7D,0xA0,
      0x1D,0x98,0xA4,0x59,0x8A,0x40,0x3D,0xF4,
      0x46,0x39,0x00,0x84,0x40,0x08,0x22,0x60,
      0x03,0x1F,0x24,0x91,0xF2,0x40,0x28,0x04,
      0x7A,0x11,0x00,0x84,0x40,0xC8,0x22,0x20,
      0x23,0x18,0x25,0x11,0x82,0x40,0x24,0x04,
      0xC2,0x11,0x00,0x8C,0x58,0x88,0x26,0x6C,
      0x1D,0x17,0x27,0xF1,0x72,0x40,0x22,0x03,
      0x39,0xD1,0x00,0x73,0x99,0x0F,0x99,0xAC,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

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

void motor()
{
if (times < 10)
{
    stepper1.run();
    if (stepper1.isDone())
    {
      // go back
      stepps *= -1;
      stepper1.rotate(2000.0, stepps);
      times++;
      if(times==10)times=0;
    }
}
}

void setup()
{
hx.set_offset(5350);
hx.tare();
u8g.firstPage();
   do {
    u8g.drawBitmapP( 0, 0, 16, 64, L);
   u8g.setFont(u8g_font_7x14);//写文字
   u8g.drawStr(5,49,"E-cig Test Ver1.0");
    } while( u8g.nextPage() );
   delay(5000);
   stepper1.debugMode(false);
stepper1.startup();
stepper1.rotate(800.0, stepps);
   
}
void loop()
{
u8g.firstPage( );
int data=hx711();
motor();
//delay(100);
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( ));
}

fairsky 发表于 2014-1-9 10:47:10

有人支招吗?》

fairsky 发表于 2014-1-9 10:47:39

发现电机转得特别慢如何解决呀?

zoologist 发表于 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( ));

fairsky 发表于 2014-1-9 13:55:48

能确定!我试过了

zoologist 发表于 2014-1-9 14:03:53

fairsky 发表于 2014-1-9 13:55 static/image/common/back.gif
能确定!我试过了

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

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

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

先试试看吧

fairsky 发表于 2014-1-9 14:10:06

我现在希望能找到能够电机和显示同时执行互不干扰的方法就好了

fairsky 发表于 2014-1-9 14:11:20

因为我还有一个HX711称重传感器。执行一次要105ms{:soso_e101:}

zoologist 发表于 2014-1-9 14:15:14

要不你试试多线程库?我没用过,但是有可能解决你的问题

fairsky 发表于 2014-1-9 14:35:00

我试了那个PT库。我1.05版本表示执行不了~{:soso_e101:}

zoologist 发表于 2014-1-9 14:55:29

fairsky 发表于 2014-1-9 14:35 static/image/common/back.gif
我试了那个PT库。我1.05版本表示执行不了~

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

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

rick_hou 发表于 2014-1-10 19:43:38

我是用定时器产生脉冲来控制步进电机驱动器,再由驱动器驱动步进电机的,屏幕当时用的IIC通讯的1602,没有发生什么延迟,至少感觉不到。所以不清楚对你有没有帮助

soinger 发表于 2014-1-11 10:52:50

用iic总线通讯连上几块板子,每块完成一个或者两个工作也行吧

friskit 发表于 2014-1-11 10:59:28

步进电机是需要独占定时器或者时钟频率的。。多轴步进电机联动一直是个科研难题,更别提步进电机+屏幕刷新了。。。。最简单的方法就是用总线连接两个小的arduino,一个用来控制步进电机,另一个用来绘图。再把这些连接到一个控制器(主机)上……然后让两个从机根据主机发送的数据各自运转

fairsky 发表于 2014-1-13 11:02:13

friskit 发表于 2014-1-11 10:59 static/image/common/back.gif
步进电机是需要独占定时器或者时钟频率的。。多轴步进电机联动一直是个科研难题,更别提步进电机+屏幕刷新了 ...

那三D打印机四轴是怎么弄的~~~
页: [1] 2
查看完整版本: 怎么样才能转动步进机电机同时支持12864屏刷新,不会让电机转得太慢呢?