单片机PWM问题,大家帮个忙嘛

PWM直流电机调速程序,小弟思来想去想了几天还是不明白,高手们帮个忙嘛,先谢谢了,先看看下面程序。控制电机的是P1^0口,数码管接的P0;流水灯接P1;当有一个高电平时电机转动,f=60Hz,T=16ms ,16ms分成32份,每一份为0.5ms(500us)
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit s1=P3^4;
sbit s2=P3^5;
sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;

uchar pwm;//控制占空比
uchar num;//中断次数统计
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f};

void delay(uint xms);
void bee();
void keyscan();
void display(uchar i);
void init_t0();

void main()
{
dula=0;
wela=0;
pwm=16;、、初值
num=0;
P1=0x00;

init_t0();

while(1)
{
keyscan();
}
}

void init_t0()//定时器中断0控制
{
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
EA=1;
ET0=1;
TR0=1;
}

void bee()//蜂鸣器报警
{
beep=0;
delay(100);
beep=1;
delay(100);
}

void delay(uint xms)//延时
{
uchar x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}

void keyscan()//键盘扫描
{
if(s1==0)
{
delay(30);
if(s1==0)
{
if(pwm!=0x20)//0x20=32
{
pwm++;//让占空比增加
delay(250);
delay(250);//增加延时
}
else
bee();
}
}
if(s2==0)
{
delay(30);
if(s2==0)
{
if(pwm!=0x01)//0x01=1
{
pwm--;
delay(250);
delay(250);//增加延时
}

else
bee();
}
}
}

void display(uchar i)//数码管显示
{
uchar ge,shi;
ge=i%10;
shi=i/10;

if(num%6==0)
{
wela=1;
P0=0xfd;
wela=0;

dula=1;
P0=table[ge];
dula=0;
}
if(num%6==2)
{
wela=1;
P0=0xff;
wela=0;

dula=1;
P0=0x00;
dula=0;
}

if(num%6==3)
{
wela=1;
P0=0xfe;
wela=0;

dula=1;
P0=table[shi];
dula=0;
}

if(num%6==5)
{
wela=1;
P0=0xff;
wela=0;

dula=1;
P0=0x00;
dula=0;
}
}

void t0_time() interrupt 1
{
TR0=0;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
num++;
if(num==33)
num=0;
if(num<=pwm)
{
P1=0xff;
}
else
P1=0x00;
display(pwm);
TR0=1;
如果控下S1占空比增加。电机转动加速,我想问一下,这个是怎么改变占空比的,转动加速,占空比增加,相当于高电平增加,那么电压也在增加,P1一直输出高电平,电压怎么在加呢,电机怎么么会加速呀???PWM的原理我知道,但编写出来程序我就不明白了。
那么NUM的值在第一中断进来后为1,1<=16,好,P1输出0xff,电机转动,为什么流水灯也要亮呢?(输出0时亮,共阴)假设我一直不按键,那么PWM=16,不变,那么当NUM到17是,17不小于等于16,就执行else,P1=0x00,那么电机为什么还是在转动呢??应该不转动呀???不明白??
显示函数我就更不明白了,当NUM=1时,1%6=1;应该什么都不显示呀,不明白????

第1个回答  2014-08-04

这个是完全不明白的意思啊!!

说说PWM吧,有些理解是对的,既然知道PWM的原理程序应该是好理解啊。

    电压没增加,只是给电机供电的时间发生了变化。也就是说PWM原理的50%,60%,70%占空比。这样改变啊。

   2. 如果电机的响应速度在微秒级那会是按你的想法,高电平就转,低电平就停。但电机的响应速度没那么快,所以就会受控于PWM了,当然如果你把PWM的频率调的很低就会发现这个现象了。

追问

我的意思是那个占空比是怎么个变化的,那个显示函数能不能解释一下,

追答

在void t0_time() interrupt 1这个中断函数里可以发现,

    PWM的最大值应该是33,也就是说,周期T是进入33次定时器中断的时间.

    高电平的时间是num这个变量的值小于已经设置好的变量pwm的值的时候都是高电平

    低电平的时间是num这个变量的值大于已经设置好的变量pwm的值的时候都是低电平

    举例,比如你把pwm这个变量设成16.定时器时间是500微秒,那么在每次进入定时器中断的时候因为num这个变量都在加1,并满足2的情况下P1.0都是高电平所以高电平时间是16x500微秒。低电平是num值大于16,并小于33的这段时间。当你用按键改变pwm这个变量的值时,相应的高电平时间自然会变化,单PWM波形的T不会发生变化因为程序里面已经用NUM设置好了T是33x500微秒了。

追问

能不能说一下这个显示函数,我还真看不懂这个原理

追答

要看原理图,只看程序感觉应该是数码管跟单片机之间有什么芯片吧?

追问

用的是74HC573来控制数码管的段选和位选,我是看不懂是怎么用中断法来扫描数码管的,听别人讲的时候说的是NUM%6,而NUM最大值是1-33,所以是0,1,2,3,4,5,当NUM%6=0或1时显示个位,为2时消影,3,4时显示十位,5时消影,但程序没有写=1时 的情况,,假设当NUM=1时,而没有NUM%6=1,这时应该不显呀,不明白?????

单片机PWM直流电机问题
1、所谓的pwm就是高低变化的方波,单片机可以实现,建议选择有pwm功能的单片机;2、精度不高的话,可以用简单一点的码盘来测速,直接计数就行;精度高的话,可以用编码器,推荐avagotech的heds9710系列编码器;3、单片机可以设定为在没有发生中断时读取键盘;若正在读取键盘时产生了中断,则保存当前状态,...

单片机PWM问题求指教
单片机PWM,PWM1L 和 PWM1H,表示为 PWM 数据的 低字节 和 高字节 数据,一个 L 表示为低, H 表示为高,比如 数据指针 DPTR 的 DPL DPH , 就是数据指针的 低字节 和 高字节。

单片机PWM问题!
3、当定时器计数值大于等于N0时,PWM1、PWM2输出高电平,定时器复位。

单片机PMW波问题
建议你使用STC单片机,里面有专用的PWM硬件 你的程序有问题:void t0()interrupt 1{ D_count++; if( D_count==D_num) Duoj=0; \/\/低电平 if(D_count==40)\/\/500us*40=20ms { D_count=0; Duoj=1; \/\/高电平 } TH0=(65536-500)\/256; \/\/基本时间...

单片机的PWM脉冲怎么调?
利用单片机通过DA芯片的输出电压抑制,将该电压加到PWM比较器的TL494正输入端,即TL494端口3,调节DA芯片的输出电压,可以控制TL494PWM的宽度。误差放大器有两个,一个用于电压控制,另一个用于过流保护,电压控制输出占空比控制。终止电压输出反馈电阻器,负终止DA输出,如果输出电压大于反馈电压哒,错误...

问一下单片机输出PWM波的问题,谢谢
你有示波器应该很好查故障的,先不用输出 PWM波 。单片机电源电压选择 5V ,L9110N 电压与电机相同,单片机输出口的正转输出端子置 1,反转端子置 0 ,看电机是否转动。不转,用相应的电阻代替电机,示波器测量电阻电压。(2)lm2576ADJ 共用输入电源应该是可以的,可能是布线干扰的问题。按芯片要求信号...

关于单片机PWM输出调压问题
1. 假如这里是NMOS管的话,电路就错误,2. 假如这里是PMOS管得话,不管你的单片机输出什么,MOS管都是截止的。解决办法:假如不要太大的功率的话,单管输出也可以的,单片机输出接三极管的基极,发射极接地,集电极接一个负责电阻到12V,输出由集电极输出,这是时候,由于输出被反相,所以占空比相应的也...

单片机pwm设置中,电压,占空比,与高低电平之间的关系,总是绕不清,求大 ...
PWM是“脉宽调制”信号,注意是脉宽,也就是宽度调整,频率可能不变化,当然高低电平一般是VCC--GND。占空比就是在一个周期中,高电平的宽度和周期之比,比如占宽比位50%,那么就是高低电平都是一样宽,占宽比位10%,那么周期为10,高低平只占1。

紧急求助,利用单片机的pwm 产生负压
一楼你的回答算无知了。用PWM是正电压的,但它是一个频率量,以开关频率量来控制一个电路的导通即可以产生负电压,DC-DC芯片产生的负电压就是这样来的。而且PWM是可调脉宽的,所以可以调节输出的负电压大小。楼主看看这个图就知道了,把PWM信号加在场效应管的栅极即可。二极管最好用1N4001。

单片机pwm是什么意思
单片机PWM是指从单片机输出的一个恒定的直流电平,通过计算机技术,按照一定的规律控制电平的占空比来实现模拟电路的调节。PWM技术广泛运用于电路、电机控制、智能家居控制等领域。之所以选择使用单片机控制PWM电平是因为其高精度、低功耗、良好稳定性等特点。通过PWM技术,单片机可以方便地控制电路的电压大小,从而...

相似回答
大家正在搜