24V直流电机H桥驱动电路及51单片机C程序

24V直流电机H桥驱动电路及51单片机C程序
24V直流电机H桥驱动电路及51单片机C程序

24V直流电机H桥驱动电路及51单片机C程序

24V直流电机H桥驱动电路及51单片机C程序

一、原理图

特别说明:CCP0、CCP1 = 00时,电机停止;为01时,电机正转,为10时,电机反转;11是绝对不允许的,为防止H桥共态导通,调试时需要特别注意!!!

二、程序代码

#include //头文件

#include

#define uint unsigned int

#define uchar unsigned char

sbit key1 = P2^3; //启动停止

status_initial();

PWM_initial();

while(1)

{

key_scan();

M_run();

}

}

void status_initial(void)

{

/*

CCAP0H = 0XFF;

CCAP0L = 0XFF;//占空比为0%

CCAP1H = 0XFF;

CCAP1L = 0XFF;//占空比为0%

*/

run_flag = 0;

direction_flag = 0;

count = 0;//----------------给定一个初始值,设定电机开机的初始转速???或者按下启动,up启动加速

P1 = 0x00;//灯灭

}

void PWM_initial(void)

{

CCON = 0X00;

CMOD = 0X02; //空闲模式下PCA计数器继续工作,使用系统时钟,禁止CCON的CF位中断CCAPM0 = 0X42; //0100 0010 允许比较器功能,允许CCP0脚用作脉宽调节输出

CCAPM1 = 0X42; // 同上,8位PWM,无中断

CCAP0H = 0XFF; //PCA捕捉/比较寄存器--低八位和高八位------频率f = SYSclk/256 CCAP0L = 0XFF; //工作于PWM模式,用于控制输出的占空比

CCAP1H = 0XFF; //当寄存器CL的值小于[EPCnL,CCAPnL]时,输出为低;当寄存器CL的值等于或大于【EPCnL,CCAPnL】时,输出为高;

CCAP1L = 0XFF; //当CL的值有FF变为00溢出时,[EPCnH,CCAPnH]的内容装载到[EPCnL,

CCAPnL]中

//当EPCnL = 0及CCAPnL = 00H时,固定输出高

//当EPCnL = 1及CCAPnL = FFH时,固定输出低

CL = 0; //PCA的16位计数器--低八位和高八位

CH = 0;

CR = 1; //启动PCA定时器

}

void delay_1us(uchar x)

{

uchar i,j;

for(i=0;i

for(j=0;j<120;j++);

}

void delay_led(uchar x)

{

uchar i,j;

j = x;

while(j--)

{

for(i=0;i<100;i++) //时间再调整

{

_nop_();

}

}

}

void key_scan(void)

{

uchar temp;

P2 = 0xff;

temp = P2;

temp = temp|0x0f;

if(temp==0x0f) //检测是否有按键按下

{

//============================启动停止key1

if(key1==0)

相关主题
相关文档
最新文档