2024年5月12日 星期日

Making a Chromecast receiver

買一個 ChromeCast,很便宜,但使用起來讓人超不爽的。在 3代之後,廣告超多,這也就算了,遙控器按一按就好。讓人抓狂的是手機連不上,按了連接後,電視沒反應。更扯的是,電視一直播廣告,手機的影片時間也在跑,它把廣告當成我要看的影片唬弄我。

不只是我討厭,很多人都不爽吧,因此有人想要自己搞 ChromeCast,只是 Google 不一定准,會卡掉。

Making a Chromecast receiver,不太知道這個的用法,它是根據 "an Android app called AirReceiverLite which can act as a Chromecast receiver"。

從Linux安裝Chromecast,用 Linux 連 ChromeCast。

interfect/castanet.sh,問題是要怎麼找到 reset 後的 CHROMECAST_IP?

https://www.expressvpn.com/blog/chromecast-factory-reset/

Cannot SET UP Chromecast on Linux

How to set up a Chromecast without logging in to Google Home?

在 Linux 上使用的方式,Linux 使用 VLC 投放媒體至 Chromecast

1. 可能的作法

A simple solution (2019-Mar-15) I used successfully is to:

  1. Download an older portable version of Chrome (not sure about direct links posting rules here, a search for "portable chrome 71 stable" should get you there
  2. Extract and run this portable version
  3. Navigate to chrome://cast
  4. Setup should work

2. 需要專業技巧的作法 

Chromecast gen 3

I followed this post: https://superuser.com/a/1692253

tldr:wget https://gist.githubusercontent.com/interfect/5f68381d55658d334e2bc4619d796476/raw/1d16ead908a92742d5f22231a2611242d673654f/castanet.sh

chmod +x castanet.sh

CHROMECAST_IP=192.168.0.100 WIFI_SSID="foobar" WIFI_PASSWORD="hackme" ./castanet.sh

make sure you have jq and nodejs installed or the script doesn't work.

NOTE: to get the initial chromecast IP you have to connect to it's wifi hotspot (ChromeCastXXXX) and then use wireshark on your laptop/desktop's wifi interface to see it. Filter for arp requests. There will only be 2 IPs; your wifi interface and the Chromecast. Use the IP for the Chromecast in the spot above.

參考 瞭解詳情:找不到裝置,相關敘述 "連上與 Chromecast、內建 Chromecast 的電視/揚聲器、Google Home 或具備助理裝置的電視/揚聲器相同的 Wi-Fi 網路。尋找與 GoogleHomeXXXX 或 ChromecastXXXX 類似的名稱。"


2024年5月7日 星期二

珍妮 3D 打印機主控板 20160428Ver1.35B

從網友那裡接收一台淘寶的珍妮類 UltiMaker 2 印表機,使用珍妮自己的主控板。在網路上完全找不到該主控板的相關資料,但因為它使用 32位元的 MCU,所以就留著一直想要怎麼才能把它拿來使用。

後來找到可在 STM32 上跑的 Forth,再透過 Forth 兼具 compile 和 interactive 的特性,慢慢整理各控制腳的資料。

上圖是主控板的正面。

上圖是主控板的背面。標示公司網站 www.jennyprinter.com,但無法連上該網站。板子的相關資訊 JPBoard,20160428Ver1.35B,NO.160801060B。搜尋這些關鍵字都沒有結果。


使用的 MCU 是 STM32F407VET6。MKS Monster8 也是使用這一顆 MCU,但 Monster8 可接 8個步進馬達。從版本編號來看,是 2016 年出的板子,當初買這板子應該也蠻貴的吧,因此一直捨不得丟,想著要怎樣才能使用它。

從電路板的外觀來看,這板子是參考 RAMPS 1.4 設計的,那兩顆自恢復保險絲 (PPTC) 是 RAMPS 1.4 才有的,而且後來版本的 RAMPS 的接線座也改了。

後來找到可在 STM32 上執行的 Forth,板子上也有 ISP 腳位,可以燒寫 Firmware。就透過 Forth 慢慢收集各個控制的對應的 MCU PIN 腳。

把控制腳,如步進驅動的 DIR,接上 LED 和 電阻,再用 Forth 程式對所有的 PIN 輪流送出幾個方波,看到那一個腳 LED 會閃。刪開始,測試一個控制腳要花比較長的時間,後面可以把已知的腳去除,就快多了。就這樣,大致把所有腳位都確認了。

連接 12864 LCD 

不太熟悉這個規格,參考 Anycubic kossel Delta 的 Klipper 設定檔。其型式為  -- "RepRapDiscount 2004 Smart Controller" type displays,lcd_type: hd44780。

下圖 fysetc 的 EXP1/EXP2 的圖示。

若只要用 LCD,使用到的腳為 reset,enable, d4, d5, d6, d7,encoder1, encoder2, click,5V,GND。SD 卡的控制信號就不要管了。

關於 kill 信號,fysetc 的說明「為了兼容某些主板,如 RAMPS1.4,FYSETC mini12864 設置了 RST(R3) 和 KILL(R4) 的可選擇電阻。目前,有些主板(S6/Spider)将 KILL 换成 5V,此時,請確認 mini12864 上 R4 處於空贴狀態,否则按下屏幕上的按钮會致使 5V 与 GND 短路,長时間操作會導致主板損壞。」MKS 的板子則是將 KILL 信號接到 3.3V。

所以,kill 不要接,也不要用,設定裡也不要設定。

改靜音驅動 TMC2209

為了相容於以前的 A4988 和 RAMPS,各家的電路略微的不同,但最後大致改得差不多。

TMC2209 採用單線的 UART。若要變成兩條線,此信號為 RX,串一個電阻後,當成 TX。早期的 TMC2209 遵循此作法,如 MKS,pin-4 為 pdn_uart,即 RX,串一個1K電阻連到 pin-5,當作 tx。但有的主板 rx 和 tx 的腳位反過來,因此不同家的驅動插到別家的主板,會不能用。

但後來各家的驅動都直接把 pin-4 和 pin-5 短路,不管插那一家的主板都可以用。只是在舊的主板上使用,要注意有的直接設定 A4988 為 16微步,亦即將 MS1~MS3 全部接到 VCC。必須將 MS3 的腳拔起來不要接,不然可能燒掉驅動。

另外,RAMPS 控制板的 pin-5 和 pin-6 是短路的。所以,pin-4, pin-5, pin-6 實質上是短路的。

至於這塊珍妮的主板,只要 MS1~MS3 的跳線不要接就好。

關於 Klipper 安裝設定

編譯 Klipper firmware 的注意事項,因電路設計問題,在 reset 之後,熱床和列印頭可能直接加熱,直到開機完成,才會關閉。

設定如上,因為板子上的 USB 插座是 UART1,沒辦法透過 USB 燒寫 firmware,所以不用 bootloader。communication interface 就選 UART1。

另外,"GPIO pins to set at micro-controller startup" 項目要加入 "!PA3, !PB6, !PB9, !PB8, !PC7, !PC6, !PB13",前面加 '!' 表示要將輸出設為 Low。這個設定是將 P12 接頭的輸出全部關掉,包括加熱器和風扇。

PCB 上驅動熱床的 MOSFET,明顯比較大顆,IRF1010ES,Vds: 60V,170W,Gate Threshold Voltage 2V~4V。但不知是那邊的問題,在開機沒輸出時,G的電壓為 5V左右,MOSFET 會完全導通,熱床電壓為 24V。但在 klipper 啟動熱床時,G的電壓為 3.3V左右,MOSFET 不會完全導通,接 LED燈條,電壓約 15V,FET 的 DS 壓降為 8V左右。接熱床則量不到電壓。HE0, HE1 的輸出則能正常運作。只能用 HE1 輸出,外接 MOSFET 來驅動熱床。HE0, HE1 的 MOSFET - IRLR7843,Vds: 30V, 140W,Gate Threshold Voltage 1.5V~2.3V

參考 IRF1010E N-Channel MOSFET: Datasheet, Pinout, Equivalent,有一些使用上的說明。





2024年4月25日 星期四

Klipper 的 TMC 驅動設定

很辛苦的把舊的 3D 印表機改成 TMC2209 的靜音驅動,發現 microstep 仍然只能設到 16,噪音無法減少多少,有點失望。

不想換主板,因為這台機器會不會繼續用都不確定,因為已有太多機器了。只好細讀相關資料,看能有多大的改善。

MCU 是 ATmega2560,調到 64 microstep,一執行 home 功能,就出現像上面的錯誤。

TMC2209 靜音驅動的考量

參考 TMC drivers

  • StealthChop:是一种使用 PWM 电压而不是电流来驱动电机的技术。结果在低速时几乎听不见。StealthChop 具有较低的步进速度限制,如果您需要更快地移动,您可能需要使用 spreadCycle 或配置混合模式。
  • SpreadCycle:是另一种步进模式。驱动器将使用四个阶段将所需的电流驱动到步进电机中。SpreadCycle 提供更大的扭矩。缺点是噪音水平略高。

兩種模式不要混用。低速時用 StealthChop,安靜。高速時用 SpreadCycle,較有力,較吵。

8 位元 CPU,如 Atmega2560,microstep 只能設到 16。使用 TMC 驅動的好處,是能透過 interpolation 降低噪音。但是 Klipper 的指引建議關閉 interpolation,使用 spreadCycle 或 stealthChop,其中 spreadCycle 為優先。截錄說明如下


The TMC driver interpolate setting may reduce the audible noise of printer movement at the cost of introducing a small systemic positional error. This systemic positional error results from the driver's delay in executing "steps" that Klipper sends it. During constant velocity moves, this delay results in a positional error of nearly half a configured microstep (more precisely, the error is half a microstep distance minus a 512th of a full step distance). For example, on an axis with a 40mm rotation_distance, 200 steps_per_rotation, and 16 microsteps, the systemic error introduced during constant velocity moves is ~0.006mm.

For best positional accuracy consider using spreadCycle mode and disable interpolation (set interpolate: False in the TMC driver config). When configured this way, one may increase the microstep setting to reduce audible noise during stepper movement. Typically, a microstep setting of 64 or 128 will have similar audible noise as interpolation, and do so without introducing a systemic positional error.

If using stealthChop mode then the positional inaccuracy from interpolation is small relative to the positional inaccuracy introduced from stealthChop mode. Therefore tuning interpolation is not considered useful when in stealthChop mode, and one can leave interpolation in its default state.




2024年4月23日 星期二

Anycubic Kossel 整理及安裝 Klipper

參考 Anycubic Kossel Klipper guide

設定檔,klipper/config /printer-anycubic-kossel-plus-2017.cfg

機器簡要資料

此機器一般稱為 Anycubic Kossel Linear Plus 3D printer。控制板為 YJYGR 的 TriGorilla,為 Mega2560 & RAMPS1.4 相容板。電源輸入為 12-24V,有些說可以到 35V。有不同的版本,如下圖的標誌中沒有版本註記,為 Trigorilla 1.0。


這一台機器,中文資料不多,倒是英文資料慢慢挖可以找到不少。

先放上來參考。

改靜音驅動

沒找到詳細的資料,只有查到 Amazon 的商品簡介,有一個是配 FYSETC 的 TMC2209 (V2.0) 驅動,PIN 不太一樣。要支援 TMC2209 靜音驅動,必須自己修改,有點囉唆,看看是否改用 MKS Gen l v2.1,不用煩惱。

要接 TMC2209,使用 UART mode,可參考 UART This! Serial Control of Stepper Motors With the TMC2208, Ramps 1.4 and Marlin

MKS 和 FYSETC 的 TMC2209,PIN4-RX,PIN5-TX。TMC2209 只有一個 PIN,即 PIN14 為 PDN/UART,用 20K 的電阻 pull down,接到插槽的 PIN4-RX。插槽的 PIN4 和 PIN5 之間可能是短路,或經 1K 電阻接在一起。假如 PIN5 是要連到一般 UART 的 TX,就必須用 1K 電阻,不能直接短路。如上述文章使用 Marlin,serial_tx_pin 和 serial_rx_pin 都用到。至於 Klipper 只需定義一個 uart_pin,就直接短路吧。

參考 FYSETC 的 Spider 2.3 的說明,它連到 PIN5-TX,所以 PIN4 和 PIN5 短路的話,就可以正常運作。


比對 A4988 的 PIN,PIN4-RESET,PIN5-MS3。假如沒跳線的話,那就要把 PIN4 和 PIN5 都斷開。

因為電路板已固定為使用 16 microstep,亦即 MS1, MS2, M3 都接高電位。RESET 那一腳則未直接接地或高電位。我使用的是 TMC2226,和 TMC2209 相容,可把它們當成一樣。確定驅動板的 PIN4-PIN5短路。

對板子做了一些改造。只會使用 UART mode,確定 MS1 和 MS2 永遠不會用到,直接把 PIN 拔掉。有很多網路的作法是把 PIN4, PIN5 往上推到正面,但正面有很大的散熱片,感覺很不可靠。我是把 PIN4 彎90度,剪短,焊引線。PIN5則不處理。以後用在其他支援靜音驅動的板子上,大部份都把 UART 接到 PIN5,只要把引線解焊,PIN 做一下絕緣即可。

另外,在廠家提供的控制板的電路圖或說明書,有些會把 PIN5 標成 CS。

在 TriGorilla 的板子上,有一排 5組 PIN 的預留焊點,標示 servo,可能是有其他用途。把驅動的 UART 信號連到這 5組 PIN 的控制信號即可。上圖只改了 X, Y, Z 軸的驅動。

TriGorilla 的板子有不同的版本,那 5組 PIN 對應的信號有些不同。像我使用的板子只有 TriGorilla 的標誌,沒有版本標示,那就是 1.0 版了。

建立及燒錄 Firmware

$ cd klipper
$ make menuconfig

[*] Enable extra low-level configuration options
    Micro-controller Architecture (Atmega AVR)
    Processor model (atmega2560)

$ make
..........
  Building out/compile_time_request.o
Version: v0.12.0-171-g2f6e94c9
  Linking out/klipper.elf
  Creating hex file out/klipper.elf.hex

$ ls /dev/serial/by-id/*
/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0

$ make flash FLASH_DEVICE=/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0

重新啟動系統。

Atmega2560 的 PIN 對照


2024年4月15日 星期一

ADXL345谐振测量 - 各種派

參考網址

此文件是依購買套件所提供的文件整理的,方便自己參考。

这是什么?

一种可用于减少打印中震纹(也称为重影或波纹)的技术。震纹是一种表面打印缺陷。


震纹是由打印机中的机械振动引起的,原因是打印方向的快速变化。请注意,震纹通常有机械原因:打印机框架刚性不足、皮带不紧或弹性太大、机械部件对齐问题、移动质量大等。如果可能,应首先检查和修复这些问题。

谐振补偿是一种开环控制技术,它创建一个命令信号来取消其自身的振动。谐振补偿需要一些调整和测量才能启用。除了震纹之外,谐振补偿通常会减少打印机的振动和晃动,并且还可以提高 Trinamic 步进驱动器的 StealthChop 模式的可靠性。

以下将提供 ADXL345 模块进行谐振测量的教程

第一步,材料准备

ADXL345 加速度传感器一块

必须采购如上图所示的模块,其他模块可能无法识别。

第二步,安装及接线

这是官方的接线图,不过研究下来其实 3.3V 和 GND 可以直接图中箭头指的这两个,这样就可以直接压一个 4×2 的插头一次性解决了。板子上應有 5V-3.3V 的降壓 IC,可以用 5V 的電源。

Orange PI Zero 3 的 IO 接線。

ADXL 345 SPI PIN 對應

  • MISO - DO  - SDO
  • MOSI - DI  - SDA
  • SCK  - SCK - SCL
  • CS   - CS

安装位置可以参考這個


安装有幾個要注意的点:

1)具体安装位置其实没有太大講究,毕竟这个模块作用只是测试,测试好后可以拆掉,但是一定要尽量靠近喷嘴。

2)ADXL345 板子上有 XYZ 的方向指向,但是按照资料好像说方向不一定非要和打印机的方向一致,但是每个轴必须平行,譬如 ADXL345 板子上的 Z 轴可以对着打印机的 X 轴,但是 Z 轴和 X 轴平行。(轴方向不需要一致这一点其实不是非常确认,如果有不同意见的可以反馈)

第三步,配置树莓派

硬件接好之后就可以试着软件的安装了。

因为Klipper需要通过树莓派的SPI针脚读取加速度传感器的数据,所以需要先将树莓派变成klipper的一块mcu板子,这样klipper才能读取到加速度传感器的数据。这一步在klipper官方的教程中是没有的,所以很多人这一步会忽略。

下面的命令都是在树莓派系统中执行,使用 putty 软件登录树莓派按步骤执行以下命令

需先安装系统依赖库

sudo apt install python3-numpy python3-matplotlib libatlas-base-dev libopenblas-dev

首先安装 Python 的科学计算库,用作分析计算共振数据(实际执行的pip路径需要根据你klipper的venv环境的实际安装的路径来定,绝大部分情况是home目录下的klippy-env中)

~/klippy-env/bin/pip install -v "numpy<1.26"

上面的指令會安裝失敗,只好改成下面的指令,可以成功安裝 numpy-1.26.0。

~/klippy-env/bin/pip install -v "numpy<=1.26"

将树莓派变成 klipper 的一块 mcu,复制官方提供的系统启动脚本,并设置成系统自动启动

cd ~/klipper/
sudo cp "./scripts/klipper-mcu-start.sh" /etc/init.d/klipper_mcu
sudo update-rc.d klipper_mcu defaults

systemd 的環境,執行下列指令安裝 service

sudo cp ~/klipper/scripts/klipper-mcu.service /etc/systemd/system/
sudo systemctl enable klipper-mcu.service

配置并编译树莓派的固件

cd ~/klipper/
make menuconfig

配置的控制器类型的时候,切记得要选择Linux process的



配置完成后按 Q 键保存退出,就可以编译固件了

按顺序运行以下命令

$ sudo service klipper stop
$ make flash
  Flashing
  Installing micro-controller code to /usr/local/bin/
    => 檔名為 /usr/local/bin/klipper_mcu
$ sudo service klipper start
$ sudo usermod -a -G tty pi  (pi 為安裝 klipper 的普通使用者,依自己選擇修改,如 mks)

或者執行 sudo sh ./scripts/flash-linux.sh,也可以安裝。

树莓派必須再執行 raspi-config 打开的SPI的接口。其他各家相容的 pi,依相關說明做設定。

如 Orange Pi Zero3,修改 /boot/orangepiEnv.txt,加上 spi1 的 overlay 設定。

 ...
rootfstype=ext4
overlays=spi1-cs1-spidev
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u

重開機後,就會出現 /dev/spidev1.1,因為 Orange Pi Zero3 的 IO 較少,只能用一個 spi port,假如使用 spi 連接 LCD,此時必須先將 LCD 取消掉。

Orange Pi Zero 3 無法啟動 klipper_mcu

無法啟動 klipper_mcu.service,沒有 /tmp/klipper_host_mcu 檔案,查看詳細的 systemctl log 如下。

 $ journalctl -u klipper-mcu | more
Oct 08 23:32:09 orangepizero3 systemd[1]: Started klipper-mcu.service - Starts the MCU Linux firmware for klipper on startup.
Oct 08 23:32:09 orangepizero3 klipper_mcu[615]: Got error -1 in sched_setscheduler: (1)Operation not permitted
Oct 08 23:32:09 orangepizero3 systemd[1]: klipper-mcu.service: Main process exited, code=exited, status=255/EXCEPTION
Oct 08 23:32:09 orangepizero3 systemd[1]: klipper-mcu.service: Failed with result 'exit-code'.
Oct 08 23:32:15 orangepizero3 systemd[1]: klipper-mcu.service: Scheduled restart job, restart counter is at 1.
Oct 08 23:32:15 orangepizero3 systemd[1]: Stopped klipper-mcu.service - Starts the MCU Linux firmware for klipper on startup.
Oct 08 23:32:15 orangepizero3 systemd[1]: Started klipper-mcu.service - Starts the MCU Linux firmware for klipper on startup.
Oct 08 23:32:15 orangepizero3 klipper_mcu[1249]: Got error -1 in sched_setscheduler: (1)Operation not permitted

參考下列說明,Klipper 討論 Orange pi zero 3 with ADXL,以及  Armbian kernel & Klipper host mcu: “Got error -1 in sched_setschedule”

執行下列指令。
$ sudo sysctl -w kernel.sched_rt_runtime_us=-1
$ echo "kernel.sched_rt_runtime_us = -1" | sudo tee /etc/sysctl.d/10-disable-rt-group-limit.conf

再重新啟動,即可成功啟動。

第四步,配置Klipper

在网页操作界面中打开Klipper的配置文件printe.cfg,在合适的地方加入下面的配置代码

[mcu rpi]
serial: /tmp/klipper_host_mcu

[adxl345]
cs_pin: rpi:None

[resonance_tester]
accel_chip: adxl345

probe_points:
    150,150,20  # 这个地方建议配置成热床的中间(此150参数配置为300热床)

MKS-Pi 的設定

[mcu rpi]
serial: /tmp/klipper_host_mcu

[adxl345]
cs_pin: rpi:None
spi_bus: spidev0.2

Fly-Pi 的設定

[mcu host]
serial: /tmp/klipper_host_mcu

[adxl345]
cs_pin: host:None
spi_bus: spidev1.1

配置完成后重启一下Klipper

在控制台中输入以下命令


ACCELEROMETER_QUERY 这个命令是查询加速器的参数,如果前面的软硬件安装正常的话,就会收到返回的加数据传感器参数,类似于下面内容……如果返回其他则可能是接线问题或adxl345模块问题

.....Recv: // adxl345 values (x, y, z): 470.719200, 941.438400, 9728.196800...

第五步,测试加速度

开始测试前,先把打印机的加速度配置调大(这个测试完之后可以还原回去)码

[printer]
max_accel: 7000
# max_accel_to_decel: 7000 # 停用
# minimum_cruise_ratio: 0.5  # 改用這個, default 0.5

如果你之前有配置过input_shaper的功能,需要先关掉之前配置好的参数

SET_INPUT_SHAPER SHAPER_FREQ_X=0 SHAPER_FREQ_Y=0

然后就开始可以测试共振了,比较省事的就是直接用自动测试配置命令

SHAPER_CALIBRATE

测试的时候,刀头会从 0MHz~120MHz 震动,逐渐测试 x轴和 y轴数据,期间声音会逐渐增大,如果机子组装过程没有太大问题的话,机子不应该会有太剧烈反应(如果有太剧烈的反应建议检查组装过程)

或手動分開執行。若不指定 AMPLITUDE,Klipper 通常會使用預設值(通常為 5 毫米或 10 毫米,取決於您的 Klipper 版本或配置)

TEST_RESONANCES AXIS=X 
TEST_RESONANCES AXIS=Y 
# M112 太劇烈的話,緊急停止

測試頻率,在 5Hz ~ 133Hz 之間。

測試後,會產生 /tmp/resonances_x_*.csv and /tmp/resonances_y_*.csv。用下列指令產生圖檔。

~/klipper/scripts/calibrate_shaper.py /tmp/resonances_x_*.csv -o /tmp/shaper_calibrate_x.png
~/klipper/scripts/calibrate_shaper.py /tmp/resonances_y_*.csv -o /tmp/shaper_calibrate_y.png

完成测试后会进行一下计算,然后会显示出x轴和y轴推荐的配置方法和配置值,你可以根据这个配置方法和值手工配置 input_shaper 参数,类似这种

[input_shaper]
shaper_type_x = 3hump_ei
shaper_freq_x = 52.4
shaper_type_y = 2hump_ei
shaper_freq_y = 37.5

不过也能直接使用

SAVE_CONFIG

命令直接保存进配置文件

保存完毕后需要回到 printe.cfg 配置文件中,拉倒最底部可以找到被注释的内容,如下

#*# [input_shaper]
#*# shaper_type_x = mzv
#*# shaper_freq_x = 58.4
#*# shaper_type_y = mzv
#*# shaper_freq_y = 44.2

整个复制,替换原来的参数,并取消注释,最后保存并重启即可



2024年3月20日 星期三

製作一個簡單的鋰電池轉 1.5V 的轉換器

參考電路

參考 YouTube 影片 How to Make Lifetime Battery for any Clock | 3.7v to 1.5v converter at home。在網路上,可以找到一堆類似的作法,電路都是一樣。

擷了兩幅主要的圖如下,第一圖是實體圖,第二圖是示意圖。



把電路整理計算一下,各點電壓大致如下。


參考 時鐘7天換1顆電池,耗電算正常嗎?,一顆3號碳鋅電池的電量約 662.5mAh,假如我家的時鐘使用約 3個月就沒電,反推機芯的耗電量為 662.5/(24*90) = 0.307 (mA)。

假設電晶體的電流放大率為 10,則 B極的電流為 0.03mA。1.85/0.03 = 61.7 (kΩ)。將 10k電阻換成 47k 的電阻,可以更省電。電晶體承受的功率為 (3.7-1.25)*0.03 = 0.07mW,嗯,不用管電晶體的散熱吧。

使用二極體穩壓

因為用電阻分壓,沒有穩壓功能,想弄一個穩壓的來用。

用 3顆二極體當電壓參考,減掉電晶體 BE壓降,輸出電壓應該是約 2顆二極體的壓降,1.3V 左右吧。


但實際使用後,每天會快十幾分鐘。後來實際量電壓,電壓太高,約 1.8V。因為二極體的壓降比電晶體 BE電壓高很多。

使用 IC 降壓

使用 AMS1117-1.5V 電源模塊,加過放保護。


經試用結果,使用 2天就沒電了。

使用電表實際量一下電流,看看是怎樣。18650 電池輸出的電流,4.25mA 左右。


時鐘實際使用的電流,只有 0.18mA,效率實在欠佳。


原來,IC 的工作電流,把電池的電用光了。



2024年3月6日 星期三

Fly-3d pi 使用

3D 印表機要裝 Klipper,必須要多一個上位機,這個可以用各種不同相容的 pi 系統。先前買套件附的是 MKS PI,這次想找不同的更便宜的方案,試試看 Mellow-3D 出的 Fly pi。

先說一下使用後的想法,針對其包好的程序,說明詳細,提共各個板子的 Klipper 設定。但是,若想進一步了解板子的技術規格,幾乎找不到,甚至連板子外形和螺絲孔位的尺寸資料都沒有,對於想自己動手改的人來說,非常不便。

相對的來說,MKS 的文件算是比較有條理和完備,價格也不算太貴。另外,蜘蛛的板子價格較貴,但文件是一團混亂。

LCD 規格

文件很糟糕,相關的使用說明要到處收集,才能有一個全體的認識。在淘寶的購物網頁有比較詳細的說明。

解析度 480x320。

電容屏,板子上多一個晶片,選擇開關切換到 Cap,使用 16P 的 FPC 排線,只能接 V2 接口,而且要搭配 G2T 擴展板。螢幕使用 SPI 界面,觸控使用 I2C 界面。

電阻屏,選擇開關切換到 Resi,3 個接口都可以使用。使用 V1 接口,用 14P 的 FPC 排線。使用 V2 接口,要搭配 G2T 擴展板,用 16P 的 FPC 排線。板子上鈄線框框就是少掉的晶片。

FPC 排線,間距 0.5mm,長度 400mm。

從 fly 的 git 找到的接腳定義。

配套的 LCD 螢幕,LCD 的驅動是 ILI9488。觸控使用 XPT2046 ,是 TI 的 ADS7843 的相容 IC,可用 ADS7843 的驅動程式,但 mellow 使用 ads7846 的驅動。

驅動的設定可參考 FLY-TFT/rpi-overlays /fly-tft-v2.dts

反編譯 overlay 的 dtb,整理連接的 IO,

--------------
Fly PI 40 pin <-->  LCD 11 pin
Pin 23 - PH6  <-->  SPI1 SCK       & T_CLK
Pin 21 - PH8  <-->  SPI1 SDO<MISO> & T_DO
Pin 19 - PH7  <-->  SPI1 SDI<MOSI> & T_DIN
Pin 11 - PG7  <-->  DC
Pin 12 - PG6  <-->  RESET
Pin 8  - PA0  <-->  LED
Pin 13 - PA13 <-->  SPI1 CS    
Pin __ - PA19 <-->  Pin 9  T_CS
Pin 16 - PA1  <-->  Pin 10 T_IRQ
Pin 1  - 3.3V
Pin 6  - GND
--------------

開機及連線

Mellow 官方帳號 fly (或 root) /mellow,沒有網路時,可以使用 terminal 連線。

# minicom -b 115200 -D /dev/ttyUSB0

經過測試,不論是 MKS PI 或 Fly pi,或者說是執行 Armbian 的 pi,我找到便宜又能直接用的 wifi USB 卡是 Comfast 的 CF-WU810N,系統抓到使用的 driver 是 rtl8xxxu。

因為環境特殊,要用手動設定 IP,指令如下

# sudo nmcli con add con-name "Samsung-A50-cc" \
   type wifi ifname wlan0 \
   ssid "Samsung-A50-cc"  -- \
   wifi-sec.key-mgmt wpa-psk \
   wifi-sec.psk "wifi-password" \
   ipv4.method manual \
   ipv4.address 10.161.86.143/20 \
   ipv4.dns 8.8.8.8,8.8.8.4 \
   ipv4.gateway 10.161.80.1 \
   connection.autoconnect yes

檢視 CPU 溫度

$ cat /sys/class/thermal/thermal_zone0/temp 
36490
$ cat /sys/class/thermal/thermal_zone1/temp 
38991

大約 40度,相對於 MKS PI 大約在 70度,溫度真的很低。


編譯 Armbian image 

參考

因為沒有 USB wifi 網卡的驅動,而這個網卡在 MKS pi 是可以用的。比較差異,發現 fly-3d 提供的 image 是版本比較舊的。因此,試試看自己編譯 armbian 的 image。

因為 armbian 中沒有 fly-3d 板子的設定,必須打上網友提供的 patch。

# 下載 patch 檔
$ git clone https://github.com/reemo3dp/mellowfly-geminipi-armbian

# Check out armbian's build repository
$ git clone https://github.com/armbian/build/ armbian
$ cd armbian/

# Apply patches from this repository
$ git am ../mellowfly-geminipi-armbian/patches/*.patch

# Compile ubuntu jammy with default kernel config
$ ./compile.sh BOARD=mellowflygeminipi BRANCH=current RELEASE=jammy BUILD_MINIMAL=no BUILD_DESKTOP=no KERNEL_CONFIGURE=no INSTALL_HEADERS=yes

接下來就可以依據官方的文件,使用 compile.sh 建立 image 了。

其中,linux-complete.git.tar 超過 2.5GB,要下載很久,可以到目錄 armbian/cache/git-bundles/kernel/linux-complete.git.tar.oras.pull.tmp,看看下載的進度。不過,在 docker 下編譯失敗後,改在磁碟空間比較小的 VM 上編譯,則只會下載較小的 share 版本。

選擇 standard,image 約 2.4GB,改選 minimal,image 約 1.4GB。但是使用 minimal 的 image,要編譯 wifi 的 module,還要補裝好多東西,試了之後,還是改回 standard 吧。

經過幾次的測試後,比較好的版本是 https://github.com/lwfinger/rtl8188gu,可以順利的編譯完成安裝。

下載的 image,只能用 Win32DiskImager 來寫入 SD 卡,用 balenaEtcher 則會在驗證時失敗。但是自己建的 image,就可以用 Win32DiskImager 來寫入 SD 卡了。

無線網卡的安裝

無線網卡,是比較麻煩的部分,要找到 Linux 有支援的才行,這算是一種冒險吧。

在淘寶可以找到在 Windows 下免裝驅動程式的 USB 網卡,但有很多在 Linux 下很難裝起來。先前有失敗的例子,買來在 MKS PI 無法驅動。這次就找 MKS PI 附的同型網卡,COMFAST 的 CF-WU816N,結果還是不行,但還好後來解決了。

試了幾個,https://github.com/lwfinger/rtl8188gu 是比較新的,不用修改東西就能成功編譯安裝。在編譯時,可能會出現 "No rule to make target 'arch/aarch64/Makefile'" 的錯誤,要加上 ARCH 的選項,即 "make ARCH=arm64"。

$ git clone https://github.com/lwfinger/rtl8188gu
$ cd rtl8188gu
$ make ARCH=arm64
$ sudo make install
$ sudo depmod -a
$ sudo modprobe 8188gu

usb 網卡默認為 u盤模式。要用 usb_modeswitch 切換其模式。執行一次後,就可以保持此結果。

$ lsusb
Bus 009 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 114: ID 0bda:1a2b Realtek Semiconductor Corp. RTL8188GU 802.11n WLAN Adapter (Driver CDROM Mode)

# apt install usb-modeswitch 
# usb_modeswitch -KW -v 0bda -p 1a2b
Take all parameters from the command line


 * usb_modeswitch: handle USB devices with multiple modes
 * Version 2.6.1 (C) Josua Dietze 2017
 * Based on libusb1/libusbx

 ! PLEASE REPORT NEW CONFIGURATIONS !

DefaultVendor=  0x0bda
DefaultProduct= 0x1a2b

StandardEject=1

Look for default devices ...
  found USB ID 1d6b:0001
  found USB ID 1d6b:0002
  found USB ID 1d6b:0001
  found USB ID 0bda:b711
   vendor ID matched
  found USB ID 1d6b:0002
  found USB ID 1d6b:0001
  found USB ID 1d6b:0002
  found USB ID 1d6b:0001
  found USB ID 1d6b:0002
  found USB ID 1d6b:0002
 No devices in default mode found. Nothing to do. Bye!

~# lsusb
Bus 009 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 054: ID 0bda:b711 Realtek Semiconductor Corp. RTL8188GU 802.11n WLAN Adapter (After Modeswitch)

安裝好了之後,還要重裝 firmware。

[  299.156391] usb 3-1: new high-speed USB device number 3 using ehci-platform
[  299.313341] usb 3-1: New USB device found, idVendor=0bda, idProduct=b711, bcdDevice= 2.00
[  299.313369] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  299.313381] usb 3-1: Product: 802.11n WLAN Adapter
[  299.313391] usb 3-1: Manufacturer: Realtek
[  299.313400] usb 3-1: SerialNumber: 00E04CB82101
[  299.361219] usb 3-1: RTL8710BU rev A (SMIC) romver 1, 1T1R, TX queues 3, WiFi=1, BT=0, GPS=0, HI PA=0
[  299.361255] usb 3-1: RTL8710BU MAC: e0:e1:a9:99:33:d9
[  299.361268] usb 3-1: rtl8xxxu: Loading firmware rtlwifi/rtl8710bufw_SMIC.bin
[  299.361359] usb 3-1: Direct firmware load for rtlwifi/rtl8710bufw_SMIC.bin failed with error -2
[  299.361377] usb 3-1: request_firmware(rtlwifi/rtl8710bufw_SMIC.bin) failed
[  299.361389] usb 3-1: Fatal - failed to load firmware
[  299.361433] rtl8xxxu: probe of 3-1:1.0 failed with error -11
[  299.361548] RTW: 
               usb_endpoint_descriptor(0):
[  299.361556] RTW: bLength=7

..........


$ sudo apt install --reinstall linux-firmware
Recommended packages:
  firmware-sof-signed
The following packages will be REMOVED:
  armbian-firmware
The following NEW packages will be installed:
  linux-firmware
0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
Need to get 266 MB of archives.

.......
[ 2055.140613] usb 3-1: USB disconnect, device number 4
[ 2055.419081] usb 3-1: new high-speed USB device number 5 using ehci-platform
[ 2055.575985] usb 3-1: New USB device found, idVendor=0bda, idProduct=b711, bcdDevice= 2.00
[ 2055.576015] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2055.576027] usb 3-1: Product: 802.11n WLAN Adapter
[ 2055.576036] usb 3-1: Manufacturer: Realtek
[ 2055.576045] usb 3-1: SerialNumber: 00E04CB82101
[ 2055.625487] usb 3-1: RTL8710BU rev A (SMIC) romver 1, 1T1R, TX queues 3, WiFi=1, BT=0, GPS=0, HI PA=0
[ 2055.625522] usb 3-1: RTL8710BU MAC: e0:e1:a9:99:33:d9
[ 2055.625535] usb 3-1: rtl8xxxu: Loading firmware rtlwifi/rtl8710bufw_SMIC.bin
[ 2055.625880] usb 3-1: Firmware revision 16.0 (signature 0x10b1)
[ 2057.333949] rtl8xxxu 3-1:1.0 wlxe0e1a99933d9: renamed from wlan0

對了,使用 minimal 的 image,也無法重裝 firmware,這是放棄的原因之一,反正 SD 卡的空間也很大。

要設定網卡,可安裝 network-manager,其將安裝 nmtui,即可使用 nmtui 來設定網卡,設定資料在重新開機後仍能保存。

安裝 Klipper

接下來只要參考 https://github.com/dw-0/kiauh 的說明,就可以很容易的安裝 Klipper。


網誌存檔