熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2018-12-9 22:12
正文摘要:請(qǐng)問單片機(jī)STC15W408AS(類似于51單片機(jī))怎么用PWM實(shí)現(xiàn)輸出可調(diào)電壓?C語(yǔ)言程序應(yīng)該怎么寫呢? |
你好 ! 這個(gè)程序還有嗎? 能不能分享給我一份,我想具體學(xué)習(xí)一下,非常感謝! |
wulin 發(fā)表于 2018-12-11 08:52 學(xué)習(xí)了,多謝! |
HC6800-ES-V2.0 發(fā)表于 2018-12-10 08:02 請(qǐng)問pwmcr.這幾個(gè)大寫英文是pca的命令字么 |
wulin 發(fā)表于 2018-12-10 07:28 求教:num的值開始從1加到255。加了5000次。再讓num的值從255減到1也是5000次。。把num的值賦給計(jì)數(shù)器初值。。.那么這個(gè)占空比是多少呢。。。沒明白它咋會(huì)漸亮 |
嗯嗯。學(xué)到了,非常感謝。 |
wulin 發(fā)表于 2018-12-11 08:52 嗯嗯。學(xué)到了,非常感謝。 |
本帖最后由 wulin 于 2018-12-11 09:00 編輯 summerhqj 發(fā)表于 2018-12-10 22:26 count1,count2是計(jì)數(shù)延時(shí)變量,延時(shí)十幾毫秒num增/減一次,否則不是呼吸燈而是閃爍燈,b=5000也是計(jì)數(shù)延時(shí),目的是讓呼吸燈在最亮和最暗時(shí)停留幾十毫秒以改善視覺效果。其實(shí)把這個(gè)子程序略改一下就可以用按鍵控制增減PWM輸出電壓。示例如下: void keyscan() { static uint count1=0,count2=0; if(!key1) { count1++;//消抖計(jì)數(shù) if(count1>=2000) { count1=0; if(num>0) { num=num-5;//按5遞減占空比(按實(shí)際需求調(diào)整進(jìn)階) CCAP0H=num;//PWM輸出電壓增高 } while(!key1);//松手檢測(cè) } } if(!key2) { count2++; if(count2>=2000) { count2=0; if(num<0xff) { num=num+5;//按5遞增占空比 CCAP0H=num;//PWM輸出電壓降低 } while(!key2); } } } |
HC6800-ES-V2.0 發(fā)表于 2018-12-10 08:02 謝謝! |
wulin 發(fā)表于 2018-12-10 07:28 感謝,請(qǐng)問下這個(gè)count1,count2,2000和5000分別是代表什么呢? |
summerhqj 發(fā)表于 2018-12-10 17:23 ![]() |
![]() 感謝,請(qǐng)問下,如果我只用了單片機(jī)的P2.5口來(lái)進(jìn)行PWM輸出,它上面寫了CCP0_3,那是不是只要設(shè)置CCP0_3就好了,程序要怎么寫呢?我看了這個(gè)程序沒能看出他的PWM輸出口,請(qǐng)教下您,麻煩您了,謝謝! |
因?yàn)槭堑谝淮谓佑|這個(gè)單片機(jī)的PWM網(wǎng)上找的資料也看不大懂,真的非常感謝各位大佬。 |
這個(gè)STC15單片機(jī)的PWM,我做過試驗(yàn),部分程序如下(同一程序還有其它功能,暫時(shí)不管): //以下內(nèi)容為設(shè)置PWM波的輸出 P_SW2|=0x80; PWMCFG = 0x00; PWMCKS = 0x00; PWMIF=0x00; PWMFDCR=0x00; PWMC = 1001; PWM2T1 = 0; PWM2T2 = 1001; PWMCR=0x81; while(1) { for (i=0;i<1000;i++) { PWM2T1=i; Delay2ms(); } PWMCR=0x00; PWM2T1=1000; Delay1000ms(); PWMCR=0x81; for (i=1000;i>0;i--) { PWM2T1=i;//呼吸燈變亮的過程 Delay2ms(); } } } 我做的設(shè)置,都是參看單片機(jī)手冊(cè)得到的。 至于你要求的用PWM輸出一個(gè)具體值的電壓,這個(gè)我不會(huì)!!! |
用兩個(gè)按鍵操作一個(gè)變量num的+-,范圍0x00~0xff,直接控制CCAP0H寄存器:CCAP0H=num; 這是一個(gè)PWM呼吸燈程序,把呼吸程序改成按鍵程序即可直接應(yīng)用在PWM調(diào)壓。供你參考。 #include <STC15F2K60S2.H> #define uint unsigned int #define uchar unsigned char //sbit key1=P4^2; //sbit key2=P4^4; sbit LED=P1^0; uchar num=0x00; bit a=0; uint b; void PWM_Init() { CCON = 0; //初始化PCA控制寄存器 //PCA定時(shí)器停止 //清除CF標(biāo)志 //清除模塊中斷標(biāo)志 CL = 0; //復(fù)位PCA寄存器 CH = 0; CMOD = 0x02; //設(shè)置PCA時(shí)鐘源,PWM頻率=12MHZ/2/256=23.4375KHZ //PWM頻率=11.0592MHZ/2/256=21.600KHZ PCA_PWM0 = 0x00; //PCA模塊0工作于8位PWM CCAP0H = CCAP0L = 0xff; //PWM0的占空比為100% CCAPM0 = 0x42; //PCA模塊0為8位PWM模式 CR = 1; //PCA定時(shí)器開始工作 } void scan() { static uint count1=0,count2=0; if(a==0) { count1++; if(count1>=2000) { count1=0; if(num<0xff) { num++; if(num==0xff) { a=1; b=5000; while(b--); } } } } else { count2++; if(count2>=2000) { count2=0; if(num>0) { num--; if(num==0) { a=0; b=5000; while(b--); } } } } } void main() { P1M0 = 0x01; //推挽輸出 P1M1 = 0x00; //推挽輸出 PWM_Init(); while(1) { scan(); CCAP0H=num; } } |
|
Powered by 單片機(jī)教程網(wǎng)