熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2019-3-11 22:44
正文摘要:新人我要控制電機(jī)運(yùn)作,完全懵逼,且還要被要求用pwm調(diào)速,我知道占空比之類的理論,但不知道pwm是個(gè)什么玩意,還需要自行編寫一套程序做數(shù)模轉(zhuǎn)換什么的么?純萌新 |
HC6800-ES-V2.0 發(fā)表于 2019-3-13 07:20 松鍵消抖,嗯,我還是做一個(gè) temp=P2; temp=temp&0xf0; if(temp!=0xf0) { temp=P2; { case 0xbe:key=0;break; case 0xde:key=1;break; case 0xee:key=2;break; } while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } 這種類型的消抖吧,雖然感覺方法笨了點(diǎn), |
雨夜帶刀 發(fā)表于 2019-3-12 22:48 你說的這個(gè),是松鍵消抖的功能,并且可以讓程序不會(huì)“死于一直按著不松手”。 |
大體思路應(yīng)該是很清晰了,細(xì)枝末節(jié)我再想想,謝謝 |
HC6800-ES-V2.0 發(fā)表于 2019-3-11 22:44 電機(jī)轉(zhuǎn)動(dòng)函數(shù)那里倒是很有啟發(fā),但鍵盤控制那個(gè)(m=0;((m<50)&&(k1==0));m++) 不是很能看懂,打算參考 做if選擇語句+!cw(按位取反)+定時(shí)器或者延時(shí)函數(shù) 的這種模式做 |
利用鍵盤控制直流電機(jī)轉(zhuǎn)動(dòng)速度,從而控制小車運(yùn)動(dòng)。 部分代碼,具體下載附件(包括代碼和仿真) void init_time() { TMOD=0X01; TH0=(65536-500)/256; TL0=(65536-500)%256; EA=1; ET0=1; TR0=1; } void time0() interrupt 1 using 1 { static uchar num; num++; if(num==numR) ENB=~ENB; if(num==numL) ENA=~ENA; if(num==100){ENA=~ENA;ENB=~ENB;num=0;} TH0=(65536-500)/256; TL0=(65536-500)%256; } ![]() |
pwmCon.jpg (264.88 KB, 下載次數(shù): 71)
pwm控制仿真圖
呵呵呵,正好我有一個(gè)簡(jiǎn)單的,你一看就明白了: #include<reg51.h> sbit z=P1^0;//直流電機(jī)一個(gè)腳,控制用,另一腳一定接電源正極 sbit k1=P3^1; sbit k2=P3^0; sbit k3=P3^2; sbit k4=P3^3; unsigned char i,n; void Delay10ms(unsigned char c) { unsigned char a,b; for(c;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } void zd(void)//電機(jī)轉(zhuǎn)動(dòng)函數(shù) { if (n==1) { z=1;//通電 Delay10ms(60-i);//占空比中的占的值 z=0;//斷電 Delay10ms(i);//占空比中的空的值,周期固定為60ms } else { z=0; } } void main(void) { unsigned char m; n=0;z=0; while (1) { if(k1==0) { Delay10ms(1); if(k1==0) { n=1; i=0; for (m=0;((m<50)&&(k1==0));m++) { Delay10ms(1); } } } if(k2==0) { Delay10ms(1); if(k2==0) { n=0; for (m=0;((m<50)&&(k2==0));m++) { Delay10ms(1); } } } if(k3==0) { Delay10ms(1); if(k3==0) { n=1; i=i+10; if (i>50) { i=50; } for (m=0;((m<50)&&(k3==0));m++) { Delay10ms(1); } } } if(k4==0) { Delay10ms(1); if(k4==0) { n=1; i=i-10; if (i>50) { i=0; } for (m=0;((m<50)&&(k4==0));m++) { Delay10ms(1); } } } zd(); } } 怎么樣?對(duì)應(yīng)電路是這樣的: ![]() ![]() |
Powered by 單片機(jī)教程網(wǎng)