|
见到论坛,贴吧,有人说电调不能用analogWrite直接驱动,,
但本人经实测,499Hz下好盈电调仍然是有反应的,可以直接用,
也可以修改一下 analogWrite的PWM输出频率 改为122Hz
详情请看程序- int val1;
- //int unlock = 0;
- int myangle1 = 0;
- //int out_limit = 40;
- //int basic_Power = 0;
- //int motor_PWM[4] = { 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[0]);
是不是很简单啊 |
|