本帖最后由 mig21wang 于 2013-11-21 16:04 编辑
时间过的真快, 2011-5-29发帖M60制作视频后已经两年多的时间,有很多人都把M60作为自制航模的第一种机型,这让我感觉无比喜悦。只要有时间我就不断的尝试改进M60,想把更多的知识融入进去。去年冬天我尝试教初学者自己焊电调,想以此为切入点学习电子知识,在5imx论坛里还发了图纸、使用元件和电路板。但很快我就终止了这项工作因让初学者去焊一块模拟电路难度有些大,而且我也觉得没什么意思:-(。
今年春天我便开始筹划用单片机制作遥控、电调、飞控什么的给M60制作增加乐趣,但一直苦恼的是从简单的航模制作到单片机编程跨度好像有点大了,很多初学者可能会被拒之门外。直到我了解到了Arduino,这是一个将复杂问题简单化的东西,是神作,是年轻人都该了解的东西。所以我决定把arduino融入到m60制作当中去。具体arduino是什么,请您百度一下。
10月份,冬天到了假期来了。我的计划开始了,还是从电调做起,我把它称之为arduino电调。这次我要认真做,改改虎头蛇尾的毛病。
设计很简单,用arduino板处理接收机发出的信号并转换输出控制一颗场效应管驱动电机。并留有11个数字接口和6个模拟输入端口,用于以后的扩展使用。
软件部分由于是自己编写的功能自己说的算,所以设置了一个油门保护功能,当电调通电后推动油门电机是不转的,用来防止电机突然转起伤人。并设置了一个电位器控制功能,不用遥控器也可以控制电机转速。方便板子的多重开发。
arduino 通过下载器是可以轻松的编辑程序
源程序:
//arduino电调源程序 //Mig21wang QQ:57113788 //此程序为 M60 arduino电调编写,供爱好者学习开发使用。 //mig21wang 2013/11/21发表于 5imx int pin = 5;//定义 5脚 油门输入 int pin1 = 10;//定义 10脚 PWM输出 int pin2 = 2;//定义 2脚 int duration;//油门输入变量 void setup() { pinMode(pin, INPUT); //5为输入 pinMode(pin2,OUTPUT); //10为输出 pinMode(pin1,OUTPUT); //2为输出 digitalWrite(pin2, HIGH);//设定2脚为高电平 duration = pulseIn(pin, HIGH);//捕获油门变量 } void loop() { duration = pulseIn(pin, HIGH); if (duration > 500) //判断油门是否有输入 { while (duration < 1800)//进入油门保护循环,当油门推到最大并归位时跳出此循环(红色部分删除取消油门保护) { duration = pulseIn(pin, HIGH); analogWrite(pin1,0); } while (duration > 1200){ duration = pulseIn(pin, HIGH) ; analogWrite(pin1,15); delay(100); analogWrite(pin1,0); delay(100); } while(1)//进入待机循环 { duration = pulseIn(pin, HIGH); if(duration < 1000) //限制油门界限(同一不同遥控器) { duration = 1000; } if(duration > 2200) { duration = 2200; } duration = map(duration,1000,2200,0,255);//转换油门量,分成0-255级 (增加蓝色部分,改变油门有效行程 如:1200) analogWrite(pin1,duration);//把变量以PWM方式从10脚送出 } } else //开机没有接通接收机时,进入电位器控制循环 { duration = analogRead(A5);//从A5获取油门变量 while (duration < 900) { duration = analogRead(A5); analogWrite(pin1,0); } while (duration > 200){ duration = analogRead(A5); analogWrite(pin1,15); delay(100); analogWrite(pin1,0); delay(100); } while(1) { duration = map(analogRead(A5),0,1023,0,254); analogWrite(pin1,duration); } } }
|