305381 Microcontroller Interface Lab 1 1 · 2016-03-21 · วงจรควบคุม ......
Transcript of 305381 Microcontroller Interface Lab 1 1 · 2016-03-21 · วงจรควบคุม ......
305381 Microcontroller Interface Lab 1 1
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
การทดลองท 4 การใชงาน IC ขยายพอรต 8255 และ การควบคม DC Motor
วตถประสงค
1. เพอใหนสตสามารถเขยนโปรแกรมภาษา C อยางงายในการควบคมไมโครคอนโทรลเลอรได
2. เพอใหนสตเขาใจการการใชงาน IC ขยายพอรต 8255 และการควบคม DC Motors
อปกรณในการทดลอง
1. ชดทดลองไมโครคอนโทรลเลอร
2. เครองคอมพวเตอร PC พรอมโปรแกรมส าหรบการเขยนและคอมไพลภาษา C
- โปรแกรม Keil51 v.xx
3. สายตอพอรตอนกรม
4. วงจรควบคม Brushed DC motor และ Stepping Motor
ทฤษฎ
วงจรควบคม Brushed DC Motor
Module ET-MINI DC-MOTOR เปนชดขบ DC Motor 5V สามารถควบคมทศทางการหมนไดทง ซายและขวา และอาน
รอบการหมนไดโดยใช Opto เปน Sensor ลกษณะของขวตอใชงาน และการสงลอจกควบคมการหมนจะแสดงดงรปและ
ตารางดานลาง โดย ขวตอ IN1,IN2 จะเปนตวก าหนดทศทางการหมน สวนขวตอ EN จะท าหนาท Enable ชดขบกระแส
โดยจะท างานทลอจก ‚1‛ ขวตอ OPA และ OPB จะท าหนาทสงสญญาณลอจก ‚1‛ ไปให MCU เมอใบพดของ DC
Motor ไปตดทตว Opto Sensor โดยถาไมมอะไรมาตดทตว Sensor ทขวตอ OPA และ OPB จะมสถานะเปน ‚0‛ ซง
เหมาะส าหรบใชอานรอบการหมนของ Motor โดยเลอกอานสญญาณจากขอตอ OPA หรอ OPB กได
305381 Microcontroller Interface Lab 1 2
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
305381 Microcontroller Interface Lab 1 3
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
วงจรควบคม Stepping Motor
Module ET-MINI SMCC-547 เปนชดขบ Stepping Motor ซง Stepping Motor ทใชจะมความละเอยดอยท Step ละ 18
องศา ใชทรานซสเตอร BC547 เปนตวขบ และใช LED แสดงผลการท างานเมอมการสงลอจก ‚1‛ มาคอนโทรลในแตละ
เฟส LED กจะตดใหรวาเฟสไหนท างานอย โดยในการสงลอจกนนจะตองสงเรยงเฟสกนไปเรอยๆซงจะเรมจากเฟสไหน
กอนกได ใน Module นจะม Pin INA,INB,INC และIND ไวใหส าหรบตอเขากบ ขา I/O ของ MCU เพอให MCUสงลอจก
‚1‛ มาท าการควบคม Step การหมนโดยเรยงเฟสไปตามล าดบ การจดเรยงขาสญญาณตางๆจะแสดงดงรปดานลาง สวน
Vcc ทใช จะเปน 5 V ถาใช MCU ทใชแรงดน 3.3V จะตองมชด Opto แปลงระดบลอจกจาก 3V เปน 5 V ดวย
305381 Microcontroller Interface Lab 1 4
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
วธการทดลอง
1. ใช IDE ส าหรบพฒนาชดค าสงของ MCS-51 ดวยภาษา C โดยใช Keil51เพอเขยนโปรแกรม Lab04_x.c
2. สรางโปรเจคใหมโดยเลอก New project ตงชอเปน Lab04 แลวกด ok
305381 Microcontroller Interface Lab 1 5
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
305381 Microcontroller Interface Lab 1 6
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
3. เลอก CPU : Philips P89C51RD2xx
4. จากนนคลกทป มวงกลมสแดง เพอสรางหนาตางส าหรบเขยนโปรแกรม( หนาตาง Text1 ) สรางไฟลใหม เขยนโปรแกรมและ save โดยใชชอ Lab04_x.c (x แทนหมายเลขการทดลอง )
305381 Microcontroller Interface Lab 1 7
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
5. คลกขวาท Source Group 1 แลวเลอก Add file to group ‘Source Group 1’ แลวเลอก File Lab04_x.c
305381 Microcontroller Interface Lab 1 8
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
6. เขยนโปรแกรมใหเสรจแลวคลกท วงกลมท 1 เพอท าการ compile ถาหากวาไมพบ Error โดยทถาเกด error ขนโปรแกรมจะแสดงวา error กท (ด windows output ดานลางของโปรแกรม ) คลกท วงกลมท 2 เพอให keil ตรวจสอบและท าการ debug พรอมทงตรวจสอบขนาดของโปรแกรมทเราสรางขนและพรอมส าหรบการทดสอบการท างานโปรแกรม
7. Build โปรแกรมทเขยน โดยกอนหนานน click ขวา ท Target1 เลอก Options for Target ‘Target1’ ท Tab Output เลอก create hex file โดยเลอกท check box ‘Create Hex file’ File ท ไดจะมชอเหมอนกบชอโปรเจค คอ Lab04.hex สามารถเปลยนแปลงชอไดโดยแกชอ output file ลงในชอง ‘Name of Executable’
305381 Microcontroller Interface Lab 1 9
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
8. ใหนสตท าการทดลองทเหลอ โดยเมอท าการทดลองใหมใหสรางไฟลใหม เขยนโปรแกรมและ save เปนชอใหม เชน สรางไฟลใหมชอ Lab04_2.c (2แทนหมายเลขการทดลองท 2)
9. จากนน Click ท Source group แลว click ขวาท Lab04_1.c ซงอยใน Source group เลอก Remove file ’ Lab04_1.c’ เพอเอา file Lab04_1.c ออกจาก project
10. Click ขวาท Source group เลอก Add file to group แลวเลอก File Lab04_2.c
11. ท าการทดลองทเหลอทงหมด โดยการตอวงจรอธบายไวตอนตนของแตละโปรแกรม โดยทดลองปรบเปลยนทศทางและความเรวของ motor
12. การทดลอง 4.2 ใช Hyper Terminal แสดงผล
305381 Microcontroller Interface Lab 1 10
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
การทดลองท 4.1_________________________________________________________________________
/*File : LAB4_1.c
Description : DC motor drive
Clock : = 29.4912 MHz
Hardware: DC motor module
Compiler: Keil C Compiler*/
/*Connect IN1 to Port1.0, IN2 to Port1.1 and EN to
Port1.2*/
#include<reg52.h>
sbit IN1 = P1^0;
sbit IN2 = P1^1;
sbit EN = P1^2;
/********** BASIC FUNCTION **********/
void delay1 (unsigned int count) // mSec Delay
{ unsigned int i; // Keil CA51 (x2)
while (count) {
i = 100; while (i>0) i--;
count--; }
}
/********** MAIN PROGRAM **********/
void main()
{
P1 = 0xff;
while(1)
{
EN = 1;
IN1 = 0;
IN2 = 0;
delay1(40);
IN2 = 1;
IN1 = 0;
delay1(60);
}
}// end of main()
การทดลองท 4.2_________________________________________________________________________
/*File : LAB4_2.c
Description : DC motor drive and counter
Clock : 29.4912 MHz
Hardware: DC motor module
Software: Hyper terminal
Compiler: Keil C Compiler
*/
/*Connect OPA to P3.4 and use Counter0 to count*/
305381 Microcontroller Interface Lab 1 11
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
/*Connect IN1 to Port1.0, IN2 to Port1.1 and EN to
Port1.2*/
#include<reg51.h>
#include <absacc.h>
#include <stdio.h>
/********** 8255 I/O PORT **********/
sbit IN1 = P1^0;
sbit IN2 = P1^1;
sbit EN = P1^2;
int a,b;
void start232(void);
/********** DELAY FUNCTION **********/
void delay1 (unsigned int count) // Delay
{ unsigned int i; // Keil CA51 (x2)
while (count) {
i = 100; while (i>0) i--;
count--; }
}
/********** MAIN PROGRAM **********/
void main()
{
start232();
TR0=1;
while(1)
{
EN = 1;
IN1 = 0;
IN2 = 0;
delay1(50);
IN2 = 1;
IN1 = 0;
delay1(50);
a=TH0;
b=TL0;
printf("Counter0 = %d %d \n\r", a, b);
}
}// end of main()
//**************** Function
void start232(void)
{
// speed x 2
SCON = 0x52; // set RS232 parameter
TMOD = 0x25; // Timer0 as counter
// TH1 = -6; PCON |= 0x80; //19200
TH1 = -12; PCON |= 0x80;//9600
305381 Microcontroller Interface Lab 1 12
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
TR1 =1;
RI = 0;
}
การทดลองท 4.3_________________________________________________________________________
/*File : LAB4_3.c
Description : Stepping motor, 1-phase drive
Clock : 29.4912 MHz
Hardware: Stepping motor module, Step angle 18
Compiler: Keil C Compiler
*/
/*Connect INA to Port1.0, INB to Port1.1,INC to Port1.2 and IND to Port1.3*/
/* 1 phase drive*/
/*Step angle 18*/
#include<reg52.h>
int step;
/********** DELAY FUNCTION **********/
void delay1 (unsigned int count) // Delay
{ unsigned int i; // Keil CA51 (x2)
while (count) {
i = 100; while (i>0) i--;
count--; }
}
/********** MAIN PROGRAM **********/
void main()
{
step = 0x11;
while(1)
{
P1=step;
step = _crol_(step,1);
delay1(400);
}
}// end of main()
Reference
http://www.keil.com/support/man/docs/c166/c166_libref.htm
การบาน
1. จากการทดลอง 4.1 เขยนโปรแกรมเพอให motor หมนเรวดวยความเรว 3 ระดบ คอ ชา ปานกลาง และเรวและปรบทศทางการหมนของมอเตอร
305381 Microcontroller Interface Lab 1 13
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
2. จากการทดลอง 4.3 เขยนโปรแกรมเพอให motor หมนเรวดวยความเรว 3 ระดบ คอ ชา ปานกลาง และเรว โดยเปลยนเปนการขบแบบ 2-phase และ half step 3. จากการทดลอง 4.2 เขยนโปรแกรมเพอตรวจสอบและแสดงทศทางการหมนของมอเตอร