Implementasi Sensor Arus ACS712 pada STM32

3 min read 22-08-2024
Implementasi Sensor Arus ACS712 pada STM32

Pendahuluan

Sensor arus ACS712 adalah sensor berbasis Hall Effect yang digunakan untuk mengukur arus AC maupun DC. Sensor ini memiliki berbagai aplikasi, dari pengukuran arus dalam rangkaian hingga proteksi arus pada sistem kelistrikan. Dalam artikel ini, kita akan membahas cara mengimplementasikan sensor ACS712 pada mikrokontroler STM32 untuk mengukur arus listrik.

Spesifikasi dan Kelebihan ACS712

Sebelum kita mulai, mari kita lihat beberapa spesifikasi dan kelebihan dari sensor ACS712:

  • Range Pengukuran: Terdapat beberapa varian ACS712 dengan range pengukuran yang berbeda, seperti 5A, 20A, dan 30A.
  • Tegangan Output: Sensor ini menghasilkan tegangan output yang sebanding dengan arus yang diukur, yaitu sekitar 185mV per Ampere (pada varian 5A).
  • Ketepatan Tinggi: Dengan kemampuan mendeteksi arus positif dan negatif, ACS712 memungkinkan pengukuran arus dengan akurasi yang baik.
  • Mudah Diintegrasikan: Sensor ini dapat dengan mudah dihubungkan dengan berbagai mikrokontroler, termasuk STM32.

Komponen yang Diperlukan

Untuk melakukan implementasi sensor ACS712 pada STM32, Anda memerlukan komponen-komponen berikut:

  1. Mikrokontroler STM32 (misalnya STM32F103C8T6)
  2. Sensor Arus ACS712
  3. Breadboard dan konektor
  4. Sumber daya DC atau AC
  5. Kabel jumper
  6. Software untuk pemrograman STM32 (misalnya STM32CubeIDE)

Skema Koneksi

Koneksi ACS712 dengan STM32

Berikut adalah cara menghubungkan sensor ACS712 dengan mikrokontroler:

  • Hubungkan pin VCC pada ACS712 ke pin 3.3V pada STM32.
  • Hubungkan pin GND pada ACS712 ke pin GND pada STM32.
  • Hubungkan pin OUT pada ACS712 ke salah satu pin ADC pada STM32 (misalnya PA0).

Contoh Skema Koneksi

+-------------------+
|      ACS712      |
|                   |
| VCC  ----  3.3V  |
| GND  ----   GND  |
| OUT  ----   PA0  |
+-------------------+

Pemrograman STM32

Konfigurasi Proyek

  1. Buat Proyek Baru: Buka STM32CubeIDE dan buat proyek baru untuk mikrokontroler STM32 yang Anda gunakan.
  2. Aktifkan ADC: Konfigurasikan peripheral ADC di STM32CubeMX dengan memilih pin yang terhubung ke sensor ACS712 (PA0 atau sesuai dengan yang Anda pilih).
  3. Setel Parameter ADC: Atur parameter ADC sesuai kebutuhan, seperti resolusi (12-bit) dan mode scan jika Anda menggunakan lebih dari satu sensor.
  4. Generate Code: Setelah konfigurasi selesai, generate kode untuk proyek.

Kode Sumber

Berikut adalah contoh kode untuk membaca nilai dari sensor ACS712:

#include "stm32f4xx.h"

ADC_HandleTypeDef hadc1;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_ADC1_Init();

    while (1)
    {
        HAL_ADC_Start(&hadc1);
        HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
        
        uint32_t adcValue = HAL_ADC_GetValue(&hadc1);
        
        // Hitung arus dari nilai ADC
        float voltage = (adcValue / 4095.0) * 3.3; // Menghitung tegangan
        float current = (voltage - 1.65) / 0.185; // Menghitung arus dalam ampere (5A variant)
        
        // Lakukan sesuatu dengan nilai current
        // Contoh: kirim ke UART, tampilkan di LCD, dll.
        
        HAL_Delay(1000); // Delay 1 detik
    }
}

static void MX_ADC1_Init(void)
{
    ADC_ChannelConfTypeDef sConfig = {0};
    
    hadc1.Instance = ADC1;
    hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
    hadc1.Init.Resolution = ADC_RESOLUTION_12B;
    hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
    hadc1.Init.ContinuousConvMode = DISABLE;
    hadc1.Init.DiscontinuousConvMode = DISABLE;
    hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
    hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
    hadc1.Init.NbrOfConversion = 1;
    HAL_ADC_Init(&hadc1);

    sConfig.Channel = ADC_CHANNEL_0; // PA0
    sConfig.Rank = 1;
    sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
    HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}

Penjelasan Kode

  1. Inisialisasi: Dalam kode ini, kita menginisialisasi ADC pada STM32 dan memulai pengukuran arus dalam loop utama.
  2. Pembacaan Nilai ADC: Kita memanggil HAL_ADC_Start() dan HAL_ADC_PollForConversion() untuk membaca nilai dari sensor ACS712.
  3. Menghitung Arus: Nilai ADC diubah menjadi tegangan, kemudian arus listrik dihitung berdasarkan karakteristik sensor ACS712.
  4. Pengolahan Arus: Anda dapat menambahkan fungsi tambahan untuk memproses nilai arus yang telah dihitung, seperti menampilkan hasil di layar atau mengirim data melalui UART.

Kesimpulan

Implementasi sensor arus ACS712 pada mikrokontroler STM32 dapat dilakukan dengan cukup mudah. Dengan pemrograman yang tepat, sensor ini akan sangat berguna dalam berbagai aplikasi di bidang otomasi dan kontrol industri. Pastikan untuk menguji sistem dengan aman, terutama saat bekerja dengan arus tinggi. Selamat mencoba!