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

📄 control_motor.c

📁 Embedded camera control program.
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -