-
大小: 68KB文件類型: .rar金幣: 2下載: 0 次發布日期: 2021-05-06
- 語言: 其他
- 標簽: dsPIC30f3010??PID??中文注釋??
資源簡介
該代碼需要復制到非中文路徑下,使用開發環境MPLAB IDE 8.01或更高版本。
該開發環境需安裝有MCC30編譯器。

代碼片段和文件信息
//---------------------------------------------------------------------------------------------------------
// 文件名: ClosedLoop.c
//
//??工程節點包括以下三個:?
// 1.?主節點:??????????????CloseLoop.c ??
// 2.?芯片鏈接器描述文件:??p30f3010.gld ?
//??????3.?PID運算匯編節點:?????PID.s
//---------------------------------------------------------------------------------------------------------
#include?
//--------------------------芯片配置字設置-------------------------------
_FOSC(CSW_FSCM_OFF?&?XT_PLL16);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_ON?&?BORV_20?&?PWRT_64?&?MCLR_EN);
//-----------------------------------------------------------------------
typedef?signed?int?SFRAC16;
#define?FCY??20000000 ????? //?xtal?=?5Mhz;?PLLx16?->?20?MIPS?(運行速度20MIPS)
#define?FPWM?19531 ????? //?PWM頻率設置為19.5?kHz?避免產生人能聽到的噪音
#define?_10MILLISEC 10
#define?_50MILLISEC 50
#define?_100MILLISEC 100
#define?_500MILLISEC 500
#define?HALLA 1 //?RB3
#define?HALLB 2 //?RB4
#define?HALLC 4 //?RB5
#define?CW 0 //?電機順時針方向(CCW)轉動標志位
#define?CCW 1 //?電機反時針方向(?CW)轉動標志位
#define?Switch_2?(!PORTCbits.RC14)
//?計算周期?Period?=?TMRClock?*?6?/?RPM
//?例如轉速?RPM?=?6000?(最大速度)
//?周期?????Period?=?(20000000?/?64)?*?6?/?6000?=?312.5
//??????????RPM?=?60?(最小轉速)
//?周期?????Period?=?(20000000?/?64)?*?6?/?60?=?31250
#define?MINPERIOD 313 //?對于?6000?max?rpm?和?10?極電機
#define?MAXPERIOD 31250 //?對于?60?min?rpm?和?10?極電機
#define?MINABSSPEED 327
#define?MAXABSSPEED?32663
//?當使用floats來初始化有符號16-bit小數變量時使用這個宏??
#define?SFloat_To_SFrac16(Float_Value)?(((Float_Value)<0.0)?(SFRAC16)(32768*(Float_Value)-0.5):(SFRAC16)(32767*(Float_Value)+0.5))
void?SixStepComm(int?_Current_Sector?int?_Required_Voltage); //?換向操作(根據轉子的位置)
void?InitADC10(void); //?初始化?ADC(用于速度指令)
void?InitMCPWM(void); //?初始化?PWM為20kHz?中心對齊?互補對稱模式,500?ns死區
void?InitTMR1(void); //?初始化?TIMER1?(使用速度控制和電機停止保護)
void?InitTMR3(void); //?初始化?TIMER3?(作為兩個輸入捕捉通道的時基)
void?InitUserInt(void); //?初始化所有端口?(輸入和輸出)?
void?Init_IC_and_CN(void); //?初始化輸入捕捉和電平變換中斷CN?(用于霍爾傳感器輸入)
void?RunMotor(void); //?初始化所有變量和中斷(用于啟動和運行電機)?
void?StopMotor(void); //?清零所有標志位?停止和電機控制相關的操作,禁止PWM
void?ForceCommutation(void); //?當電機低速運行,該函數強制換向
void?ChargeBootstraps(void); //?在電機運行起始階段?對bootstrap?電容進行充電
extern?void?SpeedControl(void); //?該函數包含所有匯編和C函數,進行速度PID環路控制
extern?void?SpeedCalculation(void);
//?工程里用到的標志位
struct?
{
unsigned?MotorRunning :1;
unsigned?MotorCommInAdv?:1;
unsigned?MotorAdvEnabled:1;
unsigned?unused :13;
}Flags;
?
unsigned?int?HallValue; //?霍爾輸入值
unsigned?int?Sector; //?當前扇區值
unsigned?int?LastSector; //?最后一個扇區的值,對于濾除因為硬件濾波導致的慢轉換速率引起的錯誤信號
unsigned?int?MotorStalledCounter?=?0; //?每?1?ms加1?每次檢測到新扇區即清零.用于強制換向和電機零速保護
//? 電機接線端子 ?????? | MCLV板連接
//?-------------------------|-------------------
// 白(相)???
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄??????????0??2008-06-18?02:03??PID_Lab
?????文件??????21643??2007-06-01?14:27??PID_Lab\Close_Loop.c
?????文件??????44496??2007-06-01?14:27??PID_Lab\Close_Loop.o
?????文件??????41631??2006-03-24?14:54??PID_Lab\ClosedLoop.o
?????文件???????4338??2006-03-24?14:54??PID_Lab\foo.o
?????文件??????40709??2005-04-26?04:24??PID_Lab\p30f3010.gld
?????文件??????13364??2007-06-01?14:27??PID_Lab\PID.o
?????文件???????5003??2007-06-01?14:27??PID_Lab\PID.s
?????文件??????78767??2007-06-01?14:27??PID_Lab\PID_test.cof
?????文件???????9380??2007-06-01?14:27??PID_Lab\PID_test.hex
?????文件??????67641??2007-06-01?14:27??PID_Lab\PID_test.map
?????文件????????861??2007-05-21?21:02??PID_Lab\PID_test.mcp
?????文件??????95744??2008-06-18?02:26??PID_Lab\PID_test.mcw
?????文件???????7844??2007-06-01?14:27??PID_Lab\PID_test.mptags
?????文件????????103??2007-06-01?14:27??PID_Lab\PID_test.tagsrc
?????文件????????146??2008-06-18?02:23??PID_Lab\說明.txt
?????文件???????2651??2008-06-18?02:26??PID_Lab\PID_test.mcs
-----------?---------??----------?-----??----
???????????????434321????????????????????17
- 上一篇:仿真圖.zip
- 下一篇:用NE555裝制的三角波、方波發生器電路
評論
共有 條評論