OpenMV Cam H7¶
OpenMV Cam H7 on Cortex-M7-pohjainen konenäkölevy, joka rakentuu STMicroelectronics STM32H743 -piirin ympärille 480 MHz:n taajuudella, 1 Mt:n sisäisellä SRAM:lla, 2 Mt:n sisäisellä flash-muistilla ja laitteistopohjaisella JPEG-koodekilla. Levystä on kaksi sensoriversiota — H7 sensorilla OV7725 ja H7 R2 sensorilla ON Semi MT9M114 — mutta laiteohjelmisto, nastajärjestys ja Python-API ovat identtiset.
Täydellinen datalehti, valokuvat ja mitat löytyvät OpenMV Cam H7 -tuotesivulta.
Kohokohdat¶
STMicroelectronics STM32H743 Cortex-M7 480 MHz:n taajuudella (1027 DMIPS).
Laitteistopohjainen JPEG-enkooderi/dekooderi.
1 Mt sisäistä SRAM:ia — ei ulkoista SDRAM:ia.
2 Mt sisäistä flash-muistia (ei ulkoista QSPI-flash-muistia).
OV7725-sensori (tai MT9M114 H7 R2 -versiossa).
Full-speed USB (12 Mb/s) — näkyy isäntäkoneelle VCP- ja USB-massamuistina.
microSD-paikka — SD enintään 2 Gt, SDHC enintään 32 Gt, SDXC enintään 2 Tt.
LiPo-akkuliitin (ei sisäänrakennettua laturia — käytä ladattua kennoa tai syötä virtaa VIN/USB:n kautta).
10 I/O-nastaa, 5 V:n sietoiset 3,3 V:n lähdöllä, 25 mA nastaa kohti (yhteensä 120 mA koko liittimessä), keskeytyskykyiset. P6 ei ole 5 V:n sietoinen, kun sitä käytetään ADC- tai DAC-tilassa.
Käyttäjän RGB-LED ja kaksi suuritehoista 850 nm:n IR-LEDiä aktiiviseen valaistukseen heikossa valossa.
Muista
H7:ssä ei ole sisäänrakennettua virranhallintapiiriä: siinä ei ole akkulaturia, akkujännitteen ADC:tä, lataus- tai virtatilan LEDejä eikä laitteistopohjaista virtapainiketta. Liitä esiladattu LiPo akun JST-liittimeen tai syötä levylle virtaa USB:n / VIN:n kautta.
Nastajärjestys¶
Nastaviite¶
Nastan nimi |
Toiminto |
|---|---|
P0 |
UART1 RX / SPI2 MOSI |
P1 |
UART1 TX / SPI2 MISO |
P2 |
SPI2 SCK / FDCAN2 TX |
P3 |
SPI2 NSS (CS) / FDCAN2 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 |
vedä GND:hen nollataksesi levyn |
SYN |
kehyssynkronointinasta — kytketty vain kamerasensoriin |
BOOT0 |
vedä 3,3 V:iin virrankytkennän yhteydessä DFU- / ROM-käynnistyslatainta varten |
LED_RED |
RGB-LEDin punainen kanava (aktiivinen matalalla) |
LED_GREEN |
RGB-LEDin vihreä kanava (aktiivinen matalalla) |
LED_BLUE |
RGB-LEDin sininen kanava (aktiivinen matalalla) |
LED_IR |
suuritehoiset IR-LEDit (molemmat kanavat ajetaan yhdessä) |
Muista
Liittimen SYN-nasta on kytketty suoraan kamerasensorin laukaisu-/valotuslinjaan — se ei reititydy MCU:lle H7:ssä. Ohjaa tai lue sitä ulkoisesti; sitä ei voi vaihtaa MicroPythonista.
Virtanastat¶
3.3V — säädelty 3,3 V:n linja. Käytettävissä enintään 250 mA lisälaitteille (vähemmän, jos microSD-kortti on käytössä). Toisin kuin uudemmissa kameroissa, tämä nasta on kaksisuuntainen — katso alla oleva varoitus.
VIN — 3,6–5 V:n tulo. Syöttää virtaa levylle sisäänrakennetun säätimen kautta.
GND — yhteinen maa.
Levyssä on myös 3,7 V:n LiPo-liitin, mutta H7:ssä ei ole akkulaturia — liitä esiladattu kenno tai syötä virtaa VIN:n / USB:n kautta.
Muista
Kun sekä USB että VIN/LiPo ovat kytkettyinä, VIN/LiPo-tulo voittaa — sisäänrakennettu virtakytkin valitsee sen USB:n sijaan levyn virransyöttöön.
Varoitus
Akkuliitin ja VIN on kytketty yhteen H7:ssä. Älä kytke LiPoa ja syötä VIN-jännitettä samanaikaisesti — kaksi virtalähdettä taistelevat keskenään ja voivat vahingoittaa akkua, levyä tai molempia.
Varoitus
Voit halutessasi syöttää H7:lle virtaa johtamalla 3,3 V suoraan 3.3V-nastaan, jos et halua käyttää sisäänrakennettua säädintä. Siinä tapauksessa älä syötä myös VIN- tai USB-virtaa samanaikaisesti — säätimen takaisinajaminen toisen virtalähteen ollessa aktiivinen voi vahingoittaa kameraa pysyvästi ja tuhota sen.
Vihje
Käytä akun keston arviointityökalua mallintaaksesi, kuinka kauan H7 toimii akulla tietyllä aktiivisen / syväunitilan käyttösuhteella.
Palautus- ja vianjäljitysnastat¶
RESET — vedä GND:hen nollataksesi levyn. Sen vapauttaminen antaa MCU:n käynnistyä normaalisti.
BOOT0 — vedä 3,3 V:iin levyn virrankytkennän yhteydessä siirtyäksesi STM32 ROM-käynnistyslataimeen (DFU-tila). OpenMV IDE käyttää tätä tilaa sisäänrakennetun käynnistyslataimen uudelleenflashaukseen.
Levyssä on SWD-vianjäljitysliitin (RST / SWCLK / SWDIO) GPIO-liittimen vieressä, yhteensopiva ST-LINK- ja SEGGER J-Link -sovittimien kanssa.
Sisäänrakennetut oheislaitteet¶
LEDit¶
H7:ssä on yksi käyttäjän RGB-LED sekä pari suuritehoista 850 nm:n IR-LEDiä:
Käyttäjän RGB-LED — ohjelmistolla ohjattava, esitetty nimillä
LED_RED,LED_GREENjaLED_BLUEfrom machine import LED LED("LED_RED").on() LED("LED_GREEN").on() LED("LED_BLUE").on()
IR-LEDit — molemmat LEDit ajetaan yhdessä
LED_IR-nastan kautta.LED_IRon kytketty laitteistossa aktiiviseksi korkealla, kun taas laiteohjelmisto käsittelee kaikkia muita sisäänrakennettuja LEDejä aktiivisina matalalla, joten käytälow()/high()-metodeja eikäon()/off()-metodeja (jotka kääntäisivät logiikan):from machine import LED ir = LED("LED_IR") ir.low() # turn IR illumination ON ir.high() # turn IR illumination OFF
Kamerasensori¶
OV7725:tä (tai MT9M114:ää H7 R2 -versiossa) ohjataan csi — kennot -moduulin kautta:
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()
Sensori sijaitsee irrotettavassa moduulissa — vaihda se mihin tahansa muuhun OpenMV-kameramoduuliin (global shutter, lämpökamera, korkeampi resoluutio jne.) muuttamatta muuta levyä.
microSD-kortti¶
Kun kortti on asetettu, se liitetään automaattisesti polkuun /sdcard ja sitä voi käyttää tavanomaisen tiedostojärjestelmän kautta:
import os
for entry in os.listdir("/sdcard"):
print(entry)
Väyläviite¶
GPIO¶
Käytä machine.Pin -luokkaa lukeaksesi tai ohjataksesi mitä tahansa silkkipainettua nastaa. Lähdöt ovat 3,3 V:n CMOS-tasoa, 5 V:n sietoisia tulopuolella, ja voivat nieluttaa/syöttää enintään 25 mA nastaa kohti (yhteensä 120 mA koko liittimessä).
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())
Mikä tahansa tulonasta voi myös laukaista keskeytyksen reunasiirtymillä:
def handler(pin):
print("triggered:", pin)
Pin("P1", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Väylä |
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¶
Väylä |
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")
Samaa laitteistoa voi käyttää myös kohdetilassa (slave) machine.I2CTarget -luokan kautta, jolloin muistialue voidaan tuoda toisen I²C-ohjaimen käyttöön:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)
SPI¶
Väylä |
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 (FDCAN)¶
Väylä |
TX |
RX |
|---|---|---|
FDCAN2 |
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 ja DAC¶
P6 on ainoa käyttäjän analoginen nasta. Sitä voi käyttää joko 12-bittisenä ADC-tulona tai DAC-lähtönä.
ADC — täysi asteikko 3,3 V:ssa nastassa:
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 —
pyb.DAC-luokan kautta. 8-bittinen arvo kattaa alueen 0–3,3 V:from pyb import DAC dac = DAC("P6") voltage = 1.65 dac.write(int(voltage / 3.3 * 255))
ADC- tai DAC-tilassa P6 on vain 3,3 V:n sietoinen — älä syötä siihen 5 V:ta.
PWM¶
Nasta |
Ajastin / kanava |
|---|---|
P4 |
TIM2 CH3 |
P5 |
TIM2 CH4 |
P6 |
TIM2 CH1 |
P7 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
P9 |
TIM4 CH3 |
Muista
TIM1 on laiteohjelmiston varaama kamerasensorin pikselikellon tuottamiseen, joten fyysisesti nastoissa P0/P1/P2 olevia TIM1-kanavia ei voi käyttää käyttäjän PWM:ään rikkomatta kameraa.
TIM4 on jaettu pyb.Servo -luokan kanssa — servon luominen konfiguroi koko ajastimen uudelleen 50 Hz:n toimintaan, joten älä sekoita machine.PWM -toimintoa nastoissa P7/P8/P9 ja pyb.Servo -luokkaa samassa skriptissä.
Ohjaa mitä tahansa niistä machine.PWM -luokan kautta:
from machine import Pin, PWM
pwm = PWM(Pin("P7"), freq=1_000, duty_u16=32768)
Ohjelmistolla bittiniputellut väylät¶
machine.SoftI2C ja machine.SoftSPI toimivat millä tahansa GPIO-nastalla, jos tarvitset lisäväylän.
Lämpösensori (levyn ulkopuolinen)¶
Laiteohjelmisto sisältää fir — lämpösensorin ajuri (fir == far infrared) -ajurin ulkoisesti kytketyille lämpökameroille:
MLX90621 — 16 × 4 IR-matriisi
MLX90640 — 32 × 24 IR-matriisi
MLX90641 — 16 × 12 IR-matriisi
AMG8833 — 8 × 8 IR-matriisi
Kytke moduuli levyn I²C-väylään ja lue kehyksiä komennoilla 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())
fir-ajuri kommunikoi sensorin kanssa vain I²C 2 -väylän kautta — kytke moduuli nastoihin P4 (SCL) ja P5 (SDA).
Ajoitus¶
time¶
time -moduuli kattaa estävät viiveet, monotoniset tikit ja kuluneen ajan mittauksen:
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)
Virtuaaliset ajastimet¶
machine.Timer ajastaa jaksottaiset tai kertaluonteiset takaisinkutsut kuluttamatta laitteistopohjaisen ajastimen paikkaa. Anna -1 id:ksi käyttääksesi virtuaalista (ohjelmistopohjaista) ajastinta:
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"))
Jaksoarvot ovat millisekunteina. Kutsu deinit() pysäyttääksesi ja vapauttaaksesi paikan.
Reaaliaikakello¶
machine.RTC pitää yllä kellonaikaa nollausten yli:
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())
Vahtikoira¶
machine.WDT nollaa levyn, jos sovellus jumiutuu. Kun se on käynnistetty, sitä ei voi pysäyttää tai konfiguroida uudelleen — syötä sitä säännöllisesti pääsilmukassasi:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Käynnistys- ja ajonaikaiset tiedot¶
USB-käynnistyslataimen ikkuna¶
Jokaisen virrankytkennän yhteydessä kamera ajaa lyhyen käynnistyslataimen (muutaman sekunnin), jonka avulla OpenMV IDE voi päivittää laiteohjelmiston ilman, että käyttäjän tarvitsee siirtyä DFU-tilaan. Ikkunan päätyttyä käynnistyslatain luovuttaa ohjauksen tiedostolle boot.py ja sitten tiedostolle main.py.
Ajossa oleva skripti voi siirtyä käynnistyslataimeen pyynnöstä kutsumalla machine.bootloader()
import machine
machine.bootloader()
Tiedostojärjestelmä ja käynnistysjärjestys¶
H7:n laiteohjelmisto liittää käynnistyksen yhteydessä enintään kolme tiedostojärjestelmää:
Sisäinen flash-muisti — liitetään aina polkuun
/flash. Sisältää oletuksena tiedostotmain.pyjaREADME.txt; luodaan ensimmäisen käynnistyksen yhteydessä.microSD-kortti — jos kortti on asetettu, se liitetään polkuun
/sdcard.ROMFS — vain luettava, muistiin kuvattu tiedostojärjestelmä polussa
/rom, jota käytetään suurten data-aineistojen (esim. AI-mallien) toimittamiseen, jotka hyötyvät nollakopioidusta käytöstä. MicroPython liittää sen automaattisesti käynnistyksen yhteydessä, ennen kuin mitään käyttäjän Python-koodia ajetaan.
Liittämisen jälkeen työhakemistoksi asetetaan /sdcard, kun kortti on paikallaan, muutoin /flash. Tulkki ajaa tämän jälkeen skriptit kyseisestä hakemistosta:
boot.pysuoritetaan jokaisen pehmeän nollauksen yhteydessä (kylmäkäynnistys,Ctrl‑DREPL:stä tai aina kun ajossa oleva skripti palaa).main.pysuoritetaan vain kylmäkäynnistyksessä, heti tiedostonboot.pyjälkeen. Seuraavat pehmeät nollaukset ajavat tiedostonboot.pyuudelleen mutta siirtyvät suoraan REPL:ään — ajaaksesi tiedostonmain.pyuudelleen sinun täytyy nollata levy täysin.
Tiedoston boot.py tai main.py pudottaminen SD-kortille ohittaa flash-muistissa olevan kopion koskematta siihen — molemmat tiedostot etsitään käynnistyshakemistosta (/sdcard, kun kortti on liitetty, muutoin /flash).
Vastaflashatussa levyssä toimitettava oletustiedosto main.py vain vilkuttaa käyttäjän RGB-LEDin sinistä kanavaa sydämenlyöntinä (kaksi lyhyttä pulssia, lyhyt tauko), jotta voit todeta laiteohjelmiston käynnistyneen puhtaasti ilman mitään isäntäkonetta kytkettynä.
sys.path laajennetaan sisältämään kaikki kolme tiedostojärjestelmää ja niiden lib/-alihakemistot, joten tuotavat moduulit voivat sijaita poluissa /flash/lib, /sdcard/lib tai /rom/lib.
Pakottaaksesi järjestelmän jättämään asetetun SD-kortin huomiotta (esimerkiksi ajaaksesi flash-muistin tiedoston main.py vaikka kortti olisi paikallaan), luo tyhjä tiedosto nimeltä SKIPSD polun /flash juureen.
Kun yhteys on muodostettu USB:n kautta, käynnistystiedostojärjestelmä (/sdcard, jos kortti on paikallaan, muutoin /flash) näkyy myös USB-massamuistiasemana isäntäkoneella, jolloin voit muokata tiedostoja boot.py, main.py ja muita tiedostoja suoraan. Poista asema turvallisesti ennen kameran nollaamista, jotta isäntäkone tyhjentää välimuistiin tallennetut kirjoitukset.
Muista
Koska käyttöjärjestelmä käsittelee asemaa passiivisena lohkolaitteena, OpenMV Camissa ajettavan koodin luomat tai muokkaamat tiedostot eivät näy ennen kuin isäntäkone liittää aseman uudelleen. Jos sekä käyttöjärjestelmä että OpenMV Cam kirjoittavat samaan tiedostojärjestelmään samanaikaisesti, käyttöjärjestelmä voittaa ja ylikirjoittaa kameran tekemät muutokset. Käytä SD-korttia kaikkeen dataan, jonka skripti kirjoittaa takaisin, ja liitä asema uudelleen ennen kuin luet näitä tiedostoja isäntäkoneelta.
Muista
Käyttäjän RGB-LEDin punainen kanava saattaa syttyä hetkellisesti, kun isäntäkone lukee USB-massamuistiasemasta tai kirjoittaa siihen — tämä on laiteohjelmiston ohjaama toiminnan ilmaisin, ei vika.
Tallennustilan koot¶
H7 toimitetaan seuraavalla kokoonpanolla:
/flash— 128 kt:n FAT-tiedostojärjestelmä, luku/kirjoitus./rom— 128 kt:n vain luettava muistiin kuvattu ROMFS./sdcard— asetetun microSD-kortin koko kokonaisuudessaan (kun se on paikallaan), luku/kirjoitus.
Vakavan virheen ilmaisin¶
Jos käyttäjän RGB-LED käy nopeasti läpi kaikkia värejä — niin nopeasti, että se yleensä näyttää kimaltelevalta valkoiselta LEDiltä erillisten värisävyjen sijaan — laiteohjelmisto on kohdannut palautumattoman vakavan virheen. Flashaa laiteohjelmisto uudelleen palautuaksesi; jos uudelleenflashaus ei auta, levy saattaa olla fyysisesti vaurioitunut.
Ohjelmistokirjastot¶
Katso kirjastohakemistosta täydellinen luettelo moduuleista — mukaan lukien ne, jotka ovat ainutlaatuisia H7-versiolle.