Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.48 MB, 103 trang )
[4] Trần Trọng Minh(2007), Giáo trình Điện tử cơng suất, Nhà xuất bản giáo dục.
[5] Nguyễn Đình Phú(2007), Giáo trình vi xử lý 2, Trường Đại học SPKT Thành
phố Hồ Chí Minh.
[6] PIC18F4431 datasheet.
[7] Prof. Ali Keyhani, Pulse-Width Modulation (PWM) Techniques – lecture 25,
Department of Electrical and Computer EngineeringThe Ohio State
University.
[8] TLP250, IGBT-FGA250N120 datasheet.
[9] WEBSITE- http://www.microchip.com.
73
PHỤ LỤC
#include <18f4431.h>
#device *=16 adc=8
#include
#include
#include
//#fuses WDT,WDT4096
#fuses PROTECT,HS,NOLVP,MCLR,NOBROWNOUT,H4
#use delay(clock=40000000)
#use rs232 (Baud=9600, xmit=PIN_d0, rcv=PIN_d1,bits=8,STOP=1)
//RS-232
parametres ,RECEIVE_BUFFER=100
#include"llcd_new.h"
#define mode input(pin_a3)
#define tang input(pin_a4)
#define giam input(pin_a5)
#define start input(pin_e0)
#define stop input(pin_e1)
#define rev input(pin_e2)
unsigned int16 i,j,xa,xb,xc,t,xt,t1_x;
unsigned int8 d,f_vr,f_key,mod,acc,dec,f_inp,adc,run,reverse;
int1 direction_flag;
//-------------------------------------------------------- varible in MODEs
int fmax,fmin;
int f,f_req,T_ramp_up=5,T_ramp_down=5,T_ramp_up_ms,T_ramp_down_ms;
//default value
///////////////////////////////////////////////////////
//PTPER*4*sqrt(3)*SIN {data[0] -> data[511] }
const unsigned int16 sine[800]={
400 , 403 , 406 , 409 , 412 , 415 , 418 , 421 , 425 , 428 , 431 , 434 , 437 , 440 , 443 ,
447 , 450 , 453 , 456 , 459 , 462 , 465 , 468 , 471 , 474 , 478 , 481 , 484 , 487 , 490 ,
493 , 496 , 499 , 502 , 505 , 508 , 511 , 514 , 517 , 520 , 523 , 526 , 529 , 532 , 535 ,
538 , 541 , 544 , 547 , 550 , 553 , 555 , 558 , 561 , 564 , 567 , 570 , 573 , 575 , 578 ,
581 , 584 , 587 , 589 , 592 , 595 , 598 , 600 , 603 , 606 , 608 , 611 , 614 , 616 , 619 ,
622 , 624 , 627 , 630 , 632 , 635 , 637 , 640 , 642 , 645 , 647 , 650 , 652 , 654 , 657 ,
659 , 662 , 664 , 666 , 669 , 671 , 673 , 676 , 678 , 680 , 682 , 685 , 687 , 689 , 691 ,
693 , 695 , 697 , 700 , 702 , 704 , 706 , 708 , 710 , 712 , 714 , 716 , 717 , 719 , 721 ,
723 , 725 , 727 , 729 , 730 , 732 , 734 , 736 , 737 , 739 , 741 , 742 , 744 , 745 , 747 ,
748 , 750 , 752 , 753 , 754 , 756 , 757 , 759 , 760 , 761 , 763 , 764 , 765 , 767 , 768 ,
769 , 770 , 771 , 773 , 774 , 775 , 776 , 777 , 778 , 779 , 780 , 781 , 782 , 783 , 784 ,
784 , 785 , 786 , 787 , 788 , 788 , 789 , 790 , 791 , 791 , 792 , 792 , 793 , 794 , 794 ,
795 , 795 , 796 , 796 , 796 , 797 , 797 , 797 , 798 , 798 , 798 , 799 , 799 , 799 , 799 ,
799 , 799 , 799 , 799 , 799 , 800 , 799 , 799 , 799 , 799 , 799 , 799 , 799 , 799 , 799 ,
798 , 798 , 798 , 797 , 797 , 797 , 796 , 796 , 796 , 795 , 795 , 794 , 794 , 793 , 792 ,
792 , 791 , 791 , 790 , 789 , 788 , 788 , 787 , 786 , 785 , 784 , 784 , 783 , 782 , 781 ,
780 , 779 , 778 , 777 , 776 , 775 , 774 , 773 , 771 , 770 , 769 , 768 , 767 , 765 , 764 ,
763 , 761 , 760 , 759 , 757 , 756 , 754 , 753 , 752 , 750 , 748 , 747 , 745 , 744 , 742 ,
741 , 739 , 737 , 736 , 734 , 732 , 730 , 729 , 727 , 725 , 723 , 721 , 719 , 717 , 716 ,
714 , 712 , 710 , 708 , 706 , 704 , 702 , 700 , 697 , 695 , 693 , 691 , 689 , 687 , 685 ,
682 , 680 , 678 , 676 , 673 , 671 , 669 , 666 , 664 , 662 , 659 , 657 , 654 , 652 , 650 ,
647 , 645 , 642 , 640 , 637 , 635 , 632 , 630 , 627 , 624 , 622 , 619 , 616 , 614 , 611 ,
608 , 606 , 603 , 600 , 598 , 595 , 592 , 589 , 587 , 584 , 581 , 578 , 575 , 573 , 570 ,
567 , 564 , 561 , 558 , 555 , 553 , 550 , 547 , 544 , 541 , 538 , 535 , 532 , 529 , 526 ,
523 , 520 , 517 , 514 , 511 , 508 , 505 , 502 , 499 , 496 , 493 , 490 , 487 , 484 , 481 ,
478 , 474 , 471 , 468 , 465 , 462 , 459 , 456 , 453 , 450 , 447 , 443 , 440 , 437 , 434 ,
431 , 428 , 425 , 421 , 418 , 415 , 412 , 409 , 406 , 403 , 399 , 396 , 393 , 390 , 387 ,
384 , 381 , 378 , 374 , 371 , 368 , 365 , 362 , 359 , 356 , 352 , 349 , 346 , 343 , 340 ,
337 , 334 , 331 , 328 , 325 , 321 , 318 , 315 , 312 , 309 , 306 , 303 , 300 , 297 , 294 ,
291 , 288 , 285 , 282 , 279 , 276 , 273 , 270 , 267 , 264 , 261 , 258 , 255 , 252 , 249 ,
246 , 244 , 241 , 238 , 235 , 232 , 229 , 226 , 224 , 221 , 218 , 215 , 212 , 210 , 207 ,
204 , 201 , 199 , 196 , 193 , 191 , 188 , 185 , 183 , 180 , 177 , 175 , 172 , 169 , 167 ,
164 , 162 , 159 , 157 , 154 , 152 , 149 , 147 , 145 , 142 , 140 , 137 , 135 , 133 , 130 ,
128 , 126 , 123 , 121 , 119 , 117 , 114 , 112 , 110 , 108 , 106 , 104 , 102 , 99 , 97 , 95
, 93 , 91 , 89 , 87 , 85 , 83 , 82 , 80 , 78 , 76 , 74 , 72 , 70 , 69 , 67 , 65 , 63 , 62 , 60 ,
58 , 57 , 55 , 54 , 52 , 51 , 49 , 47 , 46 , 45 , 43 , 42 , 40 , 39 , 38 , 36 , 35 , 34 , 32 ,
31 , 30 , 29 , 28 , 26 , 25 , 24 , 23 , 22 , 21 , 20 , 19 , 18 , 17 , 16 , 15 , 15 , 14 , 13 ,
12 , 11 , 11 , 10 , 9 , 8 , 8 , 7 , 7 , 6 , 5 , 5 , 4 , 4 , 3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 , 1 , 0 , 0 ,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,3,3,3,
4 , 4 , 5 , 5 , 6 , 7 , 7 , 8 , 8 , 9 , 10 , 11 , 11 , 12 , 13 , 14 , 15 , 15 , 16 , 17 , 18 ,
19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 28 , 29 , 30 , 31 , 32 , 34 , 35 , 36 , 38 , 39 ,
40 , 42 , 43 , 45 , 46 , 47 , 49 , 51 , 52 , 54 , 55 , 57 , 58 , 60 , 62 , 63 , 65 , 67 ,
69 , 70 , 72 , 74 , 76 , 78 , 80 , 82 , 83 , 85 , 87 , 89 , 91 , 93 , 95 , 97 , 99 , 102 ,
104 , 106 , 108 , 110 , 112 , 114 , 117 , 119 , 121 , 123 , 126 , 128 , 130 , 133 ,
135 , 137 , 140 , 142 , 145 , 147 , 149 , 152 , 154 , 157 , 159 , 162 , 164 , 167 ,
169 , 172 , 175 , 177 , 180 , 183 , 185 , 188 , 191 , 193 , 196 , 199 , 201 , 204 ,
207 , 210 , 212 , 215 , 218 , 221 , 224 , 226 , 229 , 232 , 235 , 238 , 241 , 244 ,
246 , 249 , 252 , 255 , 258 , 261 , 264 , 267 , 270 , 273 , 276 , 279 , 282 , 285 ,
288 , 291 , 294 , 297 , 300 , 303 , 306 , 309 , 312 , 315 , 318 , 321 , 325 , 328 ,
331 , 334 , 337 , 340 , 343 , 346 , 349 , 352 , 356 , 359 , 362 , 365 , 368 , 371 ,
374 , 378 , 381 , 384 , 387 , 390 , 393 , 396 };
///////////////////////////////////////////////////////////////////////////
void RAM_DOWN_SPEED() //giam toc
{
T_ramp_down_ms=(T_ramp_down*1000)/fmax;
while(f>f_req)
{
f=f-1;
if(f>0)
{
delay_ms(T_ramp_down_ms); // 0.05s/Hz
}
else
{
set_power_pwm0_duty(0);
set_power_pwm2_duty(0);
set_power_pwm4_duty(0);
}
if(f
{
f=f_req; //f=f_req when ram speed finished !
}
if(reverse==0) //chay thuan
{
lcd_gotoxy(1,2);//cot,dong 2
printf(lcd_putc,"MOTOR: RUN -F:%u ",f);
}
else if(reverse==1) //chay nguoc
{
lcd_gotoxy(1,2);//cot,dong 2
printf(lcd_putc,"MOTOR: RUN -R:%u ",f);
}
}
}
void RAM_UP_SPEED() //tang toc
{
T_ramp_up_ms=(T_ramp_up*1000)/fmax;
while(f
{
f=f+1;
delay_ms(T_ramp_up_ms); // 0.05s/Hz
if(f>f_req)
{
f=f_req; //f=f_req when ram speed finished !
}
if(reverse==0) //chay thuan
{
lcd_gotoxy(1,2);//cot,dong 2
printf(lcd_putc,"MOTOR: RUN -F:%u ",f);
}
else if(reverse==1) //chay nguoc
{
lcd_gotoxy(1,2);//cot,dong 2
printf(lcd_putc,"MOTOR: RUN -R:%u ",f);
}
}
}
//////////////////
void quet_phim()
{
//phim tang dc nhan
if(tang==0)
{
if(mod==1) //cho phep thay doi tan so bang nut nhan
{
if(f_key<50) f_key=f_key+1;
delay_ms(250);
}
else if(mod==2) //cho phep thay doi thoi gian tang toc
{
if(acc<10) acc=acc+1;
delay_ms(250);
}
else if(mod==3) //cho phep thay doi thoi gian giam toc
{
if(dec<10) dec=dec+1;
delay_ms(250);
}
else if(mod==4) //chon dau vao tan so
{
f_inp=f_inp+1;
if(f_inp>2) f_inp=1;
delay_ms(250);
}
}
//phim giam dc nhan
if(giam==0)
{
if(mod==1) //cho phep thay doi tan so bang nut nhan
{
if(f_key>0) f_key=f_key-1;
delay_ms(250);
}
else if(mod==2) //cho phep thay doi thoi gian tang toc
{
if(acc>0) acc=acc-1;
delay_ms(250);
}
else if(mod==3) //cho phep thay doi thoi gian giam toc
{
if(dec>0) dec=dec-1;
delay_ms(250);
}
else if(mod==4) //chon dau vao tan so
{
f_inp=f_inp-1;
if(f_inp<1) f_inp=2;
delay_ms(250);
}
}
////////nut OK dc nhan
if(mode==0)
{
mod=mod+1;
if(mod>4) mod=1;
delay_ms(250);
}
if(start==0)
{
run=1;
//chay thuan
lcd_gotoxy(1,2);//cot,dong 2
printf(lcd_putc,"MOTOR: RUN -F:%u ",f_req);
}
if(stop==0)
{
run=0;
//chay nguoc
lcd_gotoxy(1,2);//cot,dong 2
printf(lcd_putc,"MOTOR: STOP");
}
if(rev==0)
{
//dao chieu dong co
f_req=0;
RAM_DOWN_SPEED();
reverse=reverse+1;
if(reverse>=2) reverse=0;
delay_ms(200);
if(reverse==0)
{
lcd_gotoxy(12,2);//cot,dong 2
printf(lcd_putc,"-F:%u ",f_req);
}
else
{
lcd_gotoxy(12,2);//cot,dong 2
printf(lcd_putc,"-R:%u ",f_req);
}
}
}
//////////////////////////////
void hien_thi()
{
///////////////////////////////////////////
if(mod==1) //thay doi tan so
{
if(f_inp==1) //thay doi bang VR
{
set_adc_channel(0);
adc=read_adc();
f_vr=adc/5;
if(f_vr>=50) f_vr=50;
lcd_gotoxy(1,1);//cot 1,dong 1
printf(lcd_putc,"VR * F(Hz):%u ",f_vr);
}
else if(f_inp==2) //thay doi tan so bang Key
{
lcd_gotoxy(1,1);//cot 1,dong 1
printf(lcd_putc,"KEY * F(Hz):%u ",f_key);
}
}
else if(mod==2)
{
lcd_gotoxy(1,1);//cot 1,dong 1
printf(lcd_putc,"TANG TOC(s):%u ",acc);
}
else if(mod==3)
{
lcd_gotoxy(1,1);//cot 1,dong 1
printf(lcd_putc,"GIAM TOC(s):%u ",dec);
}
else if(mod==4)
{
if(f_inp==1) //nhap tan so = VR
{
lcd_gotoxy(1,1);//cot 1,dong 1
printf(lcd_putc,"NHAN TAN SO: VR ");
}
if(f_inp==2) //nhap tan so = key
{
lcd_gotoxy(1,1);//cot 1,dong 1
printf(lcd_putc,"NHAN TAN SO: KEY ");
}
}
}
////////////////////////ngat timer 1
#INT_timer1
void isr_timer1()
{ //
//output_toggle(pin_b7);
xa=xa+1;
if(xa>800) xa=0;
xb=xa+266;
if(xb>800) xb=xb-800;
xc=xa+532;
if(xc>800) xc=xc-800;
if(direction_flag==1) //FORWARD direction// chay thuan
{
set_power_pwm0_duty(sine[xa]);
set_power_pwm2_duty(sine[xb]);
set_power_pwm4_duty(sine[xc]);