?? main.c
字號(hào):
//-----------------------------------------------------------------
// 名稱: 帶位置感應(yīng)器的直流無刷電機(jī)PMW控制仿真
//-----------------------------------------------------------------
// 說明: 本例用PIC單片機(jī)控制帶感應(yīng)器的直流無刷電機(jī),通過調(diào)節(jié)RA0端口的
// 可變電阻器可實(shí)現(xiàn)電機(jī)調(diào)速控制.
// 由于當(dāng)前版本PROTEUS不支持換向功能,連接RA1端口的SW1尚不能控制
// 無刷電機(jī)的運(yùn)行方向.
//
//-----------------------------------------------------------------
#include <pic.h>
#define INT8U unsigned char
#define INT16U unsigned int
#define _XTAL_FREQ 20000000UL //20MHz
#define BLDC_StopMask 0B11010101 //關(guān)閉電機(jī)的掩碼(高邊設(shè)為全0)
#define BLDC_DrivePort PORTC //無刷直流電機(jī)驅(qū)動(dòng)方向控制端口(6位)
#define BLDC_DrivePortTris TRISC //無刷直流電機(jī)驅(qū)動(dòng)方向控制端口方向設(shè)置
#define BLDC_Direction RA1 //無刷直流電機(jī)當(dāng)前方向檢測(cè)位
#define BLDC_SensorPORT PORTE //無刷直流電機(jī)感應(yīng)器輸入端口
#define BLDC_SensorTRIS TRISE //無刷直流電機(jī)感應(yīng)器輸入端口方向寄存器
volatile INT8U ADC_Result; //控制PWM的AN0通道A/D轉(zhuǎn)換數(shù)據(jù)
volatile INT8U DriveByte; //電機(jī)驅(qū)動(dòng)字節(jié)(低6位有效)
//-----------------------------------------------------------------
// 驅(qū)動(dòng)表設(shè)置(更詳細(xì)說明可參閱本書相關(guān)章節(jié))
//-----------------------------------------------------------------
//1.6個(gè)驅(qū)動(dòng)器共為3對(duì),每2個(gè)為一對(duì)
//2.每一對(duì)驅(qū)動(dòng)線由一個(gè)高邊和一個(gè)低邊構(gòu)成
//3.三個(gè)驅(qū)動(dòng)器對(duì)應(yīng)于三個(gè)電機(jī)繞組A,B,C
//4.繞組 A 由RC[1..0]兩位驅(qū)動(dòng),其中RC1是 A 繞組的高邊
//5.繞組 B 由RC[3..2]兩位驅(qū)動(dòng),其中RC3是 B 繞組的高邊
//6.繞組 C 由RC[5..4]兩位驅(qū)動(dòng),其中RC5是 C 繞組的高邊
//7.三個(gè)感應(yīng)器位構(gòu)成了驅(qū)動(dòng)表的偏移地址,感應(yīng)器位[0..2]分別對(duì)應(yīng)于繞組A,B,C
//正向驅(qū)動(dòng)數(shù)據(jù)表,第1-6字節(jié)對(duì)應(yīng)于相位6,4,5,2,1,3的驅(qū)動(dòng)位,各字節(jié)中僅低6位有效
//驅(qū)動(dòng)表中第0,7兩字節(jié)無效
const INT8U FwdTable[] = {0B00000000,0B00010010,0B00001001,0B00011000,
0B00100100,0B00000110,0B00100001,0B00000000};
//反向驅(qū)動(dòng)數(shù)據(jù)表,第1-6字節(jié)對(duì)應(yīng)于相位/6,/4,/5,/2,/1,/3的驅(qū)動(dòng)位,0,7兩字節(jié)無效
//表中每個(gè)字節(jié)后6位中,相鄰兩位為一組,與上表的差別是每組中的兩位顛倒
const INT8U RevTable[] = {0B00000000,0B00100001,0B00000110,0B00100100,
0B00011000,0B00001001,0B00010010,0B00000000};
//-----------------------------------------------------------------
// 換向控制
//-----------------------------------------------------------------
void Get_Drive_Byte()
{
//讀取PORTE端口輸入的感應(yīng)器當(dāng)前數(shù)據(jù)(三位)
//根據(jù)RA1端口的方向位及當(dāng)前位置感應(yīng)器輸出,從正向或反向驅(qū)動(dòng)表中讀取驅(qū)動(dòng)字節(jié)
}
//-----------------------------------------------------------------
// 初始化程序
//-----------------------------------------------------------------
void Initialize()
{
}
//-----------------------------------------------------------------
// 讀取A/D轉(zhuǎn)換結(jié)果的高8位
//-----------------------------------------------------------------
void ReadADC()
{
}
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
Initialize();
while (1)
{
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -