痞酷網_PIGOO

 取回密碼
 立即註冊
搜尋
檢視: 722|回覆: 9

國際牌 DC 電扇 F-H16BND 無電源維修記事(附 protocol 資料)

[複製連結]
發表於 2018-6-3 16:47:11 | 顯示全部樓層 |閱讀模式
本文章最後由 gsm7 於 2018-6-3 04:59 PM 編輯

我先說句實話,碰到這台讓我很幹,心情不好。不是很難修,而是品質真是太糟了!



第一眼見到時,按鍵全沒反應,加上首部斷裂,擺頭固定螺絲不知道飛到那裡去了?拆開簡單量了一下控制基板,發現有短路的問題。研判只是簡單的晶體或電容問題,拆回處理。結果發現是 MCU 掛點,沒救,只能買片新基板交差。想想雖然材料成本高了很多,但基本還是正值。

新基板到了,裝上去,會開機了,但還是不會動。這下我傻眼,客戶也傻眼。上控制基板拆回檢查,發現 OSC 沒動作,更新無效,MCU 又掛了。頭都已經洗到一半了,不得已再叫了一片新基板。錢結算下來變成負值。

好了。換基板誰不會?但下次再碰到這種的該怎麼辦呢?一次把兩片基板都換新的嗎?我一度想乾脆重新換個新的 MCU 上去算了,反正也不是什麼複雜的東西,一兩天的工夫而已。這次買了新基板下來之後,就把這兩片基板的控制協定資料先記下來,未來會用到也說不定。

以下是通訊協定解說︰



這是單線單向控制協定,邏輯 1 為 5V,0 為 0V,idle 為 1,開始位元 0,單位元長 5ms,總長 35 ([0:34])bits (這地方有點誤差,可能是 34 bits,因為 MCU 控制精度不良,不能確定)。

每秒重覆發送一次封包。

bit 0-1 固定為 0
bit 2 為 POWER, 1=ON,0=OFF
bit 3 為 擺頭控制,1=ON,0=OFF
bit 4-7 為風速,bit4=LSB,bit7=MSB,最低為 1([4:7]=1000),最高為 8(4:7]=0001),全部八段
bit 8 用途不明,固定為 0
bit 9 為 自然風,1=ON,0=OFF,風速由操作基板控制 ([bit4:7] 值隨機變化)
bit 10 為 睡眠風,1=ON,0=OFF
bit 11 用途不明,固定為 1
bit 12 為 負離子,1=ON,0=OFF
bit 13 為 節能,1=ON,0=OFF
bit 14 為 偶同位檢查碼,前面所有的 bit 至此全部的 1 為偶數個
bit [15:34] 為固定值,用途不明,其值為 [15:34]=0010 1101 0111 1000 0000


馬達的 VSP 信號解說︰

這是第一段的波形



為 寬度 64us (15.7KHZ) 的 PWM 信號,電壓 5V。無動作時為 0

第一段 6.4us
第二段 11us
第三段 15us
第四段 18us
第五段 27.5us
第六段 31us
第七段 36us
第八段 45us



這是第八段的波形


簡單用 Arduino 寫一個程式,送開機信號給上控制基板,命令它打開馬達

Arduino UNO Pin2 接按鍵開關至地,Pin3 為輸出 DATA



以下是程式

  1. //
  2. // Panasonic F-H16BND control program
  3. //
  4. // Powered by G7 in pigoo
  5. //

  6. #define SER_LINE      3
  7. #define POWER_BUTTON  2


  8. int flag_pw;
  9. int key_lock;


  10. void sendSerialCmd(int pw)
  11. {
  12.   digitalWrite(SER_LINE,LOW);
  13.   delay(5); // bit 0
  14.   delay(5); // bit 1
  15.   if(pw) digitalWrite(SER_LINE,HIGH);
  16.   else   digitalWrite(SER_LINE,LOW);
  17.   delay(5); // bit 2 power
  18.   digitalWrite(SER_LINE,LOW);
  19.   delay(5); // bit 3
  20.   delay(5); // bit 4 fan speed low_bit
  21.   delay(5); // bit 5 fan speed
  22.   digitalWrite(SER_LINE,HIGH);
  23.   delay(5); // bit 6 fan speed
  24.   digitalWrite(SER_LINE,LOW);
  25.   delay(5); // bit 7
  26.   
  27.   delay(5); // bit 8 unknown
  28.   delay(5); // bit 9
  29.   delay(5); // bit 10
  30.   digitalWrite(SER_LINE,HIGH);
  31.   delay(5); // bit 11
  32.   digitalWrite(SER_LINE,LOW);
  33.   delay(5); // bit 12
  34.   delay(5); // bit 13 ECO

  35.   if(pw) digitalWrite(SER_LINE,HIGH);
  36.   else   digitalWrite(SER_LINE,LOW);
  37.   delay(5); // bit 14 even bit check

  38.   digitalWrite(SER_LINE,LOW);
  39.   delay(5); // bit 15 0
  40.   delay(5); // bit 16 0
  41.   digitalWrite(SER_LINE,HIGH);
  42.   delay(5); // bit 17 1
  43.   digitalWrite(SER_LINE,LOW);
  44.   delay(5); // bit 18 0
  45.   digitalWrite(SER_LINE,HIGH);
  46.   delay(5); // bit 19 1
  47.   delay(5); // bit 20 1
  48.   digitalWrite(SER_LINE,LOW);
  49.   delay(5); // bit 21 0
  50.   digitalWrite(SER_LINE,HIGH);
  51.   delay(5); // bit 22 1
  52.   digitalWrite(SER_LINE,LOW);
  53.   delay(5); // bit 23 0
  54.   digitalWrite(SER_LINE,HIGH);
  55.   delay(5); // bit 24 1
  56.   delay(5); // bit 25 1
  57.   delay(5); // bit 26 1
  58.   delay(5); // bit 27 1
  59.   digitalWrite(SER_LINE,LOW);
  60.   delay(5); // bit 28 0
  61.   delay(5); // bit 29 0
  62.   delay(5); // bit 30 0
  63.   delay(5); // bit 31 0
  64.   delay(5); // bit 32 0
  65.   delay(5); // bit 33 0
  66.   delay(5); // bit 34 0
  67.   digitalWrite(SER_LINE,HIGH);
  68. }



  69. void setup() {
  70.   // put your setup code here, to run once:
  71.   flag_pw = 0;
  72.   key_lock = 0;
  73.   
  74.   pinMode(POWER_BUTTON,INPUT);   // POWER Button
  75.   pinMode(SER_LINE,OUTPUT);  // Serial Output
  76.   digitalWrite(SER_LINE,HIGH);
  77. }

  78. void loop() {
  79.   // put your main code here, to run repeatedly:

  80.   int key_ret;

  81.   key_ret = digitalRead(POWER_BUTTON);

  82.   if(key_ret == HIGH){
  83.     key_lock = 0;
  84.   }

  85.   else if(key_ret == LOW && key_lock == 0){
  86.     delay(20);
  87.     key_ret = digitalRead(POWER_BUTTON);
  88.     if(key_ret == LOW){
  89.         flag_pw = !flag_pw;
  90.         key_lock = 1;
  91.     }
  92.   }
  93.   
  94.   sendSerialCmd(flag_pw);

  95.   
  96.   delay(830);
  97. }
複製代碼


僅用幾分鐘寫出來的程式,請不要要求太多,反正能用,作個 demo 功能就好了。
親測可用。記得不要將原本的 DATA 線短路到,要先拉開,不然又要買新基板了。原配的 MCU 超不耐用。


簡單寫到這邊。如有需要更換 MCU 的話,以上這些資料,配合舊基板線路即已足夠。看是要 8051,AVR 還是 PIC 隨自己的爽度來決定。


不過我還是希望不要再讓我碰到這台了。

上述的 protocol 若有誤請指正。



sorry 感覺有點噁,去廁所準備一下……


本主題中包含更多資源 (圖片、附件...)

你需要 登入 才可以下載或檢視,沒有帳號?立即註冊

x

評分

21

檢視全部評分

發表於 2018-6-3 17:39:41 | 顯示全部樓層
本文章最後由 sandy319 於 2018-6-3 05:41 PM 編輯

gsm7大 你說感覺有點噁,
是不是覺得自己太厲害了~

 樓主| 發表於 2018-6-3 20:15:02 | 顯示全部樓層
sandy319 發表於 2018-6-3 05:39 PM
gsm7大 你說感覺有點噁,
是不是覺得自己太厲害了~

殘念猜錯了。

因為這台現待在我家客廳裡還沒送回去,碩大的扇片如同盛開的大王花,一聞到它那散發出來的味道嘛……

做決策的人員,真是個人才呢!
發表於 2018-6-3 23:19:06 | 顯示全部樓層
真是開了眼界了!!
超強維修  幾乎是開發人員~~
後來有查出這台為什麼那麼容易把基板搞怪嗎?
DC扇越來越多  單價也不斐  結果馬達不容易壞  都壞電路設計
發表於 2018-6-3 23:25:23 來自手機 | 顯示全部樓層
還真是修不夠工錢!
發表於 2018-6-3 23:33:59 | 顯示全部樓層
本文章最後由 jason680 於 2018-6-4 12:25 AM 編輯

文章不錯,...

好像少了什麼....整體感
可惜之處 沒看到DC電扇本體...
發表於 2018-6-3 23:34:15 | 顯示全部樓層
本文章最後由 jason680 於 2018-6-4 12:26 AM 編輯

重覆了---請刪除
發表於 2018-6-4 00:23:11 | 顯示全部樓層
本文章最後由 jason680 於 2018-6-4 12:25 AM 編輯

重覆了---請刪除
 樓主| 發表於 2018-6-4 18:04:04 | 顯示全部樓層
應觀眾要求,加碼上圖




……嗯?不是它嗎?味道聞起來很像的說。

我再往角落邊找找去……




?!

快點拿進來,免得被路過的阿婆以為是回收物拿去秤重換銅板去了。




同場加碼。下面這塊基板的一些零件已經被我解下。下面的兩顆大電阻因為電源短路產生高溫,基板已變色。

本主題中包含更多資源 (圖片、附件...)

你需要 登入 才可以下載或檢視,沒有帳號?立即註冊

x
 樓主| 發表於 2018-6-4 18:13:40 | 顯示全部樓層
kafsu1205 發表於 2018-6-3 11:19 PM
真是開了眼界了!!
超強維修  幾乎是開發人員~~
後來有查出這台為什麼那麼容易把基板搞怪嗎?

比如說 51 系列的 IC,這種真的是走在路上腳都能踢到,國內外都有廠商在作。

有在玩的人應該都知道,同樣功能,但論抗EM干擾,電源干擾,時間與環境的穩定性,這邊的東西真的就是差上一截,而且是很大很大很大……有些嚴重點的,人手摸一下就壞了。當然,價格也差很多了。

剩下的就自己去猜猜……
你需要登入後才可以回覆 登入 | 立即註冊

本版積分規則

關閉

站長小叮嚀上一筆 /1 下一筆

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

GMT+8, 2018-6-22 08:00 AM , Processed in 0.044231 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.3 Licensed

© 2001-2017 Comsenz Inc.