A. 怎么用单片机产生PWM波形
单片机产生PWM波形波形的方法:
主要是采用软件控制,控制2个时间。
具体就是由单片机的引脚输出PWM波形;单片机引脚 如P1.7 控制其输出高电平的时间T1 和输出低电平的时间T2。
PWM波形的周期T=T1+T2
PWM波形的占空比=(100T1/T)%
PWM波形实现的算法:
1 根据PWM波形的频率f,计算出PWM波形的周期T=1/f;
2 根据PWM波形的占空比 计算出高电平时间 T1=占空比×T
3 计算出低电平时间 T2=T-T1
4 按上述时间去控制 单片机引脚高低电平的时间就可以了。
呵呵 赶快自己写程序吧 别忘了给俺加分呀
B. 如何用单片机产生PWM
/*---------------
文件名称: PWM.C
功能 :单片机脉冲方式产生PWM信号
----------------*/
#include <reg52.h> // 引用标准库的头文件
#include <absacc.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define COUNT0 XBYTE [0X0000] // 8254计数器0寄存器地址
#define COUNT1 XBYTE [0X0200] // 8254计数器1寄存器地址
#define COUNT2 XBYTE [0X0400] // 8254计数器2寄存器地址
#define COMWORD XBYTE [0X0600] // 8254控制寄存器地址
/********************************
函数名称: SIGNAL(SIG_OUTPUT_COMPARE1A)
功能 :定时器0中断子程序
入口参数:无
返回值 :无
********************************/
void time0_int () interrupt 1 using 1
{
TR0=0; // 关闭T0
TH0=-(20000/256);
TL0=-(20000%256); //重置20ms计数值
/*--------------用8254计数器发送第一路的PWM信号-----------*/
COMWORD=0x30; //1MHz时钟作为计数时钟,计数1000次后实现1ms高电平
COUNT0=0xE0;
COUNT1=0x03;
/*--------------用8254发送第二路的PWM信号----------------*/
COMWORD=0x70; //1MHz时钟作为计数时钟,计数2000次后实现2ms高电平
COUNT0=0xD0;
COUNT1=0x07;
/*-------------用8254发送第三路的PWM信号----------------*/
COMWORD=0xB0;//1MHz时钟作为计数时钟,计数3000次后实现32ms高电平
COUNT0=0xB0;
COUNT1=0x0B;
TR0=1; //启动T0
}
//主函数
void main ()
{
EA=1; // 开CPU总中断
ET0=1; // 开T0定时器中断
TMOD=0x01; // 开定时器中断
TH0=-(20000/256); //20ms定时器计数初值
TL0=-(20000%256);
/*--------------向8254控制寄存器选择计数器0,并对其赋值0-----------------*/
COMWORD=0x30;
COUNT0=0; //赋低位字节
COUNT0=0; //赋高位字节
/*---------------向8254控制寄存器选择计数器1,并对其赋值0------------------*/
COMWORD=0x70;
COUNT0=0; //赋低位字节
COUNT0=0; //赋高位字节
/*---------------向8254控制寄存器选择计数器2,并对其赋值0-----------------*/
COMWORD=0xB0;
COUNT0=0; //赋低位字节
COUNT0=0; //赋高位字节
TR0=1; //启动定时器0
While (1); //无限次循环
}
C. 如何用单片机捕捉PWM占空比
#define TEST_IN PA0 //要测试的信号
#define F_TEST_IN PA1 //要测试信号的反向,加一个反向门得到的
main()
{
unsigned long low_cnt,high_cnt;
while(1)
{
while(TEST_IN); //确保TEST_IN = 0;
low_cnt = 0;
high_cnt = 0;
while(!TEST_IN); //确保TEST_IN = 1;
while(TEST_IN) high_cnt++; //计算高电平数量
while(F_TEST_IN) low_cnt++; //计算低电平数量
//以下添加其他的处理代码。
}
}
这个应该能够保证到精度。十分浪费CPU时间就是。但是如果只有这一个任务还是OK的。
你说的用外部中断的方法也可以。
思路1 采用timer来进行计数。遇到相应的边沿后中断,停计数器。然后进行相应的处理。
思路2 直接用循环来检测,当然如果这个地方用循环检查的话,不如就不用中断了,直接用软件来实现上升沿下降沿的识别。也就是我写的程序一样了。
提示,思路1的话明显的会觉得有点问题。因为是硬件计数。至于精度问题,你看下程序就可以感觉出来。还有精度主要取决于检测的始终。与中断什么的没有任何关系。只是用中断给人感觉比较实时。
你的第二个想法有点看不懂。如果说你是想用AD转换来进行占空比的分析的话,那太笨了。根本就是自找麻烦。
D. 如何利用51单片机输出PWM波
1、用定时器+编程
2、51系列单片机无PWM输出功能,可以采用定时器配合软件的方法输出。对精度要求不高的场合,非常实用
3、思路:定义一个静态变量,程序每次进入定时器的中断函数中时判断是否满足你说要求的占空比,没达到就继续对变量值进行累加直到满足条件后使输出PWM波的那个引脚电平反转
4、具体详见http://wenku..com/link?url=u82FHU5L--ZvMAabY2JKxCEajqxn_f5GPMl5GQRgrnji3hAGRBq11e
E. 用51单片机进行pwm实现(具有发送端和接收端)
设DAC地址为8000H。
PWM: MOV R7,#00H ;初始化R7为0
PUSH ACC ;把占空比存到A,保护占空比
MOV DPTR,#8000H ;指向DAC端口
PWM_HI: MOV A,#00H ;高电压脉宽
MOVX @DPTR,A
POP ACC ;获得ACC中的占空比
PUSH ACC
INC R7
CJNE A,R7,PWM_HI ;高脉宽未到,则继续循环
PWM_LOW:MOV A,#0FFH
MOVX @DPTR,A ;输出低脉宽
INC R7
CJNE R7,#0FFH,PWM_LOW ;达到255,即满一周期,返回
POP ACC
RET
or
ORG OOOOH
MOV A,#00H
WW: MOV P0,A
INC A
LCALL DELAY
CJNE A,#0FFH,WW
WW1: DEC A
MOV P0,A
LCALL DELAY
CJNE A,#00H,WW1
SJMP WW
DELAY: MOV RO,#05H
DEL1: MOV R1,#05H
DEL2: NOP
DJNZ R1,DEL2
DJNZ R0,DEL1
RET
END
F. 单片机pwm是啥原理
1.pwm
脉冲宽度调制(pwm),是英文“pulse
width
molation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
2.单片机中的pwm
指的是此单片机有部分i/o口具有输出pwm信号的功能。
比如说部分单片机的i/o口可以输出时钟信号,时钟信号的脉宽和占空皮可调,可以根据实际需要调整寄存器位来设定。
3.基本思想就是利用单片机具有的pwm端口,在不改变pwm方波周期的前提下,通过软件的方法调整单片机的pwm控制寄存器来调整pwm的占空比,从而控制充电电流。以此来调整亮度
G. 51单片机AD采样后如何转换成PWM
不是很明野友派白你为什么要把数据转换成PWM信号输出告镇,如果你想这么做的话,可以直接用串口颂贺把单片机读到的数据输出
H. pwm控制的原理是什么单片机如何实现pwm控制的求简单解释,一定采纳
PWM是脉宽调制(PULSE WIDTH MODULATION)的简称,是开关电源的一种形式。PWM的控制需看你用何种集成电路。开关电源的集成电路有很多种,如TOP221,TL494,UC3842,UC3846,UC3875,SG3525等。开关电源又分反激式开关电源和正激式开关电源。它一般由集成电路的某个引脚,通过外部信号反馈来控制。
I. 单片机PWM捕捉模式是什么意思
PWM,是脉冲宽度调制的意思,主要参数有三个,整个脉冲的宽度,高电平的宽度,占空比。这里假设高电平有效。
占空比 = 高电平的宽度 / 整个脉冲的宽度。PWM捕捉,就是同时捕捉PWM的整个脉冲的宽度以及高电平的宽度,进而可以计算得出占空比。
典型的做法,在脉冲上升沿和下降沿都执行捕捉。上升沿复位并启动定时器,下降沿捕捉定时器内容作为高电平宽度,下一个上升沿捕捉定时器内容作为整个脉冲的宽度,同时复位并重启定时器以进行下一轮捕捉。
J. 单片机怎么发出PWM信号
如果单片机有PWM的话,就直接使用PWM信号输出,只要设置要对应的pwm周期和占空比就可以了。如果没有PWM,可以用IO模拟一个PWM信号。如果PWM要求频率比较快的话,你要算一下单片机的速度是否够快。