|
文檔說(shuō)明
資料中提供的是一份針對(duì)鉛酸電池的 太陽(yáng)能12V/24V自動(dòng)識(shí)別充電控制器的技術(shù)資料,包括硬件圖紙、源程序、工藝說(shuō)明和使用說(shuō)明,技術(shù)資料。
1、 硬件圖紙包括一份原理圖和對(duì)應(yīng)的PCB圖,使用PROTEL99SE或者其他兼容軟件打開(kāi),沒(méi)有該軟件或者兼容軟件的,請(qǐng)自己想辦法下載軟件。
2、 開(kāi)發(fā)環(huán)境,源程序使用C語(yǔ)言編寫(xiě),開(kāi)發(fā)環(huán)境使用STVD+COSMIC。STVD是ST公司官方提供的免費(fèi)單片機(jī)開(kāi)發(fā)平臺(tái),只能編譯匯編,但允許使用第三方C語(yǔ)言編譯器COSMIC,在STVD的平臺(tái)上運(yùn)行源程序,除了去ST公司下載STVD以外,還要去COSMIC官網(wǎng)下載針對(duì)STM8單片機(jī)的第三方軟件。COSMIC提供32K免費(fèi)一年的版本,用戶可以下載注冊(cè)獲取許可證,有了STVD和COSMIC就可以建立起軟件開(kāi)發(fā)平臺(tái)了。需要注意的是,由于COSMIC的免費(fèi)版本不斷升級(jí),安裝時(shí)的路徑可能與源工程文件中設(shè)置的目錄有差別,用戶可以在STVD的工程設(shè)置中修改成正確的編譯器連接目錄。如下圖:
51hei.png (120.35 KB, 下載次數(shù): 65)
下載附件
2020-4-16 14:13 上傳
在Toolset中選擇 STM8 Cosmic,在Root path中選擇COSMIC STM8的正確路徑。
源文件中使用iostm8s003.h頭文件,可以使用COSMIC提供的iostm8s103.h替代。
3、 關(guān)于單片機(jī)STM8S003K3的開(kāi)發(fā)環(huán)境,提供了三份文檔,三份文檔均來(lái)自ST公司官方資料。
A、 基于STM8S單片機(jī)如何進(jìn)行項(xiàng)目開(kāi)發(fā),開(kāi)頭講到了開(kāi)發(fā)需要的文檔信息。
B、 STM8S003K3的數(shù)據(jù)手冊(cè),注意這份文件只是針對(duì)該型號(hào)的一些特異性和電氣屬性,不涉及寄存器與具體的編程操作。
C、 STM8S系列單片機(jī)的中文編程手冊(cè),英文好的最好到官網(wǎng)下載英文的手冊(cè),英文有時(shí)候比中文版本的更新信息更準(zhǔn)確。該文檔介紹了STM8S整個(gè)系列的寄存器以及操作方法,不特指STM8S003K3。
4、 關(guān)于工藝說(shuō)明書(shū)以及實(shí)物
本套資料是經(jīng)過(guò)市場(chǎng)檢驗(yàn)的,確定可以使用的產(chǎn)品資料,工藝說(shuō)明書(shū)以及使用說(shuō)明書(shū)中給出了比較詳細(xì)的加工,使用注意事項(xiàng)。
5、本程序是其他程序中移植而來(lái),所以源程序C語(yǔ)言的變量、宏定義和一些語(yǔ)句可能與本模塊無(wú)關(guān),但是并不影響功能,閱讀或移植時(shí),請(qǐng)留意辨別。
該說(shuō)明書(shū)對(duì)應(yīng)的硬件版本:12V/24V V1.0
一、 模塊參數(shù)
1、 系統(tǒng)電壓: 12V/24V自動(dòng)識(shí)別
2、 額定充電電流:20A
3、 提升充電電壓:14.6V / 29.2V
4、 直充充電電壓:14.4V / 28.8V
5、 浮充充電電壓:13.6V / 27.2V
6、 超壓保護(hù): 17V / 34V
7、 欠壓: 12V / 24V
8、 過(guò)放: 11.1V / 22.2V
9、 溫度補(bǔ)償: -4mV /℃/2V
二、 系統(tǒng)連線
請(qǐng)按下圖連接,最好在蓄電池的正極出線口使用一個(gè)保險(xiǎn)絲,防止蓄電池外線短路。
51hei.png (48.45 KB, 下載次數(shù): 71)
下載附件
2020-4-16 14:12 上傳
圖1 連接圖
三、 LED指示燈說(shuō)明12V/24V
1、 太陽(yáng)能電池板指示燈:常亮表示有光照;黑夜指示燈熄滅;快速閃爍表示系統(tǒng)超壓。
2、 浮充指示燈:進(jìn)入充電狀態(tài),該燈閃爍;不充電,該燈滅。
3、 蓄電池指示燈:該燈常亮表示電壓高于12.5V/25V,電壓正常;蓄電池電壓大于11.1V/22.2V,但是小于12.5V/25V,該燈閃爍表示欠壓。
4、 蓄電池缺電:該燈亮,表示電壓低于11.1V / 22.2V;電壓回復(fù)到12.5V以上,則熄滅。
四、 注意事項(xiàng)
1、 電路板固定時(shí),要特別留意如果固定器件是金屬,千萬(wàn)不可導(dǎo)致電路板上電路短路。
2、 連接蓄電池和太陽(yáng)能板的導(dǎo)線一定要牢靠,焊接導(dǎo)線的時(shí)候可以在走大電流的路徑上再加焊錫,以增大導(dǎo)通能力。
3、 電路板不防水,要在恰當(dāng)?shù)沫h(huán)境下使用。
4、 盡量通風(fēng),可以有效降低發(fā)熱。
加工工藝參考書(shū)
本指導(dǎo)書(shū)針對(duì)電路板:12V/24V 20A V1.0
加工工藝僅作參考,可根據(jù)實(shí)際情況和經(jīng)驗(yàn)做調(diào)整。
一、 工具類(lèi)
1、 電烙鐵:焊接插件和涂錫選用40W或者50W電烙鐵,功率太低的電烙鐵可能拉錫的時(shí)候功率不夠,過(guò)大功率的電烙鐵可能會(huì)導(dǎo)致銅皮脫落。但是焊接貼片元器件時(shí),建議使用外熱20W/30W電烙鐵。
2、 專(zhuān)用工裝:工裝是用來(lái)焊接保持產(chǎn)品一致性,提高生產(chǎn)效率的特定裝備,需要根據(jù)用戶自身需求自行設(shè)計(jì),比如焊接4個(gè)LED燈的高度控制等,可以考慮自行設(shè)計(jì)工裝。
二、 MOS管的組裝
1、 電路板上共使用2顆MOS管,充電電流會(huì)流經(jīng)這兩顆MOS管,所以當(dāng)以20A充電時(shí)MOS管會(huì)發(fā)熱,MOS管上必須安裝散熱片以解決發(fā)熱問(wèn)題,否則MOS管會(huì)因?yàn)榘l(fā)熱嚴(yán)重而燒毀。因此MOS管跟散熱片的安裝非常重要。
2、 散熱片是雙管腳固定的,實(shí)際電路板上只有一個(gè)管腳用到,所以另外一個(gè)管腳可以剪掉或者壓彎。
3、 在MOS管的扇熱面涂抹導(dǎo)熱硅脂,將MOS管和散熱片用螺釘擰緊。注意必須保證MOS管跟散熱片接觸緊密,這樣有利導(dǎo)熱,另外還要保證MOS管的固定位置處于散熱片的中間,否則散熱片的管腳和MOS管管腳焊接時(shí)錯(cuò)位。
三、 焊接流程
貼片元器件使用貼片機(jī)自動(dòng)焊接,以下僅針對(duì)插件以及大電流走線的涂錫部分。
1、 插件焊接原則是先焊接矮的,再焊接高的。
2、 焊接電容時(shí),請(qǐng)注意插件電容均有極性,請(qǐng)按電路板上的標(biāo)識(shí)進(jìn)行焊接,請(qǐng)勿極性焊反。電容焊接時(shí),電容管腳不能懸空,要將電容安裝到位后焊接。
3、 焊接40A保險(xiǎn)絲時(shí),為了保持整潔美觀,保險(xiǎn)絲最好不要懸空焊接。因?yàn)楸kU(xiǎn)絲上要走大電流,所以焊接保險(xiǎn)絲必須要有足夠的焊錫。
4、 焊接4個(gè)LED指示燈。LED指示燈是有方向的,切勿焊反。實(shí)際LED指示燈長(zhǎng)腳對(duì)應(yīng)二極管的正極,短腳對(duì)應(yīng)二極管的負(fù)極。焊接高度的控制 可以根據(jù)實(shí)際要求利用工裝解決。另外要注意由于LED的安裝高度較高,兩個(gè)管腳之間要避免短路。
5、 大電流部分的拉錫焊。模塊以20A充電時(shí),電路板部分線路上會(huì)流過(guò)大電流,為了增加電路板走線的導(dǎo)通能力,需要在部分走線上拉錫。電路板上所有開(kāi)窗的走線正面和反面均需要做拉錫處理。拉錫均勻且足量。除了走線拉錫以外,MOS管與走線相連的部分也要涂上足夠的錫,總之在整個(gè)20A電流的回路中不管走線粗還是細(xì)都盡量多涂焊錫,以確保導(dǎo)電能力。
四、 充電測(cè)試
1、 焊接完成以后,進(jìn)入測(cè)試以前,先要目測(cè)一下電路板上器件狀態(tài),電容極性有無(wú)搞錯(cuò),二極管方向是否正確等等。
2、 連接導(dǎo)線測(cè)試。導(dǎo)線連接示意圖見(jiàn)使用說(shuō)明書(shū)
單片機(jī)源程序如下:
- /*
- 程序:太陽(yáng)能控制器充電模塊
-
- 硬件:本程序適用12V/24V 20A V1.0
- 作者:
- 日期:
- 基本功能表述:
- 1、只有充電功能
- 2、額定電壓: 12V/24V鉛酸電池自動(dòng)識(shí)別?
- 3、提升充電電壓:14.6V/29.2V
- 4、直充充電電壓:14.4V/28.8V
- 5、浮充充電電壓: 13.6V/27.2V
- 7、超壓電壓: 17V/34V
- 8、欠壓: 12V/24V
- 9、過(guò)放: 11.1V/22.2V
- 10、溫度補(bǔ)償范圍 -5 --- 55 °,僅對(duì) 充電返回,提升充電,直充 , 浮充進(jìn)行補(bǔ)償
- 11、使用內(nèi)部 16M RC振蕩器,2分頻,8Mhz運(yùn)行,對(duì)于時(shí)間要求不嚴(yán) ,可使用內(nèi)部RC,如果對(duì)時(shí)間要求很高,則使用外部8M晶振
- 12、額定電流 20A
- 修改記錄:
- 修改LED的指示功能
- 1. 1號(hào)燈,綠燈,不接太陽(yáng)能板或者黑夜時(shí) 不亮, 接上太陽(yáng)能電池板,有光照時(shí) 常亮。
- 2. 2號(hào)燈 綠燈,開(kāi)始充電后,閃爍;不充電 不亮。
- 3. 3號(hào)燈 綠燈,電壓達(dá)到正常電壓后,常亮, 低于標(biāo)準(zhǔn)電壓后閃爍。
- 4. 4號(hào)燈 紅燈,電池降低到最低電壓后紅燈常亮, 高于最低電壓熄滅。
- 修改PWM_BAT初始化時(shí)的狀態(tài),有原來(lái)的初始=0,改為初始化=1, 以關(guān)閉對(duì)應(yīng)MOS管
- */
- #include <iostm8s003.h>
- #define GLOBAL
- #include "data.h"
- #include "ad.h"
- #include "display.h"
- #include "manage.h"
- //-------------------------------------------------
- //--------------------------------------------------
- //---------------------------------------------------------------------------------
- //----------------------------------------------------------------------------------
- //----------------------------------------------------------------------------------
- void sys_initialize(void);
- void wtd_manage(unsigned char wtd_data);
- int main( void )
- {
- //--------------clock--io,ad,time,eeprom,ram initialize-------------
- sys_initialize();
- while(1)
- {
- analyze_manage(); //根據(jù)ad值 綜合處理
- wtd_manage(IWTD_FEED); //喂狗
- }
- }
- void wtd_manage(unsigned char wtd_data) //獨(dú)立看門(mén)狗一旦開(kāi)啟 ,將無(wú)法關(guān)閉
- {
- if (1 == wtd_data) //啟動(dòng)看門(mén)狗
- {
- IWDG_KR = 0XCC;
- IWDG_KR = 0X55; //解鎖
- IWDG_RLR = 0XFF;
- IWDG_PR = 0x06; //256分頻
- IWDG_KR = 0XAA;
- }
- else if (2 == wtd_data) //喂狗
- {
- IWDG_KR = 0XAA;
- }
- }
- void sys_initialize(void)
- {
- unsigned char temp1 = 0;
- unsigned char temp2 = 0;
- unsigned char temp3 = 0;
- unsigned long temp4 = 0;
- //---------------如果需要對(duì)時(shí)鐘進(jìn)行管理先進(jìn)行時(shí)鐘管理---------------
- for(temp4 = 0; temp4 < 255; temp4++)
- {
- ;
- }
- //---------------使用內(nèi)部RC---------------
- CLK_ICKCR |= 0X01;//開(kāi)HSI
- while (!(CLK_ICKCR & 0x02));
- CLK_CKDIVR = 0X08; //HSI 2分頻后 8M,保持與外部晶振一致,CPU的頻率 = 8M
- CLK_HSITRIMR = 0x00; //不進(jìn)行校正
- TEST:
- CLK_PCKENR1 = 0X80; //TIME 1 時(shí)鐘使能
- CLK_PCKENR2 = 0X08; //AD
-
- //-----------------io 口設(shè)置--------------------------
- CFG_GCR |= 0x01;//PD1做io口,不做SWIM仿真口
- PA_DDR = 0X08; //PA3 輸出,PA1,PA2設(shè)置成輸入
- PA_CR1 = 0XFE; //PA3 推挽輸出,PA1 PA2上拉輸入
- PA_CR2 = 0X00; //
- PA_ODR = 0X00; //輸出為0
-
- PB_DDR = 0XC0; //PB6,PB7輸出,PB5 PB4 PB0未用,PB3--PB1 ,AD?
- PB_CR1 = 0Xf1;
- PB_CR2 = 0X00;
- PB_ODR = 0X00; //
-
- PC_DDR = 0X00; //PC全部沒(méi)有使用
- PC_CR1 = 0XFF; //
- PC_CR2 = 0X00; //
- PC_ODR = 0X00; //
-
- PD_DDR = 0XC0; //PD6、PD7作為PWM控制輸出 推挽,其他PD口 均做上拉輸入
- PD_CR1 = 0XFF;
- PD_CR2 = 0X00;
- PD_ODR = 0x80;
-
- PE_DDR = 0X00; //PE5 上啦輸入
- PE_CR1 = 0XFF;
- PE_CR2 = 0X00;
- PE_ODR = 0X00;
-
- PF_DDR = 0X10; //PF4 推挽輸出
- PF_CR1 = 0XFF;
- PF_CR2 = 0X00;
- PF_ODR = 0X00;
-
- //-----------------ram 初始--------------------------------------
- ad_ch.pv_mosoff = 0XFF; //設(shè)置成黑夜
- flag.charge_enable = DISABLE; //
-
- //-----------------ADC 采集設(shè)置----------------------------------
- ADC_TDRL = 0XFF;
- ADC_TDRH = 0XFF;
- ADC_CSR = 0X02; //通道2,禁止轉(zhuǎn)換中斷,禁止模擬看門(mén)狗中斷,轉(zhuǎn)換未結(jié)束
- ADC_CR1 = 0X20; //8MHZ 4分頻,頻率2M,單次轉(zhuǎn)換,禁止ADC
- ADC_CR2 = 0X08; //數(shù)據(jù)右對(duì)齊,禁止外部觸發(fā),禁止掃描
- ADC_CR3 = 0X00; //
-
- //-----------------定時(shí)器TIME1設(shè)置,0.5ms中斷一次------------------------------------
- TIM1_PSCRH = 0X00;
- TIM1_PSCRL = 0X07; //8分頻 后 1MHZ
- TIM1_ARRH = 0X01; //定時(shí) 0.5ms
- TIM1_ARRL = 0Xf4;
- TIM1_CNTRH = 0X00;
- TIM1_CNTRL = 0X00;
- TIM1_CR1 = 0X01; //啟動(dòng)計(jì)數(shù)器工作,允許更新事件發(fā)生?揮屑拇嫫鞲虜挪率錄?
- //禁止自動(dòng)預(yù)裝載,計(jì)數(shù)器向上計(jì)數(shù),邊緣 對(duì)齊
- TIM1_IER = 0X01; //允許更新中斷
-
-
- display_open();
- _asm("rim");
- wtd_manage(IWTD_ON);
- }
- //----------------------------------------定時(shí)器中斷 0.5ms-------------------------
- @far @interrupt void tim1_over_int (void)
- {
-
- static unsigned char time_30MS = 0;
- static unsigned char ad_times = 0; //ad采集的次數(shù)
-
- static unsigned int time_2000MS = 0;
- static unsigned char time_pulse = 0;
-
- static unsigned char time_load_pwm = 0;
-
- static unsigned long time_bat_full = 0; //電池充滿時(shí)間
-
- unsigned char i;
- unsigned int temp_ad;
- static unsigned char count=0;
-
-
- static unsigned int led_pv_time = 0;
- static unsigned int led_float_time = 0;
- static unsigned int led_bat_time = 0;
- static unsigned int led_load_time = 0;
-
- TIM1_SR1 &= ~0X01;
-
- //--------------各種延時(shí),延時(shí)可能存在交差,所以使用各自延時(shí),不共用-------------------
-
- if (flag.start_delay_10M_open == 1) //延時(shí)10分鐘 對(duì)應(yīng)黑夜判斷
- {
- if(++time_delay_10M_open >= TIME_DELAY_10M)
- {
- flag.over_delay_10M_open = 1;
- }
- }
-
- if (flag.start_delay_10M_close == 1) //十分鐘 對(duì)應(yīng)白天判斷
- {
- if(++time_delay_10M_close >= TIME_DELAY_10M)
- {
- flag.over_delay_10M_close = 1;
- }
- }
-
-
- if (flag.start_delay_2S_day == 1) // 此處的時(shí)間2S
- {
- if(++time_delay_2S_day >= TIME_DELAY_2S)
- {
- flag.over_delay_2S_day = 1;
- }
- }
-
-
- if (flag.start_delay_30M_directcharge == 1)//延時(shí)30分鐘
- {
- if(++time_delay_30M_directcharge >= TIME_DELAY_30M)
- {
- flag.over_delay_30M_directcharge = 1;
- }
- }
-
- //----------------充電MOS控制----------------------------------------------------
- //MOS控制是一直進(jìn)行的。分負(fù)載和充電
- //充電,每個(gè)周期30ms,33HZ //2S插入 5ms的低電平,和5ms 高 電平
- if (flag.charge_enable == ENABLE)
- {
- ad_times = 0;
- time_2000MS++;
- time_30MS++;
- if ((time_2000MS >= 4000) && (time_30MS >= PWM_H_NUM))
- {
- if (++time_pulse > 10)
- {
- time_2000MS = 0;
- time_pulse = 0;
- }
- else
- {
- if (time_pulse == 9)
- {
- ad_ch.bat_mosoff_buf = 0;
- ad_ch.pv_mosoff_buf = 0;
- for (i = 0; i<2;i++)
- {
- ad_ch.bat_mosoff_buf += ad_collect(AD_BAT) ;//
- ad_ch.pv_mosoff_buf += ad_collect(AD_PV);
- }
- ad_ch.bat_mosoff = ad_ch.bat_mosoff_buf >> 1;
- ad_ch.pv_mosoff = ad_ch.pv_mosoff_buf >> 1;
- }
- if (time_pulse <= 10)
- {
- PV_PWM_L;
- BAT_PWM_L;
- }
- }
- }
- else
- {
- ad_ch.bat_mosoff_buf = 0;
- ad_ch.pv_mosoff_buf = 0;
- temp_ad = 0;
- for (i = 0;i<2;i++)
- {
- temp_ad += ad_collect(AD_BAT) ;
- }
- ad_ch.bat_moson_average_buf += (temp_ad >> 1);
- count++;
- if (time_30MS >= PWM_H_NUM)
- {
- time_30MS = 0;
- ad_ch.bat_moson_average = ad_ch.bat_moson_average_buf / count ;
- if ((ad_ch.bat_moson_average_buf % count) != 0)
- {
- ad_ch.bat_moson_average += 1;
- }
- ad_ch.bat_moson_average_buf = 0;
- count = 0;
- pwm_h_num = pwm_h_num_buf;
- flag.calculate_pwm_enable = 1;
-
- if (pwm_h_num == 0)
- {
- PV_PWM_L;
- BAT_PWM_L;
- }
- else
- {
- PV_PWM_H;
- BAT_PWM_H;
- }
- }
- else
- {
- if (time_30MS >= pwm_h_num)
- {
- PV_PWM_L;
- BAT_PWM_L;
- }
- else
- {
- PV_PWM_H;
- BAT_PWM_H;
- }
- }
- }
- }
- else
- {
- PV_PWM_L;
- BAT_PWM_L;
- time_2000MS = 0;
- time_30MS = 0;
- time_pulse = 0;
- ad_ch.bat_moson_average_buf = 0;
- ad_ch.bat_mosoff_buf += ad_collect(AD_BAT) ;//
- ad_ch.pv_mosoff_buf += ad_collect(AD_PV);
- if (++ad_times >= 16)
- {
- ad_ch.bat_mosoff = ad_ch.bat_mosoff_buf / 16;
- if (ad_ch.bat_mosoff_buf % 16 )
- {
- ad_ch.bat_mosoff += 1;
- }
- ad_ch.pv_mosoff = ad_ch.pv_mosoff_buf /16;
- if (ad_ch.pv_mosoff_buf % 16 )
- {
- ad_ch.pv_mosoff += 1;
- }
- ad_ch.bat_mosoff_buf = 0;
- ad_ch.pv_mosoff_buf = 0;
- ad_times = 0;
- }
- }
- //------------------------------------------------------------------
- //------------------------------------------------------------------
-
- //----------------------------LED燈閃爍管理---------------------------------
- //PB6
- //pv指示燈:正常充電 常亮
- // 超壓 快速閃爍 12V系統(tǒng)大于17V 24V系統(tǒng)大于34V
- // 白天但未充電 慢閃
- //--------------------pv_led----------------------------
- if (flag.alarm_over_voltage_bat == 1)//電池超壓,快閃,超壓
- {
- if (++led_pv_time > TIME_DELAY_100MS)
- {
- led_pv_time = 0;
- PB_ODR ^= 0X40; //PB6
- }
- }
- else if (flag.pv_close_load == ENABLE)// 2014-9-3 增加
- {
- LED_PV_H;
- }
- else
- {
- LED_PV_L; //晚上長(zhǎng)滅
- }
- //-------------------bat_led----------------------------
- //GRENN LED---PF4
- //RED LED---PB7
- //電壓正常---------綠色燈常亮
- //欠壓 ---------綠色燈慢閃
- //過(guò)放 ---------紅色燈亮
-
- if (flag.alarm_lower_voltage == 1 && flag.return_lower_voltage == 1) //發(fā)生了過(guò)放并且當(dāng)前的低壓低于過(guò)放返回電壓
- {
- //紅燈亮,綠燈滅
- LED_BAT_G_L;
- LED_BAT_R_H;
-
- }
- else if (flag.alarm_low_voltage == 1) //欠壓,
- {
- LED_BAT_R_L;
- if (++led_bat_time > TIME_DELAY_1S)
- {
- led_bat_time = 0;
- PF_ODR ^= 0X10;
- }
-
- }
- else //電壓正常
- {
- LED_BAT_G_H;
- LED_BAT_R_L;
-
- }
- //-----------------------------FLOAT CHARGE----------------
- //浮充 正在充電 該燈閃爍,如果不充電 則不亮
- if ( (flag.charge_enable == 1) ) //充電中 進(jìn)入浮充狀態(tài)90分鐘算充滿 ,綠色閃爍&& (flag.charge_mode == 3)
- {
- if (++led_float_time > TIME_DELAY_1S)
- {
- led_float_time = 0;
- PB_ODR ^= 0X80;
- }
-
- }
- else
- {
- LED_FLOAT_L;
- }
-
- }
復(fù)制代碼
所有資料51hei提供下載(這個(gè)電路板可在某寶搜索獲得,廣告一下):
太陽(yáng)能充電模塊資料.7z
(3.68 MB, 下載次數(shù): 194)
2020-4-16 14:20 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|