|
本帖最後由 antlu 於 2022-4-2 01:13 AM 編輯
鄰居送來一個 logo投影燈說不亮,我打開來一看就 兩片板子 電源板子包刮 LED 驅動OC5265 5V降壓XL2001E1 電源IC 絲印PL22, 控制板子 馬達驅動ULN2003 微控ES7P1731 藍芽模組 SYN531R .
因為比較性急不小心把 微處理器ES7P1731 給燒了!!
這次學了不少東西
電源故障 把相關的線路圖畫了出來 PL22 絲印 感謝 DUNCAN 大提供相近的資料,得以把線路畫了出來,最後因為找不到IC 還好發現電壓30V 可以使用 HP的電源來代替,把次級線圈處切開,直上 30V 給下一級 OC5265 LED 電路 和 XL2001E1 作5V給 微處理和步進馬達.
電源板
部分線路
5V
使用HP電源代替
LED 驅動IC 靠 DIM 接腳來啟動 LED點亮, 步進馬達使用 ULN2003 反向驅動,由微控驅動!!
LED 驅動部分
步進馬達驅動
正確驅動波形
藍芽模組SYN531R 接收遙控器的信號,他的格式和紅外線遙控器相同,使用 ARDUINO 的 庫程式 IRrecv.h 可以讀出他的資料.
藍芽板子
接收解碼
步進馬達 剛開始 卡住了,手動轉動後就順了!! 使用驅動信號時發現怪怪的,後來才發現 5線式 和6線式 驅動模式不同,還有 ULN2003 式反向經過程式修改終於IDLE 電流變小了!!
原來的微控ES7P1731被我燒壞了!! 只好使用 Arduino ProMini 板子來改,使用RS232/TTL 傳送程式這樣空間可以塞進去. 使用 Saleae 邏輯分析儀確認驅動波形 正反轉 以及程式動作.提供有興趣者參考 這次 Ticker.h 應該是TIMER 他解決了步進馬達執行時不會頓噸的.
微控器
代替品 ARDUINO PROMINI
下載器
邏輯分析儀
結果
** 感謝 LAZY104 大提供 電源 IC 資料.希望可以買得到.
- #include "Ticker.h"
- /*
- 步進馬達練習 正反轉 持續脈衝 A B C D independent
- 20220401
- */
- // Pin 2 3 4 5 for phase A B C D .
- // pin 7 led driver enable and PWM
- // BT receive pin 11
- #include <IRremote.h>
- #define SET_HI(pin) digitalWrite(pin, HIGH)
- #define SET_LO(pin) digitalWrite(pin, LOW)
- void CW_ticker();
- void printCounter();
- Ticker timer1(CW_ticker, 10); //1ms
- Ticker timer2(printCounter, 1000, 0, MILLIS);
- boolean motor_enable = false;
- boolean lamp_enable = false;
- boolean CW = true;
- long recvData;
- int phA = 2;
- int phB = 3;
- int phC = 4;
- int phD = 5;
- int led = 6;
- int RECV_PIN = 11;//not need setup it included in IRremote.h
- // the setup routine runs once when you press reset:
- int tickerCount = 0;
- int control_value = 0;
- IRrecv irrecv(RECV_PIN);
- decode_results results;
- void execu(void)
- {
- switch (control_value)
- {
- case 1:
- Serial.print("results.is on/off" );
- Serial.println(control_value);
- lamp_enable = !lamp_enable;
- motor_enable = !motor_enable;
- if (lamp_enable)
- {
- SET_HI(led);
- }
- else
- {
- SET_LO(led);
- }
- break;
- case 2:
- Serial.print("results.is CW ");
- Serial.println(control_value);
- CW = true;
- motor_enable = true;
- break;
- case 3:
- Serial.print("results.is CCW");
- Serial.println(control_value);
- CW = false;
- motor_enable = true;
- break;
- case 4:
- Serial.print("results.is STOP");
- Serial.println(control_value);
- motor_enable = false;
- break;
- }
- }
- void CW_ticker(void)
- {
- if (motor_enable == true)
- {
- if (CW == true) //for 41step motor
- {
- tickerCount++;
- if (tickerCount == 1)
- {
- SET_HI(phA);
- SET_LO(phB);
- SET_LO(phC);
- SET_LO(phD);
- }
- if (tickerCount == 2)
- {
- SET_LO(phA);
- SET_HI(phB);
- SET_LO(phC);
- SET_LO(phD);
- }
- if (tickerCount == 3)
- {
- SET_LO(phA);
- SET_LO(phB);
- SET_HI(phC);
- SET_LO(phD);
- }
- if (tickerCount == 4)
- {
- SET_LO(phA);
- SET_LO(phB);
- SET_LO(phC);
- SET_HI(phD);
- tickerCount = 0;
- }
- }
- if (CW == false)
- {
- tickerCount++;
- if (tickerCount == 1)
- {
- SET_LO(phA);
- SET_LO(phB);
- SET_LO(phC);
- SET_HI(phD);
- }
- if (tickerCount == 2)
- {
- SET_LO(phA);
- SET_LO(phB);
- SET_HI(phC);
- SET_LO(phD);
- }
- if (tickerCount == 3)
- {
- SET_LO(phA);
- SET_HI(phB);
- SET_LO(phC);
- SET_LO(phD);
- }
- if (tickerCount == 4)
- {
- SET_HI(phA);
- SET_LO(phB);
- SET_LO(phC);
- SET_LO(phD);
- tickerCount = 0;
- }
- }
- }
- if (motor_enable == false)
- {
- SET_LO(phA);
- SET_LO(phB);
- SET_LO(phC);
- SET_LO(phD);
- }
- }
- void printCounter() {
- // Serial.print("Counter ");
- // Serial.println(timer2.counter());
- }
- void setup() {
- // initialize the digital pin as an output.
- Serial.begin(9600);
- Serial.print("filename logomotor41" );
- pinMode(phA, OUTPUT);
- pinMode(phB, OUTPUT);
- pinMode(phC, OUTPUT);
- pinMode(phD, OUTPUT);
- pinMode(led, OUTPUT);
- SET_LO(phA);
- SET_LO(phB);
- SET_LO(phC);
- SET_LO(phD);
- irrecv.enableIRIn();
- timer1.start();
- timer2.start();
- }
- // the loop routine runs over and over again forever:
- void loop() {
- timer1.update();
- timer2.update();
- if (irrecv.decode(& results))
- {
- if (recvData == results.value) //-----0331
- {
- Serial.print("recvdata line 158 ");
- if (results.value == 0xCA563D74)
- {
- control_value = 1;//on
- }
- if (results.value == 0x97248A46)
- {
- control_value = 2;//cw
- }
- if (results.value == 0xB26FB4D)
- {
- control_value = 3;//ccw
- }
- if (results.value == 0x984C8A9B)
- {
- control_value = 4;//speed
- }
- execu();
- }
- recvData = results.value;//---------331---
- delay (10);//---------331---
- irrecv.resume();
- }
- /*
- if (irrecv.decode(&results)) {
- Serial.println(results.value, HEX);
- irrecv.resume();
- */
- }
複製代碼
|
評分
-
9
查看全部評分
-
|