Judul : : DC Motor
Speed and Direction Controller
Tujuan :
-
Mampu
menyusun user requirement untuk sebuah fungsi pengaturan kecepatan dan arah DC motor.
-
Mampu melakukan
identifikasi unit input
dan output dan
Timer menggunakan alamat
PORT sesuai konfigurasi
pada board praktikum
-
Mampu menyusun,
menjalankan dan melakukan debugging program sesuai denganpermasalahanberbasisBahasa pemrogramanC dengan
menggunakan Keil uVison
Alat
: Personal
Computer, modul MCU, Modul DC motor dan rotary encoder, kabel USB, ST Link downloader.
A.Problem
:
Akan dibuat sebuah system
untuk mengatur kecepatan
dan arah motor
DC menggunakan PWM.
Digunakan keypad untuk mengatur kecepatan dan
arah putaran serta LCD
untuk menampilkan kecepatan
putaran motor DC
saat itu. seperti ditunjukkan pada Gambar 1.
1.
Plant Layout:
Plant
Layout Akan dibuat sebuah system untuk
mengatur kecepatan dan arah motor DC menggunakan PWM. Digunakan keypad untuk
mengatur kecepatan dan arah putaran serta LCD untuk menampilkan kecepatan
putaran motor DC saat itu. Untuk
mengatur start/stop motor digunakan key “A”, untuk forward/reverse digunakan
key “B” dan untuk menaikkan kecepatan digunakan key “C” serta untuk menurunkan
kecepatan digunakan key “D” [boleh dirubah]. Kecepatan DC motor dihitung dengan
bantuan rotary encoder dan dihubungkan dengan PA.8 difungsikan sebagai external
interrupt. Diberikan alarming jika kecepatan motor DC melebihi suatu kecepatan
tertentu dengan membunyikan buzzer.
B.
User Requirement
User Requirement
Pada plant ini, digunakan untuk pengaturan kecepatan motor DC yang
nantinya bisa digunakan untuk beberapa pengaturan yang
menggunakan motor. dimana Pengaturan
kecepatan ini menggunakan keypad dengan variabel huruf tertentu.
|
]
|
|
D.
I/O Table
OUTPUT
No
|
Device
|
Address
|
note
|
1
|
LCD
|
PD0
PD1
PD2
PD3
PD4
PD5
PD6
PD7
|
Mengetahui kondisi Motor
melau layar 16x2
|
2
|
BUZZER
|
PB3
|
Memberitahukan kondisi
MOTOR dalam kondisi lebih dari batas ARR
|
3
|
Keypad
|
PE12
PE13
PE14
PE15
|
Memulai dan memberhentikan
suatu system yang mana sudah di program di dalam mikrokontroler STM32F407VGTX
|
4
|
L2930
|
PB12
PB13
|
Menentukkan kondisi motor
baik forward maupun reverse
|
5
|
PWM
|
PB10
|
Mengatur duty cyle
|
6
|
Ext INT
|
PA8
|
External interupt
|
INPUT
No
|
Device
|
Address
|
note
|
1
|
LCD
|
PE8
PE9
PE10
PE11
|
Memasukkan huruf dari
keypad menuju mikrokontroller
|
G.
Source Code
#include
"main.h"
#include
"stm32f4xx_hal.h"
#include
"stdbool.h"
#include
"lcd_character.h"
#include
"keypad_4x4.h"
float RPM1;
int PWM1,n;
bool
start1,forward1;
char
buffer[16],key,num[3];
void SystemClock_Config(void);
static void
MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
lcd_init();
keypad_init();
HAL_TIM_Base_Start(&htim2);
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_3);
while (1)
{
if(keypad_get_key_value()=='A')
{
HAL_Delay(100);
if(keypad_get_key_value()=='A')
{
if (start1==false)
start1=true;
else
start1=false;
}
}
//-------------------------------------------
if(keypad_get_key_value()=='B')
{
HAL_Delay(100);
if(keypad_get_key_value()=='B')
{
if (forward1==false)
forward1=true;
else
forward1=false;
}
}
//-------------------------------------------
if(keypad_get_key_value()=='C')
{
HAL_Delay(100);
if(keypad_get_key_value()=='C')
{
//
key=keypad_get_key_value()=='C';
// num[n]=key;
//PWM1=atoi(num);
PWM1=PWM1+10;
if (PWM1>=199)
PWM1=199;
}
}
//-------------------------------------------
if(keypad_get_key_value()=='D')
{
HAL_Delay(100);
if(keypad_get_key_value()=='D')
{
PWM1=PWM1-10;
if (PWM1<0)
PWM1=0;
}
}
//-------------------------------------------
if
(start1==false) //stop
{
lcd_gotoxy(0,0);
lcd_puts("M0");
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_RESET);
TIM2->CCR3=0;
}
if (start1==true
&& forward1==false)//RUN-reverse
{
lcd_gotoxy(0,0);
lcd_puts("M1:RVRE");
TIM2->CCR3=PWM1;
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_RESET);
}
if (start1==true
&& forward1==true)//RUN-forward
{
lcd_gotoxy(0,0);
lcd_puts("M1:FWRD");
TIM2->CCR3=PWM1;
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_SET);
}
//---------------------------lcd
display
lcd_gotoxy(8,0);
sprintf(buffer,"RPM:%4f",RPM1);
lcd_puts(buffer);
//--------------------------------------buzzer
if
(PWM1>=199)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_SET);
}
if
(PWM1<=150)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_RESET);
}
}
/* USER CODE END 3 */
}
Systick & Interupt
|
|
/* Includes
------------------------------------------------------------------
|
*/
|
#include "main.h"
|
|
#include "stm32f4xx_it.h"
|
|
/* Private
variables ---------------------------------------------------------
|
*/
|
/* USER CODE BEGIN PV */
|
|
int j;
|
|
int k;
|
|
extern float rpm;
|
|
extern int i;
|
|
void
SysTick_Handler(void)
|
|
{
|
MICROCONTROLLER
/* USER CODE BEGIN SysTick_IRQn 0 */ j++;
if(j==1000)
{
j=0;
//rpm=((float)pulse1*60.0)/4.0;
rpm=((float)k*60.0)/4.0;
k=0;
}
void EXTI9_5_IRQHandler(void)
{
/* USER CODE BEGIN
EXTI9_5_IRQn 0 */
if (i==1)
{
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8))
{
k++;
}
}
/* USER CODE END
EXTI9_5_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);
/* USER CODE BEGIN EXTI9_5_IRQn 1 */
/* USER CODE END EXTI9_5_IRQn 1 */
}
H. running test procedure
1.
kondisi awal motor off, pada saat tekan keypad huruf
‘A’ maka motor on akan tetapi belum bisa berjalan. Keypad ini seperti toogle
yang hanya membutuh kan satu input mempunyai 2 arti.
2.pada
saat keypad huruf ‘B’ditekan berguna untuk kondisi putar motor itu ingin orward
atau reverse. Keypad ini seperti toogle yang hanya membutuh kan satu input
mempunyai 2 arti .
3
pada saat keypad huruf ‘C’ ditekan berguna untuk menambah kondisi putar
kecepatan motor yang mana jika ingin menggerakan kecepatan yang sangat cepa
maka tekan C sampai batas arr (199) tapi apabila lebih maka buzzer akan menyala
atau berbunyi.
4.
pada saat keypad huruf ‘D’ ditekan berguna untuk menurunkan kondisi putar
kecepatan motor yang mana jika ingin menggerakan kecepatan yang sangat lambat
maka tekan D sampai batas arr (0)
No comments:
Post a Comment