⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 control_motor3.c

📁 Embedded camera control program.
💻 C
字号:
#include <16F877.h>
//#device  PIC16F877 *=16 ADC=10
#include <stdlib.h>
#include <math.h>
#fuses hs, nowdt, noprotect, put, nolvp, brownout
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)

#define Kp 1.88
#define Ki 0.1
    //char s[10];
  int16 set_value=50;
  int16 xung;
  int16 error=0;
  float error_p;
  float error_pi;
  signed   int16 duty=0;
  int16 error_before=0;
   #int_RTCC
   void samplingtime()
 {
   xung=get_TIMER1();
  if (set_value>=xung)
   {
     error = set_value-xung;
     printf("E=%ld  ",error);
     error_p = error*Kp;
     error_pi = error_p + error_before*Ki;
     duty += (int16)(error_pi);
     duty=(duty>1023?1023:duty);
     //printf("D=%ld   ",duty);

   }
  else
  {
    error = xung - set_value;
    printf("E=%ld  ",error);
    error_p = error*Kp;
    error_pi = error_p + error_before*Ki;
    duty -= (int16)(error_pi);
    duty=(duty<60?60:duty);
    printf("D=%ld   ",duty);
  }
   set_PWM1_duty(duty);
   error_before=error;
   set_timer1(0);
   set_timer0(60);
 }
void main()
{
/*
   gets(s);
   Kp=atof(s);
   printf("%f ",Kp);
   gets(s);
   Ki=atof(s);
   printf("%f ",Ki);
*/
   setup_TIMER_0(RTCC_INTERNAL|RTCC_DIV_256);
   setup_CCP1(CCP_PWM);
   setup_TIMER_2(T2_DIV_BY_1, 255, 1);
   setup_TIMER_1( T1_EXTERNAL );

      enable_interrupts(GLOBAL);
      enable_interrupts(INT_TIMER0);

   set_PWM1_duty(0);
   output_high(PIN_A2);
   output_high(PIN_A5);
   set_timer0(60);     //sampling_time = (255-60)*4*256/20000000=9.984 ms
   while (1)
   {
   }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -