Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无库Arduino伺服_Arduino_Servo - Fatal编程技术网

无库Arduino伺服

无库Arduino伺服,arduino,servo,Arduino,Servo,作为发送数字信号的教育练习,我尝试在不使用servo.h库的情况下为伺服编写脉冲序列 该伺服系统为9g微型伺服系统。硬件是正确的,正如许多使用伺服的例子一样 我有以下代码。问题在于,伺服系统会突然转动3秒钟,而不是移动并保持静止 void循环(){ movePulse_1000(); 延迟(3000); } void movePulse_1000(){ 串行打印(“开始移动脉冲_1000()\t\t”); 对于(int pulseCounter=0;pulseCounter使用模拟伺服,平均脉冲

作为发送数字信号的教育练习,我尝试在不使用servo.h库的情况下为伺服编写脉冲序列

该伺服系统为9g微型伺服系统。硬件是正确的,正如许多使用伺服的例子一样

我有以下代码。问题在于,伺服系统会突然转动3秒钟,而不是移动并保持静止

void循环(){
movePulse_1000();
延迟(3000);
}
void movePulse_1000(){
串行打印(“开始移动脉冲_1000()\t\t”);

对于(int pulseCounter=0;pulseCounter使用模拟伺服,平均脉冲宽度必须相隔1.5ms,占空比根据所需位置变化。要使伺服保持在所需位置,必须不断刷新伺服数据。这不是一项超简单的任务,伺服库也经过了相当优化。没有理由不使用它


它创建硬件计时器并使用它们刷新伺服。这允许您的常规代码定期显示为继续,即使它被伺服库中断以服务伺服。占空比、pwm频率和刷新率都起作用。您必须查看正在使用的伺服的数据表以获得完整的细节。但它并不像你想象的那么简单,而且你使用的延迟/延迟微秒函数并不总是足够精确。这就是为什么你会使用时间和溢出中断。虽然大多数伺服并不太挑剔,你可以摆脱一吨的斜坡。

伺服.h
不断地发送脉冲,这意味着伺服咆哮=电池消耗

我改变了你的功能,只旋转伺服没有定时器从0到180度

del=(7*x)+500;
-用于我的伺服脉冲500至1260us(计算,未测量)

void movePulse(int x){
整数del=(7*x)+500;

对于(int pulseCounter=0;pulseCounterDiamond):谢谢你的想法。我用其他语言完成了这项工作,工作起来很轻松。脉冲之间不是间隔20ms,脉冲持续时间1-2ms吗?
void movePulse(int x){
    int del=(7*x)+500;
    for (int pulseCounter=0; pulseCounter<=50; pulseCounter++){
        digitalWrite(pinServo,HIGH);
        delayMicroseconds(del);
        digitalWrite(pinServo,LOW);
        delay(20); // between pulses
    }
}