这是我做比赛用到的一个程序,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)
|