新聞中心

        EEPW首頁 > 電源與新能源 > 設計應用 > 集合四種功能,我的“雙核獨顯”電源制作過程 12-06

        集合四種功能,我的“雙核獨顯”電源制作過程 12-06

        作者: 時間:2012-12-22 來源:網絡 收藏

          近段時間我制造了一個集電流源、電壓源、充電和烙鐵于一身的“四用”電源,同時還有個顯示屏顯示。在設計過程中,我用到兩個單片機,一個負責變量采集,一個主負責顯示。于是我的同事就把這個“怪獸”叫做“”電源。

          核心是控制一個由MOS管搭建的一個電壓調節板,可以數控電壓,因此得到一個電壓源;通過電流反饋,調節電壓,又得到一個電流源;通過電流電壓反饋,得到一個鋰電池充電器;通過烙鐵溫度反饋,得到一個恒溫烙鐵控制器,思路就是這么來的。單片機是飛思卡爾QD4,兩個16bit定時器/PWM ,四通道10bitAD。它的主要功能有:1、電壓源;2、電流源;3、充電器;4、恒溫烙鐵控制器。

          下面是電路圖:

        主控電路

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

          調壓電路

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

          調壓電路中NMOS借鑒白光烙鐵的電路,不過要做快速開關,圖中的R9不能太大,我用500歐的,PWM 2KHZ可以。上拉電阻R13也很重要,在單片機異常是,保證關斷輸出。MOS后端的電路,可以參考DC芯片資料。

          其中具體的焊接過程我就忽略不寫了,相信大家根據我給的電路圖就可以做出相對應的產品。

          以下是一些總體圖和測試圖:

          總體的樣子

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

            電源輸入是用筆記本電源。輸出是一個USB口,我平時用不到大電流,3A足夠了,步進10ma。最大輸出電壓接近輸入電壓,步進0.01V。顯示用的是nokia5110顯示屏(上圖是用5V供電,屏幕有雜點,下面改為3.7V,完美屏)。

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

            輸入由一個電位器,一個按鍵構成。電位器仿照示波器的用法,可以上下選擇,也可以輸入設定值。按鍵短按用來“確定”,長按“返回”這些信息由單片機1采集,單線發送給單片機2,顯示。單線通信花了不少精力。采樣電阻50m歐,用358放大。電流采集后要校正,消除偏差。
        做好了這一大堆東西后,我們要對其進行基本的功能測試。

          一、電壓源

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

          下圖中:9.22V是實時采集的真實電壓,S:設定值,I:電流

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

          電壓輸出相應很快,示波器截圖

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

          快速扭動電位器,都可以用示波器作畫了

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

          二、電流源

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

          下圖中:0.44A是實時采集的真實電流,S:設定值,V:電壓

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06  三、充電模式

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

          為了測試,把我移動電源的電池芯拆出來了。當時舍得的橫流充階段電流為300ma,這叫一個等啊

          不過能看到這么多輸出信息,挺爽的

          0264mA是累計充電電量,I:當前充電電流,V:電池電壓

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

          四、烙鐵模式

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

          炊煙裊裊啊……公司的熱成像儀送檢了,無法校準溫度。我是用公式直接算的,感覺偏低了。不過筆記本電源供電,剛剛的。愛死這個烙鐵了

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

          介紹一下這個USB烙鐵

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

          烙鐵是用白光936烙鐵柄改的,接了個USB頭,外側做電源線,usb的數據線接反饋電阻。經過測試,3A電流,usb口毫無問題,而且升溫也不錯,所以程序了限定3A。太大電流,筆記本電源會保護。

          以下是我將產品組裝進盒子里面的圖示:

          殼子是拆了一個12V/2A的電源的塑料殼,把這么大一坨東西,塞進去,可是費了功夫。

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

          終于塞的差不多

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

          進去了!!左面一張

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

          右面一張

          集合四種功能,我的“雙核獨顯”電源制作過程 12-06

          上面的是開機圖片(怎么跟大哥大似的)……

          到此為止所有的制作就已經完成了。
          在制作過程中,我想給大家說一下我的一些編程方面的經驗。

          一、時基函數

          我現在覺得這個函數應該是每個工程必須的,但回想我看過的單片機書,好像沒有講到這一點的,相見恨晚。
          void TimePro()
          {
          if(!b_8msFG)
          return;
          b_8msFG = 0;
          Tim8ms++;
          PIHtim++;
          if(KeyTim 《 255)
          KeyTim++;
          if(PIHtim 》 4)
          {
          TPM2C0SC = 0x48; //開外部中斷
          }
          LCDTim++;
          LCDFlashTim++;
          if(Tim1ms 》 124)
          {
          Tim1ms = 0;
          Tim1S++;
          ……
          ……
          ……
          }
          }
          上面就是一個“時基函數”,當你的程序有幾個外圍需要同時控制時,再用NOP延時,直線執行已經忙不過來了,需要用上面的函數。
          b_8msFG在8ms定時中斷中置為1。TimePro()在主函數中調用。這樣KeyTim、LCDTim這些計時變量就在一直計時。例如調用鍵盤程序,判斷一下KeyTim是否到時間,到了執行,KeyTim清零,不到返回,再去調用別的函數體。這樣分時復用CPU,避免了NOP來浪費系統資源,當幾個外圍執行周期不同時,更是這樣 。

          二、AD采樣(數字濾波)

          這個程序是公司的標準模塊。大學時,AD采出來,我就直接用了。工作了才發現這樣不好,采完后還要做一下數字濾波。數字濾波,不知誰起的這么好聽的名字,唬住不少人。其實很簡單,但很實用。在這里,實際操作就是:采六次,去掉最大最小值,剩四個求平均。以前對它的作用體會不深,當有一個單片機直接測交流真有效值的項目,一個不堪入目的波形進入單片機,數字濾波后,一下數值穩定不亂跳了,頓生感慨。
          下面是程序:
          void ADPro()
          {
          uchar n,i;
          if(ADTim 《10) return;
          ADTim = 0;
          for(n=0;n《6;n++)
          {
          ADChannel = Channelin; //通道選擇;
          while(!ADC1SC1_COCO) NOP();//等待轉換完成
          ADC1SC1_COCO = 0;
          ADNum = ADC1R; //取得AD值
          // ADNum = 298;
          if(0==n)
          {
          m_ADCSum = 0;
          m_ADCMax = ADNum;
          m_ADCMin = ADNum;
          }
          if(ADNum《m_ADCMin)
          {
          m_ADCMin = ADNum;
          }
          else if(ADNum》m_ADCMax)
          {
          m_ADCMax = ADNum;
          }
          m_ADCSum += ADNum;
          ADNum = 0;
          }
          m_ADCSum=m_ADCSum-m_ADCMax;
          m_ADCSum=m_ADCSum-m_ADCMin; //減去最大最小值
          m_ADCSum = m_ADCSum》》2; //取均值
          switch (Channelin)
          {
          case 0 :
          ADSet = m_ADCSum;
          break;
          case 1 :
          ADI = m_ADCSum;
          break;
          case 2 :
          ADTemp = m_ADCSum;
          break;
          ca


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 甘洛县| 中方县| 永泰县| 二手房| 大厂| 昂仁县| 大洼县| 隆安县| 蒙自县| 秭归县| 马关县| 岳普湖县| 重庆市| 鄂伦春自治旗| 哈巴河县| 准格尔旗| 蓬莱市| 云浮市| 临邑县| 平度市| 沂水县| 金坛市| 乐清市| 宕昌县| 新田县| 开鲁县| 甘孜县| 龙江县| 宝鸡市| 辽宁省| 张家界市| 凌海市| 浠水县| 绥江县| 新巴尔虎左旗| 龙陵县| 桑日县| 乌鲁木齐县| 临海市| 南康市| 广昌县|