路过帮顶! |
用硬中断吧,最简单的51单片机用硬中断也能输出很稳定的pwm波! |
写固件的难道不懂得用示波器看一下输出波形? |
我本来就没运行两个 首先加入延时参数后 两个IO必然会导致不一样 您可以参考下MWC或者APM代码里驱动电调的部分 这个必须要硬中断吧 |
“缪飞虎” 您这代码运行一个电调电机是没问题的!但是两个您试过么? |
我电机电调牌子都是一样的我单片机供电是USB电脑 , 电调供电是电池! |
“缪飞虎” 非常感谢您的指导!我是个新手不太懂!写的代码让您见笑了!但是您的代码我运行了还是速度不一样! |
看到您这么幸苦贴代码的份上 我也给贴一份 供您参考 #include "Servo.h" Servo servo; void setup() { servo.attach(9,1000,2000); } void loop() { int V1 = analogRead(5); int val = map(V1, 0, 1023, 0, 179); servo.write(val); delay(15); } 以上代码我用来测试电调非常好用 您可以看看 |
#include <Servo.h> //声明库 Servo myservo_A; //定义伺服函数A Servo myservo_C;//定义伺服函数C int val,xp; //声明变量 void setup() //初始化 { pinMode(9,OUTPUT);//定义端口9为输出 pinMode(10,OUTPUT);//定义端口10为输出 myservo_A.attach(9,1000,2000); //定义伺服端口9 PWM范围 myservo_C.attach(10,1000,2000);//定义伺服端口10 PWM范围 delay(2500);//延时2500毫秒 myservo_A.writeMicroseconds(1000);//写入伺服端口A 延时1000微秒 myservo_C.writeMicroseconds(1000);//写入伺服端口C 延时1000微秒 delay(2000);//延时2000毫秒 Serial.begin(9600);//设置串口波特率9600 // delay(4000); //myservo_A.write(180); //Serial.println("shangdian"); //delay(4000); myservo_A.write(0); //伺服端口A 写入角度0 myservo_C.write(0); //伺服端口C 写入角度0 delay(4000); 延时4000毫秒 } void loop() //主循环 { val = analogRead(A0); // 获得模拟端口A0值 并赋值为VAL val = map(val, 0, 1023, 0, 180); //这句我不懂怎么用专业术语 我只知道意思是 将VAL获得的值从0-1023 量化为0-180的角度值 myservo_A.write(val);//写入伺服端口A 写入值为角度值 Serial.println(val); //串口输出字符 val 并换行 myservo_C.write(val);//写入伺服端口C 写入值为角度值 } 职业高中不毕业的我 可能以上代码注释有误 请指正 但我想说的是 为什么TM要这么多的延时啊 而且代码太不精炼了 您知道Arduino这么用代码效率巨低 而且不能干别的事 你懂了? |
综上所述 楼上的答复都是扯蛋 真正的原因是你延时参数用错了 你地明白? |
还有电调电机最好一样的,电调恢复默认设置。 |
单片机和电调电源分开,共地就行了。 |
大神们!!!求救啊!!! |