抛砖引玉6通遥控器.docx

上传人:小飞机 文档编号:5302554 上传时间:2023-06-24 格式:DOCX 页数:38 大小:191.99KB
返回 下载 相关 举报
抛砖引玉6通遥控器.docx_第1页
第1页 / 共38页
抛砖引玉6通遥控器.docx_第2页
第2页 / 共38页
抛砖引玉6通遥控器.docx_第3页
第3页 / 共38页
抛砖引玉6通遥控器.docx_第4页
第4页 / 共38页
抛砖引玉6通遥控器.docx_第5页
第5页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《抛砖引玉6通遥控器.docx》由会员分享,可在线阅读,更多相关《抛砖引玉6通遥控器.docx(38页珍藏版)》请在三一办公上搜索。

1、抛砖引玉:DIY 一个六通道遥控器电路 板复制链接电梯直达/楼主口发表于2011-2-27 18:08:15|只看该作者|倒序浏览近日,有模友又提出DIY遥控器的问题,现将笔者 去年设计的一款6通道航模遥控板分享,但愿能起铜河到抛砖引玉的作用。一、简单介绍:心 W 1、该遥控板线路简单,供电由LD1509对输出的电元帅池电压进行稳压,输出5V直流供编码电路。主题帖子2、编码电路由单片机ATmega16L和外围元件构成,6个通道的电位器输出电压送到单片机进行12 5位AD转换,得到各通道数据,各通道数据在单片 9458机内部进行PPM编码(本板仅提供PPM编码程序, 串个门 有兴趣者可设计PCM

2、编码程序),通过三极管Q2 加好友反相后输出。打招呼3、电池电压经R2、R3分压直接加到单片机AD输 发消息 入,对电池电压进行监测,当电压低于设定值时,通过声光报警提醒。4、电路设计了 8位DIP升关,可用于6个通道正 反向调节和两种混控输出模式选择。附带的程序 中,就是按此方式设计的。5、输出的PPM信号可直接送现成的2.4G高频发射模块,组成6通道遥控系统。二、主控板说明:1、电路原理图和装配好的印制板见附图。2、红圈部分为PPM编码输出。3、绿圈为电池输入,电压范围6V12V。4、黄圈为电源升关。5、蓝圈接口与DIP升关共享,可接液晶显示器,此时取消DIP升关,通过程序来设置各通道的正

3、反 向和混控模式。6、紫圈为4个通道电子微调接口,与板上8个微 调按钮并联。三、相关资料:笔者原创的原理图、装好的印板照片、最简6通道 ICCAVR程序完整的工程文件包附后。四、说明建议:笔者不提倡DIY遥控器,费时费力费钱,目前市面 上多功能遥控器已经不少,价格已经非常低,直接 买来就用,很是方便。之所以发此帖,只为有此爱好的模友研究,这里的 资料仅是一个航模遥控器的最初级方案。此板在“汶川热带鱼”模友制作的摇杆控中测试通过,在此一并致谢!6通道航模遥控器原理图01.JPG (120.23 KB,下载次数:446)1 电程JIrH?省板二PH,MLKImiss 畔 mi 阳MTMPH1TIP

4、HCkTCgACC?/DCQP5AK5!b.4AraAJ:ADQP.2AIX2MlADCI1?.MjPCL-QAMS IA叫攻心IHPOJTOPCiLTDriPD3T._J.一-.CUZ1,Zr主板 1.jpg (46.33 KB,下载次数:160)6通道遥控器程序.rar*6通道航模遥控器初级版ICC程序*功 能:6通道比例遥控PPM编码 * 电 路:6_RC_ZJ.SCH*建立日期:2010年05月17日* 版 本:V10.01*设计者:周长洪*修改日期:2010年05月17日* 主控芯片:Mega16L-8AU*时钟频率:外部8.0000Mhz* 编译系统:ICCAVR6.31A */#

5、include #include #include delay.h简化数据类型定义#define uchar unsigned char#define uint unsigned int/端口和数据宏定义/PPM输出端口定义#define PPM_CLR PORTD &= (15)#define PPM_SET PORTD |= 15#define PPM_TG PORTD = 15蜂鸣器端口定义#define SPK_CLRPORTD &= (14)#define SPK_SETPORTD |= 14#define SPK_TG PORTD = 14/LED灯端口定义#define LED_

6、OFF PORTA &= (17)#define LED_ON PORTA |= 17#define LED_TG PORTA = 17/常用参数定义#define zhd580#define fxsj2183#define sysc 20#define sysc1 100#define sysc2 400#define dy1 505#define dy2 477#define wtcs 4定义定时修正参数定义反向数据参数/定义微调时响声时长ms定义微调中点响声时长定义微调端点响声时长/定义电压保护1: 7.4V/定义电压保护2: 7.0V定义微调步进长度/数据定义uint ch_ad6;u

7、int ch_sj6;uint dy_sj=1000;uint ch_wt4;uchar flag = 0;uchar ch_fx = 0;uchar a=0;/定义通道数据定义ADC数据/定义电压数据定义1-4通道中点数据定义通道号定义通道反向数据普通数据* 端口初始化 */void port_init(void)(PORTA = 0x00;DDRA = 0x80;/A 口除 PA7 外,为 ADC 输入PORTB = 0xFF;DDRB = 0x00;/B 口为电子微调输入,上拉PORTC = 0xFF;DDRC=0x00;/C 口为通道正反向、混控输入PORTD=0x00;DDRD=0x

8、FF;/D 口为输出*蜂鸣器函数*/void spk(uchar k,uint time)(for(;k;k-)(SPK_SET;delay_ms(time);SPK_CLR;delay_ms(50);*EEPROM读取函数一*功能描述:读取1-4微调数据*入口:无*返回值:无*固定地址:0-7八字节* */void ee_read(void)(uchar da8;uchar k;for(k=0;k8;k+)(while(EECR & (1 EEWE);EEARH = 0;EEARL = k;/读出地址高字节数据的位置EECR |= (1 EERE); /启动读数据dak = EEDR;/读出

9、数据for(k=0;k4;k+)/合成数据(ch_wtk(da2*k+18)+da2*k;/*EEPROM写入函数一*功能描述:写入1-4微调数据*入 口:需写入的数据和位置 *返回值:无*固定地址:0-7八字节*/void ee_write(uint da(EEARH = 0;EEARL = 2*n;EEDR = da & 0xFF;EECR |= (1 EEMWE)EECR |= (1 8;EECR |= (1 EEMWE)uchar n)/写入地址数据的位置需写入的数据低字节/启动写入/延时等待/写入地址数据的位置需写入的数据高字节EECR |= (1 EEWE); /启动写入delay

10、_ms(10);/延时等待* AD转换函数*/uint ADC_Convert(void)(uint temp1,temp2;temp1=ADCL;temp2=ADCH;temp2=(temp28)+temp1;return(temp2);/* AD初始化函数*/void adc_init(void)(ADMUX=0x40;/选择第0通道ADC; V为基准ADCSRA=0xE7;启动AD转换器;/125K转换速率,自由转换模式;SFIOR = 0x00;delay_ms(200);/延时等待系统稳定* TC0初始化函数 *功能:产生20mS帧周期*预分频:1024*工作模式:比较匹配中断*时钟

11、频率:外部8.0000Mhz*/void timer0_init(void)(TCCR0 = 0x00;TCNT0 = 0x63;TCCR0 = 0x05;/* TC0中断入口函数*/#pragma interrupt_handler timer0_ovf_isr:10void timer0_ovf_isr(void)(TCNT0 = 0x63;/重装初值TCNT1H隔0x00;/装TC1初值:产生400uS间TCNT1L0x00;OCR1A400;TCCR1B0x02;TIMSK |=0x10;/比较匹配中断PPM_SET;/输出先置高*TC1初始化函数功 能:产生各脉冲预分频:工作模式:比

12、较匹配中断时钟频率:外部 8.0000Mhz*/ void timer1_init(void)TCCR1B = 0x00;TCCR1A = 0x00;/ TCCR1B = 0x02;*TC1中断入口函数*/#pragma interrupt_handlertimer1_ovf_isr:iv_TIMER1_COMPAvoid timer1_ovf_isr(void)(TCNT1H = 0;TCNT1L = 0;flag +;switch(flag)(case 1:OCR1A = ch_ad0;PPM_CLR;/置 0break;case 3:OCR1A = ch_ad1;PPM_CLR;/置 0

13、break;case 5:OCR1A = ch_ad2;break;case 7:OCR1A = ch_ad3;PPM_CLR;/置 0break;case 9:OCR1A = ch_ad4;PPM_CLR;/置 0break;case 11:OCR1A = ch_ad5;PPM_CLR;/置 0break;case 13:PPM_CLR;/置 0flag = 0;TIMSK &= 0x10;关闭TC1中断,等待下一帧到来TCCR1B = 0x00;break;default:OCR1A = 400;PPM_SET;/置 1 break;*器件初始化函数*/void init_devices(

14、void)(CLI();port_init();timer0_init();timer1_init();adc_init();MCUCR = 0x00;GICR = 0x00;TIMSK = 0x01;/开启TC0溢出中断/ TIMSK = 0x45;SEI();/*电压读取函数*入口参数:无 */void v_read(void)(uchar k;for(k=0;k100)(f = 0;z = ch_fx z;switch(z)(case 0x01:ch_wt0 = 580;ee_write(ch_wt0,0);break;case 0x02:ch_wt1 = 580;ee_write(ch

15、_wt1,1);break;case 0x04:ch_wt2 = 580;ee _write(ch_wt2,2);break;case 0x08:ch_wt3 = 580;ee_write(ch_wt3,3);break;default:break;z = PINC;if(ch_fx & 0x40)=0)飞翼混控开(mix1(0,1);/1、2 通道混控if(ch_fx & 0x80)=0)/V 型混控开(mix1(1,3);/2、4 通道混控if(ch_fx & 0xC0)=0)襟翼混控开(mix1(0,5);/1、6 通道混控if(ch_fx & 0x01)/1通道数据计算(ch_ad0

16、= ch_sj0+ch_wt0; /正向else(ch_ad0 = fxsj-ch_sj0-ch_wt0; /反向if(ch_fx & 0x02)/2通道数据计算(ch_ad1 = ch_sj1+ch_wt1; /正向else(ch_ad1 = fxsj-ch_sj1-ch_wt1; /反向if(ch_fx & 0x04)/3通道数据计算(ch_ad2 = ch_sj2+ch_wt2; /正向else(ch_ad2 = fxsj-ch_sj2-ch_wt2; /反向if(ch_fx & 0x08)/4通道数据计算(ch_ad3 = ch_sj3+ch_wt3; /正向else(ch_ad3 =

17、 fxsj-ch_sj3-ch_wt3; /反向if(ch_fx & 0x10)/5通道数据计算(ch_ad4 = ch_sj4+zhd; 正向else(ch_ad4 = fxsj-ch_sj4-zhd; /反向if(ch_fx & 0x20)/6通道数据计算ch_ad5 = ch_sj5+zhd; /正向else(ch_ad5 = fxsj-ch_sj5-zhd; /反向m = PINB;if(m)(delay_ms(20);if(m=PINB)(switch(m)(case 0x01:if(ch_wt0460)(ch_wt0 -= wtcs;spk(1,sysc);else(ch_wt0=

18、460;spk(1,sysc2);if(ch_wt0=580)spk(1,sysc1);ee_write(ch_wt0,0);break;case 0x04:if(ch_wt1460)(ch_wt1 -= wtcs;spk(1,sysc);else(ch_wt1=460;spk(1,sysc2);if(ch_wt1=580)spk(1,sysc1);ee_write(ch_wt1,1);break;case 0x10:if(ch_wt2460)(ch_wt2 -= wtcs;spk(1,sysc);elsech_wt2=460;spk(1,sysc2);if(ch_wt2=580)spk(1,

19、sysc1);ee _write(ch_wt2,2);break;case 0x40:if(ch_wt3460)(ch_wt3 -= wtcs;spk(1,sysc);else(ch_wt3=460;spk(1,sysc2);if(ch_wt3=580)spk(1,sysc1);ee _write(ch_wt3,3);break;default:break;delay_ms(200);/* while(m=PINB)(delay_ms(10);*/if(dy_sjdy2)/电压大于7V:慢闪报警(n +;if(n=100)(n=0;LED_TG;spk(1,20);else电压小于7V:快闪报

20、警LED_TG;spk(1,20);*延时函数* 文件名:delay.c*日期:2010年05月17日 *描 述:延时函数*作 者:周长洪* 版本:V1.0*主控芯片:M16L*时钟频率:外部8MHZ* */#include #include /* 函数名称:delay_us(uint i) *函数功能:延时函数*时钟频率:外部8MHZ*/void delay_us(unsigned int i)(while(i-)(NOP();NOP();NOP();NOP();* 函数名称:delay_ms(uint i) *函数功能:延时函数*时钟频率:外部8MHZ*/void delay_ms(unsigned int i)(unsigned int a;for(;i;i-)(for(a=1154;a;a-);/* 函数名称:delay_us(uchar i) *函数功能:延时函数*时钟频率:外部8MHZ*/void delay_us(unsigned int i);* 函数名称:delay_ms(uint i) *函数功能:延时函数*时钟频率:外部8MHZ*/ void delay_ms(unsigned int i);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号