日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式客棧
[導(dǎo)讀]這篇筆記有如下內(nèi)容: 1、為什么需要計(jì)算各個(gè)線程的CPU使用率? 2、該如何計(jì)算線程CPU使用率? 3、FreeRTOS線程計(jì)算的弊端?如何打破 FreeRTOS 線程計(jì)算方式的時(shí)間限制? 4、關(guān)鍵代碼介紹。 上次介紹了如何計(jì)算整個(gè)系統(tǒng)的CPU使用率: 《 單片機(jī)里面的CPU使用

這篇筆記有如下內(nèi)容:
1、為什么需要計(jì)算各個(gè)線程的CPU使用率?
2、該如何計(jì)算線程CPU使用率?
3、FreeRTOS線程計(jì)算的弊端?如何打破 FreeRTOS 線程計(jì)算方式的時(shí)間限制?
4、關(guān)鍵代碼介紹。
上次介紹了如何計(jì)算整個(gè)系統(tǒng)的CPU使用率:
單片機(jī)里面的CPU使用率是什么鬼?
實(shí)操RT-Thread系統(tǒng)CPU利用率功能添加
但是卻沒(méi)有介紹該如何計(jì)算每個(gè)線程(任務(wù))的CPU使用率。
為什么要計(jì)算 線程 CPU 使用率?

首先要問(wèn)的是,為什么要計(jì)算線程的CPU使用率,有啥用?
我們知道系統(tǒng)的CPU使用率關(guān)注的是整個(gè)系統(tǒng)的使用情況,使用率越低,表示越能更及時(shí)的響應(yīng)外部情況,整個(gè)系統(tǒng)的性能也會(huì)越好。
但這是從系統(tǒng)整體考量的,并不能反映單個(gè)線程的執(zhí)行情況。
比如雖然整體的CPU使用率是30%,但是有一個(gè)線程占據(jù)了25%的使用率,一個(gè)線程使用率是5%,那么你肯定會(huì)想,為啥這個(gè)線程需要占用這么高的CPU使用率,是不是代碼寫(xiě)的有問(wèn)題,是不是代碼可以優(yōu)化一下?
當(dāng)系統(tǒng)運(yùn)行時(shí),如果你能實(shí)時(shí)觀察各個(gè)線程的CPU使用率,那么你就能知道平時(shí)這個(gè)線程的CPU使用情況是怎樣的,為什么后來(lái)又高那么多,那么你就可以由此分析出這個(gè)線程可能出現(xiàn)了問(wèn)題,也就可以針對(duì)性的進(jìn)行檢查了。
這點(diǎn)對(duì)于合作開(kāi)發(fā)的項(xiàng)目更是明顯,很多時(shí)候因?yàn)橛行┚€程的代碼不是自己寫(xiě)的,所以根本不知道代碼執(zhí)行情況,一旦系統(tǒng)出現(xiàn)問(wèn)題,那么可能就是互相甩鍋了。
而當(dāng)計(jì)算了線程的CPU使用率,一旦發(fā)現(xiàn)某個(gè)線程執(zhí)行異常,那么就能交給負(fù)責(zé)的人去查看了。
所以說(shuō),使用操作系統(tǒng)的項(xiàng)目是非常有必要計(jì)算各個(gè)線程(任務(wù))的CPU使用率的。
就好比你的電腦,風(fēng)扇嗡嗡響(CPU高負(fù)荷運(yùn)行),如果只有一個(gè)系統(tǒng)CPU使用率,發(fā)現(xiàn)高達(dá)90%,但是你卻根本不知道為什么這么高,所以只能重啟。
而一旦有了進(jìn)程CPU使用率,查看一下哪個(gè)進(jìn)程CPU使用率高,把對(duì)應(yīng)的進(jìn)程關(guān)閉就行了,根本不需要重啟電腦。

       

如何計(jì)算 線程 CPU 使用率?

那么現(xiàn)在就來(lái)看看該如何計(jì)算各個(gè)線程的CPU使用率。
從前面的筆記,我們其實(shí)也可以猜測(cè)該如何計(jì)算,無(wú)非就是獲取 每個(gè)線程的執(zhí)行時(shí)間罷了。
比如,1秒時(shí)間內(nèi),空閑任務(wù)執(zhí)行700毫秒,任務(wù)1執(zhí)行200毫秒,任務(wù)2執(zhí)行100毫秒,那么各個(gè)任務(wù)的CPU使用率分別是 70%、20%、10%。
以前計(jì)算系統(tǒng)的CPU使用率的時(shí)候,采用了軟件方法計(jì)算空閑任務(wù)的運(yùn)行時(shí)間,這必然是不夠準(zhǔn)確的,所以最好的方式是采用硬件計(jì)時(shí)。
因?yàn)轸~(yú)鷹采用STM32F103進(jìn)行測(cè)試,所以使用DWT外設(shè)進(jìn)行精確計(jì)時(shí),不過(guò)麻煩的是,在KEIL 軟件仿真情況下,DWT外設(shè)是無(wú)法工作的,所以如果要測(cè)試的話,必須使用硬件仿真的方式,不過(guò)如果真要KEIL軟件仿真的話,也不是沒(méi)有辦法,就是使用硬件定時(shí)器,這個(gè)按下不表。
畢竟,DWT外設(shè)的功能在這里說(shuō)白了也就是個(gè)定時(shí)器而已。
既然要獲取線程的執(zhí)行時(shí)間,關(guān)鍵一點(diǎn)就是,我們要知道操作系統(tǒng)什么時(shí)候會(huì)切換到某一個(gè)線程運(yùn)行,什么時(shí)候又會(huì)從這個(gè)線程切出,到另一個(gè)線程執(zhí)行呢?
這個(gè)關(guān)鍵還是在系統(tǒng)內(nèi)置的 鉤子函數(shù)。上次的筆記魚(yú)鷹介紹過(guò)空閑鉤子函數(shù),今天介紹另一個(gè)鉤子,任務(wù)切換鉤子函數(shù)。
這個(gè)鉤子函數(shù)的特點(diǎn)就是,每當(dāng)系統(tǒng)需要切換到下一個(gè)任務(wù)時(shí),就會(huì) 先執(zhí)行這個(gè)函數(shù)。這個(gè)函數(shù)一般有兩個(gè)參數(shù), 當(dāng)前任務(wù)即將切換的任務(wù)。
只要設(shè)置任務(wù)切換的鉤子函數(shù),并且有時(shí)間戳,那么計(jì)算一個(gè)任務(wù)的執(zhí)行時(shí)間也就不那么困難了。
比如,操作系統(tǒng)在時(shí)刻12345 ms 切換到空閑任務(wù)執(zhí)行,突然一個(gè)任務(wù)就緒,開(kāi)始準(zhǔn)備執(zhí)行,所以在時(shí)刻12445切換到那個(gè)就緒任務(wù)執(zhí)行,那么空閑任務(wù)的執(zhí)行時(shí)間我們也就可以準(zhǔn)確計(jì)算出來(lái)了。
12445 – 12345 = 100 ms
也就是說(shuō),這一次空閑任務(wù)執(zhí)行了 100 毫秒。
如果我們要計(jì)算單位時(shí)間(比如1秒內(nèi))空閑任務(wù)的執(zhí)行時(shí)間,我們只要在每次運(yùn)行到空閑任務(wù)時(shí) 累計(jì)時(shí)間即可。
比如1秒內(nèi),空閑任務(wù)執(zhí)行了 5 次,分別是 10、200、100、200、50,累計(jì)時(shí)間為
10 + 200 + 100 + 200 + 50 = 560毫秒
由此,可計(jì)算空閑任務(wù)的CPU使用率為 56%,從而可計(jì)算出系統(tǒng)的CPU使用率是44%。
是的,通過(guò)線程的CPU使用率方法,我們其實(shí)也可以計(jì)算整個(gè)系統(tǒng)的CPU使用率。而且這種計(jì)算方式比前面所說(shuō)的計(jì)算方法更準(zhǔn)確,更科學(xué)。
前面采用時(shí)間戳進(jìn)行計(jì)算,但是時(shí)間戳是會(huì)溢出的,那個(gè)時(shí)候,你的時(shí)間計(jì)算還是準(zhǔn)確的嗎?
FreeRTOS 線程計(jì)算 限制?

現(xiàn)在魚(yú)鷹就來(lái)說(shuō)說(shuō)第三個(gè)問(wèn)題,F(xiàn)reeRTOS線程計(jì)算的弊端?如何打破 FreeRTOS 線程計(jì)算方式的時(shí)間限制?
從網(wǎng)上查找FreeRTOS任務(wù)CPU計(jì)算相關(guān)的資料,可以得到以下信息:
1、需要開(kāi)一個(gè)定時(shí)器,這個(gè)定時(shí)器中斷頻率是操作系統(tǒng)時(shí)鐘的十幾倍(為了保證計(jì)算精度)。
2、一個(gè)64 位的變量在定時(shí)器自加更新,一旦變量溢出,時(shí)間計(jì)算就會(huì)出現(xiàn)問(wèn)題。
(相關(guān)細(xì)節(jié)可查看安富萊教程)
第一個(gè)問(wèn)題會(huì)導(dǎo)致系統(tǒng)性能下降(中斷頻率太高,一般是微秒級(jí)別的),而第二個(gè)問(wèn)題導(dǎo)致在一段時(shí)間內(nèi)(小時(shí)級(jí)別)線程CPU使用率計(jì)算準(zhǔn)確,超出時(shí)間后,計(jì)算會(huì)有問(wèn)題,所以教程中不建議在正式版本加入此功能。
第一個(gè)問(wèn)題其實(shí)很好解決,就是使用硬件定時(shí)器,不再由CPU去更新時(shí)間,這樣不會(huì)占用CPU時(shí)間,第二個(gè)問(wèn)題其實(shí)也非常好解決,就是通過(guò)《 延時(shí)功能進(jìn)化論(合集)》的方式解決溢出問(wèn)題,這里不再展開(kāi)說(shuō)其中的奧妙。

任務(wù)切換 鉤子函數(shù)的實(shí)現(xiàn)
總之,魚(yú)鷹接下來(lái)的實(shí)現(xiàn)方式解決了以上兩個(gè)痛點(diǎn),即使無(wú)限執(zhí)行下去,也不會(huì)影響到計(jì)算精度問(wèn)題,唯一對(duì)系統(tǒng)產(chǎn)生的一點(diǎn)影響,只有在任務(wù)切換時(shí)消耗的一點(diǎn)計(jì)算時(shí)間(微秒級(jí)別)。
那么先上任務(wù)切換 鉤子函數(shù)關(guān)鍵實(shí)現(xiàn)代碼(RT-Thread):
void thread_stats_scheduler_hook(struct rt_thread *from, struct rt_thread *to){ static uint32_t schedule_last_time;  uint32_t time;  time = get_curr_time();  from->user_data += (time - schedule_last_time); schedule_last_time = time;}
如何將這個(gè)函數(shù)注冊(cè)到操作系統(tǒng)中被系統(tǒng)調(diào)用呢?
通過(guò)這個(gè)函數(shù)即可:
那么現(xiàn)在來(lái)分析這個(gè)鉤子函數(shù)實(shí)現(xiàn):
一個(gè)靜態(tài)變量,用于記錄切換時(shí)的時(shí)間戳。
每次任務(wù)開(kāi)始切換時(shí),更新這個(gè)時(shí)間戳,同時(shí)累積時(shí)間,這個(gè)時(shí)間保存在當(dāng)前任務(wù)的user_data里面。
難理解?看下圖就清楚了。
假設(shè)系統(tǒng)調(diào)度是從任務(wù)1切換到任務(wù)2,即from為 任務(wù) 1,to為 任務(wù) 2,此時(shí)獲取的時(shí)間戳為 T1 。
上一次的時(shí)間戳我們已經(jīng)通過(guò)靜態(tài)變量保留了,這里為T0,那么T1-T0就是from任務(wù)即 任務(wù) 1在本次運(yùn)行的時(shí)間,只要下次運(yùn)行任務(wù)1時(shí)繼續(xù)不斷的累積這個(gè)時(shí)間,那么就可以得到任務(wù)1的總運(yùn)行時(shí)間。
任務(wù)2同理。
當(dāng)然我們不可能一直累積下去,不然肯定會(huì)溢出,所以隔一段時(shí)間就需要清零,這個(gè)時(shí)間其實(shí)就是 線程 CPU 計(jì)算的周期。
    這里還有一個(gè)函數(shù)沒(méi)有說(shuō),就是 get_curr_time(),在這里使用DWT,為了可以重新實(shí)現(xiàn)該函數(shù),魚(yú)鷹使用了弱屬性 weak(關(guān)于這個(gè)看參考:《 困惑多年,為什么 printf 可以重定向? 》)。
__weakuint32_t get_curr_time() { return DWT->CYCCNT; // don't use the function rt_tick_get()}
這里可以看到有個(gè)注釋,不要使用 rt_tick_get 函數(shù),為啥?
精度太低,有些任務(wù)本來(lái)執(zhí)行了的,但是因?yàn)閳?zhí)行時(shí)間 小于操作系統(tǒng)的時(shí)鐘(比如1毫秒),那么就無(wú)法累積時(shí)間了,那么即使這個(gè)任務(wù)運(yùn)行再多,時(shí)間累積也為 0,這肯定是我們不希望看到的。
然后再說(shuō)一個(gè)點(diǎn),為了簡(jiǎn)化代碼(鉤子函數(shù)代碼只有短短幾行),魚(yú)鷹這樣的實(shí)現(xiàn)是有兩個(gè)問(wèn)題的。
1、首次運(yùn)行計(jì)算有誤,因?yàn)殪o態(tài)變量應(yīng)該在運(yùn)行任務(wù)之前就初始化的(不應(yīng)該初始化為 0),而鉤子函數(shù)是在任務(wù)運(yùn)行之后才調(diào)用的,所以從開(kāi)機(jī)以來(lái)的時(shí)間被累加到第一個(gè)運(yùn)行任務(wù)中了,這肯定是有問(wèn)題的,不過(guò)后面隨著系統(tǒng)的運(yùn)行,靜態(tài)變量被持續(xù)更新,就不會(huì)再出現(xiàn)這個(gè)問(wèn)題了。
2、為了減少修改,魚(yú)鷹把線程的use_data當(dāng)成一個(gè)變量使用了,實(shí)際上這個(gè)變量的功能應(yīng)該是存儲(chǔ)線程私有變量地址的,但是因?yàn)轸~(yú)鷹懶得修改太多代碼,所以直接拿來(lái)用了。正因?yàn)槿绱?,所以魚(yú)鷹添加線程CPU計(jì)算時(shí),只要修改很少的代碼就可以了。
線程 CPU 計(jì)算

目前我們已經(jīng)能夠通過(guò)鉤子函數(shù)獲取各個(gè)線程的CPU執(zhí)行時(shí)間,現(xiàn)在就看該如何計(jì)算了。
為了計(jì)算各個(gè)線程的CPU使用率,我們需要確定計(jì)算周期,這里我們可以設(shè)置1秒計(jì)算一次。
其次,我們需要確定在哪個(gè)任務(wù)執(zhí)行計(jì)算。
原理上來(lái)說(shuō),可以是系統(tǒng)中的任何一個(gè)任務(wù),但是為了減少對(duì)系統(tǒng)的干擾,可以將計(jì)算工作放到優(yōu)先級(jí)比較低的任務(wù)中進(jìn)行,比如空閑任務(wù)。
現(xiàn)在,看看函數(shù)是如何實(shí)現(xiàn)的:
// can call the function 1 s (max 60s when stm32f1xx because of dwt)void thread_cal_usage(thread_run_info_def *run_info){ static uint32_t total_time_last;   uint32_t time, total_time; struct rt_list_node *node; struct rt_list_node *list; struct rt_thread *thread; uint32_t i;  rt_enter_critical(); // 關(guān)閉系統(tǒng)調(diào)度,防止在計(jì)算過(guò)程中更新線程時(shí)間,影響計(jì)算  time = get_curr_time(); // 獲取當(dāng)前時(shí)間戳 total_time = time - total_time_last; // 計(jì)算運(yùn)行總時(shí)間 total_time_last = time; // 更新時(shí)間  list = &(rt_object_get_information(RT_Object_Class_Thread)->object_list); // 獲取線程列表指針 // 搜索類別 for(i = 0, node = list->next; (node != list) && i < THREAD_NBR_MAX; node = node->next, i++){ thread = rt_list_entry(node, struct rt_thread, list); // 獲取線程地址 run_info[i].name = thread->name; // 保存線程名 run_info[i].time = thread->user_data; // 保存線程執(zhí)行時(shí)間 thread->user_data = 0; // 清除線程執(zhí)行時(shí)間 }  rt_exit_critical();// 開(kāi)啟系統(tǒng)調(diào)度  // 計(jì)算各個(gè)線程的 CPU 使用率 total_time /= 100;  if(total_time > 0){ for(uint32_t j = i, i = 0; i < j; i++) { run_info[i].usage = run_info[i].time / total_time; } }}
注釋已經(jīng)很詳盡了,所以不多做討論。主要說(shuō)以下幾點(diǎn):
1、為什么需要關(guān)閉調(diào)度器,可以使用關(guān)中斷嗎?
關(guān)調(diào)度器是為了防止在獲取各個(gè)線程執(zhí)行時(shí)間時(shí),因?yàn)橄到y(tǒng)調(diào)度而導(dǎo)致執(zhí)行時(shí)間被更新,從而導(dǎo)致計(jì)算有誤,所以需要關(guān)閉調(diào)度器。
那么為什么不使用關(guān)中斷的方式呢?沒(méi)有必要。一旦關(guān)中斷,那么中斷就無(wú)法響應(yīng)了,所以在可以關(guān)調(diào)度器的情況下滿足要求,就不應(yīng)該關(guān)中斷。
2、為什么分兩步計(jì)算,為什么不將最終的計(jì)算放在第一個(gè)循環(huán)中執(zhí)行呢?
節(jié)省時(shí)間,為了盡量減少關(guān)調(diào)度器的時(shí)間,能省一點(diǎn)是一點(diǎn)。畢竟只要能獲取到關(guān)鍵信息,啥時(shí)候計(jì)算都一樣。
3、因?yàn)榫€程CPU計(jì)算周期是自動(dòng)計(jì)算的,所以,計(jì)算周期其實(shí)就是該函數(shù)的調(diào)用周期,即2秒調(diào)用一次,那么線程CPU計(jì)算周期就是2秒,但是需要注意的是,調(diào)用周期必須小于定時(shí)器的溢出時(shí)間,即當(dāng)你使用 DWT 時(shí),調(diào)用周期應(yīng)該在 60 秒以下(72 M 系統(tǒng)時(shí)鐘),否則計(jì)算是有問(wèn)題的。

現(xiàn)在我們已經(jīng)算是完成了線程CPU計(jì)算問(wèn)題,但為了使用方便,我們需要把它打印出來(lái),或者把這些信息字符串化:
void thread_stats_print(void){ thread_run_info_def run_info[THREAD_NBR_MAX] = {0}; thread_run_info_def *p_info;
thread_cal_usage(run_info); rt_kprintf("thread\t\t\ttime\t usage\n"); for(uint32_t i = 0; i < THREAD_NBR_MAX; i++) { p_info = &run_info[i]; if(p_info->name != NULL) { if(p_info->usage > 0) // CPU 使用率大于 1 % {                    rt_kprintf("%-16s\t%u\t%2u%%\n"                         p_info->name,                          (uint32_t)p_info->time,                          (uint32_t)p_info->usage); } else { rt_kprintf("%-16s\t%u\t<1%%\n", p_info->name, (uint32_t)p_info->time, (uint32_t)p_info->usage); } } else { break; } }}
這里將 線程名、線程執(zhí)行時(shí)間、線程使用率都打印出來(lái)了,但是需要注意的是,這里的time 時(shí)間單位是定時(shí)器的單位,而不是微秒、毫秒,比如如果使用 DWT,那么單位就是 1/72 微秒,即如果 time 值為 1000,那么換算到微秒,應(yīng)該是 1000/72 秒,當(dāng)然了,你也可以在打印的同時(shí)就把時(shí)間換算一下,這個(gè)自由發(fā)揮就好。

END

往期精彩推薦,點(diǎn)擊即可閱讀




▲Linux內(nèi)核中I2C總線及設(shè)備長(zhǎng)啥樣?  [墻裂推薦]
數(shù)學(xué)之美:嵌入式編程凹凸性之妙用(附C代碼
手把手教系列之IIR數(shù)字濾波器設(shè)計(jì)實(shí)現(xiàn)

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉