电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>使用步进电机拉下无花果树枝以吓跑鸟类和松鼠

使用步进电机拉下无花果树枝以吓跑鸟类和松鼠

2022-12-20 | zip | 0.10 MB | 次下载 | 免费

资料介绍

描述

该项目使用步进电机拉下无花果树枝,以吓跑鸟类和松鼠。即摇肢。

我知道摇动肢体会很好地吓唬鸟类和松鼠,因为我已经使用附在肢体上的手动钓鱼线这样做了。

我对 MKR1000 进行了编程,使其以简单的模式摇动肢体。

一个周期定义为步进电机在线路上下拉一次或向上释放一次,即电机沿一个方向移动为下拉,另一个方向为向上释放。

一对循环是肢体的一次下拉和一次向上释放。

由于不同的挫折,我最初的计划比我有时间进行的更广泛。内容如下。

循环将成组进行,例如每组 5 对,暂停,然后是另一组 5 对。

这将被称为序列。我从经验中知道这种顺序。

½ 小时后,另一个序列发生。

将描述报告中提交的周期。

报告中提交的步进电机序列由八个方向变化和每个方向变化内的四个步骤组成。

此序列构成一次执行。

每次执行都是通过手动设置微控制器复位来开始的。

最初的计划是由 MKR1000 控制的一系列执行

poYBAGOg-dmAT4y-AAi0paO2OGM797.jpg
 
 

方向和步进波形

上面的波形显示方向。当电压为 3.3 V 时电机逆时针旋转,当电压为 0.0 V 时电机逆时针旋转。下面的波形显示了步骤。当电压向正方向变化时,电机步进。我们可以 在每个方向观察四个步骤。这张照片中的步长周期为 20 毫秒。(我最后用了 10 毫秒。)

pYYBAGOg-f2AWTIgAAl9Ba3xQt0898.jpg
方向和步进波形
 

开发设置

poYBAGOg-iSAOiGiAAi8YweDZ-s806.jpg
显示电池、步进电机、驱动板、MKR1000、示波器
 

阿杜诺 MKR1000

数字输入输出

电机步进引脚 6

电机方向引脚 1

电机驱动器复位引脚 0

中断引脚 A1 和 A2

更改参数以优化惊吓鸟类和松鼠的顺序以及本报告中使用的值

½ 步进时间 T0 = 5 ms

一个方向的时间 T1 = 80 ms

一个周期的时间 ​​T2 = 1280 ms

材料清单

poYBAGOg-ieAWqmHAADwtR-Tfzc880.png
物料清单显示项目、组件、数量和预算价格
 

我的项目延迟的原因示例:

最初,我烧坏了两个电机驱动芯片当我订购并安装这两个芯片时,两周已经过去了。

当我尝试安装中断时,我通过论坛发现其中一个附加函数存在错误。那花了 1.5 天。

我花了很多时间来尝试让 Serial.print 工作。我终于放弃了。该论坛表示 serial.print 也没有工作。

在另外两个例子中,我按照所有的编码指南编写了一个程序,但结果是错误的。我有一种感觉,我违反了一些未记录的错误。

过去,我使用 Atmega 16 微控制器的软件编写代码来控制此步进电机。这是一个更通用的开发软件,很好但超出了我们对这个 MKR100 项目的规则,更重要的是为了节省时间,它很稳定。

但是,也许我们应该预料到使用此 Beta 版 MKR1000 会出现错误。

源代码 

/* Step and direction
Steps the motor in one direction, then steps it in the other direction.
the purpose of this code is a simple test of the power driver and MKR1000
 The circuit:
STEP is from pin 6 to Allegro step.
DIRECTION is from pin 1.
RESET is from pin 0
 created 3/29/16
 by Art Wagner
 */
// constants won't change. Used here to set a pin number :
const int STEP6 =  6;      // the number of the STEP pin
const int DIR1 =  1;      // the number of the DIRECTION pin
const int RESET0 =  0;      // the number of the RESET pin
// Variables will change : We are assigning initial digital values
int stepState = LOW;                       
int dirState = HIGH;             
int resetState = HIGH;             
unsigned long tT0;        //previous time read for the step
unsigned long tT1;        //previous time read for the directi
unsigned long tT2;        //
const long T0 = 5;           //T0 is the time between change in step signal. 10 10 5 2
const long T1 = 80;           //T1 is the time between change in dir signal. 40 80 80 80
const long T2 = 1280;          //T2 should give 4 direction changes 160 320 640 640 640
void setup() {
   //start serial connection
  Serial.begin(9600); 
          //the first t p.o. is 801 ms
  // set the digital pins as outputs:
  pinMode(STEP6, OUTPUT);
 pinMode(DIR1, OUTPUT);
 pinMode(RESET0, OUTPUT);
 //Allows the driver to accept commands, begin this in setup
 digitalWrite(RESET0, 0);   //RESET = HIGH = OPERATE  Keep RESET = 0 to inhibit current to motor
 //Make sure step is low
  digitalWrite(STEP6, stepState);   //begin with step low
  digitalWrite(DIR1, dirState);   //begin with dir high
  digitalWrite(RESET0, resetState);   //begin with reset high
 tT0 = millis();         //initialize for delta calc
  tT1 = millis();         //initialize for delta calc
  tT2 = millis();         //initialize for wait
}
void loop() {
  //delay(3000);    //allows me to remove my hand after resetting
 //STEP
//Serial.println(11);
//Serial.println(millis());
//Serial.println(tT0);
//Serial.println(T0);
 //ONE
  if (millis() - tT0 >= T0)    //greater than or equal to
  {
    // save the new reference for step change
    tT0 = millis();
    // reverse sign of stepState 
    if (stepState == LOW) {
      stepState = HIGH;
    } else {
      stepState = LOW;
 }
    // set step pin with the current step state:
    digitalWrite(STEP6, stepState);   //doesn't do this until the if statement is TRUE
  }
  //DIRECTION
  //  TWO
   if (millis() - tT1 >= T1) 
  {
    // save the new reference for direction
    tT1 = millis();
    // reverse the sign of dirState:
    if (dirState == LOW) {
      dirState = HIGH;
    } else {
      dirState = LOW;
    }
    // set dir pin with the new dir state:
    digitalWrite(DIR1, dirState);
  }
   //WAIT
 // THREE
 // if(millis() - tT2 >= T2){
   // digitalWrite(RESET0,LOW);
     //  }
    while(millis() - tT2 >= T2){
       }
}

下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费