Vita 发表于 2016-10-6 15:28:57

求高手指導, Timer1出脈沖, 加入方向(正/ 反) 和 步數的控制程序

求高手指導,如何在以下定时器中断翻转数字IO程式中(输出方波),加入方向(正/反) 和 步數的控制程序

程序如下:                  

#include <TimerOne.h>
void setup()
{
pinMode(13, OUTPUT);
Timer1.initialize(100000);   //设置定时器中断时间,基本单位为微秒,如设置为100000,则定时时间为0.1秒,频率为10Hz。
Timer1.attachInterrupt(timerIsr ); // 设置用户自定义的定时器中断服务函数,每发生一次定时器中断,均会执行一次定时器中断服务函数。
}

void loop()
{
//主函数,用于执行非周期性任务
}

void timerIsr()
    {   // 反转I/O口电平
    digitalWrite( 13,digitalRead( 13 ) ^ 1 );
    }

    謝謝

275891381 发表于 2016-10-6 19:58:11

你的问题我都没理解

Vita 发表于 2016-10-7 09:03:24

我想用Timer1出脈沖經控制器來推動步進電機, 因轉速可更快. 但不知道如何加入"方向"和"步數"設定于程序中, 求教

164335413 发表于 2016-10-8 09:24:10

timer 用来产生脉冲,方向和步数就要从loop里面来做,有相应的条件,就改变方向和步数。loop加上if之类的语句就行。

Vita 发表于 2016-10-8 10:29:39

謝164335413的指導, 那步數是否用FOR命令作控制呢 ? :$

Vita 发表于 2016-10-13 15:49:39

程序試寫了, 但用了delay控制步數有點怪怪的, 有更好方法嗎 ? :)

#include <TimerOne.h>

//针脚定义
const int pul_pin_x = 2;//X轴脉冲驱动口
const int dir_pin = 5;//方向控制
const int ena_pin = 8;//释放电机

boolean output =LOW;//脉冲方波状态
boolean dir = LOW;//方向状态
boolean ena = LOW;//释放电机锁死状态

/*---------=============函数定义==============----------*/

void wave_x()//摇杆x轴脉冲输出程序
{
    output = !output;
    digitalWrite(pul_pin_x,output);      
}

void wave_stop() //脉冲停止程序
{
    Timer1.stop();
    output = LOW;
    digitalWrite(pul_pin_x,output);
}

/*-----------============参数设置=============-------------*/

void setup()
{
/*输出端口配置*/
pinMode(pul_pin_x,OUTPUT);
pinMode(dir_pin,OUTPUT);
pinMode(ena_pin,OUTPUT);

/*输入端口配置 */
pinMode(9, INPUT);

/*端口初始化 */
digitalWrite(pul_pin_x,LOW);
digitalWrite(dir_pin,LOW);
digitalWrite(ena_pin,LOW);

Timer1.stop();
}

/*-----------=============主函数循环体=============-----------*/

void loop()
{
if(digitalRead( 9 ) == HIGH)// 檢查按鍵
{
    for (int i=0; i < 630; i++ ) //反轉2圈
   {
    digitalWrite(dir_pin, HIGH);   
    Timer1.initialize(50);
    Timer1.attachInterrupt(wave_x);
    delay (1);
   }
   
   wave_stop();
   delay (1000);      //停1秒
   
    for (int i=0; i < 630; i++ )   //正轉2圈
   {
    digitalWrite(dir_pin, LOW);   
    Timer1.initialize(50);
    Timer1.attachInterrupt(wave_x);
    delay (1);
   }
   wave_stop();
   
}
}
页: [1]
查看完整版本: 求高手指導, Timer1出脈沖, 加入方向(正/ 反) 和 步數的控制程序