From a8e17cda3b78a69cf0162bb2139962f2f7c91657 Mon Sep 17 00:00:00 2001 From: Empire Phoenix Date: Fri, 29 Aug 2025 17:14:15 +0200 Subject: [PATCH] wip min --- board/Body1.3mf | Bin 0 -> 124421 bytes board/modules/MPPT/battery-charging.png | Bin 0 -> 2167 bytes board/modules/MPPT/battery-charging.svg | 6 + .../modules/Sensors_can/Sensors/sym-lib-table | 4 + .../ch32-sensor/.cargo/config.toml | 14 ++ .../modules/Sensors_can/ch32-sensor/.gdbinit | 7 + .../Sensors_can/ch32-sensor/.gitignore | 1 + .../Sensors_can/ch32-sensor/Cargo.toml | 43 ++++++ .../modules/Sensors_can/ch32-sensor/README.md | 72 ++++++++++ .../bin/build-wch-tools-container.sh | 10 ++ board/modules/Sensors_can/ch32-sensor/bin/gdb | 29 ++++ .../Sensors_can/ch32-sensor/bin/openocd | 44 ++++++ .../modules/Sensors_can/ch32-sensor/build.rs | 11 ++ .../modules/Sensors_can/ch32-sensor/memory.x | 125 ++++++++++++++++++ .../Sensors_can/ch32-sensor/openocd.cfg | 17 +++ .../ch32-sensor/rust-toolchain.toml | 2 + .../Sensors_can/ch32-sensor/src/main.rs | 61 +++++++++ .../ch32-sensor/wch-tools.Containerfile | 27 ++++ .../Sensors_simplified/Sensors/fp-lib-table | 4 + rust/src/config.rs | 4 +- rust/src/hal/mod.rs | 2 +- rust/src/hal/v3_hal.rs | 2 +- rust/src/hal/v4_hal.rs | 2 +- rust/src/hal/water.rs | 7 +- rust/src/main.rs | 34 ++++- rust/src/plant_state.rs | 29 +++- rust/src_webpack/src/api.ts | 1 + rust/src_webpack/src/plant.html | 5 + rust/src_webpack/src/plant.ts | 20 ++- 29 files changed, 568 insertions(+), 15 deletions(-) create mode 100644 board/Body1.3mf create mode 100644 board/modules/MPPT/battery-charging.png create mode 100644 board/modules/MPPT/battery-charging.svg create mode 100644 board/modules/Sensors_can/Sensors/sym-lib-table create mode 100644 board/modules/Sensors_can/ch32-sensor/.cargo/config.toml create mode 100644 board/modules/Sensors_can/ch32-sensor/.gdbinit create mode 100644 board/modules/Sensors_can/ch32-sensor/.gitignore create mode 100644 board/modules/Sensors_can/ch32-sensor/Cargo.toml create mode 100644 board/modules/Sensors_can/ch32-sensor/README.md create mode 100755 board/modules/Sensors_can/ch32-sensor/bin/build-wch-tools-container.sh create mode 100755 board/modules/Sensors_can/ch32-sensor/bin/gdb create mode 100755 board/modules/Sensors_can/ch32-sensor/bin/openocd create mode 100644 board/modules/Sensors_can/ch32-sensor/build.rs create mode 100644 board/modules/Sensors_can/ch32-sensor/memory.x create mode 100644 board/modules/Sensors_can/ch32-sensor/openocd.cfg create mode 100644 board/modules/Sensors_can/ch32-sensor/rust-toolchain.toml create mode 100644 board/modules/Sensors_can/ch32-sensor/src/main.rs create mode 100644 board/modules/Sensors_can/ch32-sensor/wch-tools.Containerfile create mode 100644 board/modules/Sensors_simplified/Sensors/fp-lib-table diff --git a/board/Body1.3mf b/board/Body1.3mf new file mode 100644 index 0000000000000000000000000000000000000000..ddc330b211be8ed7d44790b7f61e61871720d0d8 GIT binary patch literal 124421 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

djmX6}tOR`;0VHP70- zv9>7z*Y4Chn$8 zy?$V5_n|(u9RGXImTseo&6-rAk~H;eOm_#mYEz1jb3`CSe{PRw%`9oU)9hS5y}9o@ zY8t@sSxIL+g&xkv$MwLq>-&jcdLf+6nvbV9jE)9O{m+~jQ}7PIDu1hfY=>?NpJe{N zfej-$dEEz~<-6k6VfEH1t6AJpvxCr=SDnMk@rVA|8cxe}0%`2b=2PayjOp1bPRsIA za>k7A(&E~>ziOXZD6Gp0*V9ea@S9Els>Q16a3tYMLwDw{1EvBw^mOLDl72?tj|eib zA!-tJrq60-neXs_?m`-pMi^D)F~8kl<18)J)1jj6bPnIOFg6P5{IKjEz7^F4Qc$e& zlkU(*;Ptyj{tjt*lhfWH35+CZs#Qw)>EQ{NqMve)()iuX5$>wti6F-T$gGn}A!vsW zXU4!=lC@$U^>rZ1N&AKJNhQgYpZ$*8g#T|8{WC`L>C#~6&-XmnnwTX3<5bKD@^IRM z&R!UIG9Hxz4S6(A;1DIz2cjwg29ANf7R`BUOxr>_18pak9cKkc@efC@uMSC;FQHWD zBWtx6T2gB=p@%t3S!e7#GLqmQFY|MU@I+;!tFjR*`*whwhS>UYi}Hv@EWNOn2?3kz zbZ()Fb@fPUaro~uhZoBc$FeLef5OMDZ}%)skz)b4KVT%QL)VzdJWKF`t?x5V>P}8 zi~;+$`5ZXqa$vcg7Ab8Ijo+VKb()$OYu13u=gC{XL`y)4Hzu*!*ApF^0MEna@#)Kbh#CkRCm^%=4|TPsxiW9 z-)MOP)hQx^GN)R~l)n?d(Ygv&%P*y>p8ihh+xr&%Wejv(jfmECTR3r13A?lWK^-uq zV8tU+{l=RvZeAIq#kbF1O~i9AM^zl7l?Ck3)zOd@)4V~PVyjQqY}NTs<3Ir}UFS%P zVTioO+d>s>j3!NhD@A3LF>0>^(LkgBKkXn(^;a5A=6Ba~tMq75Y`85~hgL(5GA_f1 zhkf0EuV)mHmEJr5WiX<@adVjnXdN{+H�whF&{dbVhnZKkuJ~_7e_?F{)rrV6bwL4Z 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 literal 0 HcmV?d00001 diff --git a/board/modules/MPPT/battery-charging.svg b/board/modules/MPPT/battery-charging.svg new file mode 100644 index 0000000..4ae74d2 --- /dev/null +++ b/board/modules/MPPT/battery-charging.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/board/modules/Sensors_can/Sensors/sym-lib-table b/board/modules/Sensors_can/Sensors/sym-lib-table new file mode 100644 index 0000000..fb2abc0 --- /dev/null +++ b/board/modules/Sensors_can/Sensors/sym-lib-table @@ -0,0 +1,4 @@ +(sym_lib_table + (version 7) + (lib (name "Modules")(type "KiCad")(uri "/home/empire/workspace/PlantCtrl/board/modules/Modules.kicad_sym")(options "")(descr "")) +) diff --git a/board/modules/Sensors_can/ch32-sensor/.cargo/config.toml b/board/modules/Sensors_can/ch32-sensor/.cargo/config.toml new file mode 100644 index 0000000..c0b2201 --- /dev/null +++ b/board/modules/Sensors_can/ch32-sensor/.cargo/config.toml @@ -0,0 +1,14 @@ +[build] +target = "riscv32imc-unknown-none-elf" + +[target."riscv32imc-unknown-none-elf"] +rustflags = [ +# "-C", "link-arg=-Tlink.x", +] +# runner = "riscv64-unknown-elf-gdb -q -x openocd.gdb" +# runner = "riscv-none-embed-gdb -q -x openocd.gdb" +# runner = "gdb -q -x openocd.gdb" +# runner = "wlink -v flash" + +runner = "wlink -v flash --enable-sdi-print --watch-serial --erase" +# runner = "wlink -v flash" diff --git a/board/modules/Sensors_can/ch32-sensor/.gdbinit b/board/modules/Sensors_can/ch32-sensor/.gdbinit new file mode 100644 index 0000000..3263f19 --- /dev/null +++ b/board/modules/Sensors_can/ch32-sensor/.gdbinit @@ -0,0 +1,7 @@ +target extended-remote :3333 +set remotetimeout 2000 + +#symbol-file target/riscv32imc-unknown-none-elf/release/ch32v203-examples +file target/riscv32imc-unknown-none-elf/release/bms + +monitor reset halt diff --git a/board/modules/Sensors_can/ch32-sensor/.gitignore b/board/modules/Sensors_can/ch32-sensor/.gitignore new file mode 100644 index 0000000..eb5a316 --- /dev/null +++ b/board/modules/Sensors_can/ch32-sensor/.gitignore @@ -0,0 +1 @@ +target diff --git a/board/modules/Sensors_can/ch32-sensor/Cargo.toml b/board/modules/Sensors_can/ch32-sensor/Cargo.toml new file mode 100644 index 0000000..70dc449 --- /dev/null +++ b/board/modules/Sensors_can/ch32-sensor/Cargo.toml @@ -0,0 +1,43 @@ +[package] +name = "bms" +version = "0.1.0" +edition = "2021" + +[dependencies] +ch32-hal = { git = "https://github.com/ch32-rs/ch32-hal", features = [ + "ch32v203c8t6", + "memory-x", + "embassy", + "rt", + "time-driver-tim2", +], default-features = false } + +embassy-executor = { version = "0.7.0", features = [ + "arch-riscv32", + "executor-thread", +] } + +embassy-time = { version = "0.4.0" } +embassy-usb = { version = "0.3.0" } +embassy-futures = { version = "0.1.0" } + +# This is okay because we should automatically use whatever ch32-hal uses +qingke-rt = "*" +qingke = "*" + +panic-halt = "1.0" + +embedded-hal = "1.0.0" +heapless = "0.8.0" +micromath = { version = "2.1.0", features = ["num-traits"] } +embedded-can = "0.4.1" + +[profile.dev] +#lto = true +opt-level = 1 + +[profile.release] +strip = false # symbols are not flashed to the microcontroller, so don't strip them. +#lto = true +debug = true +opt-level = "z" # Optimize for size. diff --git a/board/modules/Sensors_can/ch32-sensor/README.md b/board/modules/Sensors_can/ch32-sensor/README.md new file mode 100644 index 0000000..5be4a9d --- /dev/null +++ b/board/modules/Sensors_can/ch32-sensor/README.md @@ -0,0 +1,72 @@ + +# ch32v203-bms + +A simple battery management controller software. + +## CAN bus and hardware address + +This firmware exposes a CAN interface on the CH32V203 and uses 4 hardware address pins to allow up to 16 sensors on the same bus. + +- CAN pins (default mapping): + - CAN RX: PA11 + - CAN TX: PA12 +- Address select pins (with internal pull-ups): + - A0: PA0 + - A1: PA1 + - A2: PA2 + - A3: PA3 + +Wire each address pin to GND to set its corresponding bit to 1. The 4-bit address range is 0..15. The node’s CAN Standard ID is `0x100 | addr`, i.e. 0x100..0x10F. The CAN acceptance filter is configured to only accept frames with the node’s own ID. + +Adjust the pins above if your PCB routes CAN or address lines to different pads. + +## 555 timer (software) emulation mode + +To save the BOM cost of a classic NE555 in simple oscillator applications, this firmware implements a minimal 555-like Schmitt trigger using the MCU’s ADC and a GPIO, approximating the behavior when the capacitor is charged/discharged via Q through a resistor, and the combined Trigger/Threshold senses the capacitor node. + +- Pins used: + - Q output: PB2 + - Combined Trigger/Threshold (ADC input): PA0 +- Wiring: + - PB2 (Q) -> series resistor R -> capacitor node + - Capacitor node -> capacitor to GND + - Capacitor node -> PA0 (ADC input) +- Behavior: + - When ADC(PA0) <= ~1/3 Vref, PB2 is driven High. + - When ADC(PA0) >= ~2/3 Vref, PB2 is driven Low. + - Hysteresis avoids chatter; the actual charge/discharge dynamics follow your chosen R and C. +- Notes: + - Use an appropriate resistor from PB2 to the capacitor to set oscillation frequency. Start with 10k..100k and adjust with C. + - Ensure PA0 is routed to the capacitor node and left high impedance (no strong pull-ups/downs) so the ADC can sense the analog voltage. + - PB2 drives the on-board LED (if present), so the LED might blink at the oscillation frequency. + +This mode is implemented in `src/main.rs` using `hal::adc::Adc::convert(&mut pin, SampleTime::...)` to take periodic samples and a simple state machine to toggle the Q output based on ~1/3 and ~2/3 Vref thresholds. + +## Building + +``` sh +cargo build --release +``` + +## Flash + +``` sh +wchisp config reset +wchip wchisp flash target/riscv32imc-unknown-none-elf/release/bms +``` + +## Debugging + +For debugging purposes a container file is provided together with wrapper scripts to start the containerized `openocd` and `riscv-gdb` transparently. The wrapper scripts assume that `podman` is setup. + +Starting Debug server + +``` +./bin/openocd +``` + +Connecting with gdb for interactive debugging + +``` +./bin/gdb -f target/riscv32imc-unknown-none-elf/release/bms +``` diff --git a/board/modules/Sensors_can/ch32-sensor/bin/build-wch-tools-container.sh b/board/modules/Sensors_can/ch32-sensor/bin/build-wch-tools-container.sh new file mode 100755 index 0000000..83721f8 --- /dev/null +++ b/board/modules/Sensors_can/ch32-sensor/bin/build-wch-tools-container.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -euo pipefail + +CONTAINER_NAME="localhost/wch-dev-tools:latest" +CONTAINER_TOOLS_BASEDIR="$(dirname "$(readlink -f "$0")")" + +pushd "$CONTAINER_TOOLS_BASEDIR" +podman build -t "$CONTAINER_NAME" -f "../wch-tools.Containerfile" . +popd diff --git a/board/modules/Sensors_can/ch32-sensor/bin/gdb b/board/modules/Sensors_can/ch32-sensor/bin/gdb new file mode 100755 index 0000000..3677232 --- /dev/null +++ b/board/modules/Sensors_can/ch32-sensor/bin/gdb @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +set -euo pipefail + +CONTAINER_IMAGE="localhost/wch-dev-tools:latest" +CONTAINER_TOOLS_BASEDIR="$(dirname "$(readlink -f "$0")")" + +function _fatal { + echo -e "\e[31mERROR\e[0m $(&2 + exit 1 +} + +declare -a PODMAN_ARGS=( + "--rm" "-i" "--log-driver=none" + "--network=host" + "--pid=host" + "-v" "$PWD:$PWD:rw" + "-w" "$PWD" +) + +[[ -t 1 ]] && PODMAN_ARGS+=("-t") + +if ! podman image exists "$CONTAINER_IMAGE"; then + #attempt to build container + "$CONTAINER_TOOLS_BASEDIR/build-wch-tools-container.sh" 1>&2 || + _fatal "faild to build local image, cannot continue! … please ensure you have an internet connection" +fi + +podman run "${PODMAN_ARGS[@]}" --entrypoint riscv-none-elf-gdb-py3 "$CONTAINER_IMAGE" "$@" diff --git a/board/modules/Sensors_can/ch32-sensor/bin/openocd b/board/modules/Sensors_can/ch32-sensor/bin/openocd new file mode 100755 index 0000000..2ca3b44 --- /dev/null +++ b/board/modules/Sensors_can/ch32-sensor/bin/openocd @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +set -euo pipefail + +CONTAINER_IMAGE="localhost/wch-dev-tools:latest" +CONTAINER_TOOLS_BASEDIR="$(dirname "$(readlink -f "$0")")" + +function _fatal { + echo -e "\e[31mERROR\e[0m $(&2 + exit 1 +} + +declare -a PODMAN_ARGS=( + "--rm" "-i" "--log-driver=none" + "--network=host" + "-v" "$PWD:$PWD:rw" + "-w" "$PWD" +) + +for device in /dev/bus/usb/*/*; do + if udevadm info "$device" | grep -q "ID_VENDOR=wch.cn" && \ + udevadm info "$device" | grep -q "ID_MODEL=WCH-Link"; then + DEBUGGER_DEV_PATH="$device" + break + fi +done + +if [[ -z "${DEBUGGER_DEV_PATH:-}" ]]; then + echo "Could not find hardware debugger … Exiting!" 1>&2 + exit 1 +else + # add jlink to podman device + PODMAN_ARGS+=("--device=$DEBUGGER_DEV_PATH") +fi + +[[ -t 1 ]] && PODMAN_ARGS+=("-t") + +if ! podman image exists "$CONTAINER_IMAGE"; then + #attempt to build container + "$CONTAINER_TOOLS_BASEDIR/build-wch-tools-container.sh" 1>&2 || + _fatal "faild to build local image, cannot continue! … please ensure you have an internet connection" +fi + +podman run "${PODMAN_ARGS[@]}" --entrypoint openocd "$CONTAINER_IMAGE" "$@" diff --git a/board/modules/Sensors_can/ch32-sensor/build.rs b/board/modules/Sensors_can/ch32-sensor/build.rs new file mode 100644 index 0000000..77208e1 --- /dev/null +++ b/board/modules/Sensors_can/ch32-sensor/build.rs @@ -0,0 +1,11 @@ +fn main() { + // println!("cargo:rustc-link-arg-bins=--nmagic"); + println!("cargo:rustc-link-arg-bins=-Tlink.x"); + // println!("cargo:rustc-link-arg-bins=-Tdefmt.x"); + + let out_dir = std::env::var("OUT_DIR").unwrap(); + let out_dir = std::path::PathBuf::from(out_dir); + std::fs::write(out_dir.join("memory.x"), include_bytes!("memory.x")).unwrap(); + println!("cargo:rustc-link-search={}", out_dir.display()); + println!("cargo:rerun-if-changed=memory.x"); +} diff --git a/board/modules/Sensors_can/ch32-sensor/memory.x b/board/modules/Sensors_can/ch32-sensor/memory.x new file mode 100644 index 0000000..d6d76a7 --- /dev/null +++ b/board/modules/Sensors_can/ch32-sensor/memory.x @@ -0,0 +1,125 @@ +/* CH32V203c8t6 */ +MEMORY +{ + FLASH : ORIGIN = 0x00000000, LENGTH = 64K /* BANK_1 */ + RAM : ORIGIN = 0x20000000, LENGTH = 20K +} +REGION_ALIAS("REGION_TEXT", FLASH); +REGION_ALIAS("REGION_RODATA", FLASH); +REGION_ALIAS("REGION_DATA", RAM); +REGION_ALIAS("REGION_BSS", RAM); +REGION_ALIAS("REGION_HEAP", RAM); +REGION_ALIAS("REGION_STACK", RAM); + +/* fault handlers */ + +PROVIDE(InstructionMisaligned = ExceptionHandler); +PROVIDE(InstructionFault = ExceptionHandler); +PROVIDE(IllegalInstruction = ExceptionHandler); +PROVIDE(Breakpoint = ExceptionHandler); +PROVIDE(LoadMisaligned = ExceptionHandler); +PROVIDE(LoadFault = ExceptionHandler); +PROVIDE(StoreMisaligned = ExceptionHandler); +PROVIDE(StoreFault = ExceptionHandler);; +PROVIDE(UserEnvCall = ExceptionHandler); +PROVIDE(SupervisorEnvCall = ExceptionHandler); +PROVIDE(MachineEnvCall = ExceptionHandler); +PROVIDE(InstructionPageFault = ExceptionHandler); +PROVIDE(LoadPageFault = ExceptionHandler); +PROVIDE(StorePageFault = ExceptionHandler); + +/* core interrupt handlers */ + +PROVIDE(NonMaskableInt = DefaultHandler); +PROVIDE(Software = DefaultHandler); + +/* external interrupt handlers */ + +PROVIDE(WWDG = DefaultHandler); +PROVIDE(PVD = DefaultHandler); +PROVIDE(TAMPER = DefaultHandler); +PROVIDE(RTC = DefaultHandler); +PROVIDE(FLASH = DefaultHandler); +PROVIDE(RCC = DefaultHandler); +PROVIDE(EXTI0 = DefaultHandler); +PROVIDE(EXTI1 = DefaultHandler); +PROVIDE(EXTI2 = DefaultHandler); +PROVIDE(EXTI3 = DefaultHandler); +PROVIDE(EXTI4 = DefaultHandler); +PROVIDE(DMA1_CHANNEL1 = DefaultHandler); +PROVIDE(DMA1_CHANNEL2 = DefaultHandler); +PROVIDE(DMA1_CHANNEL3 = DefaultHandler); +PROVIDE(DMA1_CHANNEL4 = DefaultHandler); +PROVIDE(DMA1_CHANNEL5 = DefaultHandler); +PROVIDE(DMA1_CHANNEL6 = DefaultHandler); +PROVIDE(DMA1_CHANNEL7 = DefaultHandler); +PROVIDE(ADC = DefaultHandler); +PROVIDE(USB_HP_CAN1_TX = DefaultHandler); +/*PROVIDE(USB_LP_CAN1_RX0 = DefaultHandler);*/ +PROVIDE(CAN1_RX1 = DefaultHandler); +PROVIDE(CAN1_SCE = DefaultHandler); +PROVIDE(EXTI9_5 = DefaultHandler); +PROVIDE(TIM1_BRK = DefaultHandler); +PROVIDE(TIM1_UP_ = DefaultHandler); +PROVIDE(TIM1_TRG_COM = DefaultHandler); +PROVIDE(TIM1_CC = DefaultHandler); +PROVIDE(TIM2 = DefaultHandler); +PROVIDE(TIM3 = DefaultHandler); +PROVIDE(TIM4 = DefaultHandler); +PROVIDE(I2C1_EV = DefaultHandler); +PROVIDE(I2C1_ER = DefaultHandler); +PROVIDE(I2C2_EV = DefaultHandler); +PROVIDE(I2C2_ER = DefaultHandler); +PROVIDE(SPI1 = DefaultHandler); +PROVIDE(SPI2 = DefaultHandler); +PROVIDE(USART1 = DefaultHandler); +PROVIDE(USART2 = DefaultHandler); +PROVIDE(USART3 = DefaultHandler); +PROVIDE(EXTI15_10 = DefaultHandler); +PROVIDE(RTCALARM = DefaultHandler); +PROVIDE(USBWAKE_UP = DefaultHandler); +PROVIDE(TIM8_BRK = DefaultHandler); +PROVIDE(TIM8_UP_ = DefaultHandler); +PROVIDE(TIM8_TRG_COM = DefaultHandler); +PROVIDE(TIM8_CC = DefaultHandler); +PROVIDE(RNG = DefaultHandler); +PROVIDE(FSMC = DefaultHandler); +PROVIDE(SDIO = DefaultHandler); +PROVIDE(TIM5 = DefaultHandler); +PROVIDE(SPI3 = DefaultHandler); +PROVIDE(UART4 = DefaultHandler); +PROVIDE(UART5 = DefaultHandler); +PROVIDE(TIM6 = DefaultHandler); +PROVIDE(TIM7 = DefaultHandler); +PROVIDE(DMA2_CHANNEL1 = DefaultHandler); +PROVIDE(DMA2_CHANNEL2 = DefaultHandler); +PROVIDE(DMA2_CHANNEL3 = DefaultHandler); +PROVIDE(DMA2_CHANNEL4 = DefaultHandler); +PROVIDE(DMA2_CHANNEL5 = DefaultHandler); +PROVIDE(ETH = DefaultHandler); +PROVIDE(ETH_WKUP = DefaultHandler); +PROVIDE(CAN2_TX = DefaultHandler); +PROVIDE(CAN2_RX0 = DefaultHandler); +PROVIDE(CAN2_RX1 = DefaultHandler); +PROVIDE(CAN2_SCE = DefaultHandler); +PROVIDE(OTG_FS = DefaultHandler); +PROVIDE(USBHSWAKEUP = DefaultHandler); +PROVIDE(USBHS = DefaultHandler); +PROVIDE(DVP = DefaultHandler); +PROVIDE(UART6 = DefaultHandler); +PROVIDE(UART7 = DefaultHandler); +PROVIDE(UART8 = DefaultHandler); +PROVIDE(TIM9_BRK = DefaultHandler); +PROVIDE(TIM9_UP_ = DefaultHandler); +PROVIDE(TIM9_TRG_COM = DefaultHandler); +PROVIDE(TIM9_CC = DefaultHandler); +PROVIDE(TIM10_BRK = DefaultHandler); +PROVIDE(TIM10_UP_ = DefaultHandler); +PROVIDE(TIM10_TRG_COM = DefaultHandler); +PROVIDE(TIM10_CC = DefaultHandler); +PROVIDE(DMA2_CHANNEL6 = DefaultHandler); +PROVIDE(DMA2_CHANNEL7 = DefaultHandler); +PROVIDE(DMA2_CHANNEL8 = DefaultHandler); +PROVIDE(DMA2_CHANNEL9 = DefaultHandler); +PROVIDE(DMA2_CHANNEL10 = DefaultHandler); +PROVIDE(DMA2_CHANNEL11 = DefaultHandler); diff --git a/board/modules/Sensors_can/ch32-sensor/openocd.cfg b/board/modules/Sensors_can/ch32-sensor/openocd.cfg new file mode 100644 index 0000000..fd3d973 --- /dev/null +++ b/board/modules/Sensors_can/ch32-sensor/openocd.cfg @@ -0,0 +1,17 @@ +set _CHIPNAME ch32v203 +set _TARGETNAME $_CHIPNAME.cpu + +#bindto 0.0.0.0 + +adapter driver wlinke +adapter speed 6000 +transport select sdi + +sdi newtap $_CHIPNAME cpu -irlen 5 --expected-id 0x00001 +target create $_TARGETNAME.0 wch_riscv -chain-position $_TARGETNAME +$_TARGETNAME.0 configure -work-area-phys 0x20000000 -work-area-size 10000 -work-area-backup 1 +set _FLASHNAME $_CHIPNAME.flash + +flash bank $_FLASHNAME wch_rsicv 0x00000000 0 0 0 $_TARGETNAME.0 + +init diff --git a/board/modules/Sensors_can/ch32-sensor/rust-toolchain.toml b/board/modules/Sensors_can/ch32-sensor/rust-toolchain.toml new file mode 100644 index 0000000..5d56faf --- /dev/null +++ b/board/modules/Sensors_can/ch32-sensor/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "nightly" diff --git a/board/modules/Sensors_can/ch32-sensor/src/main.rs b/board/modules/Sensors_can/ch32-sensor/src/main.rs new file mode 100644 index 0000000..94fee12 --- /dev/null +++ b/board/modules/Sensors_can/ch32-sensor/src/main.rs @@ -0,0 +1,61 @@ +#![no_std] +#![no_main] +#![feature(type_alias_impl_trait)] +#![feature(impl_trait_in_assoc_type)] + +// Simple 555-like oscillator implemented in firmware. +// - Q output: PB2 (also drives the on-board LED if present) +// - Combined Trigger/Threshold analog input: PA0 (capacitor node) +// Wiring suggestion: +// Q (PB2) --[R]--+-- C -- GND +// | +// PA0 (ADC input) +// The firmware toggles Q high when PA0 <= 1/3 Vref and low when PA0 >= 2/3 Vref. + +use embassy_executor::Spawner; +use embassy_time::Timer; +use hal::gpio::{Level, Output}; +use {ch32_hal as hal, panic_halt as _}; + +use hal::adc::{Adc, SampleTime}; + +#[embassy_executor::main(entry = "qingke_rt::entry")] +async fn main(_spawner: Spawner) -> ! { + let p = hal::init(Default::default()); + + // Q output on PB2 + let mut q = Output::new(p.PB2, Level::Low, Default::default()); + + // ADC on PA0 for combined Trigger/Threshold input + let mut adc = Adc::new(p.ADC1, Default::default()); + let mut trig_thres = p.PA0; // analog-capable pin used as ADC channel + + // ADC characteristics: assume 12-bit if HAL doesn't expose it. + // If the HAL provides a method to query resolution, prefer that. + let full_scale: u16 = 4095; // 12-bit default + let thr_low: u16 = (full_scale as u32 / 3) as u16; // ~1/3 Vref + let thr_high: u16 = ((full_scale as u32 * 2) / 3) as u16; // ~2/3 Vref + + // Start with Q low. State variable to avoid redundant toggles. + let mut q_high = false; + q.set_low(); + + loop { + // Read capacitor node voltage via ADC + let sample: u16 = adc.convert(&mut trig_thres, SampleTime::CYCLES239_5); + + // Implement Schmitt trigger behavior like NE555 using thresholds + if !q_high && sample <= thr_low { + // Trigger: voltage fell below 1/3 Vref -> set output high + q.set_high(); + q_high = true; + } else if q_high && sample >= thr_high { + // Threshold: voltage rose above 2/3 Vref -> set output low + q.set_low(); + q_high = false; + } + + // Small delay to reduce CPU usage; adjust for responsiveness/noise + Timer::after_micros(200).await; + } +} diff --git a/board/modules/Sensors_can/ch32-sensor/wch-tools.Containerfile b/board/modules/Sensors_can/ch32-sensor/wch-tools.Containerfile new file mode 100644 index 0000000..e48a92f --- /dev/null +++ b/board/modules/Sensors_can/ch32-sensor/wch-tools.Containerfile @@ -0,0 +1,27 @@ +FROM debian:bookworm + +RUN apt update -y && apt upgrade -y && apt install git libjaylink-dev libusb-1.0-0 unzip curl libhidapi-hidraw0 xz-utils -y + +RUN cd /root && \ + curl -L -o mrs-toolchain.tar.xz "https://github.com/ch32-riscv-ug/MounRiver_Studio_Community_miror/releases/download/1.92-toolchain/MRS_Toolchain_Linux_x64_V1.92.tar.xz" && \ + mkdir mrs-toolchain && \ + tar -xvf mrs-toolchain.tar.xz -C mrs-toolchain --strip-components=1 && \ + mv mrs-toolchain/OpenOCD/bin/openocd /usr/local/bin && \ + mv mrs-toolchain/OpenOCD/share/openocd /usr/local/share && \ + # mv mrs-toolchain/RISC-V_Embedded_GCC12/bin/riscv-none-elf-gdb /usr/local/bin && \ # both toolchains in MRS are to old to work with emacs dape + # mv mrs-toolchain/RISC-V_Embedded_GCC12/libexec /usr/local && \ # both toolchains in MRS are to old to work with emacs dape + rm -rf mrs-toolchain mrs-toolchain.tar.xz && \ + # Use up to date xpack toolchains for gdb + curl -L -o xpack-riscv-toolchain.tar.gz "https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v14.2.0-3/xpack-riscv-none-elf-gcc-14.2.0-3-linux-x64.tar.gz" && \ + mkdir xpack-toolchain && \ + tar -xvf xpack-riscv-toolchain.tar.gz -C xpack-toolchain --strip-components=1 && \ + mv xpack-toolchain/bin/* /usr/local/bin && \ + mv xpack-toolchain/lib/ /usr/local && \ + mv xpack-toolchain/lib64/ /usr/local && \ + mv xpack-toolchain/libexec /usr/local && \ + mv xpack-toolchain/riscv-none-elf /usr/local && \ + rm -rf xpack-toolchain xpack-riscv-toolchain.tar.gz + +RUN mkdir -p /root/.config/gdb && echo "set auto-load safe-path /" >> /root/.config/gdb/gdbinit + +ENTRYPOINT [ "/usr/bin/bash" ] diff --git a/board/modules/Sensors_simplified/Sensors/fp-lib-table b/board/modules/Sensors_simplified/Sensors/fp-lib-table new file mode 100644 index 0000000..5f0dd0d --- /dev/null +++ b/board/modules/Sensors_simplified/Sensors/fp-lib-table @@ -0,0 +1,4 @@ +(fp_lib_table + (version 7) + (lib (name "Sensor")(type "KiCad")(uri "${KIPRJMOD}/Sensor.pretty")(options "")(descr "")) +) diff --git a/rust/src/config.rs b/rust/src/config.rs index ef993d9..0c37085 100644 --- a/rust/src/config.rs +++ b/rust/src/config.rs @@ -58,7 +58,7 @@ pub struct TankConfig { pub tank_warn_percent: u8, pub tank_empty_percent: u8, pub tank_full_percent: u8, - pub ml_per_pulse: f32 + pub ml_per_pulse: f32, } impl Default for TankConfig { fn default() -> Self { @@ -111,6 +111,7 @@ pub struct PlantControllerConfig { pub struct PlantConfig { pub mode: PlantWateringMode, pub target_moisture: f32, + pub min_moisture: f32, pub pump_time_s: u16, pub pump_limit_ml: u16, pub pump_cooldown_min: u16, @@ -131,6 +132,7 @@ impl Default for PlantConfig { Self { mode: PlantWateringMode::OFF, target_moisture: 40., + min_moisture: 30., pump_time_s: 30, pump_limit_ml: 5000, pump_cooldown_min: 60, diff --git a/rust/src/hal/mod.rs b/rust/src/hal/mod.rs index d722e81..c31d216 100644 --- a/rust/src/hal/mod.rs +++ b/rust/src/hal/mod.rs @@ -22,6 +22,7 @@ use bq34z100::Bq34z100g1Driver; use ds323x::{DateTimeAccess, Ds323x}; use eeprom24x::{Eeprom24x, SlaveAddr, Storage}; use embedded_hal_bus::i2c::MutexDevice; +use esp_idf_hal::pcnt::PCNT1; use esp_idf_hal::{ adc::ADC1, delay::Delay, @@ -47,7 +48,6 @@ use once_cell::sync::Lazy; use std::result::Result::Ok as OkStd; use std::sync::Mutex; use std::time::Duration; -use esp_idf_hal::pcnt::PCNT1; //Only support for 8 right now! pub const PLANT_COUNT: usize = 8; diff --git a/rust/src/hal/v3_hal.rs b/rust/src/hal/v3_hal.rs index 312f1e9..d1d6c32 100644 --- a/rust/src/hal/v3_hal.rs +++ b/rust/src/hal/v3_hal.rs @@ -132,7 +132,7 @@ pub(crate) fn create_v3( peripherals.gpio5, tank_power_pin, flow_sensor_pin, - peripherals.pcnt1 + peripherals.pcnt1, )?; let mut signal_counter = PcntDriver::new( diff --git a/rust/src/hal/v4_hal.rs b/rust/src/hal/v4_hal.rs index 18e8bc9..189d6af 100644 --- a/rust/src/hal/v4_hal.rs +++ b/rust/src/hal/v4_hal.rs @@ -160,7 +160,7 @@ pub(crate) fn create_v4( peripherals.gpio5, tank_power_pin, flow_sensor_pin, - peripherals.pcnt1 + peripherals.pcnt1, )?; let mut signal_counter = PcntDriver::new( diff --git a/rust/src/hal/water.rs b/rust/src/hal/water.rs index 2de5170..1e44e47 100644 --- a/rust/src/hal/water.rs +++ b/rust/src/hal/water.rs @@ -6,7 +6,9 @@ use esp_idf_hal::adc::oneshot::{AdcChannelDriver, AdcDriver}; use esp_idf_hal::adc::{attenuation, Resolution, ADC1}; use esp_idf_hal::delay::Delay; use esp_idf_hal::gpio::{AnyIOPin, AnyInputPin, Gpio5, InputOutput, PinDriver, Pull}; -use esp_idf_hal::pcnt::{PcntChannel, PcntChannelConfig, PcntControlMode, PcntCountMode, PcntDriver, PinIndex, PCNT1}; +use esp_idf_hal::pcnt::{ + PcntChannel, PcntChannelConfig, PcntControlMode, PcntCountMode, PcntDriver, PinIndex, PCNT1, +}; use esp_idf_sys::EspError; use one_wire_bus::OneWire; @@ -25,7 +27,7 @@ impl<'a> TankSensor<'a> { gpio5: Gpio5, tank_power_pin: AnyIOPin, flow_sensor_pin: AnyIOPin, - pcnt1: PCNT1 + pcnt1: PCNT1, ) -> anyhow::Result> { let mut one_wire_pin = PinDriver::input_output_od(one_wire_pin).expect("Failed to configure pin"); @@ -73,7 +75,6 @@ impl<'a> TankSensor<'a> { }, )?; - Ok(TankSensor { one_wire_bus, tank_channel, diff --git a/rust/src/main.rs b/rust/src/main.rs index 58f0b02..c21a625 100644 --- a/rust/src/main.rs +++ b/rust/src/main.rs @@ -591,16 +591,31 @@ pub fn do_secure_pump( let mut first_error = true; let mut pump_time_s = 0; if !dry_run { - board.board_hal.get_tank_sensor().unwrap().reset_flow_meter(); - board.board_hal.get_tank_sensor().unwrap().start_flow_meter(); + board + .board_hal + .get_tank_sensor() + .unwrap() + .reset_flow_meter(); + board + .board_hal + .get_tank_sensor() + .unwrap() + .start_flow_meter(); board.board_hal.pump(plant_id, true)?; Delay::new_default().delay_ms(10); for step in 0..plant_config.pump_time_s as usize { - let flow_value = board.board_hal.get_tank_sensor().unwrap().get_flow_meter_value(); + let flow_value = board + .board_hal + .get_tank_sensor() + .unwrap() + .get_flow_meter_value(); flow_collector[step] = flow_value; let flow_value_ml = flow_value as f32 * board.board_hal.get_config().tank.ml_per_pulse; - println!("Flow value is {} ml, limit is {} ml raw sensor {}", flow_value_ml, plant_config.pump_limit_ml, flow_value); + println!( + "Flow value is {} ml, limit is {} ml raw sensor {}", + flow_value_ml, plant_config.pump_limit_ml, flow_value + ); if flow_value_ml > plant_config.pump_limit_ml as f32 { println!("Flow value is reached, stopping"); break; @@ -672,9 +687,16 @@ pub fn do_secure_pump( } } board.board_hal.get_tank_sensor().unwrap().stop_flow_meter(); - let final_flow_value = board.board_hal.get_tank_sensor().unwrap().get_flow_meter_value(); + let final_flow_value = board + .board_hal + .get_tank_sensor() + .unwrap() + .get_flow_meter_value(); let flow_value_ml = final_flow_value as f32 * board.board_hal.get_config().tank.ml_per_pulse; - println!("Final flow value is {} with {} ml", final_flow_value, flow_value_ml); + println!( + "Final flow value is {} with {} ml", + final_flow_value, flow_value_ml + ); current_collector.sort(); Ok(PumpResult { median_current_ma: current_collector[current_collector.len() / 2], diff --git a/rust/src/plant_state.rs b/rust/src/plant_state.rs index 38204cf..ae57373 100644 --- a/rust/src/plant_state.rs +++ b/rust/src/plant_state.rs @@ -78,6 +78,7 @@ impl PumpState { pub enum PlantWateringMode { OFF, TargetMoisture, + MinMoisture, TimerOnly, } @@ -235,6 +236,30 @@ impl PlantState { false } } + PlantWateringMode::MinMoisture => { + let (moisture_percent, _) = self.plant_moisture(); + if let Some(moisture_percent) = moisture_percent { + if self.pump_in_timeout(plant_conf, current_time) { + false + } else if !in_time_range( + current_time, + plant_conf.pump_hour_start, + plant_conf.pump_hour_end, + ) { + false + } else if (true) { + //if not cooldown min and below max + true + } else if (true) { + //if below min disable cooldown min + true + } else { + false + } + } else { + false + } + } PlantWateringMode::TimerOnly => !self.pump_in_timeout(plant_conf, current_time), } } @@ -268,7 +293,9 @@ impl PlantState { .map(|t| t.with_timezone(¤t_time.timezone())), next_pump: if matches!( plant_conf.mode, - PlantWateringMode::TimerOnly | PlantWateringMode::TargetMoisture + PlantWateringMode::TimerOnly + | PlantWateringMode::TargetMoisture + | PlantWateringMode::MinMoisture ) { self.pump.previous_pump.and_then(|last_pump| { last_pump diff --git a/rust/src_webpack/src/api.ts b/rust/src_webpack/src/api.ts index 7f46855..e02ed93 100644 --- a/rust/src_webpack/src/api.ts +++ b/rust/src_webpack/src/api.ts @@ -105,6 +105,7 @@ export interface PlantControllerConfig { export interface PlantConfig { mode: string, target_moisture: number, + min_moisture: number, pump_time_s: number, pump_cooldown_min: number, pump_hour_start: number, diff --git a/rust/src_webpack/src/plant.html b/rust/src_webpack/src/plant.html index 77b16f5..230838e 100644 --- a/rust/src_webpack/src/plant.html +++ b/rust/src_webpack/src/plant.html @@ -55,6 +55,7 @@ @@ -63,6 +64,10 @@

+
+
Minimum Moisture:
+ +
Pump Time (s):
diff --git a/rust/src_webpack/src/plant.ts b/rust/src_webpack/src/plant.ts index 6f29fc4..12e33b2 100644 --- a/rust/src_webpack/src/plant.ts +++ b/rust/src_webpack/src/plant.ts @@ -59,6 +59,7 @@ export class PlantView { private readonly header: HTMLElement; private readonly testButton: HTMLButtonElement; private readonly targetMoisture: HTMLInputElement; + private readonly minMoisture: HTMLInputElement; private readonly pumpTimeS: HTMLInputElement; private readonly pumpCooldown: HTMLInputElement; private readonly pumpHourStart: HTMLSelectElement; @@ -118,6 +119,11 @@ export class PlantView { controller.configChanged() } + this.minMoisture = document.getElementById("plant_" + plantId + "_min_moisture")! as HTMLInputElement; + this.minMoisture.onchange = function () { + controller.configChanged() + } + this.pumpTimeS = document.getElementById("plant_" + plantId + "_pump_time_s") as HTMLInputElement; this.pumpTimeS.onchange = function () { controller.configChanged() @@ -203,13 +209,15 @@ export class PlantView { let sensorOnly = document.getElementsByClassName("plantSensorEnabledOnly_"+ this.plantId) let pumpOnly = document.getElementsByClassName("plantPumpEnabledOnly_"+ this.plantId) let targetOnly = document.getElementsByClassName("plantTargetEnabledOnly_"+ this.plantId) + let minOnly = document.getElementsByClassName("plantMinEnabledOnly_"+ this.plantId) console.log("updateVisibility plantConfig: " + plantConfig.mode) let showSensor = plantConfig.sensor_a || plantConfig.sensor_b let showPump = plantConfig.mode !== "OFF" let showTarget = plantConfig.mode === "TargetMoisture" + let showMin = plantConfig.mode === "MinMoisture" - console.log("updateVisibility showsensor: " + showSensor + " pump " + showPump + " target " +showTarget) + console.log("updateVisibility showsensor: " + showSensor + " pump " + showPump + " target " +showTarget + " min " + showMin) for (const element of Array.from(sensorOnly)) { if (showSensor) { @@ -234,6 +242,14 @@ export class PlantView { element.classList.add("plantHidden_" + this.plantId) } } + + for (const element of Array.from(minOnly)) { + if (showMin) { + element.classList.remove("plantHidden_" + this.plantId) + } else { + element.classList.add("plantHidden_" + this.plantId) + } + } } setTestResult(result: PumpTestResult) { @@ -255,6 +271,7 @@ export class PlantView { setConfig(plantConfig: PlantConfig) { this.mode.value = plantConfig.mode; this.targetMoisture.value = plantConfig.target_moisture.toString(); + this.minMoisture.value = plantConfig.min_moisture?.toString() || ""; this.pumpTimeS.value = plantConfig.pump_time_s.toString(); this.pumpCooldown.value = plantConfig.pump_cooldown_min.toString(); this.pumpHourStart.value = plantConfig.pump_hour_start.toString(); @@ -280,6 +297,7 @@ export class PlantView { let conv: PlantConfig = { mode: this.mode.value, target_moisture: this.targetMoisture.valueAsNumber, + min_moisture: this.minMoisture.valueAsNumber, pump_time_s: this.pumpTimeS.valueAsNumber, pump_cooldown_min: this.pumpCooldown.valueAsNumber, pump_hour_start: +this.pumpHourStart.value,