导航:首页 > 操作系统 > pic单片机pwm

pic单片机pwm

发布时间:2022-08-19 06:22:12

㈠ 如何用pic单片机写PWM信号的产生

假设PPWM的脉宽为20,TH是高电平输出时间,TL是低电平输出时间,你只要在程序中满足TH+TL = 20就可以了
假设用延时程序来实现,delay(char i);为延时100us的程序,i为循环次数
void delay(uchar i)
{
uint x,y;
for(x=i;x>0;x--)
for(y=100;y>0;y--);
}
void main()
{
uchar pwm = 1,h = 20;
while(1)
{
RC3 =1;
delay(pwm);
RC3 = 0;
delay(h - pwm);
}
}
改变pwm的值(1-19)就可以改变输出高电平的宽度

例如:
//利作RC3控制输出PWM信号,控制电机正反转及转速,
//RC2为按键,默认为上拉高电平,当RC2按下为低电平时,RC1为电机以一定的速度转动,(松开默认为停止)长按停止
//MOS3205控制电机的管,高电平导通,低电平停止
//PIC16F877A,晶振4MHz

#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
__CONFIG(0X3B31);
//uint initnum,Speed,motor;//定义一个溢出中断的变量
void delay_ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
void init()//初始化接LED的RD端口为输出,及设置OPTION寄存器关闭TMR0定时计时器
{
TRISC0=0;
TRISC1=1;
TRISC2=1;
TRISC3=0;
TRISC4=0;
RC0=0;
RC1=1;
RC2=1;
RC3=0;
RC4=0;
/*
TRISD=0;//输出状态
INTCON=0xc0;//设置中断控制寄存器为11000000,始终只用到两个位开总中断,开第二外设允许中断
PIE1=0x02;//使能定时器1为00000010开中断,始终只用一最后一个其他的不用理会
PR2=200;//装初值,定时器2是8位的寄存器有256个数但是可以设定一个周期寄存器到了就可以溢出,如果不设周期寄存器就为256溢出,初值56则200us溢出
TMR2=0;//这样用PR2表示初值,在中断函数中就不用加初值了;51的模式2中,THn是下限,也就是开始计时的值;PIC中的PR2是上限,也就是计时到这个值就归零
T2CON=0x04;//设置预分频器和后分频器就是开始启到动定时器2;这里都是1:1的比例
// T2CON=0x05;//设置预分频器1:4和后分频器就是开始启到动定时器2;这时候的时间是乘以后4倍,原本以200us产生一次中断现在则以800us产生一次中断,即800*1000的时间闪动
// T2CON=0x0d;//设置预分频器1:4和后分频器1:2就是开始启到动定时器2;这时候的时间是乘以后4倍,再乘以2倍,原本以200us产生一次中断现在则以1600us产生一次中断即1600*1000的时间闪动
// PR2=100;设置周期寄存器,值设为100,到了就溢出,同时要将其初值设置为零才够精确
*/
}
void delay_us(uint i)//1表示100us,2表示200us
{
uint a,b;
for(a=i;a>0;a--)
{
for(b=7;b>0;b--);
}
}
/*
void pwm()
{
uchar pwm=10,h=20;//要输出pwm500hz的频率脉宽是2ms
while(1)
{
RC3=1;
delay_us(pwm);
RC3=0;
delay_us(h-pwm);
if(RC2==1)//加上这两句就可以退出了
break;
}
}*/
void main()
{
uchar aa,pwm=10,h=20;
init();
while(1)////判断按键状态////长按可以调光
{
if(RC2==0)//判断RC2按下
{
delay_ms(10);
while(!RC2)
{
for(aa=0;aa<255;aa++)//当前输出延时一段时间,这样才能看出速度的变化
{
RC3=1;
delay_us(pwm);
RC3=0;
delay_us(h-pwm);
}
if(++pwm > 19)
pwm = 10;
}
}
else
{
RC3=0;
}
}
}
/*
void go(uint motor1)//电机的速度参数
{
Speed=motor1;//给电机速度参数赋速度参数的变量
motor=0x64+Speed;//0x64为100在中间加上速度参数
}
void interrupt time0()//定时器的程序,后面不用写和51单片机那样的序号,也不用就算写在主函数的后面也不用声明
{ //51的模式2中,THn是下限,也就是开始计时的值;PIC中的PR2是上限,也就是计时到这个值就归零
TMR2IF=0;//先清零,
TMR2=0;
initnum++;//加一
if(initnum<motor)
{
RC3=1;
RC4=0;
}
else
{
RC3=0;
RC4=1;
}
if(initnum==0xc8)//判断值加1是否不等于200

{
initnum=0;
}
}
*/

㈡ 关于PIC单片机的PWM控制

采用fast pwm模式,对照单片机的datasheet进行相关寄存器的设置。

㈢ PIC单片机输出PWM波的C语言源程序

#ifndef __PWM__H__
#define __PWM__H__
void pwm_ccp1(unsigned char a,unsigned char b);
void pwm_ccp2(unsigned char a,unsigned char b);
#endif

void pwm_ccp1(unsigned char a,unsigned char b) //左边PWM
//CCP1 模块的 PWM 工作方式,周期为(b+1)*4*Tosc*(TMR2前分频值)=b+1 us //pwm高电平=a:CCP1CON(第四五位)Tosc*(TMR2前分频值)
//pwm高电平=a:CCP1CON(第四五位)Tosc*(TMR2前分频值)
{ //a>b时有最高转速
CCPR1L=a; //* 设置工作循环的高 8bit 为 a
CCP1CON=0X0C; //0000 1100 设置 CCP1 为 PWM 工作方式,且工作循环的低 bit2 为 11*/
CCP1IE=0;; //* 禁止总中断和外围中断 */
PR2=b; //* 设置 PWM 周期 */
TRISC2=0; //* 设置 RC2/CCP1 为输出 */
T2CON=0X04; //* 0000 1000前分频比为 1:1 ,后分频器1:2,打开 TMR2 ,同时输出 PWM 信号 */
}

void pwm_ccp2(unsigned char a,unsigned char b) //右边PWM
//CCP2 模块的 PWM 工作方式,周期为(b+1)*4*Tosc*(TMR2前分频值),
//pwm高电平=a:CCP2CON(第四五位)Tosc*(TMR2前分频值)
{
CCPR2L=a; //* 设置工作循环的高 8bit 为 a
CCP2CON=0X0C; //* 设置 CCP2 为 PWM 工作方式,且工作循环的低 bit2 为 11*/
CCP2IE=0; //* 中断屏蔽
PR2=b; //* 设置 PWM 周期 */
TRISC1=0; //* 设置 RC1/CCP2 为输出 */
T2CON=0X04; //* 前分频比为 1 ,打开 TMR2 ,同时输出 PWM 信号 */
}

㈣ pic单片机pwm输出占空比如何计算计算

是这样的,我想你要算有效电压。
单片机io脚输出vcc电压,pwm高电平部分时间是a,pwm周期是t,则电压=vcc*a/t。

㈤ PIC单片机PWM

PR2是你设的值,当Timer计数寄存器中的值与PR2寄存器中的值发生匹配时,在下一个计数时
钟Timer计数寄存器被清0,CCP引脚被置1(如果PWM占空比为0%,CCP引脚将不会被置1),输出你设定的脉冲

㈥ PIC单片机产生PWM

……你完全搞错了。PWM的周期的确是由PR2决定的,而PR2是Timer2模块的周期寄存器,Timer本身都是可以预分频的,不影响主频跑高速。
好好看看datasheet吧……我怀疑你根本就没看过。

㈦ pic单片机pwm

要做一个AD数据采集,计算出电池电压,根据AD结果调整PWM波形,大于12V是脉冲充电,小于12V是直流充电。

㈧ 如何让pic单片机输出一个pwm脉冲

输出脉冲的时候应该承担面积,所以的话是直接可以进行输出的。

㈨ PIC 单片机 PWM 脉宽怎么求 给的那个公式怎么算

这只是一个PWM周期计算公式,脉宽是另一个公式,
脉冲宽度 =CCPRxL:CCPxCON<5:4> *TOSC * (TMR2 预分频值)
注 :TOSC = 1/FOSC

CCPRxL:CCPxCON<5:4>
占空比= ----------------------------------------------------------------------
4(PR2 + 1)

㈩ PIC单片机中PWM和比较器是怎么个意思啊!

PIC单片机里面自己带有比较器和PWM
比较器是将一个模拟电压信号与一个基准电压相比较的电路。比较器的两路输
入为模拟信号,输出则为二进制信号,当输入电压的差值增大或减小时,其输出保持恒定
脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率

阅读全文

与pic单片机pwm相关的资料

热点内容
圆形白边框什么app 浏览:693
关于两兄弟一起淘金的外国电影 浏览:925
mfc套接字编程 浏览:737
同性动作片 浏览:316
李知恩拍过3级 浏览:741
通达oa2015工作流源码 浏览:540
服务器云解析id锁 浏览:557
完结小说txt下载 浏览:574
程序员怎么给孩子讲故事 浏览:945
影视网站你懂 浏览:711
动态表情去白底用哪个app好 浏览:982
云服务器淘宝秒杀脚本 浏览:697
枚举法求最小公倍数的程序算法 浏览:121
免费的小电影网站 浏览:716
福建牧野慢走丝编程 浏览:917
快播电影网在线观看 浏览:125
陈冲电影面子下载 浏览:118
什么app可以自己画自己的画 浏览:817
彼时曾相伴微电影完整版 浏览:257
atmel编程符号 浏览:918