📄 control_motor.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 + -