Laporan Akhir 1

 

Laporan Akhir Percobaan 3

 [KEMBALI KE MENU SEBELUMNYA]



PERCOBAAN 1 KONDISI 1

1. Prosedur[Kembali]

  • Buatlah rangkaian seperti pada percobaan pada Proteus 
  • Buat program untuk STM32F103C8 pada STM32CUBEIDE, dan sesuaikan konfigurasinya
  • Masukkan Program tersebut kedalam STM32F103C8
  • Simulasikan rangkaian

2. Hardware dan Diagram Blok[Kembali]

1. STM32F103C8 (Bluepill)


2. Resistor



3. PushButton



4. LM35


5. Breadboard
6. Kipas DC
7.Motor Driver l298N



3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

Rangkaian Simulasi: 



Prinsip Kerja:

Prinsip kerja pada Percobaan 3 didasarkan pada mekanisme External Interrupt (EXTI), di mana mikrokontroler STM32 dikonfigurasi untuk mendeteksi perubahan level tegangan pada pin GPIO tertentu secara real-time. Berbeda dengan metode polling yang memeriksa status input secara berulang-ulang dalam loop utama, sistem interrupt bekerja secara pasif dan hanya akan aktif apabila terjadi pemicuan (trigger) fisik, seperti penekanan tombol. Ketika tombol ditekan, sinyal transisi (biasanya falling edge atau rising edge) akan mengirimkan permintaan interupsi ke CPU untuk segera ditindaklanjuti.

Setelah permintaan interupsi diterima, mikrokontroler akan menunda sementara eksekusi program utama dan beralih ke fungsi khusus yang disebut Interrupt Service Routine (ISR) atau callback function. Di dalam fungsi ini, instruksi spesifik untuk mengontrol LED, seperti perintah toggle (membalikkan status nyala/mati), dilaksanakan secara instan. Setelah tugas di dalam fungsi callback selesai, mikrokontroler secara otomatis kembali melanjutkan eksekusi program di titik terakhir sebelum interupsi terjadi, sehingga memungkinkan sistem merespon input tombol dengan sangat cepat tanpa mengganggu efisiensi pemrosesan data lainnya.

4. Flowchart dan Listing Program[Kembali] 
Flowchart:


Listing Program:

#include "main.h"

ADC_HandleTypeDef hadc1;
TIM_HandleTypeDef htim1;

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

uint32_t adcValue = 0;
float voltage = 0;
float temperature = 0;
uint8_t system_on = 1;

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

  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_TIM1_Init();

  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

  while (1)
  {
    HAL_ADC_Start(&hadc1);
    HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
    adcValue = HAL_ADC_GetValue(&hadc1);

    voltage = ( adcValue / 4095.0) * 3.3;
    temperature = ( voltage * 100);

    if(system_on)
    {
      if(temperature >= 27.0)
      {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);

        float duty;

        if(temperature >= 35.0)
        {
          duty = 0.5;
        }
        else
        {
          duty = 1.0 - ((temperature - 27.0) / 8.0) * 0.5;
        }

        __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, duty *
65535);
      }
      else
      {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
        __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);
      }
    }
    else
    {
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
      __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);
    }

    HAL_Delay(200);
  }
}

void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType =
RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);

  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
  PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;
  HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
}

static void MX_ADC1_Init(void)
{
  ADC_ChannelConfTypeDef sConfig = {0};
  hadc1.Instance = ADC1;
  hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  hadc1.Init.ContinuousConvMode = 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;
  sConfig.Rank = ADC_REGULAR_RANK_1;
  sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;

  HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}

static void MX_TIM1_Init(void)
{
  TIM_OC_InitTypeDef sConfigOC = {0};

  htim1.Instance = TIM1;
  htim1.Init.Prescaler = 0;
  htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim1.Init.Period = 65535;

  HAL_TIM_PWM_Init(&htim1);

  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 0;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

  HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);

  HAL_TIM_MspPostInit(&htim1);
}

static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  __HAL_RCC_GPIOA_CLK_ENABLE();

  GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_3;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = GPIO_PIN_4;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  HAL_NVIC_SetPriority(EXTI4_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(EXTI4_IRQn);
  }
  void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  {
  if(GPIO_Pin == GPIO_PIN_4)
  {
  system_on = !system_on;
  }
  }
  void Error_Handler(void)
  {
  __disable_irq();
  while (1) {}
  }

5. Video Demo[Kembali]

6. Analisa[Kembali]
Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi Sensor Heartbeat membaca BPM>70 dan push button tidak ditekan, maka LED menyala merah dan Buzzer berbunyi

7. Download File[Kembali]

Rangkaian Proteus [download]
Video Demo [download]
Datasheet STM32F103C8 [Download]
Datasheet Resistor [Download]
Laporan Akhir [download]












Komentar

Postingan populer dari blog ini

Tugas Besar

12-3

12-4