標題: PWM控制舵機避障小車的C語言程序框架與單片機編程指導下載 [打印本頁]
作者: zhangcc 時間: 2018-6-8 09:30
標題: PWM控制舵機避障小車的C語言程序框架與單片機編程指導下載
知識點:
//PCA 寄存器內存單元分配
sfr CCON = 0xD8; //PCA 控制寄存器
sbit CCF0 = CCON^0;//PCA 模塊0中斷標志
sbit CR = CCON^6;//PCA 計數器計數允許位
sbit CF = CCON^7;//PCA 計數器溢出標志
sfr CMOD = 0xD9; //PCA 工作模式寄存器
sfr CL = 0xE9; //PCA 計數器低位
sfr CH = 0xF9; //PCA 計數器高位
sfr CCAPM0 = 0xDA; //PCA 模塊0比較/捕獲寄存器
sfr CCAP0L = 0xEA; //PCA 模塊0比較/捕獲寄存器低位字節
sfr CCAP0H = 0xFA; //PCA 模塊0比較/捕獲寄存器高位字節
sfr PCAPWM0 = 0xf2; //PCA PWM0寄存器
sfr AUXR = 0x8E; //PCA 輔助寄存器
PCA模塊0輸出PWM。要用作PWM,因不需要進中斷處理,程序更為簡單,關鍵是設置模式CCAPM0=0x42即可。
void Init_PWM()//初始化PWM模塊,注意此時只到pwm0即P1.3
{
CCON=0;//PCA停止計數,清零溢出標志和所有中斷標志
CL=0;//PCA計數器低位清零
CH=0;//PCA計數器清高位清零
CMOD=0x04;//0x04:定時器時鐘
CCAP0H=CCAP0L=236; //*PWM0 占空比控制舵機居中
CCAPM0=0x42;//0X42:8位PWM P1.3輸出,無中斷;
CR=1; //PCA 計數器開始工作
}
- 定時器0方式2作為PWM時鐘源; 定時器1方式1作為紅外傳感器時鐘源;
工作方式1 的編程要點:
1、THx/TLx賦初值:THx賦高8位,TLx賦低8位,
2、TMOD選方式: 寫“M1,M0”=01 選方式1,
3、若不用門控位,直接用軟件寫TRx控制啟/停,若使用門控位,先置位TRx,然后由INTx端的高/低電平來控制其啟/停 。
4、若要允許中斷,還須先置位ETx、EA等中斷允許控制位,并編寫中斷服務程序, 若不用中斷,可查詢“計數溢出標志TFx”的方式工作,但溢出標志TFx須軟件清0。
編程要點:TH0=TL0=184;//PWM 50Hz 20ms 11.0592M 184
工作方式2 的編程要點:
1、THx/TLx賦相同初值
2、在TLx計數達到0FFH 再加“1”時,TL0將溢出,進位位直接進入“TFx”去申請中斷,同時打開三態門,使THx中的值自動重裝(Copy)進TLx
3、TMOD寄存器選方式: 寫“M1,M0” = 10選中方式2
4、其他用法與各種方式1完全相同
CCAPnH=256(1-占空比)
占空比=高電平時間/周期
0.5ms -90°
1ms -45°
1.5ms 0°
2ms 45°
2.5ms 90°
例如:舵機需輸出角度為0°,高電平時間1.5ms,
則CCAPnH=CCAPnL=256 ×(1-1.5/20)=236.8 ,
取236或者237
常用占空比設計
舵機居中:236
左45°:241
左27°:238
右45°:229
右27°:234
編程要點:CCAP0H=CCAP0L=相應占空比。
自行選擇傳感器個數,完成程序設計。
單片機源程序如下:
- #include <reg52.h>
- #include <math.h>
- (對所用到的傳感器逐個位定義 方便程序中使用 例如sbit left=P1^0;)
- //PCA 寄存器內存單元分配
- sfr CCON = 0xD8; //PCA 控制寄存器
- sbit CCF0 = CCON^0;//PCA 模塊0中斷標志
- sbit CCF1 = CCON^1;//PCA 模塊1中斷標志
- sbit CR = CCON^6;//PCA 計數器計數允許位
- sbit CF = CCON^7;//PCA 計數器溢出標志
- sfr CMOD = 0xD9; //PCA 工作模式寄存器
- sfr CL = 0xE9; //PCA 計數器低位
- sfr CH = 0xF9; //PCA 計數器高位
- sfr CCAPM0 = 0xDA; //PCA 模塊0比較/捕獲寄存器
- sfr CCAP0L = 0xEA; //PCA 模塊0比較/捕獲寄存器低位字節
- sfr CCAP0H = 0xFA; //PCA 模塊0比較/捕獲寄存器高位字節
- sfr PCAPWM0 = 0xf2; //PCA PWM0寄存器
- sfr AUXR = 0x8E; //PCA 輔助寄存器
- //*****************************************************************************/
- //PWM初始化設置
- void Init_PWM()//初始化PWM模塊,
- {
- CCON=0;//PCA停止計數,清零溢出標志和所有中斷標志
- CL=0;//PCA計數器低位清零
- CH=0;//PCA計數器清高位清零
- CMOD=0x04;//時鐘源 0X00:系統時鐘/12,0X02:系統時鐘/2,0x04:定時器時鐘 0x08:系統時鐘
- CCAP0H=CCAP0L=236; //*PWM0 占空比控制 0時占空比 100% 255占空比為0
- CCAPM0=0x42;//0X42:8位PWM P1.3輸出,無中斷;
- CR=1; //PCA 計數器開始工作
- }
- //定時器0初始化設置
- void Init_Timer0()
- {
- AUXR= 0x00;//定時器工作在12T模式
- TMOD = 0x12;//設置定時器0為8位自動重裝模式
- TH0=TL0=184;//PWM 50Hz 20ms 11.0592M 18412M178 20M 126
- EA = 1;
- TR0 = 1;//打開定時器作為PWM時鐘
- ET0 = 1;
- }
- //定時器1初始化設置
- void Init_Timer1()
- {
- TMOD=0x12;//定時器1工作方式1 (超聲波)
- TH1=0x00;
- TL1=0x00;
- EA=1;
- TR1=1;
- ET1=1;
-
- }
- 這部分可編寫相應的避障子程序,例如
- Void避障程序名 ()
- {
- 避障程序設計
- }
- void main()
- {
- Init_PWM();
- Init_Timer0();
- Init_Timer1();
- while(1)
- {
- 避障子程序調用
- }
- }
復制代碼
完整的Word格式文檔51黑下載地址:
無碳小車編程指導.docx
(47.07 KB, 下載次數: 16)
2018-6-8 09:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |