标题:
ps2四驱麦伦车 STM32源程序
[打印本页]
作者:
嘉哥呀
时间:
2020-11-16 13:16
标题:
ps2四驱麦伦车 STM32源程序
这是我做比赛用到的一个程序,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
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1