M2-Laporan Akhir 1



1. Prosedur [kembali]

  1. Pahami terlebih dahulu kondisi yang akan digunakan
  2. Buka software Proteus 8.17
  3. Persiapkan alat dan bahan
  4. Buat rangkaian sesuai dengan kondisi dan modul
  5. Buka software STM32Cube IDE 
  6. Setelah membuka software, pilih perangkat STM32F103C8T6 
  7. Sesuaikan konfigurasi pin sesuai dengan rangkaian proteus 
  8. Buat kode program untuk mengoperasikan rangkaian tersebut sesuai dengan kondisi 
  9. Konfigurasi kan program dengan software Proteus
  10. Jalankan simulasi rangkaian.  
  11. Proses selesai

2. Hardware dan Diagram Blok[kembali]

 Hardware

1. Resistor


2. Push Button




3. LM35 (Sensor Suhu)

4. Fan-DC

5. Motor Driver L298N


Diagram Blok


3. Rangkaian Simulasi dan Prinsip Kerja [kembali]

  • Ketika Lm35 mendeteksi maka kipas akan on
  • Ketika lm 35 tidak mendeteksi maka kipas akan off
  • Ketika push button diberi interupt maka kipas akan otomatis off

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]






7. Download File [kembali]








Komentar

Postingan populer dari blog ini

2.2 Load-Line Analysis

Detektor non-inverting dengan Vref = 0

3.13 Computer Analysis