99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發新帖

過溫保護異常,導致電源重啟。

這是我之前做的一個電源產品,使用R8C27系列的單片機來控制各路輸出電壓,還有控制其上電時序,并檢測各路電壓是否異常,異常時,電源關閉保護。另外,還有檢測電源內部溫度情況,當溫度大于80時,電源關閉。關于溫度檢測這一塊,主要是使用NTC熱敏電阻(電路圖上位號:RT601, 規格書見附件)與一個10K電阻串聯。通過AD轉化得到一個AD數值,再由AD數值來計算出NTC熱敏電阻的阻值。由電阻值來判斷當前電源溫度。軟件上具體的為:

定義變量:UINT  ad_valueULONG  r_value r_value=1024*10*10 - ad_value*10*10/ad_value.

這里定義的ad_value為電阻分壓出來,也就是ADT點上的電壓的AD值。r_value 10倍的NTC熱敏電阻值(單位為: k Ω)。例如:當ad_value=883時,則r_value=16,即NTC熱敏電阻值為:1.6k,通過規格書可以知道此時的溫度為80。那也就是說邏輯上,r_value<16時,溫度超過80,電源才保護的。

    目前的問題是產品賣到北方地區,客戶反饋早上起來的時候,電源開機不良,上半年未發現此問題,而我們工廠(在南方,溫度基本上在10以上)這邊,也從來沒有出現過這種現象。后來將產品進行低溫試驗(-10)。發現在常溫下將產品置于低溫室時,20分鐘左右開機后,會自動保護。而如果繼續放置兩小時,溫度平衡后,開機又正常,現象挺奇怪的。

   大家覺得是什么原因?是NTC熱敏電阻在溫度變化的過程中,存在突變點? 溫度曲線沒有像規格書描述的那樣?溫度越低,阻值越大?還是軟件上有BUG

 

全部回復(13)
正序查看
倒序查看
58340153
LV.3
2
2012-12-10 10:32

電路圖和規格書如下:

NTC熱敏電阻規格書 

 

0
回復
58340153
LV.3
3
2012-12-11 12:57

通過仿真,已經明確是軟件上有BUG,具體的改天有時間再來分析給大家看。

0
回復
sharkdo
LV.3
4
2012-12-11 14:35

樓主很專業,個人認為也可以通過專業儀器儀表的使用來保證電源的運行,現在的功率檢測分析儀/功率計采用了擁有專利的高帶寬架構,能夠精度測量單相或三相電流和電壓、諧波分析、快速傅里葉變換(FFT)分析,以及計算功率和其它計算值,作為實驗室或試驗臺上的臺式儀器,都非常方便、可靠。

0
回復
58340153
LV.3
5
2012-12-12 13:33
軟件在計算過程中,邏輯和公式的推導都沒有問題,變量的類型定義似乎也沒問題。但是事實上,在仿真的過程中確實發現有數據溢出導致計算結果出錯,從而導致了電源的誤操作。那么數據是如何溢出的呢?
0
回復
58340153
LV.3
6
2012-12-12 13:55
下面具體的來看一下,當溫度變化為:-40度~125度時,NTC 對應的阻值變化范圍為:5~202.1K歐,r_value變化范圍為:0~2021,而r_value的類型定義為無符號長整型ULONG,可以表示的范圍為:0~0XFFFFFFFF, 很顯然 r_value 不可能溢出。那么再來看一下,另外一個變量ad_value,  ad_value定義的類型為無符號整型UINT, 可以表示的范圍為:0~0XFFFF,其值在實際的變范圍只有:0~1024。看起來這兩個變量也未出現溢出。所以接下只好再看一下,計算的過程。
0
回復
58340153
LV.3
7
2012-12-12 15:32

C語言代碼:r_value=(1024*10*10 - ad_value*10*10)/ad_value;       // value si 10*R ;
生產匯編語言后的代碼:               
                MOV.W     0438H,R0  (將存儲在0438H中的值即ad_value,賦予寄存器R0)
                MUL.W     #0064H,R0  (執行ad_value*10*10 ,其中#0064H代表常量100。 以16位做乘法運算,結果以32位保存)
                MOV.W     R0,R1
                MOV.W     #9000H,R0 (#9000H即為:1024*10*10-0XFFFF=0X19000-0XFFFF=0X9000=9000H)
                SUB.W     R1,R0    
                MOV.W     #0H,R2
                DIVU.W    0438H (除法運算)
                MOV.W     R0,054CH (r_value的值存儲在地址 054CH,054EH 中)
                MOV.W     #0H,054EH

從生成的匯編語言的代碼中,已經可以看出問題的所在。

0
回復
58340153
LV.3
8
2012-12-12 15:58
@58340153
C語言代碼:r_value=(1024*10*10-ad_value*10*10)/ad_value;      //valuesi10*R;生產匯編語言后的代碼:                              MOV.W    0438H,R0 (將存儲在0438H中的值即ad_value,賦予寄存器R0)               MUL.W    #0064H,R0 (執行ad_value*10*10,其中#0064H代表常量100。以16位做乘法運算,結果以32位保存)               MOV.W    R0,R1               MOV.W    #9000H,R0(#9000H即為:1024*10*10-0XFFFF=0X19000-0XFFFF=0X9000=9000H)               SUB.W    R1,R0                   MOV.W    #0H,R2               DIVU.W   0438H(除法運算)               MOV.W    R0,054CH(r_value的值存儲在地址054CH,054EH中)               MOV.W    #0H,054EH從生成的匯編語言的代碼中,已經可以看出問題的所在。
問題就出在,以下的兩條指令:
                MOV.W     #9000H,R0 (#9000H即為:1024*10*10-0XFFFF=0X19000-0XFFFF=0X9000=9000H)
                SUB.W     R1,R0 
 
1、表達式:1024*10*10 。應生成:MOV.W     #19000H,R0 才對(實際上需要生成兩條語句,這里為了好理解直接寫成這樣。),因為:1024*10*10=0X19000=19000H,而這里由于系統認為最大的變量為,無符號整型UINT,所以1024*10*10變成了9000H,將進位1直接去掉。
2、另外,SUB.W     R1, R0,只能做16位的減法運算。即運算結果必須小于0XFFFF。否則,數據將溢出。
0
回復
58340153
LV.3
9
2012-12-12 16:24
@58340153
問題就出在,以下的兩條指令:               MOV.W    #9000H,R0(#9000H即為:1024*10*10-0XFFFF=0X19000-0XFFFF=0X9000=9000H)               SUB.W    R1,R0  1、表達式:1024*10*10。應生成:MOV.W    #19000H,R0才對(實際上需要生成兩條語句,這里為了好理解直接寫成這樣。),因為:1024*10*10=0X19000=19000H,而這里由于系統認為最大的變量為,無符號整型UINT,所以1024*10*10變成了9000H,將進位1直接去掉。2、另外,SUB.W    R1,R0,只能做16位的減法運算。即運算結果必須小于0XFFFF。否則,數據將溢出。
那也就是說 r_value=(1024*10*10 - ad_value*10*10)/ad_value <0xFFFF=65535; 對應的ad_value必須大于(102400-65535)/100=368.65。此時r_value的計算值為0,但實際電阻值為18K,溫度為9度。所以出現了電源異常保護的問題。如果溫度繼續降低,則ad_value會繼續減小,而 r_value 又會繼續增加,重新大于16。電源工作又變正常,這個點在實際中電阻值為22K左右,對應的溫度為5度。
0
回復
58340153
LV.3
10
2012-12-12 16:43
大家有沒有發現,理論分析與實際相吻合了。 本電源在工作過程中,由于計算過程中,數據溢出,原本只在溫度大于80度以上保護時,變成了在5~9度時,出現了電源也過溫保護。現在才知道為什么把電源放入低溫室(-10度)時,20分鐘左右開機后,會自動保護。而如果繼續放置兩小時,溫度平衡后,開機又正常的奇怪現象了。 因為,只有在降溫的過程中5-9度才會出現這中問題。
0
回復
58340153
LV.3
11
2012-12-12 17:09
說了這么多現在來看看如何解決這個問題,其實,當我們找到問題所在的同時,也同時找到了解決辦法。方法有很多:可以將原先16位的變量ad_value定義為32位的比如:ULONG,float等類型。還有另外一種辦法是改變產量的表達方法,只要對表達式: r_value=(1024*10*10 - ad_value*10*10)/ad_value ,改為 : rt_value=(102400-vt_average_ad_data*100)/vt_average_ad_data;  或者      
r_value=(1024*10*10.0 - ad_value*10*10.0)/ad_value;   就可以了。
0
回復
58340153
LV.3
12
2012-12-12 17:17
我把更表達式后的匯編代碼給出來,有興趣的可以自己去研究一下,這些代碼最后計算的方法有什么不同。
0
回復
58340153
LV.3
13
2012-12-12 17:18
rt_value=(102400-vt_average_ad_data*100)/vt_average_ad_data;  // value si 10*R ;
編譯后生成的代碼:
               MOV.W     0438H,R0
               MUL.W     #0064H,R0
               MOV.W     #0H,R2
               MOV.W     #9000H,R1   //   (這就是我前面所說的,與 MOV.W     #19000H, R0 對應的兩條代碼)
               MOV.W     #1H,R3        //
               SUB.W     R0,R1
               SBB.W     R2,R3
               MOV.W     0438H,R0
               MOV.W     #0H,R2
               XCHG.W    R0,R1
               XCHG.W    R2,R3
               MOV.W     R1,A0
               MOV.W     R3,A1
               PUSHM     A0,A1
               JSR.W     __i4div
               ADD.B     #4H,SP
               MOV.W     R0,054CH
               MOV.W     R2,054EH
0
回復
58340153
LV.3
14
2012-12-12 17:18
@58340153
rt_value=(102400-vt_average_ad_data*100)/vt_average_ad_data; //valuesi10*R;編譯后生成的代碼:              MOV.W    0438H,R0              MUL.W    #0064H,R0              MOV.W    #0H,R2              MOV.W    #9000H,R1  //  (這就是我前面所說的,與MOV.W    #19000H,R0對應的兩條代碼)              MOV.W    #1H,R3       //              SUB.W    R0,R1              SBB.W    R2,R3              MOV.W    0438H,R0              MOV.W    #0H,R2              XCHG.W   R0,R1              XCHG.W   R2,R3              MOV.W    R1,A0              MOV.W    R3,A1              PUSHM    A0,A1              JSR.W    __i4div              ADD.B    #4H,SP              MOV.W    R0,054CH              MOV.W    R2,054EH
r_value=(1024*10*10.0 - ad_value*10*10.0)/ad_value;        // value si 10*R ;
編譯后生成的代碼:   
                MOV.W     0438H,R0
                MUL.W     #000AH,R0
                PUSH.W    #0000H
                PUSH.W    R0
                JSR.W     __i4Utof
                ADD.B     #4H,SP
                PUSH.W    #4024H
                PUSH.W    #0000H
                PUSH.W    #0000H
                PUSH.W    #0000H
                PUSHM     R0,R1,R2,R3
                JSR.W     __f8mul
                ADD.B     #10H,SP
                PUSHM     R0,R1,R2,R3
                PUSH.W    #40F9H
                PUSH.W    #0000H
                PUSH.W    #0000H
                PUSH.W    #0000H
                JSR.W     __f8sub
                ADD.B     #10H,SP
                MOV.W     R3,-2H[FB]
                MOV.W     R2,-4H[FB]
                MOV.W     R1,-6H[FB]
                MOV.W     R0,-8H[FB]
                PUSH.W    #0000H
                PUSH.W    0438H
                JSR.W     __i4Utof
                ADD.B     #4H,SP
                PUSHM     R0,R1,R2,R3
                PUSH.W    -2H[FB]
                PUSH.W    -4H[FB]
                PUSH.W    -6H[FB]
                PUSH.W    -8H[FB]
                JSR.W     __f8div
                ADD.B     #10H,SP
                PUSHM     R0,R1,R2,R3
                JSR.W     __f8toi4
                ADD.B     #8H,SP
                MOV.W     R2,054EH
                MOV.W     R0,054CH
0
回復
主站蜘蛛池模板: 国产女同2互磨高潮在线观看 | 久久99久久99精品免视看看 | 日日嗨av一区二区三区四区 | www私房写真在线观看 | 日日碰狠狠躁久久躁 | 她似遥上月短剧免费观看 | WWW.亚洲最大夜色伊人 | 国语国产精精品国产国语清晰对话 | 在线观看青青草 | 免费在线观看h视频 | 免费无码成人AV片在线在线播放 | 精品国产欧美一区二区三区不卡 | 56精品视频在线播放免费观看 | 无码熟妇人妻AV在线影片 | 欧美日韩在线第一页 | 91成品视频| 日本一区精品 | 日韩视频在线观看不卡 | 国产一区日韩二区欧美三区 | 极品少妇XXXX| 白丝美女被操黄色视频国产免费 | 亚洲精品美女视频在线观看 | 午夜dj高清www免费视频 | 亚洲肉感在线 | 中文字幕在线看 | 香蕉97超级碰碰碰视频 | 办公室扒开奶罩揉吮奶头AV | 好深好湿好硬顶到了好爽 | 亚洲理论中文字幕 | 高潮喷水抽搐无码免费 | 免费乱码人妻系列无码专区 | 精品国产入口麻豆 | 亚洲最新不卡一区二区三区 | www.四虎精品 | 久久综合免费 | 国产精品久久久久久久美男 | 一性一交一伦一色一情人 | 中文字字幕在线乱码 | 狠狠色综合欧美激情 | 超碰免费播放 | 国产在线日韩欧美 |