📄 直流电机.c
字号:
//本调速硬件适合转速较高的直流电机,不适合力矩或者转速电机
//调节占空比实际上是调节电机两端电压的平均值,即PWM调速
#include <reg52.h>
#define Uchar unsigned char
#define Uint unsigned int
#define Ulong unsigned long
/*********************************/
sbit a=P1^0;
sbit AA=P2^0;
sbit BB=P2^1; //直流电机 A 控制引脚
sbit CC=P2^2;
sbit DD=P2^3; //直流电机 B 控制引脚
sbit Ea=P2^4;
sbit Eb=P2^5;
char status; //电机工作状态
Uint time=1;
Uint high;//=50; //高电平维持50次定时时间隔间
Uint period=100;//=2500; //若为250 则占空比为20%
//period 等于 100 制动 占空比50%
//period 大于 100 正转 占空比大于50%
//period 小于 100 且大于 50 反转 占空比小于50%
void delay(int ms)
{ int i,j;
for(i=0;i<ms;i++)
for(j=0;j<120;j++);
}
void int0(void) interrupt 1
{
TH0=0xff;
TL0=0xf7;
if(status==-4) {high=4; }
if(status==-3) {high=20; }
if(status==-2) {high=35; }
if(status==-1) {high=40; }
if(status==0) {high=50; }
if(status==1) {high=55; }
if(status==2) {high=65; }
if(status==3) {high=80; }
if(status==4) {high=96; }
if(++time==high) {BB=0;AA=1;} ////BB 若先置1,后置0,则为(1-占空比)
else if(time==period)
{ // if(!status) Ea=0;
time=1;
// a=!a; ////电机运行状态观察指示
BB=1;
AA=0;
}
}
/********************************/
void boot(void)
{
TMOD=0x01;
TH0=0xff; ////约10KHz//0x47
TL0=0xf7;
TR0=1;
ET0=1;
EA=1;
}
/********************************/
void main(void)
{
Ea=0;
Eb=0;
P0=0xff;
boot();
Ea=1; ////置1,打开电机
// Eb=0;
while(1)
{// status=-4; a=0; delay(150);
//status=-3; a=1; delay(50);
// status=-2; a=0; delay(50);
// status=-1; a=1; delay(50);
// status=0; a=0; delay(50);
status=1; a=1; delay(50);
// status=2; a=0; delay(50);
// status=3; a=1; delay(50);
// status=4; a=0; delay(150);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -