日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PWM控制小船

發布時間:2024/1/1 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PWM控制小船 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文章基于一個初學者對于pwm的了解。

PWM中文翻譯為脈沖寬度調制,原理就是,先給定一個周期T,然后把T分成n份,及每份時間為T/n,調速即為調整高電平(低電平)在這個T內所占據的份數,如高電平占了10份,則時間為10T/n。高電平在T內所占比例為10/n,占空比為1-10/n,如圖1所示。

圖1

電機分為有刷電機與無刷電機,這里以無刷直流電機為例,電機要運作需要驅動芯片,有兩種一種為電調(電子調速器),一種為電機驅動(如L298n)。這里小車以L298n驅動為例,首先大家要知道L298n的用法(注意板外取電需要將+5v接口置高點平),我用的是2路L298n模塊,可以控制兩個電機,分別將IN1,IN2端口接入單片機P1^0,P1^1;IN3,IN4端口接入單片機1^2,P1^3;ENA,ENB端口接入P1^4,P1^5(ENA,ENB即為PWM信號)。

圖2

要實現PWM調速有兩種方法,一種是直接寫延時函數Delayms(),還有一種是中斷函數。前者容易理解,但是不精確,后者難理解,但是精確。
希望我的文章對你們有所幫助,后面附上代碼,希望各位大佬修改的更簡單。

#include<reg52.h> #define uint unsigned int #define uchar unsigned char uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar time_1ms; uchar L_LPWM,t;//占空比L_PWM/50。 void delayms(unsigned int);//延時函數1ms。 void init();//初始化函數。 sbit IN1=P1^0; sbit IN2=P1^1; sbit IN3=P1^2; sbit IN4=P1^3; sbit L_PWM=P1^4;//ENA sbit R_PWM=P1^5;//ENB sbit dula=P2^6; sbit wela=P2^7; #define Boat_Left_Go IN1=1;IN2=0//船左螺旋槳順時針轉動,前進。 #define Boat_Right_Go IN3=0;IN4=1//船有螺旋槳逆時針轉動,前進。 #define Boat_Left_Back IN1=0;IN2=1//船左螺旋槳逆時針轉動,后退。 #define Boat_Right_Back IN3=1;IN4=0//船右螺旋槳順時針轉動,后退。 #define Boat_Left_Stop IN1=0;IN2=0//左螺旋槳停止。 #define Boat_Right_Stop IN3=0;IN4=0//右螺旋槳停止。 void Boat_Move();//選擇航行模式函數. void display(uchar num);//顯示檔位函數 void Boat_Go();//船前進 void Boat_Back();//船后退 void Boat_Stop();//船停止 void Boat_Left();//船左轉 void Boat_Right();//船右轉 void main() {init();while(1){Boat_Move();}/*{L_LPWM=0;for(t=0;t<10;t++)//自動變檔。{L_LPWM++;//L_LPWM=L_LPWM + 10;delayms(5000);}}*/ } void Boat_Move() {uchar temp,key;P3=0xfe;//1111 1110temp=P3;//掃描P3端口,將瞬時參數賦給temp。temp=temp&0xf0;//temp&1111 0000if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xee://1110 1110key=1;L_LPWM=10;//占空比20%break;case 0xde://1101 1110key=2;L_LPWM=15;//占空比30%break;case 0xbe:key=3;L_PWM=20;break;case 0x7e:key=4;L_LPWM=25;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}display(key);}}P3=0xfd;//1111 1101temp=P3;//掃描P3端口,將瞬時參數賦給temp。temp=temp&0xf0;//temp&1111 0000if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xed://1110 1101key=5;L_LPWM=30;//占空比60%break;case 0xdd://1101 1101key=6;L_LPWM=35;//占空比70%break;case 0xbd:key=7;L_PWM=40;break;case 0x7d:key=8;L_LPWM=45;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}display(key);}}P3=0xfb;//1111 1011temp=P3;//掃描P3端口,將瞬時參數賦給temp。temp=temp&0xf0;//temp&1111 0000if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xeb://1110 1011Boat_Go();break;case 0xdb://1101 1011Boat_Left();break;case 0xbb:Boat_Right();break;case 0x7b:Boat_Back();break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xf7;//1111 0111temp=P3;//掃描P3端口,將瞬時參數賦給temp。temp=temp&0xf0;//temp&1111 0000if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xe7://1110 0111Boat_Stop();}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}} } } void init() {TMOD=0x01;//設定定時器0為工作方式1TH0=(65536-917)/256;//裝初值50ms一次中斷TL0=(65536-917)%256;EA=1;//開啟總中斷ET0=1;//開啟定時器0中斷TR0=1;//開啟定時器0L_LPWM= 0;L_PWM= 0;R_PWM= 0;time_1ms= 0;P0=0;dula=1;dula=0;P0=0xc0;wela=1;wela=0; } void delayms(uint x) {uint i,j;for(i=x;i>0;i--)for(j=110;j>0;j--); } void Boat_Go() {Boat_Left_Go;Boat_Right_Go; } void Boat_Back() {Boat_Left_Back;Boat_Right_Back; } void Boat_Stop() {Boat_Left_Stop;Boat_Right_Stop; } void Boat_Left() {Boat_Right_Go;Boat_Left_Back; } void Boat_Right() {Boat_Left_Go;Boat_Right_Back; } void display(uchar num) {P0=table[num]; dula=1; dula=0; } void T0_time() interrupt 1 { // Boat_Move();TH0=252;TL0=107;time_1ms++;if(time_1ms > 50)//最高50mstime_1ms=0;if(time_1ms < L_LPWM)//占空比=1-L_LPWM/50=1-X%。{L_PWM= 1;R_PWM= 1;}else{L_PWM= 0;R_PWM= 0;} }

總結

以上是生活随笔為你收集整理的PWM控制小船的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。