PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 03-01-2015, 03:49 PM   #1
mrbean8910
Nhập môn đệ tử
 
Tham gia ngày: Jun 2011
Bài gửi: 2
:
Exclamation [Help] PID và PWM

Các anh trong diễn đàn chỉ giúp e bài này cái.
E nhờ thằng bạn viết dùm nhưng khi nap thực tế vào mạch thì ngõ ra PWM không có tín hiệu gì (dùng VOM đo PWM thì chẳng có điện áp), hiện tại không liên lạc đc với nó nên đành post lên đây mong mọi người chỉ giúp dùm e cai. Em không hiểu sao để xuất được PWM ra để điều khiển nhiệt độ (dùng đèn 12V qua FET để kich dẫn), hay trong bài code của e có gì sai.

Code:
#include "30F2010.h"
#device adc=10
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES CKSFSM                   //Clock Switching is enabled, fail Safe clock monitor is enabled
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#device ICSP=1
#use delay(crystal=16000000)
#use rs232(xmit=PIN_F3, rcv=PIN_F2, baud=9600, stream=RS232_PORT1) // duong RS232 RX:F2, TX:F3
void tinhtoan_FUZZY(float nhietdo); // tinh toan mo
float tinhtoan_PID(float nhietdo, float KP,float  KI,float KD); // tinh toan PID
float PID_pwm_tinhtoan=0;
float e1,e2,e_sum,e_del;
float KP_out=0,KI_out=0,KD_out=0;
/////////////// cac gia tri sau deu tu thuc nghiem //////////////////////////////////////////////////
float KP_in[3]={12.5,14.5,17.6};// min max kp
float KI_in[3]={1.07,2.46,4.23};// min max ki
float KD_in[3]={0.2,1,2.31};// min max kd
////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
char i=0;
float temp=0; 
float nhietdothuc=0;
float dt_nhietdo=0;
char nhietdo=0;
unsigned int16 PID_pwm=0;
set_tris_b(0b10000001);
set_tris_d(0b10000000);
setup_adc_ports(sAN0, VSS_VDD); /// chan B0 doc gia tri dien ap tu LM35 vao
setup_adc(ADC_CLOCK_DIV_4 | ADC_TAD_MUL_0);
setup_timer2(TMR_INTERNAL | TMR_DIV_BY_1, 3999);
setup_compare(1, COMPARE_PWM | COMPARE_TIMER2); // su dung kenh pwm1 dieu khen IRF cong xuat ( bong den)
set_pwm_duty(1, 0);  // xuat xung pwm ra kenh pwm1
set_ADC_channel(0);
delay_ms(1);
while(true)
 {
  for(i=0;i<200;i++) 
     {
     temp +=read_adc();
     delay_us(500);
     }
  dt_nhietdo=read_adc(); // vi phan nhiet do
  dt_nhietdo=dt_nhietdo*0.4883;
  temp=temp/200; // nhiet do trung binh cua 200 lan lay mau
  nhietdothuc = temp*0.4883; // doi sang do C
  nhietdo=(char)nhietdothuc;
  putc(nhietdo); // goi gia tri nhiet do len pc qua RS232
  
  tinhtoan_FUZZY(dt_nhietdo); // mo de lay ra gia tri kpout,kiout,kdout cho ham tinh toan pid
  PID_pwm_tinhtoan=tinhtoan_PID(nhietdothuc, KP_out,KI_out,KD_out); /// nhap gia tri Kp Ki ,Kd tu ham tinh FUZZY
  
  PID_pwm=(unsigned int16)PID_pwm_tinhtoan; 
  set_pwm_duty(1,PID_pwm);;

 }
}
//////////////////////////////////////////////////////////////////////////////////
void tinhtoan_FUZZY(float nhietdo)
{
   if(nhietdo<30){KP_out=KP_in[0];KI_out=KI_in[0];;KD_out=KD_in[0];}
   else if(nhietdo<35){KP_out=KP_in[1];KI_out=KI_in[0];;KD_out=KD_in[0];}
   else if(nhietdo<40){KP_out=KP_in[2];KI_out=KI_in[0];;KD_out=KD_in[0];}
   else if(nhietdo<45){KP_out=KP_in[2];KI_out=KI_in[1];;KD_out=KD_in[1];}
   else if(nhietdo<50){KP_out=KP_in[2];KI_out=KI_in[2];;KD_out=KD_in[2];}
   else {KP_out=0,KI_out=0,KD_out=0;}
}
/////////////////////////////////////////////////////////////////////////////////
float tinhtoan_PID(float nhietdo, float KP,float  KI,float KD)
{
   float pwm;
   e2 = 50 - nhietdo;
   e_sum = e1+ e2;
   e_del = e2 - e1;
   e1 = e2;
   pwm += KP*e2 + KI*e_sum + KD*e_del; // phep cong don
   if (pwm < 799) pwm = 799;
   if (pwm> 3999) pwm = 3999;            
   return pwm;                     
}
/////////////////////////////////////////////////////////////////////////////////
Có gì sai, không đúng mong anh em chỉ dùm e
Thanks
mrbean8910 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 05:51 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam