/********************************************************************
** File: SensoredBLDC.c
** Written By:MikeDu
**
** The following files should be included in the MPLAB project:
** SensoredBLDC.c -- Main source code file
** Interrupts.c
** Init.c
** SensoredBLDC.h -- Header file
** p33FJ32MC204.gld -- Linker script file
**
** Revision History
**
********************************************************************/
#include "p33fxxxx.h"
#include "SensoredBLDC.h"
unsigned int StateTableFwd[] = {0x0000, 0x0810, 0x0204, 0x0210,
0x2001, 0x0801, 0x2004, 0x0000};
/******************************************************************************/
/* Configuration bits */
/******************************************************************************/
_FOSCSEL(FNOSC_FRC);
_FOSC(FCKSM_CSECMD & POSCMD_XT);
_FBS (BSS_NO_FLASH & BWRP_WRPROTECT_OFF);
_FWDT (FWDTEN_OFF & WDTPOST_PS1024 & WDTPRE_PR32);
_FGS (GSS_OFF & GCP_OFF & GWRP_OFF);
_FPOR (PWMPIN_ON & HPOL_ON & LPOL_ON & FPWRT_PWR128);
_FICD (ICS_PGD1 & JTAGEN_OFF);
char FlagHalfSec = 0,FlagHallErr = 0,FlagPowerErr = 0,FlagAnalogLowStop = 0,FlagLowSpeedCheck = 0,FlagOverTemp = 0;
char FlagLowSpeed = 0,FlagOverSpeed = 0;
char FlagLowSpeedStop = 0,FlagOverSpeedStop = 0,FlagOverCurStop = 0,SpeedErrStopNum = 0,CurErrStopNum = 0;
char OverSpeedTime = 0,LowSpeedTime = 0;
char FlagSpeedErr = 0,FlagCheckCur = 0;
char HalErr = 0;
char LowSpeedErrStopNum = 0,OverSpeedErrStopNum = 0;
int FlagSpeedStop = 0,HalNum = 0;
unsigned int HallValue;
unsigned int HallNum[6]={2,3,1,5,4,6};
unsigned int BldcCur[3];
int DutyNum = STARTDUTYNUM;
int LastCur,NewCur,LastTime,NewTime;
unsigned long AverageSpeed = 0;
unsigned long CurrAverNum;
char LowSpeedCheckTime = 0;
char HallErrNum = 0;
extern char FlagStop;
extern int ActualSpeed;
extern int MsCountNum;
extern long SpeedIntegral;
extern long SpeedIntegral_n_1;
extern unsigned int timer3value;
/***********************************************
重新打开电机并开启PID运算,
缓启动结束后检测失速异常
************************************************/
void MotorReset(void)
{
PDC1 = STARTDUTYNUM;
PDC2 = STARTDUTYNUM;
PDC3 = STARTDUTYNUM;
PidDesiredSpeed = 0;
timer3value = 0;
SpeedIntegral = 0;
SpeedIntegral_n_1 = 0;
FlagStop = 0;
FlagLowSpeedCheck = 0;
LowSpeedCheckTime = 22;
MotorStart();
SlowStart();
}
/********************************************
霍尔异常检测
*********************************************/
#if 0
void HallErrCheck(void)
{
if((HallValue == 0) || (HallValue == 7))
HalErr++;
else
HalErr = 0;
if(HalErr >= 10)
{
MotorStop();
HalErr = 10;
}
}
#endif
void HallErrCheck(void)
{
char i=0,UpahTotal=0,VpahTotal=0,WpahTotal=0;
for(i=0;i<6;i++)
{
UpahTotal += (HallNum[i] & 0x01);
VpahTotal += ((HallNum[i]>>1) & 0x01);
WpahTotal += ((HallNum[i]>>2) & 0x01);
}
if(((UpahTotal == 0) || (UpahTotal == 6)) || \
((VpahTotal == 0) || (VpahTotal == 6)) || \
((WpahTotal == 0) || (WpahTotal == 6)))
{
HallErrNum++;
}
else
{
HallErrNum = 0;
}
if(HallErrNum == 10)
{
HallErrNum = 0;
MotorStop();
}
}
/********************************************
过速异常检测
*********************************************/
void OverSpeedErrCheck(void)
{
int num = OVERSPEEDTIME;
while(ActualSpeed > OVERSPEEDNUM)
{
num--;
DelayNmSec(1);
if(num == 0)
{
MotorStop();
ActualSpeed = 0;
FlagOverSpeedStop = 1;
FlagSpeedErr = 1;
OverSpeedErrStopNum = 20;
break;
}
}
}
/********************************************
失速异常检测
*********************************************/
void LowSpeedErrCheck(void)
{
int num = LOWSPEEDTIME;
while((ActualSpeed < LOWSPEEDNUM) && (FlagStop == 0))
{
num--;
DelayNmSec(1);
if(num == 0)
{
MotorStop();
FlagLowSpeedStop = 1;
FlagLowSpeedCheck = 0;
FlagSpeedErr = 1;
LowSpeedErrStopNum = 20;
break;
}
}
}
int main(void)
{
/* Pll + Osc Configuration */
PllOscConfig();
/* Pin Configuration */
PortConfig();
/*
AN0:Vcc Input Channel0
AN1:Temperature Input Channel0
AN4:Vanalog Input Channel2
AN5:Current Input Channel3
*/
InitADC10();
/* 每隔1ms读取一次转速,并执行PID运算 */
InitTMR1();
/* 打开看门狗*/
RCONbits.SWDTEN = 1;
/* 用于计算电机转速 */
InitTMR3();
/* Freq:39kHz,三相独立输出*/
InitMCPWM();
/* 捕获配置,用于检测霍尔信号 */
InitIC();
DelayNmSec(100);
/* 检测电源电压 */
PowerOnCheck();
/* 打开TIM3 */
T3CONbits.TON = 1;
/* 读取当前霍尔信号,打开PWM输出 */
while(1)
{
/* 根据模拟输入电压设定转速 */
VanalogConSpeed();
if(DesiredSpeed >= MINSPEED1000RPM)
{
MotorStart();
break;
}
}
/*缓启动*/
SlowStart();
while(1)
{
PidDesiredSpeed = DesiredSpeed;
/* 模拟电压调速*/
VanalogConSpeed();
/* 过流检测 */
OverCurCheck();
/* 电源电压检测*/
PowerCheck();
/* 200ms检测一次hall信号,连续两次出错认为异常 */
if((MsCountNum % 200) == 0)
{
HallErrCheck();
}
/* 每隔10ms检测一次温度 */
if((MsCountNum % 10) == 0)
{
TempCheck();
}
/*过/失速异常检测*/
if(FlagLowSpeedCheck == 1)
{
LowSpeedErrCheck();
}
OverSpeedErrCheck();
/* 检测到失速异常后10秒,重新打开点击 */
if((LowSpeedErrStopNum == 0) && (FlagLowSpeedStop == 1))
{
FlagLowSpeedStop = 0;
MotorReset();
}
/* 检测到过速异常后10秒,重新打开点击 */
if((OverSpeedErrStopNum == 0) && (FlagOverSpeedStop == 1))
{
FlagOverSpeedStop = 0;
MotorReset();
}
/* 检测到过流异常后10秒,重新打开电机 */
if((CurErrStopNum == 0) && (FlagOverCurStop == 1))
{
FlagOverCurStop = 0;
MotorReset();
}
}
return 0;
}
void DelayNmSec(unsigned int N)
{
unsigned int j;
while(N--)
for(j=0;j < 1000;j++);
}
/***********************************************************************************
* Function: lockIO
* Overview: This executes the necessary process to set the IOLOCK bit to lock
* I/O mapping from being modified.
*****************************************************************************/
void lockIO(void)
{
asm volatile ("mov #OSCCON,w1 \n"
"mov #0x46, w2 \n"
"mov #0x57, w3 \n"
"mov.b w2,[w1] \n"
"mov.b w3,[w1] \n"
"bset OSCCON, #6");
}
/*****************************************************************************
* Function: unlockIO
* Overview: This executes the necessary process to clear the IOLOCK bit to
* allow I/O mapping to be modified.
*****************************************************************************/
void unlockIO(void)
{
asm volatile ("mov #OSCCON,w1 \n"
"mov #0x46, w2 \n"
"mov #0x57, w3 \n"
"mov.b w2,[w1] \n"
"mov.b w3,[w1] \n"
"bclr OSCCON, #6");
}
/*****************************************************************
Fosc=Fin * M/(N1*N2)
M:PLL 反馈倍频比(28+2)
N1:预分频因子(2)
N2:后分频因子(2)
控制板使用的是8M晶振,因此Fosc = 8M*30/(2*2)=60M
器件工作频率Fcy=Fosc/2=30M
******************************************************************/
void PllOscConfig(void)
{
PLLFBD = 28;
CLKDIVbits.PLLPOST = 0;
CLKDIVbits.PLLPRE = 0;
__builtin_write_OSCCONH(0x03);
__builtin_write_OSCCONL(0x01);
while(OSCCONbits.COSC != 0b011);
/* Wait for PLL to lock */
while(OSCCONbits.LOCK != 1);
}
void PortConfig(void)
{
/*控制15V电源输出*/
LATBbits.LATB4 = 0;
TRI
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
TE code.zip_CDJ_zip_无刷电机驱动_无刷直流 (140个子文件)
SensoredBLDC.c 18KB
SensoredBLDC_old.c 11KB
Interrupt.c 4KB
TEIJIN.cof 224KB
wc.db 62KB
entries 3B
format 3B
SensoredBLDC.h 2KB
TEIJIN_V4.0.hex 20KB
TEIJIN.hex 20KB
TEIJIN.IAB 8KB
TEIJIN.IAD 408B
TEIJIN.IMB 4KB
TEIJIN.IMD 368B
TEIJIN.map 103KB
TEIJIN.mcp 2KB
TEIJIN.mcs 2KB
TEIJIN.mcw 1.76MB
SensoredBLDC.o 110KB
Interrupt.o 96KB
TEIJIN.PFI 12B
TEIJIN.PO 776B
TEIJIN.PR 1KB
TEIJIN.PRI 6KB
TEIJIN.PS 30KB
TEIJIN.SearchResults 511B
12211255ef386ea37ec6fe83d1f39900f237b695.svn-base 1.76MB
98e5a4da2c098ce76abb657b1f566bc79c2554fb.svn-base 1.76MB
c885c282e949976ab2d0e3aab49eae9f3fc64a08.svn-base 1.76MB
edb95c7aaaf696ea1c9d6196b578f4d2c97942f1.svn-base 1.76MB
64e62523ccfbede29985499a90c7b010d8043673.svn-base 1.76MB
79a6c9c4e92d597ddbf93ad0486b73bffbc6e438.svn-base 1.76MB
d934bd67586fcd86b9d18d33304bba657110fdc1.svn-base 1.76MB
9f80b0c92f3efeeef9e3737c6a37a6f2593c2a5b.svn-base 1.76MB
dedcc46ce7b895334fbea94d55024d71610a5fd0.svn-base 1.76MB
21c2fffa588dfddb660b5679218dc38d7c34dbe4.svn-base 1.76MB
4a8cb09d5e0314b7bdd6da110b64077502ec99d8.svn-base 1.76MB
10d7ef7ef847b2e7521c5dc4a9b35c2ec2d11fa4.svn-base 1.76MB
16e4cbcc180c361ef542d983bc0335e0a1ff3b19.svn-base 1.76MB
72a825f13355b81d848f5d0729b067a29533ace6.svn-base 1.76MB
54dfb17d9b1c1e9bf896f67793feb11e357217f2.svn-base 1.76MB
4f766015be4924f4d8650c8002d931c9aba8be21.svn-base 1.76MB
b3f68ff4d8ab28105c6ab84c3c186394fb0a5e40.svn-base 1.76MB
e26b344355497155397c73f1bd6d7d09d09a3fcc.svn-base 1.76MB
591e6956416e59704fc94bdb6ca279a9f59f11e1.svn-base 1.76MB
e32d557aa3db30c35b04f6dc71d562497ecb7771.svn-base 1.76MB
89476761e9887ba31ee71c4f5d141cb90792911d.svn-base 1.76MB
7d79788ee531ebe94156b5381d2a66aa234dd379.svn-base 1.76MB
49b9fab1bcc58146e33d305ae76412901f763f9c.svn-base 1.76MB
45e4671307ba973eb6ad2105a1c3fb8439516fac.svn-base 1.76MB
ff10153a75c9b3d26cbcbbf6a6ae7f05a0dd3f69.svn-base 1.76MB
197864ab6429d888db6216da3b334ff250cff569.svn-base 1.76MB
3f11b67bdba4d2ce3be514eebf4602071a8eb4ed.svn-base 1.76MB
a66e30af9e8c145ba825f9d4f24a5ebbf9c31127.svn-base 1.75MB
a7d45264ff37574d0a5dcdf22afad5213ba93cd7.svn-base 1.75MB
9813cc768dccea50af32b1555f4a03588ee68ad9.svn-base 1.75MB
35ac8783c9c5d22f5a7ce72cd1173ad566bd92c2.svn-base 1.75MB
58846edee81a44612f20b6b4522b5afb38747ec5.svn-base 1.75MB
7d0b1d52cda9267f8442514e32ab46ba94c81450.svn-base 1.75MB
fe4e79e3820e7975c2809b96db70da79e0f1c09d.svn-base 18KB
0d62da706ddd0709dccd1519a3770609b132e790.svn-base 17KB
6d206db612a769eea7b363d3ead10f34558d37f0.svn-base 16KB
1d780fed4af2df118cc7a631c811fc67d739e5f7.svn-base 16KB
25bc5d968556fd75bfcc917b6c59fdc477535190.svn-base 15KB
fb98d346c9e4f25d96c8684c38d987bac29378bb.svn-base 15KB
3b8b0a8870e586066e756e07ee53b37c3db4c3ba.svn-base 15KB
46dc82cf144a058a74b7bdb94d6145e93f29e08e.svn-base 15KB
6849a4959aed7b5db56f2e5c7c437a2e99619aa8.svn-base 14KB
788cd9a95f52ecddc660364523e2d5b26ba2d922.svn-base 14KB
0a072e1b719e61181a2c8480d8c9cfab0a703fb7.svn-base 14KB
bf7cf9fe784076cf5d9607c578e20af86bc09f10.svn-base 13KB
986b38d80eb460e47794c5647c44c768bd63e3d3.svn-base 13KB
280a4ede3675f295d6a940b572718321a7b6bd42.svn-base 12KB
7037eb216653e5abd01fd332e450f996b482b4ba.svn-base 11KB
025edfe58065ceda46d81296c73234760b67c3da.svn-base 11KB
5fb034a5428cf91f75ca6503a7c8d6bc2a447597.svn-base 11KB
d7479b3c98d6f58a79eb7ff2d9c639c743902554.svn-base 11KB
4ddc4862e43bfc03ca5675dd8119326d0e5647bc.svn-base 11KB
d591390d0a2030db78e2bb2674004b1c11b3a475.svn-base 11KB
6aae6b48766d00b9e6ef5faa5648ef6b7f13998c.svn-base 11KB
cf4d2effab6b9a527a9e8bf6c8298ea2119599f4.svn-base 11KB
f06ec2b005e81529369eea964c3970f41d2ec974.svn-base 11KB
aba784caa6d831d4c9344eaec60e93418e720ca5.svn-base 11KB
ce1383c3060016f39619cc48bbf9c32f6ccd7bcd.svn-base 11KB
cec2ce293388b4d733dbeeb5412748ad280891a0.svn-base 11KB
8eb926a2060cd8be03fbfd15440bb4c9c8d006dd.svn-base 11KB
104eed6c3382148f11eaafa6cd3ca765fd397797.svn-base 10KB
a3158d5f239599b6b39218045830a697eb99a9a4.svn-base 10KB
d951b48165f412e2c5c0788c327372b828be4ba4.svn-base 10KB
97fd32c6b89a99c095d044b2191a91630644cd65.svn-base 10KB
fb2a60368e3aa0cd9fdc818a14fdb7023eb6d7ab.svn-base 10KB
99b296c6a6a70cdc9ad3ddc19f8e3ed6d428b466.svn-base 10KB
6cf13ba4e279347b49778c4ce3d7061c71251c64.svn-base 10KB
2f96a76b351a3651065bbccbee44dbce7710e184.svn-base 10KB
362bb852cc3c88a03375bef2608d7ee1d2d81da0.svn-base 10KB
7b870478d081e512bf9583ef731f12a16649a499.svn-base 4KB
3c8c4c5debe47bad06da00ea9eb274038791ea28.svn-base 4KB
5abb66d98cf5d5d275dbc92f2e4d4cb971bb7693.svn-base 4KB
998ea04b3e867df8481d36ac57774429db87e02c.svn-base 4KB
41281bc66e5d293589b8816fb548fdbec50aeb6e.svn-base 4KB
共 140 条
- 1
- 2
资源评论
weixin_42651887
- 粉丝: 79
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功