极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 33593|回复: 6

Arduino产生脉冲信号控制步进电机

[复制链接]
发表于 2017-1-22 15:10:57 | 显示全部楼层 |阅读模式
第一次发帖,好紧张啊{:soso__3110130392203091378_3:}

之前在玩步进电机驱动的泵,一直在找怎么怎么用arduino产生脉冲信号,参考了几种方法,但输出的精度不够,特别是频率比较高的时候,误差就会增大。
自己写了个库,很好懂,发上来给大家参考一下(轻拍,please)。
输出引脚只能是0~7,占空比不能设置,有些语句加进去会增大误差。
输出的时候还是有点误差,不过可以通过方程计算一下,比如想输出1000Hz,代入方程算出Input = 1016,填入1016就能输出1000Hz的脉冲,公式是自己算的,不知道在其他板子里的公式对不对,不过可以自己去算。4000Hz以下误差可以小于1%,不过大于4000Hz的话,误差就会大一点。

还有个问题就是,loop里加入digitalWrite(Vin, 0);digitalWrite(dir, 0);这两句之后,误差会增大,不知道还有什么方法可以解决。

  1. #include "StepPump.h"
  2. StepPump PumpA(3);
  3. #define dir 4
  4. #define Vin 5

  5. void setup(){
  6.          pinMode(dir, OUTPUT);
  7.          pinMode(Vin, OUTPUT);
  8. }


  9. void loop(){
  10.   /*  digitalWrite(Vin, 0);
  11.         digitalWrite(dir, 0);*/
  12.         PumpA.pulseOut(1016); //15.6E-6 * INPUT - (1 - 601.2E-6)* INPUT + OUTPUT = 0, target_Hz = Output, 计算出对应的Input
  13. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2017-2-4 13:15:25 | 显示全部楼层
Arduino 有个脉冲输出函数  tone();  为什么不用。
我家大门的开关工程,就用 tone 函数来控制步进电机的。
回复 支持 1 反对 0

使用道具 举报

发表于 2017-1-22 17:30:51 | 显示全部楼层
我是第一次回复,,,,,,,,,,
回复 支持 反对

使用道具 举报

发表于 2017-1-23 18:06:04 | 显示全部楼层
为什么要加到循环里面去?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-24 09:49:30 | 显示全部楼层
itsia 发表于 2017-1-23 18:06
为什么要加到循环里面去?

你指的是?
回复 支持 反对

使用道具 举报

发表于 2017-1-24 10:20:14 | 显示全部楼层
/*  digitalWrite(Vin, 0);
        digitalWrite(dir, 0);*/
这两句为什么要加到循环里面?
实际的执行效果也就一次,就放在setup()里面呗,
要不或者放在 PumpA.pulseOut()里面作为两个参数传递,并且把这两句也用PORDD直接赋值。
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 23:54 , Processed in 0.046436 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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