5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 20621|回复: 43
打印 上一主题 下一主题

[b]DIY混控以及其它的一些方面[/b]

[复制链接]
跳转到指定楼层
楼主
发表于 2006-10-21 01:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    我以前发过几个老贴是关于电直电子设备的DIY,其中混控是最后搞出来的,有些东西没有和大家分享.今天上来收到jackyzh的留言,希望我能够把混控的电路图和程序公布出来.这没有什么需要保密的商业秘密,又不是很复杂,所以我决定就如其所愿.
    我想先谈谈我的电直DIY历程,希望能够对各位有所帮助和借鉴.今年年初商场有一款238的jabo空机架卖,当时我头脑一热就买下来了.回来后就开始配置电子设备,让我的jabo能飞起来.jabo的电子设备包括主电机的有刷电调,尾电机的有刷电调,陀螺,混控,发射接收,舵机,以及一个5V的电源。发射接收电路有但没外壳,所以买了一套FUTABA4通的;舵机手上是现成的,有8、9个;陀螺本想搞个压电晶体自己做的,可是网友送了偶二个陀螺,这个也免了;下面的是重点:
    5V的电源:这个5V的电源就是大家所说的BEC(我不懂为什么叫这个,好深奥哦^_^),其实就是一个DCDC把电池的直流电压转换为陀螺,混控,接收,舵机所需的5V直流电压,电调上的运放、单片机也要用。一般电调上常用7805的稳压管来出这个5V,但这容易出问题——舵机工作时电流是比较大的,大概3、400mA(单个),再加上一些其它的设备,整个5V的负载电流经常超过1A,用7805就感觉很吃力了。7805是线型稳压管,缺点是电压转换效率比较低,发热量大,输出电流小,而优点是纹波小,价格便宜。我采用的方案是MAX724开关电源,优点是输出电流大(最大5A),电压转换效率高,发热量小,而缺点是纹波稍大(不过对电直没什么影响),价格稍高(20元左右吧)。大家可以直接采用官方PDF文档中的推荐电路,在这个地址查看下载http://www.maxim-ic.com.cn/pdfserv/en/ds/MAX724-MAX726.pdf
    有刷电调:原理是通过接收产生的周期为20ms,1.5ms±0.5ms的脉冲来控制PWM的占空比,从而用MOSFET来控制通过电机的电流,达到控制转速的目的。低端的有刷电调是直接用运放等对接收产生的信号处理来产生PWM控制波形,无非就是一些波形的变换。这样成本很低,也很适合DIY制作,但频率固定在50Hz,论坛里有很多这方面的资料我就不重复了。中高端的有刷电调一般用的是单片机,PIC的12C508/9用的比较多(电路简单,但不比第一种的好)。我用的是TINY13的单片机自带PWM发生器,可以产生较高频率的PWM波形,控制通过电机的电流就比第一种要平滑。不要问我要程序,自己学!要不然就不是DIY了
    混控:这个我走了很多弯路,论坛上这方面很少。这个一定要用单片机,我选的是ATMEGA8。算法:OUT=(α-1)*60%+(β-1.5)+1。out是输出波形,α是接收产生的主电机输入波形(周期为20ms,1ms-2ms的脉冲波形),β是接收产生的尾电机输入波形(周期为20ms,1.5ms±0.5ms的脉冲波形)。这个算法是自己琢磨出来的,让大家见笑了!欢迎回帖讨论。电路方面很简单就是一个ATMEGA8的单片机和一个3.3V的电源。程序是一位朋友帮我写的,希望他不要介意,在此表示由衷的感谢。程序如下:

/***********************************************
Chip type           : ATmega8L
Program type        : Application
Clock frequency     : 8.000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/
//第一路输入为PD2,第二路输入为PD3,输出为PB1

#include <mega8.h>
#include <delay.h>

unsigned int T0_CNT,T2_CNT;
unsigned int T0_LENGTH,T2_LENGTH;

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)   // 第一路输入的脉宽计数控制
{           
    delay_us(3);
    if(PIND.2==0) //下降沿   
    {
       TCCR0=0x0; //中止计数  
       T0_LENGTH=T0_CNT*256+TCNT0;
    }
    else         //上升沿
    {   
       TCNT0=0x00;   
       T0_CNT=0;
       TCCR0=0x01; //启动计数
    }
}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)   // 第二路输入的脉宽计数控制
{
    delay_us(3);
    if(PIND.3==0) //下降沿
    {
       TCCR2=0x0; //中止计数  
       T2_LENGTH=T2_CNT*256+TCNT2;
    }
    else         //上升沿
    {   
       TCNT2=0x00;   
       T2_CNT=0;
       TCCR2=0x01; //启动计数
    }
}

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)  //  32us中断一次  第一路脉宽计数
{
       T0_CNT++;
}

// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)  //  32us中断一次  第二路脉宽计数
{
       T2_CNT++;
}

void cal_pulse()                //根据输入计算输出
{         
long a,b,t;
  a=T0_LENGTH;
  a=a*125;
  a=a-1000000;
  a=(a*6)/10;

  b=T2_LENGTH;
  b=b*125;
  b=b-1500000;
   
  t=a+b+1000000;
  t=t/1000; //转换为us
  OCR1A=t;  //设定高电平时间
}  

void main(void)
{
PORTB=0x00;DDRB=0x02;
PORTC=0x00;DDRC=0x00;
PORTD=0x00;DDRD=0x00;

// Clock value: 8000.000 kHz
TCCR0=0x01;
TCNT0=0x00;

// Clock value: 1000.000 kHz
// Mode: Fast PWM top=ICR1
// OC1A output: Inverted
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x82;
TCCR1B=0x1A;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1BH=0x00;
OCR1BL=0x00;  
ICR1=20800;  //设定周期为20ms  频率不准,微调800
OCR1A=1000;

// Clock value: 8000.000 kHz
ASSR=0x00;
TCCR2=0x01;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Any change
// INT1: On
// INT1 Mode: Any change
GICR|=0xC0;
MCUCR=0x05;
GIFR=0xC0;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x41;

// Analog Comparator: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
T0_CNT=0;
T2_CNT=0;
T0_LENGTH=0;
T2_LENGTH=0;

#asm("sei")
while (1)
      {      

        cal_pulse();   //实时根据输入调整输出
      };
}


最后我的jabo飞起来了^_^,不过感觉不爽卖了,现在进了一架X400在折腾,噗哧、噗哧……
^_^


[ 本帖最后由 喜乐蒂 于 2006-10-21 02:04 编辑 ]

欢迎继续阅读楼主其他信息

沙发
发表于 2006-10-21 06:13 | 只看该作者
:em26: :em26: 支持DIY!!    顶!
              
                                           kenzhou
3
发表于 2006-10-21 08:30 | 只看该作者
好贴,现在技术贴越来越少了,给你加亮了.并在顶置贴中引用.
4
发表于 2006-10-21 09:23 | 只看该作者
fantastic
5
发表于 2006-10-21 10:16 | 只看该作者
原帖由 转速 于 2006-10-21 08:30 AM 发表
好贴,现在技术贴越来越少了,给你加亮了.并在顶置贴中引用.

:em26: :em26: :em26:
6
发表于 2006-10-21 12:00 | 只看该作者
好贴,收藏。
7
发表于 2006-10-21 13:14 | 只看该作者
好贴 虽然只能看懂一部分 不过已经收藏 慢慢研究!
8
发表于 2006-10-22 12:01 | 只看该作者
喜乐蒂兄弟:
我帮你编程序如何?俺用了pic多年,俺公司的石油设备上很多控制器都是俺做的;
要求不高,等你把成品做好了送俺一两套玩就行了;
:loveliness:
9
发表于 2006-10-23 14:19 | 只看该作者
看来我也加紧学习了!
10
发表于 2006-10-23 15:38 | 只看该作者
非常感谢楼主的帖子    。
11
发表于 2006-10-24 17:26 | 只看该作者

好帖

:em26: :em26: :em26:
12
发表于 2006-11-17 15:55 | 只看该作者
LZ有电路图吗?
头像被屏蔽
13
发表于 2006-11-17 16:29 | 只看该作者
:em26: :em26: :em26:
收藏了
14
发表于 2007-1-16 13:01 | 只看该作者
好帖,这么好的帖竟然没人顶,我顶!
收藏下来先!
15
发表于 2007-1-16 13:28 | 只看该作者

16
发表于 2007-1-16 15:18 | 只看该作者
呵呵,好贴,这样混控就可以做出来了啊!!
17
发表于 2007-8-28 09:11 | 只看该作者

新手

我是个DIY新手   很是需要楼主这样的强人的帮助,看到这帖我就只有顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
头像被屏蔽
18
发表于 2007-11-27 20:54 | 只看该作者
很好,谢谢楼主.
19
发表于 2007-11-30 04:56 | 只看该作者
好帖子,学习中.希望能有更多的人将自己的技术教给大家,共同进步.
20
发表于 2007-12-22 13:55 | 只看该作者
:em26: 收藏
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

快速回复 返回顶部 返回列表