MPPT сонячна зарядка TM-20A.
Нутрощі. CT350 2.5A MOSFET/IGBT Gate Driver Optocoupler, UTC UC3845G -HIGH PERFORMANCE CURRENT MODE PWM CONTROLLERS.
Процесор STM32F030C8T6.
Мосфети: DSN108N20N, MUR6030NCS, DSG040N10N3A, DH640.
Мосфет навантаження DH070N07
Індикатор, скоріш CS1621 і DC-DC USB портів.
Екран трохи слабо видно.
На звороті нічого немає цікавого, крім термодатчика.
Відключення акумулятора BMS’ом успішно переживає.
Даний екземпляр не зберігає користувацькі налаштування після перезавантаження по живленні, а також через деякий час сам перезавантажується і скидаються налаштування, проблема масова.
Зчитуємо прошивку (1 – 3,3; 2- SWDIO; 3 – GND; 4 – SWCLK), 64 кБ:
openocd -f interface/stlink.cfg -f target/stm32f0x.cfg -c init -c "reset halt" -c "flash read_bank 0 stm32f030_flash_dump.bin 0 0x10000" -c "reset" -c shutdown
Також можна зупинити процесор, і зчитати SRAM – оперативну пам’ять
openocd -f interface/stlink.cfg -f target/stm32f0x.cfg -c init -c "reset halt" -c "dump_image sram_dump.bin 0x20000000 0x2000" -c "reset" -c shutdown
Процесор STM32F0X не має постійної запам’ятовуючої EEPROM, і не має зовнішньої i2c EEPROM, тому і налаштування не зберігаються.
Запускаємо дебаг через сокет:
openocd -f interface/stlink.cfg -f target/stm32f0x.cfg
І запускаємо GDB і підключаємося до сокета:
arm-none-eabi-gdb target remote localhost:3333
Корисні функція для робіння всякого різного:
info registers x/10i $pc stepi monitor reset halt x/8xw 0x20000000 break *0x08001234 set {int}0x2000002C = 0x30202000
По адресації у процесорі:
0x08000000 флеш (аліас 0x00000000) 0x20000000 SRAM 0x40000000 регістри
Тепер можемо перезавантажувати мікроконтролер, робити зупинку, йти крок за кроком, запускати певну функцію.
(gdb) x/10i $pc => 0x80021e2: ldr r1, [pc, #8] ; (0x80021ec) 0x80021e4: str r0, [r1, #0] 0x80021e6: bx lr 0x80021e8: add r2, sp, #680 ; 0x2a8 0x80021ea: movs r0, r0 0x80021ec: adds r0, #0 0x80021ee: ands r0, r0 0x80021f0: ldr r1, [pc, #4] ; (0x80021f8) 0x80021f2: str r0, [r1, #4] 0x80021f4: bx lr
Пристрій має 4 доступні налаштування, які виглядає не беруть участь у алгоритмі:
d01 - щось із добою d02 - напруга підтримки 13,8 В d03 - напруга фази заряду 14,5 В d04 - перемикання на літій 0 / 1
При переведення d04==1 значення d02 і d03 стають однакові.
Імпортуємо прошивку у Гідру, ARM Cortex-M, LE, виставляємо правильне зміщення.
Находимо фрагмент (08003ec6) символів із помилками: 18, 60, 63, 65, 71, 73. Налаштувань (08001b3c), цікаво є ще d05 і d06.
Робота програми із регістрами:
0x40010000 TIM3_BASE Базова адреса таймера TIM3 0x40010414 TIM3_CCR1 Capture/Compare Register 1 (TIM3) 0x40020004 GPIOA_MODER Режим пінів порту A 0x40021000 RCC_CR Clock control register 0x40021004 RCC_CFGR Clock configuration register 0x40021008 RCC_CIR Clock interrupt register 0x40021010 RCC_APB2RSTR APB2 peripheral reset register 0x40021014 RCC_APB1RSTR APB1 peripheral reset register 0x40021018 RCC_AHBENR AHB peripheral clock enable 0x4002101C RCC_APB2ENR APB2 peripheral clock enable 0x4002102C RCC_BDCR Backup domain control register 0x40021030 RCC_CSR Control/status register 0x40021034 RCC_AHBRSTR AHB peripheral reset register 0x40022000 FLASH_ACR Flash access control register 0x4002200C FLASH_KEYR Flash key register (для розблокування) 0x40022010 FLASH_OPTKEYR Option byte key register 0x40022014 FLASH_SR Flash status register 0x40003000 USART1_SR UART1 статус регістр 0x40003008 USART1_DR UART1 Data Register
При підключенні 24 вольтової батареї значення d02 і d03 лишаються як для 12В, тому може то бутафорські змінні.
Наступні кроки: мапінг кнопок, підсвітки, екрану, дільників напруги входу, виходу, сили струму, додача ендпойнту на функцію зміни налаштувань, покроковий дебаг.
Юрій Р. ◯ 0009-0005-3702-9223. (2025). Y&H MPPT TM-20A сонячна зарядка – реверс прошивки. Блог UA ID. Взято з: https://blog.uaid.net.ua/mppt-tm-20a