導航:首頁 > 操作系統 > 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相關的資料

熱點內容
安卓版的電腦怎麼換成蘋果 瀏覽:711
全英文字幕電影的app 瀏覽:122
邵氏有關左慈的電影 瀏覽:390
以肉為主的穿越 瀏覽:515
名家編譯委員會的版本怎麼樣 瀏覽:186
安卓系統如何查看復制記錄 瀏覽:905
小苮兒短篇有聲小說網盤 瀏覽:234
安卓71如何從tp上下載光遇 瀏覽:997
centosyumjava安裝 瀏覽:798
夏開頭的電影,電視劇 瀏覽:622
綠色的夜晚在線免費觀看電影 瀏覽:715
日本電影里有個叫布川褲子是什麼電影 瀏覽:612
sed命令組合 瀏覽:371
三年級孩子剛學編程的作品 瀏覽:427
韓劇帶個小女孩的殺手 瀏覽:630
java通訊機 瀏覽:831
伺服器的後台是什麼樣子 瀏覽:139
韓國賣保險的女人電影 瀏覽:805
全裸同性大尺度電影有哪些 瀏覽:256
《 男孩的名字叫男孩 》電影 瀏覽:300