Arduino产生脉冲信号控制步进电机
第一次发帖,好紧张啊{:soso__3110130392203091378_3:}之前在玩步进电机驱动的泵,一直在找怎么怎么用arduino产生脉冲信号,参考了几种方法,但输出的精度不够,特别是频率比较高的时候,误差就会增大。
自己写了个库,很好懂,发上来给大家参考一下(轻拍,please)。
输出引脚只能是0~7,占空比不能设置,有些语句加进去会增大误差。
输出的时候还是有点误差,不过可以通过方程计算一下,比如想输出1000Hz,代入方程算出Input = 1016,填入1016就能输出1000Hz的脉冲,公式是自己算的,不知道在其他板子里的公式对不对,不过可以自己去算。4000Hz以下误差可以小于1%,不过大于4000Hz的话,误差就会大一点。
还有个问题就是,loop里加入digitalWrite(Vin, 0);digitalWrite(dir, 0);这两句之后,误差会增大,不知道还有什么方法可以解决。
#include "StepPump.h"
StepPump PumpA(3);
#define dir 4
#define Vin 5
void setup(){
pinMode(dir, OUTPUT);
pinMode(Vin, OUTPUT);
}
void loop(){
/*digitalWrite(Vin, 0);
digitalWrite(dir, 0);*/
PumpA.pulseOut(1016); //15.6E-6 * INPUT - (1 - 601.2E-6)* INPUT + OUTPUT = 0, target_Hz = Output, 计算出对应的Input
} Arduino 有个脉冲输出函数tone();为什么不用。
我家大门的开关工程,就用 tone 函数来控制步进电机的。 我是第一次回复,,,,,,,,,, 为什么要加到循环里面去? itsia 发表于 2017-1-23 18:06
为什么要加到循环里面去?
你指的是? /*digitalWrite(Vin, 0);
digitalWrite(dir, 0);*/
这两句为什么要加到循环里面?
实际的执行效果也就一次,就放在setup()里面呗,
要不或者放在 PumpA.pulseOut()里面作为两个参数传递,并且把这两句也用PORDD直接赋值。 哦,明白。
页:
[1]