直流无刷电机控制PIC程序(最新)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#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输出