摘要:否則可能會(huì)導(dǎo)致電平顛倒完美的計(jì)數(shù)糟糕的線條再來(lái)一個(gè)測(cè)試組我們來(lái)實(shí)現(xiàn)一個(gè)呼吸燈的效果呼吸燈波形為了賢淑妻子,咳咳,賢淑才女,小碼農(nóng)必定讓控制時(shí)間什么是脈寬調(diào)制中間動(dòng)的線是電流線,電流通斷,電流小就暗,電流大就亮。
中間動(dòng)的線是電流線,電流通斷,電流小就暗,電流大就亮。實(shí)際上準(zhǔn)確的說(shuō)是應(yīng)該是功率線,因?yàn)?mark>導(dǎo)通電壓不變 電流減少一半 功率自然就是一半
PWM 脈寬調(diào)制,實(shí)質(zhì)上就是電路的“導(dǎo)通”和“關(guān)斷”的時(shí)間比改變, 調(diào)整電壓或者電流的大小。專業(yè)術(shù)語(yǔ)叫“占空比”。一般來(lái)說(shuō),導(dǎo)通和關(guān)斷的速度要求很高。比如我們有些開(kāi)關(guān)電源的工作模式,就是脈寬調(diào)制。通過(guò)調(diào)整變壓器的變壓時(shí)間,來(lái)保證輸出電流功率足夠。實(shí)現(xiàn)電壓穩(wěn)定。
PWM影響
開(kāi)關(guān)電路 影響的是電流通斷 電壓要么是0 要么最大
積分微分 運(yùn)放電路 輸出結(jié)果就是影響電壓
SPWM 是基于 PWM 規(guī)則,使輸出波形成正弦波。在 PWM 周期固定的情況下,通過(guò)調(diào)整不同的脈寬,可以輸出不同電壓,最后看起來(lái)就是一個(gè)正弦波波形。
這個(gè)自己建
void Timer0_Init(){// AUXR &= 0x7f;// TMOD &= 0xf0;// TMOD |= 0x01;// TR0 = 1;// TH0 = 0xf8;// TL0 = 0x30;//定時(shí)1ms AUXR &= 0x7F; //定時(shí)器時(shí)鐘12T模式 TMOD &= 0xF0; //設(shè)置定時(shí)器模式 TMOD |= 0x02; //設(shè)置定時(shí)器模式 TL0 = 0xEC; //設(shè)置定時(shí)初值 TH0 = 0xEC; //設(shè)置定時(shí)重載值 TF0 = 0; //清除TF0標(biāo)志 TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí) ET0 = 1;}
void Timer0_Routine() interrupt 1{// //重裝初值// TH0 = 0xf8;// TL0 = 0x30;//定時(shí)1ms static u8 count = 0;//count在[0,255]之間 if(count<102) P21 = 1; else P21 = 0; count++;}
void PWM_Init()//PWM初始化{ P2M1 = 0; P2M0 = 0x02; //強(qiáng)推挽 P_SW2 |= 0x80; //允許訪問(wèn)XSFR PWMCFG = 0; //配置PWM的輸出初始電平為低電平 PWMCKS = 0; //選擇PWM的時(shí)鐘為Fosc PWMCH = 0x03; //設(shè)置PWM周期 PWMCL = 0xff; //設(shè)置PWM周期 PWM3CR = 0x00; //選擇PWM3輸出到P2.1,不能使能PWM2中斷 PWMCR &= ~0x82; //使能PWM信號(hào)輸出 PWMCR |= 0x82; //使能PWM信號(hào)輸出 P_SW2 &= ~0x80; //關(guān)閉訪問(wèn)XSFR}
//PWM修改驅(qū)動(dòng)void PWM_Modify_Drive(u16 data1,u16 data2){ P_SW2 |= 0x80; //修改PWM之前需要使能P_SW2 PWMCR &= 0x7f; //修改之前必須先關(guān)閉PWM使能 PWMCFG = 0; //配置PWM的輸出初始電平為低電平 PWM3T1 = data1; //設(shè)置PWM3第一次反轉(zhuǎn)的PWM計(jì)數(shù) PWM3T2 = data2; //設(shè)置PWM3第二次反轉(zhuǎn)的PWM計(jì)數(shù) PWMCR |= 0x80; //修改之后重新允許PWM功能 P_SW2 &= ~0x80; //寫(xiě)入之后關(guān)閉P_SW2}
PWM呼吸燈波形
))
//PWM數(shù)據(jù)分配void PWM_Allot(){ //設(shè)置一個(gè)PWM變量 static xdata u16 PWM = 0; static xdata u8 count = 0; //呼吸燈是從零到最大,從最大到零,所以來(lái)個(gè)標(biāo)志變量 static bit PWM_flag = 0; count++; if(count > 250) { count = 0; if(!PWM_flag) { PWM++; if (PWM > 1020) { PWM_flag = 1; } } if(PWM_flag) { PWM--; if(PWM<2) { PWM_flag = 0; } } PWM_Modify_Drive(0,PWM); }}
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/125322.html