智能车制作
标题:
求指点为什么不能实现正反转
[打印本页]
作者:
平凡的怒火
时间:
2017-4-8 14:17
标题:
求指点为什么不能实现正反转
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
/**************************************************************************/
//-----------------直流电机PWM调速实验程序----------------//
//测试单片机:STC89C52RC
//晶振:11.0592M (外部)
//复位方式:内部复位
//调试环境:KEIL4
//硬件测试环境:使用“清翔电子”单片机开发板测试通过
//程序功能: PWM也就是脉宽调制,是指在周期脉冲信号频率不变的情况下,改变高电平
//
// 和低电平的比例,也就是改变占空比。PWM在灯具调光,直流电机调速方面
//
// 有着广泛的应用。程序使用定时器0中断模拟PWM定时,S2、S3 两个独立按
//
// 键控制电机速度,为使演示结果明显,PWM输出
//
// 到整个P1接口,通过板上的LED灯可以看到亮度的变化。
//
/****************************************************************************/
#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit down = P3^0;
sbit up = P3^1;
sbit reverse = P3^2; //设置反转启动键
sbit stop = P3^3;
sbit z =P1^3; //设置输入端1
sbit f = P1^2; //设置输入端2
uint8 t = 0;
uint8 PWM_T = 0; //占空比控制变
void delay(uint16 z) //用于秒延时的函数
{
uint16 x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
void delay_1ms(uint16 t) //用于毫秒延时的函数
{
uint16 x,y;
for(x=t;x>0;x--)
for(y=120;y>0;y--);
}
/****************************************************
主程序
****************************************************/
void main(void)
{
static uint16 num;
TMOD = 0x02; //定时器0,工作模式2,8位定时模式
TH0=210; //写入预置初值(取值1-255,数越大PWM频率越高)
TL0=210; //写入预置值 (取值1-255,数越大PWM频率越高)
TR0=1; //启动定时器
ET0=1; //允许定时器0中断
EA=1; //允许总中断
P1=0xff; //初始化P1,输出端口
PWM_T=30;
z = 1; //输入端1为高
f = 0; //输入端2为低
while(1)
{
if(!up)
{
if(PWM_T<250)
{
PWM_T+ = 4;
}
delay_1ms(10);
}
if(!down)
{
if(PWM_T>0)
{
PWM_T=PWM_T-4;
}
delay_1ms(10);
}
if(!reverse)
{
delay(5);
if(!reverse)
{
z = 0; //使输入端1为低
f = 1; //使输入端2为高
while(up&down&stop&reverse);//若无键被按下,则停在此处
}
while(!reverse);//松手检测
}
if(!stop)
{
delay(5);
if(!stop)
{
while(PWM_T--);
delay_1ms(10);
while(up&down&stop&reverse)
{
PWM_T = 0;//使电机停止
}
}
while(!stop);
}
}
}
/****************************************************
/定时器0中断模拟PWM
****************************************************/
timer0() interrupt 1
{
t++; //每次定时器溢出加1
if(t==250) //PWM周期 100个单位
{
t=0; //使t=0,开始新的PWM周期
P1=0x00; //输出端口
}
if(PWM_T==t) //按照当前占空比切换输出为高电平
{
P1=0xff; //
}
}
如果哪位大神知道为什么不能直流电机正反转,烦请告知。应该怎么修改??
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2