資源簡(jiǎn)介
在protues平臺(tái)建立直流電機(jī)速度控制仿真系統(tǒng),通過(guò)pic單片機(jī)對(duì)其開關(guān)、加減速、正反轉(zhuǎn)進(jìn)行控制

代碼片段和文件信息
/************交流學(xué)習(xí)個(gè)人?QQ:105609700*******************************/
/**電機(jī)速度控制器******/
/******功能描述**********/
/*
開機(jī)狀態(tài):key1---停止/開啟;key2---加速;key3---減速;Key4---方向
*/
/******硬件描述***********/
/*
MPLAB?IDE?v?8.4?,HI-TECH?C?PRO?v9.65,?PIC16F883,??4MHz
*/
#include
#define key1?RB0//開/關(guān)鍵
#define key2?RB1//加速
#define key3?RB2//減速
#define?key4?RB3//方向
const?unsigned?char?ucduty[]={0x170x200x260x2C0X330X3D};//占空比:40%、50%、60%、70%;賦給CCPRxL,低兩位忽略。
volatile?bit?status=0;//0:電機(jī)停止?fàn)顟B(tài);1:電機(jī)轉(zhuǎn)動(dòng)狀態(tài)
volatile?bit?orient=0;//0:反轉(zhuǎn);1:正轉(zhuǎn);
volatile?signed?int?uclevel=0;//檔位狀態(tài);uclevel=1234;
/****PWM模塊初始化****/
void?init_CCP(void)
{
CCP1CON=0x3C;//bit5-4:10位占空比的低兩位;P1A?和P1C?為高電平有效;?P1B?和P1D?也為高電平有效;
CCP2CON=0x3C;
TRISC=0x06;//b0000?0110TRISC1TRISC2設(shè)置為輸入,關(guān)閉PWM輸出驅(qū)動(dòng)器。
PR2=0X3E;//PWM頻率設(shè)為1KHz;
}
/********端口B按鍵掃描初始化**********/
void?init_PROTB()
{
ANSELH=0x00;//將B端口設(shè)置為I/O口。
TRISB=0XFF;//設(shè)置為輸入。
// IOCB=0x07;//RB0、RB1、RB2允許點(diǎn)評(píng)變換中斷。
// PEIE?=?1;
//? GIE?=?1;
//必須初始化ANSELH?寄存器以將模擬通道配置為數(shù)字輸入。配置為模擬輸入的引腳
}
/******PWM子程序*******/
void?PWM(void)
{
CCPR2L=ucduty[uclevel];//設(shè)置占空比;
CCPR1L=ucduty[uclevel];//設(shè)置占空比;
TMR2IF=0;//清空timer2中斷標(biāo)志位;
T2CON=0x06;//設(shè)1:16預(yù)分頻;timer2使能;
//TRISC=0x00;//b0000?0000TRISC1TRISC2設(shè)置為輸出,打開PWM輸出驅(qū)動(dòng)器。
}
/********中斷函數(shù)******/
void?interrupt?motorcon()?
{ ?
if(RBIF)
{
RBIF=0;
}
}
/*****鍵盤掃描程序**********/
void?scan()
{
if(key1)
{
_delay(200);//延時(shí)200ms去抖。
if(key1)
{
if(status==0)
{
TRISC3=0;
RC3=1;//L293D使能;
status=1;
while(key1);
}
else
{
TRISC3=0;
RC3=0;//L293D使能;
status=0;
while(key1);
}
}
}
if(key2)
{
_delay(200);//延時(shí)200ms去抖。
if(key2)
{
/* if(status==0)//若處于停止?fàn)顟B(tài)
{
if(orient)//若處于反正轉(zhuǎn)設(shè)置方向,
{
TRISC2=1;//關(guān)閉CCP1輸出
RC2=0;
TRISC1=0;//開啟CCP2輸出
orient=0;//設(shè)為正反轉(zhuǎn)方向
while(key2);
}
else
{
TRISC2=0;//開啟CCP1輸出
TRISC1=1;//關(guān)閉CCP2輸出
RC1=0;
orient=1;//設(shè)為反轉(zhuǎn)方向
while(key2);
}
}
else?//若處于轉(zhuǎn)動(dòng)狀態(tài)
{
uclevel++;
if(uclevel==6)
uclevel=5;
PWM();
while(key2);
}
*/
uclevel++;
if(uclevel>=5)
uclevel=5;
PWM();
while(key2);
}
}
if(key3)
{
_delay(200);//延時(shí)200ms去抖。
if(key3)
{
/* if(status==0)//若處于停止?fàn)顟B(tài)
{
uclevel++;
if(uclevel==5)
uclevel=0;
PWM();
while(key3);
}
else
{
uclevel--;
if(uclevel<=0)
uclevel=0;
PWM();
while(key3);
}
*/
uclevel--;
if(uclevel<=0)
uclevel=0;
PWM();
while(key3);
}
}
if(key4)
{
_delay(200);//延時(shí)200ms去抖。
if(key4)
{
if(orient==0)//若處于反正轉(zhuǎn)設(shè)置方向,
{
while(RC2);//防止在CCP1高電平時(shí)關(guān)閉CCP1;
TRISC=0x04;//關(guān)閉CCP1輸出開啟CCP2輸出;0000?0100;
orient=1;//設(shè)為正反轉(zhuǎn)方向
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????97099??2011-11-30?01:12??motorcontroller_simulation\Backup?Of?motor?controller.DBK
?????文件??????96976??2011-11-29?20:43??motorcontroller_simulation\Last?Loaded?motor?controller.DBK
?????文件?????118443??2011-12-01?00:33??motorcontroller_simulation\motor?controller.DSN
?????文件???????1102??2012-01-03?23:43??motorcontroller_simulation\motor?controller.PWI
?????文件???????1859??2011-12-01?00:32??motorcontroller_simulation\Motorcontroller.hex
?????文件???????3729??2012-01-04?00:01??motorcontroller_simulation\Motorcontroller.c
?????目錄??????????0??2011-12-01?00:33??motorcontroller_simulation
-----------?---------??----------?-----??----
???????????????319208????????????????????7
- 上一篇:dd.txt
- 下一篇:黃金礦工as3版本demo
評(píng)論
共有 條評(píng)論