control_motor.c

来自「Embedded camera control program.」· C语言 代码 · 共 75 行

C
75
字号
#device  PIC16F877 *=16 ADC=10
#include <16f877.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>

#fuses XT,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,PUT
#use delay(clock=20000000) 	// 20 MhZ
#use rs232(baud=115200,parity=N,xmit=PIN_C6, rcv=PIN_C7)

#define Kp 0.8
//#define Ki 1.5

//A2:direction
//A5:brake
//C2:PWM
  int set_value=50;
  int16 xung;
  int16 duty=0;
  int16 err=0;
  float p=0;

#int_rtcc
void samplingtime()
  {
      xung = get_timer1();

   if (set_value>xung)
{
      err = (set_value - xung);
      printf("E=%lu  ",err);
      p= Kp*err;
      duty +=P;

     printf(" F= %lu ",duty);
     }
      //I = Ki*err_last;

      //duty += P;
      //duty=(duty>1023?1023:duty);
      //duty=(duty<50?50:duty);
      //printf("D=%ld  ",duty);
   else
      { err= (xung- set_value);
      printf(" E=%lu  ",err);
     P = Kp*err;
      duty -=P;
     printf(" F= %lu  ",duty);
   }
      set_pwm1_duty(duty);
     // err_last = err;

      set_timer1(0);
      set_timer0(60);
  }


void main()
{
    setup_CCP1(CCP_PWM);
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_TIMER0);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
   setup_timer_1 (T1_EXTERNAL);
   setup_timer_2 ( T2_DIV_BY_1, 255, 1);
   set_PWM1_duty(0);
   output_high(PIN_A2);
   output_high(PIN_A5);
   set_timer0(60);
   while(1)
   {

   }
}

⌨️ 快捷键说明

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