這是我做比賽用到的一個程序,stm32f103的PS2四驅麥倫。用的是兩根線控制電機的,所以要輸出好多道pwm
單片機源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "sys.h"
- #include "pwm.h"
- #include "pstwo.h"
- //PC6-9 TIM3
- //PA0-3 TIM5
- //#define A1 PAout(4) 升1
- //#define A2 PAout(5) 升2
- //#define A3 PAout(6) 云1
- //#define A4 PAout(7) 云2
- //#define A5 PCout(4) 桿1
- //#define A6 PCout(5) 桿2
- //霍爾傳感器 無磁場高電平
- //限位開關 無限位高電平
- //Handkey值
- //0xffff 無按鍵
- //[粉 藍 紅 綠 R1 L1 R2 L2 左 下 右 上 START R3 L3 SELECT] 對應每一位含義
- int main(void)
- {
- u16 pwm;
- delay_init();
- // TIM1_PWM_Init(1439,99);
- TIM5_3_PWM_Init(1439,99);
- LED_Init(); //初始化與LED連接的硬件接口
- PS2_Init();
- while(1)
- {
- PS2_DataKey();
- delay_ms(50);
- switch(Handkey)
- {
- case 0xffff: //無按鍵
- LED=1;
- A1=1;A2=1;A3=1;A4=1;
- pwm=1440;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,pwm);
- break; //初始
- case 0xffef: //上
- LED=0;
- A1=1;A2=1;A3=1;A4=1;
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,1440);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,1440);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,1440);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,1440);
- TIM_SetCompare4(TIM3,pwm);
- break; //前進
- case 0xffbf: //下
- LED=0;
- A1=1;A2=1;A3=1;A4=1;
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,1440);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,1440);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,1440);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,1440);
- break; //后退
- case 0xff7f: //左
- LED=0;
- A1=1;A2=1;A3=1;A4=1;
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,1008);
- TIM_SetCompare3(TIM5,1008);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,1008);
- TIM_SetCompare3(TIM3,1008);
- TIM_SetCompare4(TIM3,pwm);
- break; //左移
- case 0xffdf: //右
- LED=0;
- A1=1;A2=1;A3=1;A4=1;
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,1008);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,1008);
- TIM_SetCompare1(TIM3,1008);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,1008);
- break; //右移
- case 0xf7ff: //R1
- LED=0;
- A1=0;A2=1;A3=1;A4=1;
- pwm=1440;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,pwm);
- break; //云臺進
- case 0xfbff: //L1
- LED=0;
- A1=1;A2=0;A3=1;A4=1;
- pwm=1440;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,pwm);
- break; //云臺退
- case 0xfdff: //R2
- LED=0;
- A1=1;A2=1;A3=1;A4=1;
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,720);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,720);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,720);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,720);
- TIM_SetCompare4(TIM3,pwm);
- break; //減速進
- case 0xfeff: //L2
- LED=0;
- A1=1;A2=1;A3=1;A4=1;
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,720);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,720);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,720);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,720);
- break; //減速退
- case 0xefff: //綠
- LED=0;
- A1=1;A2=1;
- if(CHUAN1==0)
- {A3=1;A4=1;}
- else
- {A3=1;A4=0;}
- pwm=1440;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,pwm);
- break; //上抬
- case 0xbfff: //藍
- LED=0;
- A1=1;A2=1;
- if(CHUAN2==0)
- {A3=1;A4=1;}
- else
- {A3=0;A4=1;}
- pwm=1440;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,pwm);
- break; //下落
- case 0x7fff: //粉
- LED=0;
- A1=1;A2=1;A3=1;A4=1;
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,1440);
- TIM_SetCompare3(TIM5,1440);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,1440);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,1440);
- break; //逆
- case 0xdfff: //紅
- LED=0;
- A1=1;A2=1;A3=1;A4=1;
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,1440);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,1440);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,1440);
- TIM_SetCompare3(TIM3,1440);
- TIM_SetCompare4(TIM3,pwm);
- break; //順
- //組合測試
- case 0xefef: //進 抬
- LED=0;
- A1=1;A2=1;
- if(CHUAN1==0)
- {A3=1;A4=1;}
- else
- {A3=1;A4=0;}
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,1440);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,1440);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,1440);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,1440);
- TIM_SetCompare4(TIM3,pwm);
- break;
- case 0xefbf: //退 抬
- LED=0;
- A1=1;A2=1;
- if(CHUAN1==0)
- {A3=1;A4=1;}
- else
- {A3=1;A4=0;}
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,1440);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,1440);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,1440);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,1440);
- break;
- case 0xef7f: //左 抬
- LED=0;
- A1=1;A2=1;
- if(CHUAN1==0)
- {A3=1;A4=1;}
- else
- {A3=1;A4=0;}
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,1008);
- TIM_SetCompare3(TIM5,1008);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,1008);
- TIM_SetCompare3(TIM3,1008);
- TIM_SetCompare4(TIM3,pwm);
- break;
- case 0xefdf: //右 抬
- LED=0;
- A1=1;A2=1;
- if(CHUAN1==0)
- {A3=1;A4=1;}
- else
- {A3=1;A4=0;}
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,1008);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,1008);
- TIM_SetCompare1(TIM3,1008);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,1008);
- break;
- case 0xbfef: //進 落
- LED=0;
- A1=1;A2=1;
- if(CHUAN2==0)
- {A3=1;A4=1;}
- else
- {A3=0;A4=1;}
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,1440);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,1440);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,1440);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,1440);
- TIM_SetCompare4(TIM3,pwm);
- break;
- case 0xbfbf: //退 落
- LED=0;
- A1=1;A2=1;
- if(CHUAN2==0)
- {A3=1;A4=1;}
- else
- {A3=0;A4=1;}
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,1440);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,1440);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,1440);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,1440);
- break;
- case 0xbf7f: //左 落
- LED=0;
- A1=1;A2=1;
- if(CHUAN2==0)
- {A3=1;A4=1;}
- else
- {A3=0;A4=1;}
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,1008);
- TIM_SetCompare3(TIM5,1008);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,1008);
- TIM_SetCompare3(TIM3,1008);
- TIM_SetCompare4(TIM3,pwm);
- break;
- case 0xbfdf: //右 落
- LED=0;
- A1=1;A2=1;
- if(CHUAN2==0)
- {A3=1;A4=1;}
- else
- {A3=0;A4=1;}
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,1008);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,1008);
- TIM_SetCompare1(TIM3,1008);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,1008);
- break;
- case 0xf7ef: //進 云進
- LED=0;
- A1=0;A2=1;A3=1;A4=1;
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,1440);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,1440);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,1440);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,1440);
- TIM_SetCompare4(TIM3,pwm);
- break;
- case 0xf7bf: //退 云進
- LED=0;
- A1=0;A2=1;A3=1;A4=1;
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,1440);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,1440);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,1440);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,1440);
- break;
- case 0xf77f: //左 云進
- LED=0;
- A1=0;A2=1;A3=1;A4=1;
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,1008);
- TIM_SetCompare3(TIM5,1008);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,1008);
- TIM_SetCompare3(TIM3,1008);
- TIM_SetCompare4(TIM3,pwm);
- break;
- case 0xf7df: //右 云進
- LED=0;
- A1=0;A2=1;A3=1;A4=1;
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,1008);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,1008);
- TIM_SetCompare1(TIM3,1008);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,1008);
- break;
- case 0xfbef: //進 云退
- LED=0;
- A1=1;A2=0;A3=1;A4=1;
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,1440);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,1440);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,1440);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,1440);
- TIM_SetCompare4(TIM3,pwm);
- break;
- case 0xfbbf: //退 云退
- LED=0;
- A1=1;A2=0;A3=1;A4=1;
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,1440);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,1440);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,1440);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,1440);
- break;
- case 0xfb7f: //左 云退
- LED=0;
- A1=1;A2=0;A3=1;A4=1;
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,1008);
- TIM_SetCompare3(TIM5,1008);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,1008);
- TIM_SetCompare3(TIM3,1008);
- TIM_SetCompare4(TIM3,pwm);
- break;
- case 0xfbdf: //右 云退
- LED=0;
- A1=1;A2=0;A3=1;A4=1;
- pwm=0;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,1008);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,1008);
- TIM_SetCompare1(TIM3,1008);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,1008);
- break;
- case 0xe7ff: //抬 云進
- LED=0;
- A1=0;A2=1;
- if(CHUAN1==0)
- {A3=1;A4=1;}
- else
- {A3=1;A4=0;}
- pwm=1440;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,pwm);
- break;
- case 0xebff: //抬 云退
- LED=0;
- A1=1;A2=0;
- if(CHUAN1==0)
- {A3=1;A4=1;}
- else
- {A3=1;A4=0;}
- pwm=1440;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,pwm);
- break;
- case 0xb7ff: //落 云進
- LED=0;
- A1=0;A2=1;
- if(CHUAN2==0)
- {A3=1;A4=1;}
- else
- {A3=0;A4=1;}
- pwm=1440;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,pwm);
- break;
- case 0xbbff: //落 云退
- LED=0;
- A1=1;A2=0;
- if(CHUAN2==0)
- {A3=1;A4=1;}
- else
- {A3=0;A4=1;}
- pwm=1440;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,pwm);
- break;
- default: //其他情況
- {
- LED=1;
- A1=1;A2=1;A3=1;A4=1;
- pwm=1440;//pwm越小正脈寬越小
- TIM_SetCompare1(TIM5,pwm);
- TIM_SetCompare2(TIM5,pwm);
- TIM_SetCompare3(TIM5,pwm);
- TIM_SetCompare4(TIM5,pwm);
- TIM_SetCompare1(TIM3,pwm);
- TIM_SetCompare2(TIM3,pwm);
- TIM_SetCompare3(TIM3,pwm);
- TIM_SetCompare4(TIM3,pwm);
- }
- }
- }
- }
復制代碼
所有資料51hei提供下載:
麥輪.7z
(186.67 KB, 下載次數: 14)
2020-11-16 15:45 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|