【广局拙作】相当够本的定时开伞
191742

191743
  

STM8S103F3P6单片机

AMS1117-3.3

IRLML2502 MOS管

按键,自锁开关,小扬声器,橙色led

- 使用说明 -

自锁开关控制电源通断。电源接口有蓝黄橙三条线(有排针引出,照片中被挡住了),分别是地、3.7~4.2V(锂电池)、5~15V(方块电池、镍氢电池组),使用时只需要接其中一种电压即能工作。

开机后会发出:
嘀————————
间隔三秒

间隔三秒
……
表示电源接通,等待用户操作。

按一次按键,发出嘀嘀嘀嘀嘀,进入定时时间设置。
嘀——  嘀——  嘀——每一次代表一秒钟。当到达需要的时间,再次按按键,发出嘀嘀嘀嘀嘀,表示设置已经保存。将会以这个时间作为开伞延时。

黄色线是触发线,将引出的两条黄色线短接(或者把板上对应的排针用跳线帽短路),进入等待发射状态,发出嘀  嘀  嘀  嘀声。
在等待状态下,将黄色线分离,或者将跳线帽拔出,则进入定时状态。发出嘀嘀嘀嘀嘀……声
当时间到达预设的延时时间,将会发出嘀——————————————————的声音,MOS管将会导通,板上led会亮起(此led是mos管控制的),连接绿色线的点火头将会被电池电压通电。

通电一段时间后会回到初始状态,等待用户操作。
-------------------------------------------------------

点火最大电流:4A(前提是你的电池能提供这么大电流。如果输出电压低于2.9v单片机工作电压,或者低于稳压IC的最低工作电压4.8v,会导致重启等问题)
延时设置会被保存在单片机内置的EEPROM中,掉电不会丢失,非常实用。
+1  科创币    五成熟的牛排   2013-07-15   这跳线我瞬间笑了怎么破
来自 电子技术
2013-7-13 13:03:53
1楼
要加光耦..
折叠评论
加载评论中,请稍候...
折叠评论
2楼
小扬声器无爱.........用蜂鸣器多好
叉童鞋的焊工实在不敢恭维.........这恐怕无法承受住火箭的加速度吧
+1  科创币    kc地毯清洁员   2013-07-13   好无聊的签名
折叠评论
加载评论中,请稍候...
折叠评论
3楼
引用第2楼yanli12321于2013-07-13 13:04发表的  :
小扬声器无爱.........用蜂鸣器多好
叉童鞋的焊工实在不敢恭维.........这恐怕无法承受住火箭的加速度吧




完全能承受住火箭的加速度,呃,其实......其实插接件都没问题。
折叠评论
加载评论中,请稍候...
折叠评论
4楼
焊锡不太好吧?
折叠评论
加载评论中,请稍候...
折叠评论
novakon(作者)
5楼
引用第2楼yanli12321于2013-07-13 13:04发表的  :
小扬声器无爱.........用蜂鸣器多好
叉童鞋的焊工实在不敢恭维.........这恐怕无法承受住火箭的加速度吧

刚才试着摔了几次,正常工作。我的焊工被吐槽不是第一天了,淡定。蜂鸣器找不到,应该是没有,只好用这个。
折叠评论
加载评论中,请稍候...
折叠评论
6楼
回 5楼(novakon) 的帖子
这样焊好一点吧.........又整齐有美观占用空间还小191767

+1  科创币    123123123   2013-07-13   用铜线引比较好吧,只在转折点和连接点上锡,这样太废焊锡了
折叠评论
加载评论中,请稍候...
折叠评论
7楼
回 楼主(novakon) 的帖子
用ne555不就行了吗?浪费!
+1  科创币    yanli12321   2013-07-13   NE555容易鬼畜不适合这种场合,单片机靠谱
折叠评论
加载评论中,请稍候...
折叠评论
novakon(作者)
8楼
回 7楼(13580080355) 的帖子
NE555的话,我改一次时间设置,就要改一次电阻阻值,改完还要掐秒表测试。而且,怎么指示工作状态呢?

用STM8单片机来做,用户只要按按钮就可以设置时间了,岂不快哉。
STM8很便宜的,1.7元一片,最贵的都是人工费用。

测试中出现了洞洞板焊盘脱落的情况,充分地验证了“花钱少,麻烦多”这一伟大理论。马上找了非常高级的洞洞板,重新焊了一个 ,刷上程序,万事大吉。

191824

191825
+1  科创币    kc地毯清洁员   2013-07-14   花钱少麻烦多,花钱多麻烦更多
折叠评论
加载评论中,请稍候...
折叠评论
9楼
回 8楼(novakon) 的帖子
洞洞板焊盘脱落说明你的烙铁温度高了……或者加热时间长了……
还是找个时间多练练焊工吧……
到时候别把单片机焊烧了……
折叠评论
加载评论中,请稍候...
折叠评论
novakon(作者)
10楼
源汁源味
//timerchute.c

#include <stmduino.h>
uint time=0;
uint delaytimer=0;
#define buttondelay 200
#define minimumtime 1000
#define beep pwmout(t2c1,62)
#define nobeep pwmout(t2c1,0)
uint binterval=3000/8;
uint bcounter=2800/8;
uchar beepstate=0xff;

uint setting=0;
uchar state=0;
/*
states
0 wait
1 setting

3 starting
4 triggered(wire broken, wait for certain time.
5 chute(noreturn unless button.
*/

void tick()
{
  bcounter++;
  bcounter%=binterval;
  if(bcounter==0||(bcounter==2980/8&&state==0)){
    if(beepstate){
      //beep;
      timer2(COUNT);
    }else{
      //nobeep;
      timer2(STOP);
    }
    if(bcounter==2980/8&&state==0)
    {
      beepstate=0x0;
    }
    else
    {
      beepstate=!beepstate;
    }
  }
  
  if(delaytimer!=0){
    delaytimer--;
  }
  else
  {
    
    switch(state)
    {
    case 0:
      binterval=3000/8;
      if(pinread(A2))
      {
        //if high: button not pusht
        if(pinread(A3)){
          //if a3 is high:not connected
        }
        else
        {
          //if a3 is conn to gnd:start waiting for line break
          state=3;
          delaytimer=buttondelay*5/8;
        }
      }
      else
      {
        //if low: button pusht,enter setting mode
        state=1;
        time=0;
        delaytimer=500/8;
        binterval=50/8;
      }
      break;
    case 1:
      binterval=500/8;
      time++;
      if(pinread(A2)){
        //button is not pushed
      }
      else
      {
        //button is pusht
        setting=time;
        eeuint(600)=setting;
        time=0;
        state=0;
        binterval=50/8;
        delaytimer=1000/8;
      }
      break;
    case 3:
      binterval=200/8;
      if(pinread(A3)){
        //if a3 is not connected
        state=4;//enter timing mode
        time=0;
      }
      else
      {//dont do anyting.
      }
      break;
    case 4://wire broken. timing...
      binterval=50/8;
      time++;
      if(time>setting)
      {
        //triggered, please chute!
        state=5;
        delaytimer=100/8;
      }
      else
      {
        
      }
      break;
    case 5://execute chute operation
      beepstate=0xff;
      
      pinhigh(A1);
      time--;
      if(time==0){
        state=0;
        delaytimer=500/8;
        pinlow(A1);
        binterval=50/8;
      }
      
      break;
    }
  }
  
}

void main()
{
  clock(2M);
  cpudivider(2);
  
  
  timer4clock(64,249);//8ms interrput
  
  pinMode(A3,INPUT);
  //a3 is wire,shall connected to gnd
  
  pinMode(A2,INPUT);
  //a2 is button,connected to gnd
  
  pinMode(A1,OUTPUT);
  //a1 is chute ctrl
  
  timer2clock(2,124);
  unlock();
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C,DISABLE);
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1,DISABLE);
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI,DISABLE);
  pwmset(t2c1);
  pwmout(t2c1,62);
  pinlow(A1);
  
  //load settings
  if(eeuint(600)<minimumtime){
    setting=minimumtime;
  }
  else
  {
    setting=eeuint(600);
  }
  
  job mstick=employ(tick);
  linkjob (timer4tick,mstick);
  
  interrupts();
  while(1){sleep();}
}
折叠评论
加载评论中,请稍候...
折叠评论
2013-7-14 00:57:08
11楼
加速度测试。。。。
折叠评论
加载评论中,请稍候...
折叠评论
12楼
表示STM8的程序看不大懂................还有你的焊工真的不敢恭维啊[s:225]
提一个小白意见:个人感觉如果你用继电器的话或许不会这么复杂
折叠评论
加载评论中,请稍候...
折叠评论
13楼
为啥我想起了拆弹。。。该剪哪一根。。到底哪一根呢。。啊。。只剩2秒了!!不管了!!先剪红的!!!轰!!!!!!
+1  科创币    kc地毯清洁员   2013-07-14   剪插进去的..
折叠评论
加载评论中,请稍候...
折叠评论
14楼
线啊。。。。好多[s:221]
折叠评论
加载评论中,请稍候...
折叠评论
15楼
回 8楼(novakon) 的帖子
ne555可调,有公式的呀,越简单的东西越靠的住,体积小的多,你这个不必跳线和洞洞板,直接焊好灌封!
折叠评论
加载评论中,请稍候...
折叠评论
16楼
回 8楼(novakon) 的帖子
烙铁戳喇叭上了吧..............
折叠评论
加载评论中,请稍候...
折叠评论
17楼
Re:回 8楼(novakon) 的帖子
引用第16楼yanli12321于2013-07-14 17:01发表的 回 8楼(novakon) 的帖子 :
烙铁戳喇叭上了吧..............


观察力真仔细~[s:274]
+1  科创币    kc地毯清洁员   2013-07-14   = =当时那个洞我看好久了...&nbsp;&nbsp;强迫症啊
折叠评论
加载评论中,请稍候...
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

{{submitted?"":"投诉"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png