直流无刷电机控制PIC程序(最新)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include //2008.4.24--14点00分

#include

#include

int charge_delay,jm,lkk,trial,run_num,protect_num;

char m,n,k,s,L,tri;

char hall_num; //循环次数

char hall_number; //1+3+2+10+8+9=33(一个循环和),hallless_protect()

int pwm_hi; // pwm占空比上限

int pwm_cycle; // pwm周期

int pwm_lo; // pwm占空比下限,由A/D结果确定

int pwm_real; // pwm占空比实际

int ad_result; // A/D转换结果

bit ghy,run_flag; //运行标志---0,未运行,停止

bit flag_autohand; //开始为-----自动

void delay(delay_num)

int delay_num;

{

int j;

for (j=delay_num;j>1;j--)

{

asm("nop");

}

}

union adres

{

int y1;

unsigned char adre[2];

}adresult;

void para_chushihua()

{

protect_num=0;

trial=0b10110000;

tri=0x00;

lkk=10;

hall_num=0x00;

hall_number=0x00;

run_flag=0; //运行标志---0,未运行,停止

flag_autohand=1; //开始为-----自动

pwm_cycle= 240; // pwm周期

// pwm_hi=pwm_cycle-5; // pwm占空比上限

pwm_hi=pwm_cycle-1; // pwm占空比上限

pwm_real=pwm_cycle; // 实际pwm占空比为pwm周期上限pwm_lo=0x0A; //设定下限+++++++++++++++++++++++++++++++++++++++++++++++

}

void nointerupt_chushihua()

{

INTCON=0X00; //禁止中断

}

void Io_chushihua()

{

// ADCON1=0x8e; //RA0/AN0--VOLTAGE 电压采样,右对齐1 ADCON1=0x86; //设定RA0--RA6设定为I/O口;

TRISA =0x09; //RA0---PROTECT保护(电流保护和过温保护)--输出,0--不保护,1--保护;

//RA1----PSW1,继电器,输出,0,电源接通

//RA2----指示灯,输出0--->>

//RA3----按键,加,输入 1

//RA4----指示灯,输出0--->>

//RA5----RSW1,继电器,输出0,软启充电PORTA=PORTA&0x09; //RA1=0,----输出低电平,PSW1,继电器断

//RA2=0,----输出低电平,指示灯灭

//RA4=0,----输出低电平,指示灯灭

//RA5=0,----输出低电平,RSW1,继电器断

RBPU=0; //RB端口内部弱上拉电路禁止

TRISB =0xfe; //RB7=1, 空----输入

//RB6=1----HA,输入

//RB5=1----HB,输入

//RB4=1----HC,输入

//RB3=1----停,输入,按钮

//RB2=1----启,输入,按钮

//RB1=1----自/手选择,输入,开关

//RB0=0----ST/STOP,输出,控制GAL PORTB=PORTB&0xfe; //RB0=0,----输出低电平,禁止GAL输出TRISC =0x02; //RC7---A1+,PWMA1+,输出0

//RC6---A1, 输出0

//RC5---B1+,输出0

//RC4---B1,输出0

//RC3---C1+,输出0

//RC2---CCP1(PWM),输出,死区0

//RC1----减,输入,按钮 1

//RC0---C1,输出0 PORTC=0x06;

}

void protect()

{ //过流和过温保护

GIE=0; //关全局中断

pwm_real=pwm_hi; //PWM_real----PWM实时值

CCPR1L=pwm_real; //设置PWM输出为最大

CCPR1H=0x00; //

CCP1CON=0x0c; //CCP1选择为PWM工作方式

PR2=pwm_cycle; //设置PWM的周期

TRISC=TRISC&0xfb; //设置RC2---PWM输出

T2CON=0x00; //分频系数=0x00

TMR2ON=1; //启用TMR2

PORTC=0x00; //

PORTB=PORTB&0xfe; //RB0=0,----输出低电平,禁止GAL输出

相关文档
最新文档