![]() |
發(fā)布時間: 2019-3-11 22:44
正文摘要:新人我要控制電機運作,完全懵逼,且還要被要求用pwm調(diào)速,我知道占空比之類的理論,但不知道pwm是個什么玩意,還需要自行編寫一套程序做數(shù)模轉換什么的么?純萌新 |
HC6800-ES-V2.0 發(fā)表于 2019-3-13 07:20 松鍵消抖,嗯,我還是做一個 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; } 這種類型的消抖吧,雖然感覺方法笨了點, |
雨夜帶刀 發(fā)表于 2019-3-12 22:48 你說的這個,是松鍵消抖的功能,并且可以讓程序不會“死于一直按著不松手”。 |
大體思路應該是很清晰了,細枝末節(jié)我再想想,謝謝 |
HC6800-ES-V2.0 發(fā)表于 2019-3-11 22:44 電機轉動函數(shù)那里倒是很有啟發(fā),但鍵盤控制那個(m=0;((m<50)&&(k1==0));m++) 不是很能看懂,打算參考 做if選擇語句+!cw(按位取反)+定時器或者延時函數(shù) 的這種模式做 |
利用鍵盤控制直流電機轉動速度,從而控制小車運動。 部分代碼,具體下載附件(包括代碼和仿真) 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控制仿真圖
呵呵呵,正好我有一個簡單的,你一看就明白了: #include<reg51.h> sbit z=P1^0;//直流電機一個腳,控制用,另一腳一定接電源正極 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)//電機轉動函數(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(); } } 怎么樣?對應電路是這樣的: ![]() ![]() |
Powered by 單片機教程網(wǎng)