24V直流电机H桥驱动电路及51单片机C程序
![24V直流电机H桥驱动电路及51单片机C程序](https://img.360docs.net/img7b/1eh4t2jbzbs297l7k307n8gpxoyfewtl-b1.webp)
![24V直流电机H桥驱动电路及51单片机C程序](https://img.360docs.net/img7b/1eh4t2jbzbs297l7k307n8gpxoyfewtl-e2.webp)
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)