OpenMV Cam M7

OpenMV Cam M7 je Cortex‑M7 ploča za strojni vid izgrađena oko STMicroelectronics STM32F765 na 216 MHz s 512 KB interne SRAM memorije i 2 MB interne flash memorije. Priloženi OV7725 senzor snima sličice 640×480 u sivim tonovima ili 320×240 RGB565 pri brzini do 150 FPS, a 10‑pinski korisnički header izlaže UART, I²C, SPI, CAN, ADC/DAC i PWM periferije.

OpenMV Cam M7

Za potpunu specifikaciju, fotografije i dimenzije pogledajte stranicu proizvoda OpenMV Cam M7.

Istaknute značajke

  • STMicroelectronics STM32F765 Cortex‑M7 na 216 MHz.

  • 512 KB interne SRAM memorije — bez vanjske SDRAM memorije.

  • 2 MB interne flash memorije (bez vanjske QSPI flash memorije).

  • OV7725 senzor — 640×480 u sivim tonovima ili 320×240 RGB565 pri brzini do 150 FPS.

  • Full‑speed USB (12 Mb/s) — domaćinu se prikazuje kao VCP + USB masovna pohrana.

  • microSD utor — SD do 2 GB, SDHC do 32 GB, SDXC do 2 TB.

  • 10 I/O pinova, podnose 5 V s izlazom od 3,3 V, 25 mA po pinu (ukupno 120 mA na cijelom headeru), sposobni za prekide. P6 ne podnosi 5 V kada se koristi u ADC ili DAC načinu rada.

  • Korisnička RGB LED i dvije IR LED snage 850 nm za aktivno osvjetljenje pri vidu u uvjetima slabog osvjetljenja.

Napomena

M7 nema čip za upravljanje napajanjem na ploči: nema priključka za bateriju, punjača baterije, ADC‑a za napon baterije, LED‑ica za status punjenja / napajanja niti hardverskog gumba za napajanje. Ploču napajajte preko USB‑a ili VIN‑a.

Raspored pinova

Raspored pinova OpenMV Cam M7 OV7725

Referenca pinova

Naziv pina

Funkcija

P0

UART1 RX / SPI2 MOSI

P1

UART1 TX / SPI2 MISO

P2

SPI2 SCK / CAN2 TX

P3

SPI2 NSS (CS) / CAN2 RX

P4

I2C2 SCL / UART3 TX / TIM2 CH3

P5

I2C2 SDA / UART3 RX / TIM2 CH4

P6

ADC / DAC / TIM2 CH1

P7

I2C4 SCL / TIM4 CH1

P8

I2C4 SDA / TIM4 CH2

P9

TIM4 CH3

RESET

spojite na GND za resetiranje ploče

SYN

pločica za sinkronizaciju sličica — spojena samo na senzor kamere

BOOT0

spojite na 3,3 V pri uključivanju za DFU / ROM pokretač (bootloader)

LED_RED

crveni kanal RGB LED‑ice (aktivan na nisko)

LED_GREEN

zeleni kanal RGB LED‑ice (aktivan na nisko)

LED_BLUE

plavi kanal RGB LED‑ice (aktivan na nisko)

LED_IR

IR LED‑ice visoke snage (oba kanala upravljana zajedno)

Napomena

Pločica SYN na headeru spojena je izravno na okidačku / ekspozicijsku liniju senzora kamere — na M7 ne vodi do MCU‑a. Upravljajte njome ili je čitajte izvana; ne možete je preklapati iz MicroPythona.

Pinovi napajanja

  • 3.3V — regulirani napon od 3,3 V. Do 250 mA dostupno za štitove (manje ako se koristi microSD kartica). Za razliku od novijih kamera ovaj pin je dvosmjeran — pogledajte upozorenje u nastavku.

  • VIN — ulaz od 3,6 – 5 V. Napaja ploču preko regulatora na ploči.

  • GND — zajedničko uzemljenje.

Napomena

Kada su prisutni i USB i VIN, ploču napaja onaj s višim naponom — diode na ploči jednostavno odabiru jači izvor.

Upozorenje

M7 smijete napajati dovođenjem 3,3 V izravno na pin 3.3V ako ne želite prolaziti kroz regulator na ploči. U tom slučaju nemojte istovremeno primjenjivati i VIN ili USB napajanje — povratno napajanje regulatora dok je drugi izvor aktivan može trajno oštetiti i uništiti kameru.

Savjet

Koristite procjenitelj trajanja baterije za modeliranje koliko će dugo M7 raditi na bateriji za zadani omjer aktivnog rada i dubokog mirovanja.

Pinovi za oporavak i otklanjanje pogrešaka

  • RESET — spojite na GND za resetiranje ploče. Otpuštanjem se MCU normalno pokreće.

  • BOOT0 — spojite na 3,3 V dok napajate ploču za ulazak u STM32 ROM pokretač (bootloader) (DFU način rada). OpenMV IDE koristi ovaj način za ponovno upisivanje pokretača (bootloader) na ploči.

Ploča izlaže SWD debug header (RST / SWCLK / SWDIO) uz GPIO header, kompatibilan s ST‑LINK i SEGGER J‑Link adapterima.

Periferije na ploči

LED‑ice

M7 ima jednu korisničku RGB LED‑icu te par IR LED‑ica visoke snage od 850 nm:

  • Korisnička RGB LED — softverski upravljiva, izložena kao LED_RED, LED_GREEN i LED_BLUE

    from machine import LED
    
    LED("LED_RED").on()
    LED("LED_GREEN").on()
    LED("LED_BLUE").on()
    
  • IR LED‑ice — obje LED‑ice upravljaju se zajedno preko pina LED_IR. LED_IR je u hardveru spojen aktivno na visoko, dok ugrađeni program (firmware) sve ostale LED‑ice na ploči tretira kao aktivne na nisko, pa koristite low() / high() umjesto on() / off() (koje bi invertirale logiku):

    from machine import LED
    
    ir = LED("LED_IR")
    ir.low()    # turn IR illumination ON
    ir.high()   # turn IR illumination OFF
    

Senzor kamere

OV7725 se upravlja kroz modul csi — senzori kamere

import csi

cam = csi.CSI()
cam.reset()
cam.pixformat(csi.RGB565)
cam.framesize(csi.QVGA)
cam.snapshot(time=2000)       # let auto‑exposure settle

while True:
    img = cam.snapshot()

Senzor je na M7 zalemljen na ploču — nije na zamjenjivom modulu.

microSD kartica

Kada je kartica umetnuta, automatski se montira na /sdcard i upotrebljiva je kroz uobičajeni datotečni sustav:

import os

for entry in os.listdir("/sdcard"):
    print(entry)

Referenca sabirnica

GPIO

Koristite machine.Pin za čitanje ili upravljanje bilo kojim od pinova označenih na sitotisku. Izlazi su 3,3 V CMOS, podnose 5 V na ulaznoj strani i mogu primiti/dati do 25 mA po pinu (ukupno 120 mA na cijelom headeru).

from machine import Pin

out = Pin("P0", Pin.OUT)
out.on()
out.off()
out.value(1)

inp = Pin("P1", Pin.IN, Pin.PULL_UP)
print(inp.value())

Bilo koji ulazni pin može također pokrenuti prekid pri prijelazima na rubu:

def handler(pin):
    print("triggered:", pin)

Pin("P1", Pin.IN, Pin.PULL_UP).irq(
    handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)

UART

Sabirnica

TX

RX

UART1

P1

P0

UART3

P4

P5

from machine import UART

uart = UART(3, baudrate=115200)
uart.write("hello")
uart.read(5)

I²C

Sabirnica

SCL

SDA

I2C2

P4

P5

I2C4

P7

P8

from machine import I2C

i2c = I2C(2, freq=400_000)
i2c.scan()
i2c.writeto(0x76, b"hi")

Isti hardver može se koristiti i u ciljnom (slave) načinu rada kroz machine.I2CTarget kako bi se memorijsko područje izložilo drugom I²C upravljaču:

from machine import I2CTarget

buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)

SPI

Sabirnica

MOSI

MISO

SCK

CS

SPI2

P0

P1

P2

P3

from machine import SPI
from machine import Pin

spi = SPI(2, baudrate=10_000_000)
cs = Pin("P3", Pin.OUT, value=1)   # CS is not driven by the SPI peripheral

cs.value(0)
spi.write(b"hello")
cs.value(1)

CAN

Sabirnica

TX

RX

CAN2

P2

P3

from machine import CAN

can = CAN(2, 500_000)
can.set_filters(None)
can.send(0x123, b"\xDE\xAD\xBE\xEF")
print(can.recv())

ADC i DAC

P6 je jedini korisnički analogni pin. Može se koristiti ili kao 12‑bitni ADC ulaz ili kao DAC izlaz.

  • ADC — puni opseg pri 3,3 V na pinu:

    from machine import ADC
    import time
    
    adc = ADC("P6")
    while True:
        voltage = adc.read_u16() * 3.3 / 65535
        print(voltage)
        time.sleep_ms(100)
    
  • DAC — kroz pyb.DAC. 8‑bitna vrijednost pokriva 0–3,3 V:

    from pyb import DAC
    
    dac = DAC("P6")
    voltage = 1.65
    dac.write(int(voltage / 3.3 * 255))
    

U ADC ili DAC načinu rada P6 podnosi samo 3,3 V — nemojte mu dovoditi 5 V.

PWM

Pin

Mjerač vremena / kanal

P4

TIM2 CH3

P5

TIM2 CH4

P6

TIM2 CH1

P7

TIM4 CH1

P8

TIM4 CH2

P9

TIM4 CH3

Napomena

TIM1 je rezerviran ugrađenim programom (firmware) za generiranje pikselskog takta senzora kamere, pa se TIM1 kanali koji su fizički na P0/P1/P2 ne mogu koristiti za korisnički PWM bez narušavanja rada kamere.

TIM4 se dijeli s pyb.Servo — instanciranje serva ponovno konfigurira cijeli mjerač vremena za rad na 50 Hz, pa nemojte miješati machine.PWM na P7/P8/P9 s pyb.Servo u istoj skripti.

Upravljajte bilo kojim od njih preko machine.PWM

from machine import Pin, PWM

pwm = PWM(Pin("P7"), freq=1_000, duty_u16=32768)

Softverski bit‑bang sabirnice

machine.SoftI2C i machine.SoftSPI rade na bilo kojem GPIO‑u ako trebate dodatnu sabirnicu.

Termalni senzor (izvan ploče)

Ugrađeni program (firmware) uključuje upravljački program fir — upravljački program termalnog senzora (fir == daleko infracrveno) za izvanjski ožičene termalne kamere:

  • MLX90621 — IR matrica 16 × 4

  • MLX90640 — IR matrica 32 × 24

  • MLX90641 — IR matrica 16 × 12

  • AMG8833 — IR matrica 8 × 8

Spojite modul na I²C sabirnicu ploče i čitajte sličice pomoću fir.init() + fir.snapshot()

import time
import image
import fir

fir.init()                          # auto‑detects the sensor
clock = time.clock()

while True:
    clock.tick()
    try:
        img = fir.snapshot(x_scale=5, y_scale=5,
                           color_palette=image.PALETTE_IRONBOW,
                           hint=image.BICUBIC,
                           copy_to_fb=True)
    except OSError:
        continue
    print(clock.fps())

Upravljački program fir komunicira sa senzorom samo preko I²C 2 — spojite modul na P4 (SCL) i P5 (SDA).

Mjerenje vremena

time

Modul time pokriva blokirajuća kašnjenja, monotone otkucaje i mjerenje proteklog vremena:

import time

time.sleep(1)              # seconds
time.sleep_ms(500)
time.sleep_us(10)

start = time.ticks_ms()
# ...do work...
elapsed = time.ticks_diff(time.ticks_ms(), start)

Virtualni mjerači vremena

machine.Timer raspoređuje periodičke ili jednokratne povratne pozive bez zauzimanja hardverskog utora mjerača vremena. Proslijedite -1 kao id za korištenje virtualnog (softverskog) mjerača vremena:

from machine import Timer

one_shot = Timer(-1)
one_shot.init(period=5_000, mode=Timer.ONE_SHOT,
              callback=lambda t: print("once"))

periodic = Timer(-1)
periodic.init(period=2_000, mode=Timer.PERIODIC,
              callback=lambda t: print("tick"))

Vrijednosti perioda izražene su u milisekundama. Pozovite deinit() za zaustavljanje i oslobađanje utora.

Sat stvarnog vremena

machine.RTC čuva stvarno vrijeme tijekom resetiranja:

from machine import RTC

rtc = RTC()
rtc.datetime((2026, 4, 30, 4, 12, 0, 0, 0))   # Y, M, D, weekday, h, m, s, subsec
print(rtc.datetime())

Watchdog

machine.WDT resetira ploču ako se aplikacija zaglavi. Jednom kada se pokrene, ne može se zaustaviti niti ponovno konfigurirati — hranite ga periodički unutar svoje glavne petlje:

from machine import WDT

wdt = WDT(timeout=5_000)   # 5 second window
while True:
    # ...do work...
    wdt.feed()

Informacije o pokretanju i izvođenju

Vremenski prozor USB pokretača (bootloader)

Pri svakom uključivanju kamera pokreće kratki pokretač (bootloader) (nekoliko sekundi) koji omogućuje OpenMV IDE‑u ažuriranje ugrađenog programa (firmware) bez potrebe da korisnik ulazi u DFU način rada. Nakon isteka prozora pokretač (bootloader) predaje kontrolu datoteci boot.py pa zatim main.py.

Skripta koja se izvodi može na zahtjev ponovno ući u pokretač (bootloader) pozivanjem machine.bootloader()

import machine

machine.bootloader()

Datotečni sustav i redoslijed pokretanja

Ugrađeni program (firmware) M7 montira do tri datotečna sustava pri pokretanju:

  • Interna flash memorija — uvijek montirana na /flash. Po zadanom sadrži main.py i README.txt; stvara se pri prvom pokretanju.

  • microSD kartica — ako je kartica umetnuta, montira se na /sdcard.

  • ROMFS — samo za čitanje, memorijski mapirani datotečni sustav na /rom koji se koristi za isporuku velikih podatkovnih sadržaja (npr. AI modela) koji imaju koristi od pristupa bez kopiranja. MicroPython ga montira automatski pri pokretanju, prije nego što se pokrene bilo koji korisnički Python.

Nakon montiranja, radni direktorij postavlja se na /sdcard kada je kartica prisutna, inače na /flash. Interpreter zatim izvodi skripte iz tog direktorija:

  • boot.py se izvodi pri svakom mekom resetiranju (hladno pokretanje, Ctrl‑D iz REPL‑a ili kad god se skripta koja se izvodi vrati).

  • main.py se izvodi samo pri hladnom pokretanju, odmah nakon boot.py. Naknadna meka resetiranja ponovno izvode boot.py, ali prelaze izravno na REPL — za ponovno izvođenje main.py morate u potpunosti resetirati ploču.

Stavljanje datoteke boot.py ili main.py na SD karticu nadjačava kopiju u flash memoriji ne dirajući je — obje datoteke traže se u direktoriju pokretanja (/sdcard kada je kartica montirana, inače /flash).

Zadani main.py koji se isporučuje na svježe upisanoj ploči samo treperi plavim kanalom korisničke RGB LED‑ice kao otkucaj srca (dva kratka impulsa, kratka stanka), pa možete utvrditi da se ugrađeni program (firmware) uredno pokrenuo bez ijednog priključenog domaćina.

sys.path se proširuje tako da uključuje sva tri datotečna sustava i njihove poddirektorije lib/, pa moduli koji se mogu uvesti mogu se nalaziti u /flash/lib, /sdcard/lib ili /rom/lib.

Za prisiljavanje sustava da zanemari umetnutu SD karticu (na primjer za pokretanje main.py iz flash memorije čak i kada je kartica prisutna), stvorite praznu datoteku naziva SKIPSD u korijenu /flash.

Kada je povezan preko USB‑a, datotečni sustav za pokretanje (/sdcard ako je kartica prisutna, inače /flash) na domaćinu se također prikazuje kao USB pogon za masovnu pohranu, što vam omogućuje izravno uređivanje boot.py, main.py i bilo kojih drugih datoteka. Izbacite pogon prije resetiranja kamere kako bi domaćin spremio svoje međuspremljene zapise.

Napomena

Budući da OS pogon tretira kao pasivni blok uređaj, datoteke koje stvori ili izmijeni kod koji se izvodi na OpenMV Camu neće se pojaviti dok ih domaćin ponovno ne montira. Ako i OS i OpenMV Cam istovremeno pišu na isti datotečni sustav, OS će pobijediti i prebrisati promjene koje je napravila kamera. Koristite SD karticu za sve podatke koje skripta zapisuje natrag i ponovno montirajte prije čitanja tih datoteka s domaćina.

Napomena

Crveni kanal korisničke RGB LED‑ice može se nakratko upaliti dok domaćin čita s USB pogona za masovnu pohranu ili na njega piše — to je pokazatelj aktivnosti kojim upravlja ugrađeni program (firmware), a ne kvar.

Veličine pohrane

M7 se isporučuje s:

  • /flash96 KB FAT datotečni sustav, za čitanje/pisanje.

  • /rom256 KB memorijski mapirani ROMFS samo za čitanje.

  • /sdcard — puna veličina bilo koje umetnute microSD kartice (kada je prisutna), za čitanje/pisanje.

Pokazatelj teškog kvara (hard fault)

Ako korisnička RGB LED‑ica brzo izmjenjuje sve boje — dovoljno brzo da izgleda kao treperava bijela LED‑ica umjesto zasebnih nijansi — ugrađeni program (firmware) naišao je na nepopravljiv teški kvar (hard fault). Ponovno upišite ugrađeni program (firmware) za oporavak; ako ponovno upisivanje ne pomogne, ploča je možda fizički oštećena.

Softverske biblioteke

Pogledajte indeks biblioteke za potpuni popis modula — uključujući one koji su jedinstveni za M7 verziju.