dsPIC30F2010 控制带传感器的BLDCM 无刷直流电机(7)
发布时间:2021-06-06
发布时间:2021-06-06
dsPIC30F2010 microchip 无刷直流电机
AN957
附录A:
开环控制的源代码清单
软件许可协议
Microchip Technology Incorporated(“公司”)随附提供的软件旨在提供给您(该公司的客户)使用,仅限于且只能在该公司制造的产品上使用。
该软件为公司和/或其供应商所有,并受适用的版权法保护。版权所有。任何违反前述限制的使用将使其用户遭受适用法律的刑事制裁,并承担违背此许可的条款和条件的民事责任。
该软件“按现状”提供。不提供保证,无论是明示的、暗示的还是法定的保证。这些保证包括(但不限于)对出于某一特定目的应用此软件的适销性和适用性默示的保证。在任何情况下,公司都将不会对任何原因造成的特别的、偶然的或间接的损害负责。
此附录包含了开环控制的源代码清单。
//---------------------------------------------------------------------------------// Software License Agreement//
// The software supplied herewith by Microchip Technology Incorporated
// (the “Company”) is intended and supplied to you, the Company’s customer, // for use solely and exclusively with products manufacture by the Company.
// The software is owned by the Company and/or its supplier, and is protected under // applicable copyright laws. All rights are reserved. Any use in violation of the // foregoing restrictions may subject the user to criminal sanctions under applicable // laws, as well as to civil liability for the breach of the terms and conditions of // this license.//
// THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES, WHETHER EXPRESS, // IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
// THE COMPANY SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR // CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
//---------------------------------------------------------------------------------//文件:ClosedLoopSenBLDC.c//
//编写者:Stan D'Souza,Microchip Technology//
// 下列文件应该包含在MPLAB项目中:////ClosedLoopSenBLDC.c——主源代码文件//p30f2010.gld——链接描述文件////
//---------------------------------------------------------------------//
// 版本历史//
// 10/01/04——第一版
//---------------------------------------------------------------------- /*************************************************************
以下是低端驱动器表。在此StateLoTable中,
在低端驱动器施加PWM信号,而高端驱动器为“导通”或“截止”状态。 在本练习中使用此表。
/*************************************************************/unsigned int StateLoTable[] = {0x0000, 0x0210, 0x2004, 0x0204,
0x0801, 0x0810, 0x2001, 0x0000};
、CN6和当霍尔传感器改变状态时,将引起中断,指令执行将转到下面的子程序。然后用户必须读端口B的第3位、第4位和第5位,1、2……6。
然后将调整后的值用作查找表StateLoTable中的偏移量以确定装入OVDCON寄存器的值。
*****************************************************************/
dsPIC30F2010 microchip 无刷直流电机
AN957
void _ISR _CNInterrupt(void){
IF = 0;// 清零标志HallValue = PORTB & 0x0038;// 屏蔽其它位,保留RB3、RB4和RB5HallValue = HallValue >> 3;
// 执行3OVDCON = StateLoTable[HallValue];}
/*********************************************************************ADC中断用给定的电位计值装载PDCx寄存器。仅在电机运行时执行此操作。
*********************************************************************/void _ISR _ADCInterrupt(void){
IFS0bits.ADIF = 0;if (Flags.RunMotor){
PDC1 = ADCBUF0;PDC2 = PDC1;PDC3 = PDC1;}}
// 赋值……
// 并装载所有的三个PWM……// 占空比寄存器
int main(void){
LATE = 0x0000;TRISE = 0xFFC0;// 设置为输出PWM信号CNEN1 = 0x00E0;// 使能CN5、CN6和CN7CNPU1 = 0x00E0;// 使能内部上拉IF = 0;// 清零IE = 1;// 允许CN中断InitMCPWM();InitADC10();while(1){while (!S2);// 等待按开始键
while (S2)// 等待直到释放按键
DelayNmSec(10);
// 在PORTB上读霍尔位置传感器 HallValue = PORTB & 0x0038;// 屏蔽其它位,保留RB3、RB4和RB5HallValue = HallValue >> 3;// 右移以获得值1、2……6OVDCON = StateLoTable[HallValue];// 装载改写控制寄存器PWMCON1 = 0x0777;// 使能PWM输出Flags.RunMotor = 1;// 将标志置1while (Flags.RunMotor)// 当电机运行时
if (S2)// 如果按下S2{
PWMCON1 = 0x0700;// 禁止PWM输出
OVDCON = 0x0000;// 将PWM改写为低电平
Flags.RunMotor = 0;// 复位运行标志while (S2)// 等待释放按键
DelayNmSec(10);
}
}// while (1)结束}
© 2005 Microchip Technology Inc.DS00957A_CN第9页