chương trình của em nhằm mục đích là ổn định tốc độ với sự thay đổi của tải.do mấy cái Ki,kp,kd chưa tìm ra nên e để thế.trong phần khai báo sửa lại mấy cái e0,e1,e2,u0 là những số có dấu.mục đích so sánh e0 với +- 200 là nhằm để hạn chế sai số thôi.ví dụ khi giá trị sai lệch lớn hơn 200 vòng thì mình cho U0=0,để hạn chế tốc độ.e k biết a k hiểu bài e chỗ nào nên cũng hơi khó nói.có gì thì a nói rõ hơn cho e với nha.
còn một cái nữa e muốn hỏi mọi người là e tạo xung vuông 10khz ở chân ccp1.(tần số thạch anh là 20Mhz,setup_timer_2(T2_div_by_4,124,1).thế mà khi mô phỏng bằng protues(cho osilicope vào chân ccp1 để quan sát và tính chu kỳ xung thì thấy nó k ra như thế.nó ra chu kỳ cỡ 3.6ms.tức là tần số nó nhỏ hơn.e k hiểu tại sao.đoạn code e viết ra để tạo xung nè.mọi người xem thử.
#include "E:\doan\123\123.h"
#use delay(clock=20000000)
#byte porta=0x05
#byte portc=0x07
#byte portd=0x08
main()
{
set_tris_c(0x01);
setup_ccp1(ccp_pwm);
setup_timer_2(T2_DIV_BY_4,124,1);//tao ra xung 10khz
set_pwm1_duty(100);
}
|