直流无刷电机控制PIC程序Word文档下载推荐.docx

上传人:b****6 文档编号:17506067 上传时间:2022-12-06 格式:DOCX 页数:18 大小:73.97KB
下载 相关 举报
直流无刷电机控制PIC程序Word文档下载推荐.docx_第1页
第1页 / 共18页
直流无刷电机控制PIC程序Word文档下载推荐.docx_第2页
第2页 / 共18页
直流无刷电机控制PIC程序Word文档下载推荐.docx_第3页
第3页 / 共18页
直流无刷电机控制PIC程序Word文档下载推荐.docx_第4页
第4页 / 共18页
直流无刷电机控制PIC程序Word文档下载推荐.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

直流无刷电机控制PIC程序Word文档下载推荐.docx

《直流无刷电机控制PIC程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《直流无刷电机控制PIC程序Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。

直流无刷电机控制PIC程序Word文档下载推荐.docx

protect_num=0;

trial=0b10110000;

tri=0x00;

lkk=10;

hall_num=0x00;

//运行标志---0,未运行,停止

//开始为自动

hall_number=0x00;

run_flag=0;

flag_autohand=1;

pwm_cycle=240;

//pwm_hi=pwm_cycle-5;

pwm_hi=pwm_cycle-1;

pwm_real=pwm_cycle;

//实际pwm占空比为pwm周期上限

pwm_lo=0x0A;

//设定下限+++++++++++++++++++++++++++++++++++++++

++++++++

voidnointerupt_chushihua()

INTCON=0X00;

voidIo_chushihua()

//禁止中断

//RA0/AN0--VOLTAGE电压采样,右对

//ADCON1=0x8e;

齐1

ADCON1=0x86;

TRISA=0x09;

保护)--输出,0--不保护,1--保护;

//RA1---

//RA2---

//RA3---

//RA4---

//RA5RSW1,继电器,输出0,软启充电

PORTA=PORTA&

0x09;

//RA1=0,输出低电平,PSW1,继

电器断

//设定RA0--RA6设定为I/O口;

//RA0---PROTECT保护(电流保护和过温

PSW1,继电器,输出,0,电源接通指示灯,输出按键,加,输入指示灯,输出

0--->

>

1

//RA2=0,

//RA4=0,

//RA5=0,

输出低电平,指示灯灭

输出低电平;

指示灯灭继电器

 

TRISB=0xfe;

//RB7=1,

空-

-输入

//RB6=1--

--HA,

输入

//RB5=1--

--HB,

//RB4=1--

--HC,

//RB3=1--

输入,

按钮

//RB2=1--

"

丿

//RB1=1--

自/手选择

,输入,

//RB0=0--

--ST/STOP

,输出,

PORTB=PORTB&

0xfe;

//RB0=0,--

输出低电平,

RBPU=0;

//RB端口内部弱上拉电路禁止

开关

控制GAL

禁止GAL输

TRISC=0x02;

//RC7---A1+,PWMA1+,输出0

//RC6---A1,输出0

//RC5--

//RC4--

//RC3--

//RC2--

//RC1--

//RC0--

PORTC=0x06;

voidprotect()

GIE=0;

pwm_real=pwm_hi;

CCPR1L=pwm_real;

CCPR1H=0x00;

CCP1CON=0x0c;

PR2=pwm_cycle;

TRISC=TRISC&

0xfb;

B1+,输出0

B1,输出0

C1+,输出0

CCP1(PWM),输出,死区0

-减,输入,按钮1

C1,输出0

//过流和过温保护

//关全局中断

//PWM_realPWM实时值

//设置PWM输出为最大

//

//CCP1选择为PWM工作方式//设置PWM的周期

//设置RC2---PWM输出

//CCP1选择为PWM工作方式

//设置PWM的周期

//分频系数=0x00

//启用TMR2

//RB0=0,输出低电平,禁

T2CON=0x00;

TMR2ON=1;

PORTC=0x00;

止GAL输出

while

(1)

PORTA^=0b00010100;

delay(15000);

voidprotect_run()

PORTB=PORTB&

//PORTAA=0b00010000;

PORTAA=0b00000100;

voidPWM_chushihua()

//CCPR1L=0xa0;

//CCPR1H=0x00;

run_num=0;

TRISC=TRISC&

voidopen_loopf()

k=0b00011000;

s=PORTC&

0b00000110;

//延时

//RA4闪动

//RA2闪动

//开环运行50次,启动

//5//HA,HB,HC,

//101,B-C+

//1011

//11//

k=0b10010000;

//4s=PORTC&

PORTC=k|s;

delay(8000);

k=0b10000001;

//6s=PORTC&

k=0b00100001;

//2s=PORTC&

k=0b01100000;

//3s=PORTC&

k=0b01001000;

//1s=PORTC&

}voidinterruptRB4_int()

{charth;

run_num++;

if(run_num>

10){run_num=10;

}m=PORTB;

//RB7-HA,RB5-HB,RB4-HCm&

=0xB0;

mA=0x90;

//A=/A,B=B,C=/C

n=m>

4;

switch(n)

//case1:

k=0b01001000;

break;

//case3:

k=0b01100000;

//case2:

k=0b00100001;

//case10:

//case8:

k=0b10010000;

//case9:

k=0b00011000;

//default:

k=0b00000000;

输出为无效

case1:

case3:

case2:

case10:

case8:

k=0b10000001;

case9:

default:

出为无效

}s=PORTC&

PORTC=k|s;

//取RC1,RC2状态//输出PORTC//RB7=0//RB5=0//RB4=0

//每20次测试一次

if(RB7==0){trial&

=0b00110000;

}if(RB5==0){trial&

=0b10010000;

}if(RB4==0){trial&

=0b10100000;

}if(lkk>

1){lkk--;

//tri=n;

//if//RB7=0

//if//RB5=0

//if//RB4=0

((tri&

=0b00001000)==0)

=0b00000010)==0)

=0b00000001)==0)

{trial&

//PWM_realPWM

//CCP1选择为PWM工

//RB0=0,输出低电

//if(lkk>

2){lkk--;

else

while(trial!

=0b00000000)

实时值

作方式

平,禁止GAL输出

PORTAWbOOOIOOOO;

for(jm=15000;

jm>

jm--){asm("

RBIF=0;

voidmax_min_compare()

if(pwm_real>

pwm_hi)pwm_real=pwm_hi;

if(pwm_real<

pwm_lo)pwm_real=pwm_lo;

}

main(void)

主电路充电延时

for(charge_delay=0;

charge_delay<

50;

charge_delay++)

//RA5-RSW1发送低电平,

para_chushihua();

nointerupt_chushihua();

Io_chushihua();

PWM_chushihua();

RA1=0;

接通电源

RA5=0;

RA2=0;

RA4=0;

delay(100);

RB0=0;

禁止GAL输出

RA1=1;

RA5=1;

PP:

asm("

nop"

标志设定

RBIE=0;

设置

while(run_flag==0)//

if(RB2==0)run_flag=1;

}while(run_flag==1)

//参数初始化

//禁止中断初始化

//I/O初始化

//PWM初始化

//RA1-PSW1发送低电平,

//RA2,指示灯灭

//RA4,指示灯灭

//主电路充电延时

//ST/(-STOP)发送低电平,

//RA1-PSW1发送高电平,

//RA5-RSW1发送高电平,//主电路充电延时

//禁止RB4-7中断,清RBIF

II禁止RB4-7中断,RBIE设

IIRA2,指示灯灭

IIRA4,指示灯灭

II运行标志---由RB2按钮

II主程序

IIRB2启动键,低电平有效

II运行标志---由RB2按钮设

II延时

II

II运行,则执行

intope;

intopenloopn;

RB0=1;

开放GAL输出delay(100);

RA4=1;

//pwm_real=180;

pwm_real=230;

delay(500);

//ope=10;

ope=3;

//设定开环运行次数为12次

//ST/(-STOP)发送高电平,

//设定开环运行次数为20

for(openloopn=0;

openloopn<

=ope;

openloopn++)

00000000000000000

值130

open_loopf();

//000000000000000000delay(6000);

RBIE=1;

GIE=1;

RA2=1;

ghl:

//0

//设置开环下PWM输出

//开环运行20次,启动

//

//RB4-7中断,RBIF标志设

//RB4-7中断,RBIE设定

//开全局中断

if((pwm_real<

110)&

&

(run_num<

10))//如果pwm_real<

140,但是run_num<

10,表明未动,则

{//protect_run();

protect_run();

//RA0=1,过流和过温保护

//调用延时程序

如果30次保护,则认为是真正保护

if(RB1==1)flag_autohand=1;

elseflag_autohand=0;

//自/手标志设定,标志设

//RB1=1---AUTO;

自动

//RB1=0---HAND;

手动//

if(flag_autohand==1)

111111*********111

pwm_lo)pwm_real-=1;

//

elsepwm_real=pwm_lo;

//111111*********11111

自动

if(RA3==0)

//加(低有效),则

pwm_hi)pwm_real+=1;

elsepwm_real=pwm_hi;

if(RC1==0)

//减(低有效),则

elsepwm_real=pwm_lo;

}max_min_compare();

CCPR1L=pwm_real;

delay(4500);

while(RA0==1)护输入,高电平保护

//设置PWM输出

//调用延时子程序

//RA0过流和过温保

protect();

while(RB3==0)

{//RB3停机键,低电平有效

//运行标志---由RB3按钮

if(run_flag==0)//停机,则跳转至

for(;

pwm_real<

pwm_hi;

pwm_real++)

delay(2000);

禁止GAL输出para_chushihua();

run_num=0;

gotoPP;

//至上限否?

//ST/(-STOP)发送低电平,//参数初始化

//run_num=0;

gotoghl;

//gotoPP;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 环境科学食品科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1