久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3112|回復: 13
打印 上一主題 下一主題
收起左側

電解電容放電時間怎么計算

[復制鏈接]
跳轉到指定樓層
樓主
ID:960619 發表于 2022-9-14 16:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
5V2200UF的電容,后面帶0.025A的負載,這樣在斷開電源的情況下還能維持電路多久時間,夠不夠芯片做掉電存儲動作
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:624769 發表于 2022-9-14 16:28 | 只看該作者
進入掉電中斷后, 先關負載,再做存儲動作。
回復

使用道具 舉報

板凳
ID:123289 發表于 2022-9-14 16:45 | 只看該作者
電容上的電荷:Qc=U*C=5V*2200uF
負載使用電量:Q = I*t = 0.025A * t
假設:電壓降到3.6V停止工作,則電容可提供的電荷 =Qc * (1-3.6/5)。
以下,樓主自己算吧。

夠不夠做掉電存儲,還取決于存數的多少及技巧。通常夠了。
回復

使用道具 舉報

地板
ID:1044751 發表于 2022-9-14 16:55 | 只看該作者
Q=CU=0.011C
t=Q/I=0.44s
一般的芯片夠了,芯片一般都是微秒級的
回復

使用道具 舉報

5#
ID:712493 發表于 2022-9-14 19:47 來自手機 | 只看該作者
你這0.011電荷怎么算的
回復

使用道具 舉報

6#
ID:960619 發表于 2022-9-14 20:09 | 只看該作者
羚羊樹懶書架 發表于 2022-9-14 16:55
Q=CU=0.011C
t=Q/I=0.44s
一般的芯片夠了,芯片一般都是微秒級的

0.44S是放電放完的時間,芯片電壓過低不可能工作啊
回復

使用道具 舉報

7#
ID:624769 發表于 2022-9-14 20:22 | 只看該作者
baobao125 發表于 2022-9-14 20:09
0.44S是放電放完的時間,芯片電壓過低不可能工作啊

所以,算這些沒有意義。 關鍵是要先關閉 負載,再開始保存數據,
從低壓中斷觸發(3.8V)開始,只要關了 負載,哪怕你只有 47uf 的電容,也足夠寫 50個字節以上 到片內Eeprom 了。
回復

使用道具 舉報

8#
ID:213173 發表于 2022-9-14 20:53 | 只看該作者
根據壇友的示例經修改實測成功,利用編程技巧不需要多大電容。TX-1C實驗板上外圍元件不少,電源濾波電容僅10uf,能夠掉電后可靠保存2個字節(沒有做保存更多字節試驗)。測試掉電后能維持2.5ms。如需要保存更多字節應該要適當增大電容。
  1. //測試條件:TX-1C實驗板,MCU型號IAP15W4K58S4,系統時鐘11.0592MHz
  2. //注意:測試本示例時,需在ISP下載時將低壓復位功能和低壓時禁止EEPROM操作關閉

  3. #include "STC15Fxxxx.H"
  4. #include <intrins.h>                                //庫頭文件
  5. #define uint unsigned int                         //宏定義數據類型uint
  6. #define uchar unsigned char                 //宏定義數據類型uchar
  7. //宏定義ISP的操作命令
  8. #define CMD_IDLE    0               //空閑模式
  9. #define CMD_READ    1               //IAP字節讀命令
  10. #define CMD_PROGRAM 2               //IAP字節編程命令
  11. #define CMD_ERASE   3               //IAP扇區擦除命令
  12. #define ENABLE_IAP  0x82            //CPU的等待時間
  13. #define IAP_ADDRESS 0x0800                        //測試地址
  14. sbit duan=P2^6;
  15. sbit wein=P2^7;

  16. //順序共陰極數碼管段碼表,段碼a-h順序接PX0-PX7
  17. uchar code table[]={//共陰數碼管段碼"0~f-."
  18.                 0x3f,0x06,0x5b,0x4f,
  19.                 0x66,0x6d,0x7d,0x07,
  20.                 0x7f,0x6f,0x77,0x7c,
  21.                 0x39,0x5e,0x79,0x71,0x40,0x80};
  22. uchar data dis_buf[8];                //緩存數組
  23. uint num,sec;
  24. uchar i;

  25. void Timer0Init();                                        //定時器初始化聲明
  26. void IapIdle();                                                //關閉IAP/EEPROM
  27. uchar IapReadByte(uint addr);                //讀取EEPROM數據
  28. void IapProgramByte(uint addr, uchar dat);//寫入EEPROM數據
  29. void IapEraseSector(uint addr);                //擦除EEPROM數據

  30. void main()                                                       
  31. {
  32.         P0M0 = 0x00;
  33.         P0M1 = 0x00;
  34.         P1M0 = 0x00;
  35.         P1M1 = 0x00;
  36.         P2M0 = 0x00;
  37.         P2M1 = 0x00;
  38.         P3M0 = 0x00;
  39.         P3M1 = 0x00;
  40.         P4M0 = 0x00;
  41.         P4M1 = 0x00;
  42.         P5M0 = 0x00;
  43.         P5M1 = 0x00;
  44.         P6M0 = 0x00;
  45.         P6M1 = 0x00;
  46.         P7M0 = 0x00;
  47.         P7M1 = 0x00;
  48.         sec=IapReadByte(IAP_ADDRESS)<<8|IapReadByte(IAP_ADDRESS+1);//讀取保存的數據 用時11.75us
  49.         if(sec==0xffff)//如果沒有保存數據
  50.                 sec=0;//變量為0
  51.         else IapEraseSector(IAP_ADDRESS);//擦除數據,為下次掉電保存數據做準備

  52.         PCON &= 0xDF;//清0掉電標志
  53.         ELVD = 1;//開低壓中斷
  54.         EA   = 1;//開總中斷

  55.         Timer0Init();//初始化定時器

  56.         while(1)
  57.         {
  58.                 if(TF0)//查詢T0中斷請求標志
  59.                 {               
  60.                         TF0=0;//T0中斷請求標志清0
  61.                         if(++num>=1000)//1秒
  62.                         {
  63.                                 num=0;                               
  64.                                 sec++;
  65.                         }
  66.                         dis_buf[0]=table[sec/10000%10];
  67.                         dis_buf[1]=table[sec/1000%10];
  68.                         dis_buf[2]=table[sec/100%10];
  69.                         dis_buf[3]=table[sec/10%10];
  70.                         dis_buf[4]=table[sec%10];
  71.                         //5位數碼管動態顯示
  72.                         P0=0x00;duan=1;duan=0;
  73.                         P0=~(0x01<<i);wein=1;wein=0;
  74.                         P0=dis_buf[i];duan=1;duan=0;
  75.                         i=++i%5;
  76.                 }
  77.         }
  78. }

  79. void Timer0Init(void)        //1毫秒@11.0592MHz
  80. {
  81.         AUXR |= 0x80;                //定時器時鐘1T模式
  82.         TMOD &= 0xF0;                //設置定時器模式
  83.         TL0 = 0xCD;                        //設置定時初始值
  84.         TH0 = 0xD4;                        //設置定時初始值
  85.         TF0 = 0;                        //清除TF0標志
  86.         TR0 = 1;                        //定時器0開始計時
  87. }
  88. /*----------------------------
  89.         關閉IAP功能
  90. ----------------------------*/
  91. void IapIdle()
  92. {
  93.     IAP_CONTR = 0;                  //關閉IAP功能
  94.     IAP_CMD = 0;                    //清除命令寄存器
  95.     IAP_TRIG = 0;                   //清除觸發寄存器
  96.     IAP_ADDRH = 0x80;               //將地址設置到非IAP區域
  97.     IAP_ADDRL = 0;
  98. }
  99. /*----------------------------
  100. 從ISP/IAP/EEPROM區域讀取一字節
  101. ----------------------------*/
  102. uchar IapReadByte(uint addr)
  103. {
  104.     uchar dat;                       //數據緩沖區

  105.     IAP_CONTR = ENABLE_IAP;         //使能IAP
  106.     IAP_CMD = CMD_READ;             //設置IAP命令
  107.     IAP_ADDRL = addr;               //設置IAP低地址
  108.     IAP_ADDRH = addr >> 8;          //設置IAP高地址
  109.     IAP_TRIG = 0x5a;                //寫觸發命令(0x5a)
  110.     IAP_TRIG = 0xa5;                //寫觸發命令(0xa5)
  111.     _nop_();                        //等待ISP/IAP/EEPROM操作完成
  112.     dat = IAP_DATA;                 //讀ISP/IAP/EEPROM數據
  113.     IapIdle();                      //關閉IAP功能
  114.     return dat;                     //返回
  115. }
  116. /*-------------------------------
  117. 寫一字節數據到ISP/IAP/EEPROM區域
  118. --------------------------------*/
  119. void IapProgramByte(uint addr, uchar dat)
  120. {
  121.     IAP_CONTR = ENABLE_IAP;         //使能IAP
  122.     IAP_CMD = CMD_PROGRAM;          //設置IAP命令
  123.     IAP_ADDRL = addr;               //設置IAP低地址
  124.     IAP_ADDRH = addr >> 8;          //設置IAP高地址
  125.     IAP_DATA = dat;                 //寫ISP/IAP/EEPROM數據
  126.     IAP_TRIG = 0x5a;                //寫觸發命令(0x5a)
  127.     IAP_TRIG = 0xa5;                //寫觸發命令(0xa5)
  128.     _nop_();                        //等待ISP/IAP/EEPROM操作完成
  129.     IapIdle();                      //關閉IAP功能
  130. }
  131. /*----------------------------
  132. ISP/IAP/EEPROM扇區擦除
  133. ----------------------------*/
  134. void IapEraseSector(uint addr)
  135. {
  136.     IAP_CONTR = ENABLE_IAP;         //使能IAP
  137.     IAP_CMD = CMD_ERASE;            //設置IAP命令
  138.     IAP_ADDRL = addr;               //設置IAP低地址
  139.     IAP_ADDRH = addr >> 8;          //設置IAP高地址
  140.     IAP_TRIG = 0x5a;                //寫觸發命令(0x5a)
  141.     IAP_TRIG = 0xa5;                //寫觸發命令(0xa5)
  142.     _nop_();                        //等待ISP/IAP/EEPROM操作完成
  143.     IapIdle();                      //關閉IAP功能
  144. }
  145. void PowerLost() interrupt 6                //剩余電量從中斷開始到完全斷電2.5ms
  146. {
  147.         EA = 0;                                                //關閉總中斷
  148.         P0M1 = 0xff;                                //所有端口高阻用時2.75us
  149.         P1M1 = 0xff;
  150.         P2M1 = 0xff;
  151.         P3M1 = 0xff;
  152.         P4M1 = 0xff;
  153.         P5M1 = 0xff;
  154.         P6M1 = 0xff;
  155.         P7M1 = 0xff;
  156.         IapProgramByte(IAP_ADDRESS,sec>>8);//寫數據高8位到EEPROM
  157.         IapProgramByte(IAP_ADDRESS+1,sec);//寫數據低8位到EEPROM  寫兩個字節用時215.25us

  158.         while((PCON & 0x20) != 0)         //復查低壓標志
  159.         {
  160.                 PCON &= 0xDF;                  //清除低壓標志
  161.                 _nop_();               
  162.                 _nop_();                            //坐等掉電
  163.         }
  164.         IAP_CONTR = 0x20;                 //發現是誤報,重啟單片機,恢復正常工作
  165. }
復制代碼

回復

使用道具 舉報

9#
ID:960619 發表于 2022-9-14 21:10 | 只看該作者
188610329 發表于 2022-9-14 20:22
所以,算這些沒有意義。 關鍵是要先關閉 負載,再開始保存數據,
從低壓中斷觸發(3.8V)開始,只要關了 ...

我是先關負載,再存儲的。用1MS中斷掃描IO口電平,因為電容前面有個二極管,后面穩壓,想著斷電后應該是IO口先讀取到低電平,比低壓中斷有更多的時間用于存儲,穩妥些。但stc單片機有時候就是到擦除完后就不工作了。有時候還是可以完成存儲的。 只用12M的頻率
回復

使用道具 舉報

10#
ID:879809 發表于 2022-9-14 23:39 | 只看該作者
跟工作頻率無關,flash寫一個字節或者寫一個頁面需要不到10ms時間,單片機執行時間可以忽略不計,完全夠用了。
回復

使用道具 舉報

11#
ID:624769 發表于 2022-9-15 08:14 來自手機 | 只看該作者
baobao125 發表于 2022-9-14 21:10
我是先關負載,再存儲的。用1MS中斷掃描IO口電平,因為電容前面有個二極管,后面穩壓,想著斷電后應該是I ...

你發現斷電了,再去擦除eeprom的做法是不可取的,雖然不知道你是什么型號的單片機,但是,往eeprom寫數據的話,一個字節2us,50個字節也只要0.1ms,而擦除一個扇區,基本要20ms以上,發現斷電,再浪費這寶貴的20ms是極端不合理的。最后,檢測前端斷電,并不見得比掉電中斷更及時,先不說,你的1ms間隔掃描低電平,是否比發現低于3.8v來的更及時,前段也有容性的吧?在單片機功耗大的情況下,單片機停振了,前端還沒達到低電平的標準,不是不可能。個人的一些經驗,僅供參考。
回復

使用道具 舉報

12#
ID:1044792 發表于 2022-9-15 08:42 | 只看該作者
假如降至3V仍可維持工作,可以用如下式子估算:(5-3)* 0.0022(電容量) /0.025, 約0.17s,
回復

使用道具 舉報

13#
ID:1044792 發表于 2022-9-15 08:43 | 只看該作者
假如至3V仍可工作,持續時間 則可用下式估算:(5-3)*0.0022 /0.025,約0.17S,
回復

使用道具 舉報

14#
ID:807591 發表于 2022-9-15 09:16 | 只看該作者
有計算電容放電的在線工具網站,,另外找個示波器測一下就解決問題了,為什么要去算? 實際測量才是關鍵,測完可以考慮電容加大一點,以防時間久了電容容量降低
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品福利在线 | а天堂中文最新一区二区三区 | 午夜精品视频在线观看 | 在线日韩不卡 | 成人免费观看男女羞羞视频 | 亚洲精品欧美一区二区三区 | 精品国产一区二区三区性色 | 亚洲伊人精品酒店 | 特黄av| 亚洲网站在线观看 | 欧美视频在线观看 | 91成人影院| 欧美精品在线一区二区三区 | 日本一区二区高清视频 | 久久久精品天堂 | 国产偷录视频叫床高潮对白 | 成人av高清 | 成人免费视频一区二区 | 欧美久久一级特黄毛片 | 在线欧美一区 | 国产亚洲成av人在线观看导航 | 啪啪网页 | 特级黄一级播放 | 国产午夜三级一区二区三 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 国产乱码精品一区二区三区五月婷 | 色频| 欧美性a视频 | 欧美bondage紧缚视频 | 欧美中文字幕一区二区三区亚洲 | 成人av鲁丝片一区二区小说 | 精品国产一区二区在线 | 国产视频1区 | 久久久久国产一区二区三区 | 午夜极品 | 久久精品视频9 | 精品亚洲一区二区三区四区五区高 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 一级做a爰片性色毛片视频停止 | 国产精品久久久久久吹潮 | 中文字幕免费 |