M2-Tugas Pendahuluan 1



1. Prosedur [kembali]

  • Buka software proteus lalu rangkai komponen sesuai dengan gambar yang ada di modul
  • Buka software STM32CubeIDE lalu lakukan konfigurasi pin pada STM untuk menentukan GPIO input dan GPIO output
  • Masukan Program ke dalam software STM32CubeIDE lalu build untuk mendapatkan file .hex
  • Masukan file .hex ke dalam file library STM32F103C8 pada proteus
  • Simulasikan rangkaian

2. Hardware dan Diagram Blok[kembali]

    Hardware

1. Resistor

2. Switch


3. Push Button




3. LM35 (Sensor Suhu)

4. Fan-DC

5. Motor Driver L298N


Diagram Blok


3. Rangkaian Simulasi dan Prinsip Kerja [kembali]


Prinsip Kerja :

Rangkaian ini merupakan sistem pengendali motor DC berbasis suhu yang menggunakan sensor LM35, mikrokontroler STM32F103C8, dan driver motor L298. Prinsi‍p kerjanya dimulai dari sensor LM35 yang berfungsi untuk mendeteksi suhu lingkungan. Sensor ini menghasilkan tegangan analog yang nilainya sebanding dengan suhu, di mana setiap kenaikan 1 derajat Celcius menghasilkan tegangan sebesar 10 mV. Tegangan analog tersebut kemudian dikirim ke mikrokontroler STM32 melalui pin ADC.

Selanjutnya, mikrokontroler STM32 membaca sinyal analog tersebut dan mengubahnya menjadi data digital untuk dihitung menjadi nilai suhu. Berdasarkan nilai suhu yang diperoleh, mikrokontroler akan menentukan aksi yang akan dilakukan terhadap motor DC. Dalam hal ini, STM32 mengirimkan sinyal kontrol ke driver motor L298 berupa sinyal digital untuk arah putaran serta sinyal PWM untuk mengatur kecepatan motor.

Driver L298 berfungsi sebagai penguat arus sekaligus pengendali motor, karena mikrokontroler tidak mampu langsung menggerakkan motor yang membutuhkan arus lebih besar. Dengan adanya driver ini, motor dapat berputar sesuai dengan perintah dari mikrokontroler. Arah putaran motor ditentukan oleh kombinasi logika pada pin input L298, sedangkan kecepatan putaran diatur melalui sinyal PWM pada pin enable.

Ketika suhu yang terdeteksi meningkat, mikrokontroler dapat meningkatkan kecepatan motor, misalnya untuk aplikasi kipas pendingin. Sebaliknya, jika suhu rendah, motor akan berputar lebih lambat atau bahkan berhenti. Dengan demikian, sistem ini bekerja secara otomatis dalam merespon perubahan suhu lingkungan.

Selain itu, terdapat resistor pull-up pada pin reset mikrokontroler yang berfungsi untuk menjaga kondisi sistem tetap stabil dan mencegah reset yang tidak diinginkan. Secara keseluruhan, rangkaian ini menunjukkan integrasi antara sensor, pengolah data, dan aktuator dalam sebuah sistem kontrol berbasis mikrokontroler.


4. Flowchart dan Listing Program [kembali]

Flowchart




 #include "main.h"


/* HANDLE */

ADC_HandleTypeDef hadc1;

TIM_HandleTypeDef htim2;


/* PROTOTYPE */

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_ADC1_Init(void);

static void MX_TIM2_Init(void);

float read_temperature(void);


int main(void)

{

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

MX_ADC1_Init();

MX_TIM2_Init();


// Start PWM (PA1 → ENA L298)

HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);


// Set arah motor (IN1 = 1, IN2 = 0)

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);


while (1)

{

float suhu = read_temperature();

uint16_t pwm = 0;


if (suhu <= 30.0)

{

pwm = 0;

}

else

{

float range = suhu - 30.0;

if (range > 20.0) range = 20.0;


pwm = 1000 - (uint16_t)((range / 20.0) * 1000.0);

}


__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, pwm);


HAL_Delay(200);

}

}


/* ================== FUNCTION ================== */


// Baca suhu dari LM35

float read_temperature(void)

{

HAL_ADCEx_Calibration_Start(&hadc1); // wajib untuk STM32F1


HAL_ADC_Start(&hadc1);

HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);


uint32_t adc_val = HAL_ADC_GetValue(&hadc1);


float voltage = (adc_val * 3.3) / 4095.0;

float temperature = voltage * 100.0;


return temperature;

}


/* ================== ADC STM32F1 ================== */

static void MX_ADC1_Init(void)

{

__HAL_RCC_ADC1_CLK_ENABLE();


ADC_ChannelConfTypeDef sConfig = {0};


hadc1.Instance = ADC1;


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);


// Channel PA0

sConfig.Channel = ADC_CHANNEL_0;

sConfig.Rank = ADC_REGULAR_RANK_1;

sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;


HAL_ADC_ConfigChannel(&hadc1, &sConfig);

}


/* ================== PWM ================== */

static void MX_TIM2_Init(void)

{

__HAL_RCC_TIM2_CLK_ENABLE();


TIM_OC_InitTypeDef sConfigOC = {0};


htim2.Instance = TIM2;

htim2.Init.Prescaler = 72 - 1;

htim2.Init.CounterMode = TIM_COUNTERMODE_UP;

htim2.Init.Period = 1000 - 1;

htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;


HAL_TIM_PWM_Init(&htim2);


sConfigOC.OCMode = TIM_OCMODE_PWM1;

sConfigOC.Pulse = 0;

sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;


HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2);

}


/* ================== GPIO ================== */

static void MX_GPIO_Init(void)

{

__HAL_RCC_GPIOA_CLK_ENABLE();


GPIO_InitTypeDef GPIO_InitStruct = {0};


// PA1 → PWM (TIM2 CH2)

GPIO_InitStruct.Pin = GPIO_PIN_1;

GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


// PA2 & PA3 → IN1 & IN2

GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_3;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}


/* ================== CLOCK ================== */

void SystemClock_Config(void)

{

// Default cukup untuk simulasi

}

5. Video Demo [kembali]

6. Kondisi [kembali]

Buatlah rangkaian seperti percobaan 3 dengan kondisi ketika sensor LM35 mendeteksi suhu >30 C maka kipas menyala dengan kecepatan penuh dan saat suhu turun maka kecepatan kipas menurun secara linear dan ketika 30 C kipas mati.

7. Video Simulasi [kembali]

8. Download File [kembali]










Komentar

Postingan populer dari blog ini

Detektor non-inverting dengan Vref = 0

2.2 Load-Line Analysis

4.19 Practical Applications