• 大小: 56KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: 、pic  

资源简介

在protues平台建立直流电机速度控制仿真系统,通过pic单片机对其开关、加减速、正反转进行控制

资源截图

代码片段和文件信息

/************交流学习个人 QQ:105609700*******************************/


/**电机速度控制器******/

/******功能描述**********/
/*
开机状态:key1---停止/开启;key2---加速;key3---减速;Key4---方向

*/

/******硬件描述***********/
/*
MPLAB IDE v 8.4 ,HI-TECH C PRO v9.65, PIC16F883,  4MHz
*/

#include

#define key1 RB0//开/关键
#define key2 RB1//加速
#define key3 RB2//减速
#define key4 RB3//方向
const unsigned char ucduty[]={0x170x200x260x2C0X330X3D};//占空比:40%、50%、60%、70%;赋给CCPRxL,低两位忽略。

volatile bit status=0;//0:电机停止状态;1:电机转动状态
volatile bit orient=0;//0:反转;1:正转;

volatile signed int uclevel=0;//档位状态;uclevel=1234;


/****PWM模块初始化****/
void init_CCP(void)
{
CCP1CON=0x3C;//bit5-4:10位占空比的低两位;P1A 和P1C 为高电平有效; P1B 和P1D 也为高电平有效;
CCP2CON=0x3C;
TRISC=0x06;//b0000 0110TRISC1TRISC2设置为输入,关闭PWM输出驱动器。
PR2=0X3E;//PWM频率设为1KHz;
}

/********端口B按键扫描初始化**********/
void init_PROTB()
{
ANSELH=0x00;//将B端口设置为I/O口。
TRISB=0XFF;//设置为输入。
// IOCB=0x07;//RB0、RB1、RB2允许点评变换中断。
// PEIE = 1;
//  GIE = 1;
//必须初始化ANSELH 寄存器以将模拟通道配置为数字输入。配置为模拟输入的引脚
}

/******PWM子程序*******/
void PWM(void)
{

CCPR2L=ucduty[uclevel];//设置占空比;
CCPR1L=ucduty[uclevel];//设置占空比;
TMR2IF=0;//清空timer2中断标志位;
T2CON=0x06;//设1:16预分频;timer2使能;
//TRISC=0x00;//b0000 0000TRISC1TRISC2设置为输出,打开PWM输出驱动器。


}


/********中断函数******/
void interrupt motorcon() 
{  
if(RBIF)
{


RBIF=0;
}
}

/*****键盘扫描程序**********/
void scan()
{

if(key1)
{
_delay(200);//延时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);//延时200ms去抖。
if(key2)
{
/* if(status==0)//若处于停止状态
{
if(orient)//若处于反正转设置方向,
{
TRISC2=1;//关闭CCP1输出
RC2=0;
TRISC1=0;//开启CCP2输出
orient=0;//设为正反转方向
while(key2);
}
else
{
TRISC2=0;//开启CCP1输出
TRISC1=1;//关闭CCP2输出
RC1=0;
orient=1;//设为反转方向
while(key2);
}
}
else //若处于转动状态
{
uclevel++;
if(uclevel==6)
uclevel=5;
PWM();
while(key2);
}
*/
uclevel++;
if(uclevel>=5)
uclevel=5;
PWM();
while(key2);

}
}
if(key3)
{
_delay(200);//延时200ms去抖。
if(key3)
{
/* if(status==0)//若处于停止状态
{
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);//延时200ms去抖。
if(key4)
{
if(orient==0)//若处于反正转设置方向,
{
while(RC2);//防止在CCP1高电平时关闭CCP1;
TRISC=0x04;//关闭CCP1输出开启CCP2输出;0000 0100;

orient=1;//设为正反转方向

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      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


评论

共有 条评论