Development board for testing cube.AI technology on stm32h743 chip.
Machine learning in embedded systems has become a reality, with the
first tools for neural network firmware development already being made
available for ARM microcontroller developers. This board the use of
one of such tools, namely the STM X-Cube-AI, on mainstream ARM Cortex-M
microcontrollers, analyzing their performance, and comparing support and
performance of other two common supervised ML algorithms, namely Support
Vector Machines (SVM) and k-Nearest Neighbours (k-NN). Results on three
datasets show that X-Cube-AI provides quite constant good performance even
with the limitations of the embedded platform. The workflow is well integrated
with mainstream desktop tools, such as Tensorflow and Keras.
The core is a ready-made board on the stm32h743 microcontroller (https://github.com/mcauser/MCUDEV_DEVEBOX_H7XX_M) purchased on ali.
The board has an OV2640 camera (DCMI), an ILI9341 display (spi) for cube.AI testing.
The following elements have been added to extend functionality:
- INMP441 microphone via I2S interface
- input for connecting an optical encoder on a chip LS7366R-S (spi)
- input for connecting an optical encoder on the hardware timer TIM1
- two buttons
- UART output on uart1
- RS-232 output (MAX3232) on uart3
- memory chip (qspi) on the board MCUDEV_DEVEBOX_H7XX_M
- connector for connecting i2c devices
ΠΠ»Π°ΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ cube.AI Π½Π° ΡΠΈΠΏΠ΅ stm32h743.
ΠΠ°ΡΠΈΠ½Π½ΠΎΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ Π²ΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΡΠ°Π»ΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΡΡ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Ρ ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ Π½Π΅ΠΉΡΠΎΠ½Π½ΠΎΠΉ ΡΠ΅ΡΠΈ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ARM. ΠΡΠ° ΠΏΠ»Π°ΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΊΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², Π° ΠΈΠΌΠ΅Π½Π½ΠΎ STM X-Cube-AI, Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ ARM Cortex-M. ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ², Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΡ ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π²ΡΡ Π΄ΡΡΠ³ΠΈΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΎΠΏΠΎΡΠ½ΡΡ Π²Π΅ΠΊΡΠΎΡΠΎΠ² (SVM) ΠΈ ΠΌΠ΅ΡΠΎΠ΄ k-Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΡ ΡΠΎΡΠ΅Π΄Π΅ΠΉ (k-NN). Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎ ΡΡΠ΅ΠΌ Π½Π°Π±ΠΎΡΠ°ΠΌ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΡΠΎ X-Cube-AI ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΡ Ρ ΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π°ΠΆΠ΅ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. Π Π°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Ρ ΠΎΡΠΎΡΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ Π½Π°ΡΡΠΎΠ»ΡΠ½ΡΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Tensorflow ΠΈ Keras.
Π ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠ°ΡΠΈΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ cube.AI Π½Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅ STM32H.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΄ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π³ΠΎΡΠΎΠ²Π°Ρ ΠΏΠ»Π°ΡΠ° Π½Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅ stm32h743 (https://github.com/mcauser/MCUDEV_DEVEBOX_H7XX_M) ΠΊΡΠΏΠ»Π΅Π½Π½Π°Ρ Π½Π° ali. ΠΠ° ΠΏΠ»Π°ΡΠ΅ ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½Π° ΠΊΠ°ΠΌΠ΅ΡΠ° OV2640 (DCMI), Π΄ΠΈΡΠΏΠ»Π΅ΠΉ ILI9341 (spi) Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ cube.AI. ΠΠ»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ:
- ΠΌΠΈΠΊΡΠΎΡΠΎΠ½ INMP441 ΠΏΠΎ ΠΈΠ½ΡΡΠ΅ΡΠ΅ΠΉΡΡ I2S
- Π²Ρ ΠΎΠ΄ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ½ΠΊΠΎΠ΄Π΅ΡΠ° Π½Π° ΡΠΈΠΏΠ΅ LS7366R-S (spi)
- Π²Ρ ΠΎΠ΄ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ½ΠΊΠΎΠ΄Π΅ΡΠ° Π½Π° Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠΌΠ΅ΡΠ΅ TIM1
- Π΄Π²Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ
- Π²ΡΡ ΠΎΠ΄ UART Π½Π° Π½Π° uart1
- Π²ΡΡ ΠΎΠ΄ RS-232 (MAX3232) Π½Π° uart3
- ΡΠΈΠΏ ΠΏΠ°ΠΌΡΡΠΈ (qspi) Π½Π° ΠΏΠ»Π°ΡΠ΅ MCUDEV_DEVEBOX_H7XX_M
- ΡΠ°Π·ΡΠ΅ΠΌ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ i2c ΡΡΡΡΠΎΠΉΡΡΠ²
ΠΠ½Π΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΠΏΠ»Π°ΡΡ ver 1.0:
Π€ΠΎΡΠΎ ΡΠΎΠ±ΡΠ°Π½Π½ΠΎΠΉ ΠΏΠ»Π°ΡΡ ver 1.0: