设为首页 收藏本站 切换风格
 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15457|回复: 20
打印 上一主题 下一主题

萝丽迷你接收,集成电调与两通电磁舵

[复制链接]

9

主题

39

帖子

71

积分

注册会员

Rank: 2

积分
71
QQ
跳转到指定楼层
楼主
发表于 2016-3-4 14:30:52 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 JackeyKing 于 2016-1-21 11:42 编辑

首先感谢萝丽的开源控,自己15年9月份左右才看到萝丽的贴子,然后就一发不可收拾,买了近2000的电子元器件了,做了三个控,越做越小,但是萝丽的原贴中,接收机还是太大,虽然迷你接收只有2克多点,但再加上电调与舵机,就重了,于是一直想做个迷你的集成电调与舵机的,苦于自己对单片机也是个门外汉,只好边啃书本,边四处翻贴子,直到发现了这个贴子: http://bbs.mx3g.com/thread-496612-1-1.html 受 乡村男孩 的启发,突然想明白了,对于小飞机,对舵机的控制,不一定要比例控制,可以先简陋一点,做成开关通道。估计 乡村男孩 最后没有去研究萝丽控与他的程序集成的事,我来班门弄斧,于是就有了现在的这个贴子。
既然萝丽是开源的,用了他的代码,自然也开源,先放上源程序:


  • //#include
  • #include
  • #include
  • #define u8 unsigned char
  • #define u16 unsigned int

  • typedef unsigned char uchar;
  • typedef unsigned char uint;

  • sfr T2H=0xd6;
  • sfr T2L=0xd7;

  • sbit LED=P1^0; //定义指示灯

  • //sbit CH1=P1^1; //定义6个通道输出
  • //sbit CH2=P3^7;
  • //sbit CH3=P3^3;
  • //sbit CH4=P3^2;
  • sbit CH5=P3^1;
  • sbit CH6=P3^0;
  • sbit pwm1 = P3^2;
  • sbit pwm2 = P3^3;
  • sbit pwm3 = P3^6;
  • sbit pwm4 = P3^7;

  • sbit MDO= P1^3; //定义无线模块的管脚
  • sbit SCK= P1^5;
  • sbit CE= P5^5;
  • sbit IRQ= P1^2;
  • sbit MDI= P1^4;
  • sbit CSN= P5^4;


  • u8 rx[17]; //接收的6字节数据
  • u8 tx[17]={0xc3,0x3c,12};
  • u8 k,n,w,tt,m;
  • u8 channel,connecting,hopping_turn;
  • bit cha,chb,chc,chd,che;
  • u8 missing_data[4];
  • u8 address[5];
  • u8 hopping[5];
  • bit first;
  • bit lose;
  • bit jump_1,jump_2;

  • bit restar;

  • void delay1ms() //@12.000MHz
  • {
  • unsigned char i, j;

  • _nop_();
  • _nop_();
  • i = 11;
  • j = 168;
  • do
  • {
  • while (--j);
  • } while (--i);
  • }

  • void delay4us() //@12.000MHz
  • {
  • unsigned char i;

  • i = 8;
  • while (--i);
  • }

  • void delay(u8 i)
  • {
  • while(i--)
  • delay4us();
  • }
  • void delay_ms(u8 i)
  • {
  • while(i--)
  • delay1ms();
  • }
  • u8 EEPROM_read(u8 address)
  • {
  • IAP_CMD=0x01;
  • IAP_ADDRH=0;
  • IAP_ADDRL=address;
  • IAP_TRIG=0x5a; //EEPROM读写密码,不同系列单片机不同
  • IAP_TRIG=0xa5;
  • return IAP_DATA;
  • }

  • void EEPROM_write(u8 address,u8 byte)
  • {
  • IAP_CMD=0x02;
  • IAP_DATA=byte;
  • IAP_ADDRH=0;
  • IAP_ADDRL=address;
  • IAP_TRIG=0x5a;
  • IAP_TRIG=0xa5;

  • }

  • void EEPROM_clean(u8 address)
  • {
  • IAP_CMD=0x03;
  • IAP_ADDRH=0;
  • IAP_ADDRL=address;
  • IAP_TRIG=0x5a;
  • IAP_TRIG=0xa5;
  • }

  • void DATA_read()
  • {
  • IAP_CONTR=0x82;
  • if(EEPROM_read(0)!=0xf5)
  • {
  • first=1;
  • missing_data[0]=127;
  • missing_data[1]=127;
  • missing_data[2]=0;
  • missing_data[3]=127;
  • }
  • else
  • {
  • hopping[0]=EEPROM_read(1);
  • hopping[1]=EEPROM_read(2);
  • hopping[2]=EEPROM_read(3);
  • hopping[3]=EEPROM_read(4);
  • hopping[4]=EEPROM_read(5);
  • address[0]=EEPROM_read(6);
  • address[1]=EEPROM_read(7);
  • address[2]=EEPROM_read(8);
  • address[3]=EEPROM_read(9);
  • address[4]=EEPROM_read(10);

  • missing_data[0]=EEPROM_read(11);
  • missing_data[1]=EEPROM_read(12);
  • missing_data[2]=EEPROM_read(13);
  • missing_data[3]=EEPROM_read(14);
  • }


  • IAP_CONTR=0;
  • }
  • void DATA_save()
  • {
  • IAP_CONTR=0x82;
  • EEPROM_clean(0);
  • EEPROM_write(0,0xf5);
  • EEPROM_write(1,hopping[0]);
  • EEPROM_write(2,hopping[1]);
  • EEPROM_write(3,hopping[2]);
  • EEPROM_write(4,hopping[3]);
  • EEPROM_write(5,hopping[4]);
  • EEPROM_write(6,address[0]);
  • EEPROM_write(7,address[1]);
  • EEPROM_write(8,address[2]);
  • EEPROM_write(9,address[3]);
  • EEPROM_write(10,address[4]);

  • EEPROM_write(11,missing_data[0]);
  • EEPROM_write(12,missing_data[1]);
  • EEPROM_write(13,missing_data[2]);
  • EEPROM_write(14,missing_data[3]);
  • IAP_CONTR=0;
  • }


  • u8 SPI(u8 byte)
  • {
  • u8 i;
  • for(i=0;i14)lose=0,jump_2=1; //第一跳之后仍无信号,开始第二跳
  • }
  • else
  • {
  • if(m>22)m=0,lose=0,jump_1=0; //第二跳之后仍无信号,复位重新跳。
  • }
  • }
  • DUOJI_pwm();
  • if(rx[2] > 250){
  • CCAP0L=0;
  • CCAP0H=0;
  • }else if(rx[2] < 5){
  • CCAP0L=255;
  • CCAP0H=255;
  • }else{
  • CCAP0L=255 - rx[2];
  • CCAP0H=255 - rx[2];
  • }
  • }


  • void et2()interrupt 12 //定时器2用作信号统计,定时周期65ms
  • {
  • tt++;w++;

  • if(w==15) //每秒统计接收到的有效信号数量,小于20个点亮LED示警,表示信号微弱
  • {
  • if(k30)//如果tt增长到30,表示已经有两秒未收到有效信号,执行失控保护舵量
  • {
  • tt=30;
  • rx[0]=missing_data[0];
  • rx[1]=missing_data[1];
  • rx[2]=missing_data[2];
  • rx[3]=missing_data[3];
  • pwm1=0;
  • pwm2=0;
  • pwm3=0;
  • pwm4=0;
  • CCAP0L=255;
  • CCAP0H=255;
  • }
  • }


复制代码

固件: test.zip


先说说目前的成果:已经在面包板上试验通过,包括失控保护部分,LED灯等,完全工作正常。
但是,在我的微型接收上,还没有成功,我是在1.27mm的洞洞板上焊的微型接收,不加电容,焊完全重2.04克(电容大约0.35克),正如 乡村男孩所说,焊这个太费神了,估计是我哪没有焊好,能对上码,对完码就失控(LED灯亮),电调输出一直是高电平,舵机为低电平。
更新:微型接收也成功了,用662K转3.3V电压时,需要在662K的输出端并上个电容。我并的是47uf的,已经更新到接线图中去了

二楼上使用方法以及硬件等

差点忘了感谢群里面的浅雪,昨天问过他问题,谢谢他的解答
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
回复

使用道具 举报

6

主题

32

帖子

53

积分

新手上路

Rank: 1

积分
53
QQ
21#
发表于 2016-3-4 14:59:16 | 只看该作者
本帖最后由 JackeyKing 于 2016-1-21 11:44 编辑

楼上的回复太快了,我第一贴刚贴完,就跟进来了,幸亏自己提前占了一楼
在这个上面调试通过了,用的直插件:
       CAM01465.png (784.85 KB, 下载次数: 11)
      
  2016-1-20 05:34 上传
  


   

这个是我焊的迷你集成接收,能对码,但是输出不对(更新,在662K输出端,并上个电解电容就可以了)
       mini.png (535.68 KB, 下载次数: 11)
      
  2016-1-20 05:34 上传
  


   
       mini_back.png (790.86 KB, 下载次数: 11)
      
  2016-1-20 05:34 上传
  


   
回复 支持 反对

使用道具 举报

0

主题

21

帖子

22

积分

新手上路

Rank: 1

积分
22
QQ
20#
发表于 2016-3-4 14:55:05 | 只看该作者
哦 ,好厉害的呢!
回复 支持 反对

使用道具 举报

5

主题

33

帖子

71

积分

新手上路

Rank: 1

积分
71
QQ
19#
发表于 2016-3-4 14:54:23 | 只看该作者
帮顶下
回复 支持 反对

使用道具 举报

11

主题

46

帖子

89

积分

新手上路

Rank: 1

积分
89
QQ
18#
发表于 2016-3-4 14:52:45 | 只看该作者
JackeyKing 发表于 2016-1-26 23:03
2502给个具体的型号吧,我去查一查引脚的定义。
如果你是指用2502场效应管代替8810,那么是完全可行的。 ...



2502资料
回复 支持 反对

使用道具 举报

5

主题

29

帖子

57

积分

注册会员

Rank: 2

积分
57
QQ
17#
发表于 2016-3-4 14:51:47 | 只看该作者
JackeyKing 发表于 2016-1-19 15:32
占个楼,一会画原理图
接线图:


根据楼主的电路图,结合萝丽的四通接受图,画出来这个,不知道是否和楼主的图一样可行,应该刷个固件就能用估计。
  
直接上PCB文件了,求指教。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

10

主题

27

帖子

69

积分

注册会员

Rank: 2

积分
69
QQ
16#
发表于 2016-3-4 14:51:24 | 只看该作者
回复 支持 反对

使用道具 举报

5

主题

35

帖子

52

积分

新手上路

Rank: 1

积分
52
QQ
15#
发表于 2016-3-4 14:50:39 | 只看该作者
那个2k电阻作用是,因为单片机通电瞬间全部引脚默认输出高电平,然后才开始执行程序,所以加到Mos管上就会出现一通电,电动机疯转一下。然后单片机数据手册上给出的解决办法就是在输出引脚与地接一个1~3k电阻分压。然后我通过调试发现2k最合适。
回复 支持 反对

使用道具 举报

6

主题

28

帖子

55

积分

新手上路

Rank: 1

积分
55
QQ
14#
发表于 2016-3-4 14:49:13 | 只看该作者
顶一个,程序被你兼容了,希望大家共同努力争取做出即廉价又专业开源的可玩性高的模型来。
回复 支持 反对

使用道具 举报

5

主题

38

帖子

58

积分

注册会员

Rank: 2

积分
58
QQ
13#
发表于 2016-3-4 14:45:35 | 只看该作者
这样的文章见一个顶一个上去!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


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