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

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 20568|回复: 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 编辑 ]

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

44
发表于 2020-1-11 19:49 | 只看该作者
好帖子,学习中.希望能有更多的人将自己的技术教给大家,共同进步.
43
发表于 2012-12-17 11:36 | 只看该作者
顶起,高手
42
发表于 2012-12-14 18:45 | 只看该作者
我就喜欢楼主这样的高人呐,一定要好好学习
41
发表于 2012-12-8 22:43 | 只看该作者
单片机编程,大学里学过,可惜都忘光了
40
发表于 2012-12-3 06:27 | 只看该作者
还需要潜水
39
发表于 2012-11-16 04:46 | 只看该作者
完全看不懂,好贴新人顶上去
38
发表于 2012-7-23 13:11 | 只看该作者
学习·
37
发表于 2012-6-10 23:01 | 只看该作者
上学的时候不想上物理没学好好多看不懂咋办:-O
36
发表于 2012-2-13 22:12 | 只看该作者
:em15: 看不懂
35
发表于 2012-2-10 21:05 | 只看该作者
收藏了
34
发表于 2012-2-9 13:51 | 只看该作者
技术贴,绝对顶。
33
发表于 2008-6-16 13:15 | 只看该作者
不错
32
发表于 2008-4-24 09:56 | 只看该作者
顶, 好贴,收藏了!!!
31
发表于 2008-4-21 15:28 | 只看该作者
猛顶
30
发表于 2008-4-21 13:02 | 只看该作者
好帖子~顶~
29
发表于 2008-4-21 11:34 | 只看该作者
不错不错。
28
发表于 2008-4-9 00:23 | 只看该作者

帮忙看看我的0406改混控无反应

27
发表于 2008-4-8 22:08 | 只看该作者

26
发表于 2008-3-1 21:37 | 只看该作者
好贴,争取我也早日发技术贴
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

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

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