关于analogWrite()”无法“直接驱动电调的对策
见到论坛,贴吧,有人说电调不能用analogWrite直接驱动,,但本人经实测,499Hz下好盈电调仍然是有反应的,可以直接用,
也可以修改一下 analogWrite的PWM输出频率 改为122Hz
详情请看程序int val1;
//int unlock = 0;
int myangle1 = 0;
//int out_limit = 40;
//int basic_Power = 0;
//int motor_PWM = { 0,0,0,0 };
//int x_ushiro_fix = 0.7;
void servopulse(int val1)//定义一个脉冲函数
{
myangle1 = map(val1, 0, 180, 500, 2480);
digitalWrite(MAE, HIGH);//将舵机接口电平至高
digitalWrite(MIGI, HIGH);
digitalWrite(USHIRO, HIGH);
digitalWrite(HITARI, HIGH);
delayMicroseconds(myangle1);//延时脉宽值的微秒数
digitalWrite(MAE, LOW);//将舵机接口电平至低
digitalWrite(MIGI, LOW);
digitalWrite(USHIRO, LOW);
digitalWrite(HITARI, LOW);
delay(20 - val1 / 1000);
}
void ESC_Prepare(int ESC_mode) {
//看电调说明书,设置油门行程时,一开始需要把遥控器打到最高点。i<=110大概是2杪多
if (ESC_mode == 0) {//重新设置行程;
for (int i = 0; i <= 110; i++)
{
servopulse(150);//引用脉冲函数
}
}
//等电机发出B-B两声后(就是两秒后,大概就是这里了)把油门打到最低点
for (int i = 0; i <= 55; i++)
{
servopulse(20);//引用脉冲函数
}
//后面提示后,就可以控制电机转动了
delay(1000);
}
void motor_Prepare() {
pinMode(MAE, OUTPUT);
pinMode(USHIRO, OUTPUT);
pinMode(HITARI, OUTPUT);
pinMode(MIGI, OUTPUT);
//设置analogWrite()函数产生PWM的频率为 122Hz
TCCR1B = TCCR1B & 0xF8 | 4; /// 122.549
TCCR2B = TCCR2B & 0xF8 | 6; ///122.549
//设置analogWrite()函数产生PWM的频率为 defaultValue
// TCCR1B =TCCR1B & 0xF8 | 3; /// 490.196
// TCCR2B =TCCR2B & 0xF8 | 4; ///490.196
}
在setup()里面先后调用 motor_Prepare(),ESC_Prepare();
这样之后,就可以直接用analog写PWM了,比如,analogWrtie(9,motor_PWM);
是不是很简单啊 学习中,思路很好!
页:
[1]