唯米高僧 发表于 2016-4-20 11:18:55

求助! Arduino步进和热电偶多任务运行的问题?

前几天想做个电动山东煎饼机, 用arduino控制一个步进来旋转饼铛然后热电偶控制电热丝加热. 步进用的是TB6560, 热电偶用的是max6675. 热电偶用的是定时interrupt, 每100ms进行一次interrupt. 现在的问题是每次打断之后热电偶读出来的温度值都是第一次的值........然后打断会打断步进的脉冲信号 (示波器看的). 打断目前可以接受, 可以慢慢搞, 但是热电偶涉及到防火安全, 所以现在要弄好才能放心测试. 希望大家帮着看看为什么.
示波器显示每次打断的热电偶的clock 和cs的信号正常, 但是热电偶没办法拆下来测所以没法说. 热电偶和步进的程序单着都挺好, 和一起就不成了.
谢谢大伙儿了.


#include <TimerOne.h>
#include <AccelStepper.h>    //用的是accelstepper library
#include <max6675.h>

#define stepdir 6
#define stepclk 5
#define TIMER_US 100000                         // 100mS set timer duration in microseconds

volatile bool in_long_isr = false;            // True if in long interrupt

int thermoDO = 9;
int thermoCS = 10;
int thermoCLK = 11;
int coilpin = 13;
const int t_want = 90;

AccelStepper stepper(stepdir,stepclk);
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
void setup()
{
   pinMode(stepclk, OUTPUT);
   pinMode(stepdir, OUTPUT);
   pinMode(coilpin, OUTPUT);
   stepper.setMaxSpeed(300);
   stepper.setSpeed(300);       
Timer1.initialize(TIMER_US);                  //
Timer1.attachInterrupt( timerIsr );         // attach the ISR routine here
Serial.begin(9600);// use Arduino pins
Serial.println("MAX6675 test");
delay(500);
}

void loop()
{
   stepper.runSpeed();
}

void timerIsr()      //timer1 做的interrupt
{
//digitalWrite( LED0, digitalRead( LED0 ) ^ 1 );// Toggle LED 0
    volatile long i=0;
    interrupts();                                 // Enable interrupts
    //checkcoil();

int temp = thermocouple.readCelsius();

if (temp >= t_want)
    digitalWrite(coilpin, LOW);

else if (temp <= t_want)
    digitalWrite(coilpin, HIGH);
   
Serial.print("C = ");
Serial.println(temp);
    noInterrupts();
}
//void checkcoil()       //热电偶检查温度调整电热丝的程序, 赚到了isr里面
//{
//int temp = thermocouple.readCelsius();
//
//if (temp >= t_want)
//    digitalWrite(coilpin, LOW);
//
//else if (temp <= t_want)
//    digitalWrite(coilpin, HIGH);
//   
//Serial.print("C = ");
//Serial.println(temp);
//return;
//}

275891381 发表于 2016-4-20 23:19:10

#define TIMER_US 100000 把这个弄大点试试,以前51采集热电偶也是不能采集太快,记得有个转换时间

唯米高僧 发表于 2016-4-21 13:14:26

275891381 发表于 2016-4-20 23:19 static/image/common/back.gif
#define TIMER_US 100000 把这个弄大点试试,以前51采集热电偶也是不能采集太快,记得有个转换时间

药到病除, 谢谢, 但是现在打断程序还是会打断步进脉冲信号
页: [1]
查看完整版本: 求助! Arduino步进和热电偶多任务运行的问题?