Friday, April 03, 2015

Rancang Bangun Modul STM32 dengan ChibiOS

STM32 adalah mikroprosesor low power keluarga ARM M3 cortex yang dibuat oleh STMicroelectronics. Dinamakan stm32 karena mikro ini merupakan 32bit dan low power karena tegangan operasi mikro ini hanya berkisar dari 1.8 sampai 3.6 volt. Project stm32-tf (stm32-teknik fisika) ini di-host di github dengan official repo di alamat berikut : https://github.com/mekatronik-achmadi/stm32-tf (thanks to +achmadi for the repo).

Modul STM32-TF
Repo di Github tersebut berisi komponen yang dibutuhkan, desain PCB, ChibiOS dan contoh-contoh program. ChibiOS adalah real-time OS yang digunakan untuk embedded system dan mendukung banyak mikroprosesor termasuk stm32. Dengan ChibiOS, kita bisa membangun program-program untuk akuisisi data, control system ataupun pemrosesan sinyal. Selain ChibiOS, modul stm32 ini juga 'mencuri' dari perangkat lunak open source lainnya seperti stm32flash, compiler gcc-arm-none-eabi dan masih banyak lagi. Berikut adalah list hardware, software, fitur dan demo untuk membuat, mengcompile dan mengupload program ke modul stm32.

Daftar Komponen (hardware)

Untuk membangun modul STM32, divais berikut dirancang untuk ditempatkan pada board PCB dibawah:

  • F/CM12P
  • H11L1M
  • BAUT 2mm
  • JACK-PLUG0
  • 10-XX
  • 2N3904-NPN-TO92-EBC
  • PINHD-1X40
  • TRIM_EU-CA6V
  • CRYSTALTC38H
  • CRYSTALHC49U-V
  • PC817
  • TUXGR_16X2_R2
  • FT232RL
  • IRF530
  • LEDSML1206
  • C-EUC1206
  • C-EUC1206
  • R-EU_R1206
  • R-EU_R1206
  • STM32F10XRXT6
  • USB_MICROB_PLUGCONN-11752

Desain PCM modul stm32tf v1.0 yang dibuat dengan eagle

Daftar Paket (software)

Sedangkan daftar paket(software) yang dibutuhkan adalah sebagai berikut (pada Ubuntu diinstall dengan apt-get) :

=> Git:

  • git-cola
  • ssh


=> Design:

  • eagle


=> Qt SDK:

  • qt4-qtconfig
  • libqt4-dev
  • libqt5serialport5-dev
  • libqt5svg5-dev
  • qt4-designer
  • qtbase5-dev
  • qtcreator
  • qttools5-dev
  • qt5-default


=> Compiler ARM:

  • gcc-arm-none-eabi
  • libnewlib-arm-none-eabi
  • libnewlib-dev


=> LibUSB:

  • usbutils
  • libftdi-dev
  • libusb-1.0-0-dev


=> Builder:

  • automake
  • cmake
  • dh-autoreconf
  • pkg-config


=> Python-Serial:

  • python-serial
  • python3-serial


Step-by-step program (semua source code diambil dari repo di Github)

Flash (stm32-tf/tools/linux/stm32flash-stm32flash)
1. Pindah ke directory stm32flash
2. sudo make
3. sudo make install

Membuat program:
1. Copy file main.c, Makefile, halconf.h dan mcuconf.h dalam satu folder
2. Edit Makefile baris ke-58, rename coba1 dengan nama project/folder anda
3. Tulis program utama anda dalam file main.c

Mengupload program (jumper mode programming):
1. $make
2. $sudo stm32flash -w ./build/coba2.bin -v -b 115200 /dev/ttyUSB0
3. Pindahkan jumper ke mode running dan reset

Print LCD dengan qtserialterminal
Sebelum mengakses (print) ke LCD, file program lcd sudah harus di compile dan diupload ke STM 32 (Sesuai dengan perintah compile dan upload sebelumnya)
1. sudo xhost +
2. sudo ./qtserialterminal
3. Open port /dev/ttyUSB0, Sesuaikan baudrate-nya
4. Gunakan perintah "lcd 0 tes" untuk mencetak 'tes' pada baris atas dan "lcd 1 OK" untuk mencerak 'OK' pada baris bawah
5. Print text ke lcd juga bisa dijalankan dari terminal biasa (gnometerm):
echo -e "lcd 0 coba\r" > /dev/ttyUSB0

Daftar Fitur

UART
Berupa komunikasi serial standar TTL UART Rx dan Tx yang di konversi menjadi data USB oleh chip FT232RL dengan konektor Micro-USB
Untuk Ubuntu/Debian butuh paket linux-image-extra-3.16.0-23-generic dan terbaca sebagai /dev/ttyUSBx
Untuk Windows butuh driver yang dapat di download di situs resmi FTDI dan terbaca sebagai COMx
Fitur ini wajib ada karena selain untuk interfacing (terminal/shell ) juga menjadi jalur pemrograman via UART bootloader (diaktifkan oleh reset dan pin boot0)

ADC
Berupa 3 trim-potensiometer untuk mensimulasikan Analog to Digital Converter
Nilai analog yang tersedia antara 0v sampai 3,3v dengan jangkauan digital 12-bit (0 sampai 4093)

EXTI
Berupa 2 tombol untuk mensimulasikan External Interrupt
External Interrupt berfungsi untuk menjalankan immedietly-respon berupa dari event input digital di pin

LED
Berupa 4 LED untuk mensimulasikan:
1. contoh sederhana multitasking
2. penundaan/delay
3. PWM
4. Timer GPT

ICU
Berupa pembacaan frekuensi/periode dari sinyal kotak baik nilai rising-to-rising, falling-to-falling, rising-to-falling, atau falling-to-rising
Dilengkapi rangkaian thresholder untuk mengkonversi secara sederhana dari sinyal non-kotak ke sinyal kotak

Driver Motor
Berupa driver berbasis MOSFET IRF530 dengan level tegangan 12v.
Tegangan dipisah oleh PC817 agar aman
Membutuhkan adaptor 12v tambahan.
Dapat untuk mensimulasikan efek PWM terhadap kecepatan motor.

Buzzer
Berupa driver berbasis MOSFET IRF530 dengan level tegangan 12v.
Tegangan dipisah oleh PC817 agar aman
Sama seperti driver motor namun keluaran langsung terhubung continues-buzzer 12v.
Membutuhkan adaptor 12v tambahan.
Dapat untuk mensimulasikan efek PWM terhadap suara yang dihasilkan buzzer.

Alphanumeric-LCD
Berupa data-bus nibble (4bit) untuk komunikasi dengan display LCD alphanumeric (bukan graphic) standar chip HD44780.

Info Compiler
Seluruh program yang digunakan di board menggunakan compiler arm-gcc-none-eabi (tersedia untuk Ubuntu/Debian dan Windows).
Untuk abstraksi hardware dan multitasking menggunakan RealTime Operating System ChibiOS

Contoh Program/Bare Minimum

Contoh program sederhana (bare minimum) untuk modul stm32-tf diatas adalah sebagai berikut,
#include "hal.h"
#include "ch.h"
int main(void){
halInit();
chSysInit();
while(1);
{
    // kode disini
}
}

Sedangkan program "hello world" untuk mengedipkan lampu (blinker) misalnya sebagai berikut,
#include "hal.h"
#include "ch.h"
int main(void){
halInit();
chSysInit();
palSetPadMode(GPIOA,8,PAL_MODE_OUTPUT_PUSHPULL);
while(1){
    palClearPad(GPIOA,8);
    chThdSleepMilliseconds(500);
    palSetPad(GPIOA,8);
    chThdSleepMilliseconds(500);
}
}

Catatan dan Evaluasi:
  • Pada desain PCB versi 1.0 ini ada kesalahan wiring dan telah diperbaiki pada versi 1.1 (updated di repo)
  • Port micro USB sangat rentan dan mudah disconnect, kedepannya akan digunakan port printer seperti yang dipakai Arduino
  • Jumper untuk Vcc belum ada, kedepannya akan ditambahkan.
Related Posts Plugin for WordPress, Blogger...