//主程序源碼:代碼變異絕無錯誤,硬件測試過了,由于舵機數量角度簡易使用5v 2A電源供電
/************************************************************************
6自由度機械臂引腳說明:
PB4->1號舵機(左右轉向), PB5->2號舵機(上下轉向), PB0->3號舵機(上下轉向),
PB1->4號舵機(上下轉向), PB6->5號舵機(機械爪轉向), PB7->6號舵機(機械爪),
PC13->數字傳感器輸入端
PA0->按鍵1(舵機角度+),PA1->按鍵2(舵機角度-),
PA2->按鍵3(舵機選擇+),PA3->按鍵4(舵機選擇-),
PA4->按鍵5(機械爪閉), PA5->按鍵6(機械爪開),
串口1引腳說明:
PA9->TXD(發送), PA10-> RXD(接收)
************************************************************************/
#include "stm32f10x.h"
#include "smartcar.h"
#include "usart.h"
#include "pwm.h"
#include "delay.h"
#include "KEY.h"
#include "digitalvalue.h"
extern u8 Res;//全局變量
int main(void)
{
vu8 numval31=150;u16 numval32=200;u16 numval33=200;u16 numval34=200;
u16 numval41=150;//u16 numval42=150;u16 numval43=150;u16 numval44=150;
vu8 pwmval31=150;u16 pwmval32=200;u16 pwmval33=200;u16 pwmval34=200;
u16 pwmval41=150;u16 pwmval42=60;u16 pwmval43=150;u16 pwmval44=150;
vu8 key=0;
vu8 num=1 ;
vu8 dig=0;
smartcar_Init();//智能小車GPIO初始化
delay_init();//延時函數初始化
KEY_Init(); //初始化與按鍵連接的硬件接口
digival_value_Init(); //數字開關輸入初始化
uart_init(9600);
TIM3_OC1_PWM_Init(1999,719); //720分頻。PWM頻率=72000000/2000*720=50hz,定時器3的1通道初始化
TIM3_OC2_PWM_Init(1999,719); //720分頻。PWM頻率=72000000/2000*720=50hz
TIM3_OC3_PWM_Init(1999,719); //720分頻。PWM頻率=72000000/2000*720=50hz
TIM3_OC4_PWM_Init(1999,719); //720分頻。PWM頻率=72000000/2000*720=50hz
TIM4_OC1_PWM_Init(1999,719); //720分頻。PWM頻率=72000000/2000*720=50hz
TIM4_OC2_PWM_Init(1999,719); //720分頻。PWM頻率=72000000/2000*720=50hz
TIM4_OC3_PWM_Init(1999,719); //720分頻。PWM頻率=72000000/2000*720=50hz
TIM4_OC4_PWM_Init(1999,719); //720分頻。PWM頻率=72000000/2000*720=50hz
TIM_SetCompare1(TIM3,pwmval31); //pwm輸出函數
TIM_SetCompare2(TIM3,pwmval32); //pwm輸出函數
TIM_SetCompare3(TIM3,pwmval33); //pwm輸出函數
TIM_SetCompare4(TIM3,pwmval34); //pwm輸出函數
TIM_SetCompare1(TIM4,pwmval41); //pwm輸出函數
TIM_SetCompare2(TIM4,pwmval42); //pwm輸出函數
TIM_SetCompare3(TIM4,pwmval43); //pwm輸出函數
TIM_SetCompare4(TIM4,pwmval44); //pwm輸出函數
while(1)
{
key=KEY_Scan(0); //得到鍵值,0:不支持連續按,1:支持連續按.
dig=digival_value_Scan();
if(key)
{
switch(key)
{
case KEYA_PRES://舵機按鈕,左轉
switch(num)
{
case 1:numval31++; pwmval31=(numval31*1); if(numval31>250) numval31=250;TIM_SetCompare1(TIM3,pwmval31); break;//numval用于舵機手動運行時速度調節
case 2:numval32++; pwmval32=(numval32*1); if(numval32>250) numval32=250;TIM_SetCompare2(TIM3,pwmval32); break;//
case 3:numval33++; pwmval33=(numval33*1); if(numval33>250) numval33=250;TIM_SetCompare3(TIM3,pwmval33); break;//
case 4:numval34++; pwmval34=(numval34*1); if(numval34>250) numval34=250;TIM_SetCompare4(TIM3,pwmval34); break;//
case 5:numval41++; pwmval41=(numval41*1); if(numval41>250) numval41=250;TIM_SetCompare1(TIM4,pwmval41); break;//
}
break;
case KEYB_PRES://舵機按鈕 ,右轉
switch(num)
{
case 1:numval31--; pwmval31=(numval31*1); if(numval31<40) numval31=50; TIM_SetCompare1(TIM3,pwmval31); break;//
case 2:numval32--; pwmval32=(numval32*1); if(numval32<55) numval32=55; TIM_SetCompare2(TIM3,pwmval32); break;//
case 3:numval33--; pwmval33=(numval33*1); if(numval33<55) numval33=55; TIM_SetCompare3(TIM3,pwmval33); break;//
case 4:numval34--; pwmval34=(numval34*1); if(numval34<55) numval34=55; TIM_SetCompare4(TIM3,pwmval34); break;//
case 5:numval41--; pwmval41=(numval41*1); if(numval41<55) numval41=55; TIM_SetCompare1(TIM4,pwmval41); break;//
}
break;
case KEYC_PRES://選擇哪個舵機運行+1
num++;
if(num>5) num=5;
break;
case KEYD_PRES://選擇哪個舵機運行-1
num--;
if(num<1) num=1;
break;
case KEYE_PRES://機械手閉
pwmval42++;
if(pwmval42>145) pwmval42=145;
TIM_SetCompare2(TIM4,pwmval42);
break;
case KEYF_PRES://機械手開
pwmval42--;
if(pwmval42<60) pwmval42=60;
TIM_SetCompare2(TIM4,pwmval42);
break;
}
}
/* *********** 藍牙遙控模式****************************/
if(Res=='1') {pwmval31++; if(pwmval31>250) pwmval31=250; TIM_SetCompare1(TIM3,pwmval31);delay_ms(10);}
if(Res=='2') {pwmval31--; if(pwmval31<60 ) pwmval31=60; TIM_SetCompare1(TIM3,pwmval31);delay_ms(10);}
if(Res=='3') {pwmval32++; if(pwmval32>250) pwmval32=250; TIM_SetCompare2(TIM3,pwmval32);delay_ms(10);}
if(Res=='4') {pwmval32--; if(pwmval32<60 ) pwmval32=60; TIM_SetCompare2(TIM3,pwmval32);delay_ms(10);}
if(Res=='5') {pwmval33++; if(pwmval33>250) pwmval33=250; TIM_SetCompare3(TIM3,pwmval33);delay_ms(10);}
if(Res=='6') {pwmval33--; if(pwmval33<60 ) pwmval33=60; TIM_SetCompare3(TIM3,pwmval33);delay_ms(10);}
if(Res=='7') {pwmval34++; if(pwmval34>250) pwmval34=250; TIM_SetCompare4(TIM3,pwmval34);delay_ms(10);}
if(Res=='8') {pwmval34--; if(pwmval34<60 ) pwmval34=60; TIM_SetCompare4(TIM3,pwmval34);delay_ms(10);}
if(Res=='9') {pwmval41++; if(pwmval41>250) pwmval41=250; TIM_SetCompare1(TIM4,pwmval41);delay_ms(10);}
if(Res=='a') {pwmval41--; if(pwmval41<60 ) pwmval41=60; TIM_SetCompare1(TIM4,pwmval41);delay_ms(10);}
if(Res=='b') {pwmval42++; if(pwmval42>145) pwmval42=145; TIM_SetCompare2(TIM4,pwmval42);delay_ms(10);}
if(Res=='c') {pwmval42--; if(pwmval42<60 ) pwmval42=60; TIM_SetCompare2(TIM4,pwmval42);delay_ms(10);}
/********************自動控制模式*******************/
if(dig==1)
{
vu8 a=1;//動作完成標志位
u16 ms=500;
if(a==1 ){ pwmval31=150; TIM_SetCompare1(TIM3,pwmval31); a=2 ;delay_ms(ms);}
if(a==2) { pwmval32=150; TIM_SetCompare2(TIM3,pwmval32); a=3; delay_ms(ms);}
if(a==3) { pwmval33=200; TIM_SetCompare3(TIM3,pwmval33 );a=4; delay_ms(ms);}
if(a==4) { pwmval34=250; TIM_SetCompare4(TIM3,pwmval34); a=5; delay_ms(ms);}
if(a==5) { pwmval42=145; TIM_SetCompare2(TIM4,pwmval42); a=6; delay_ms(ms);}
if(a==6) { pwmval34=150; TIM_SetCompare4(TIM3,pwmval34); a=7; delay_ms(ms);}
if(a==7) { pwmval31=55; TIM_SetCompare1(TIM3,pwmval31); a=8; delay_ms(ms);}
if(a==8) { pwmval34=250; TIM_SetCompare4(TIM3,pwmval34); a=9; delay_ms(ms);}
if(a==9) { pwmval42=60; TIM_SetCompare2(TIM4,pwmval42); a=10;delay_ms(ms);}
if(a==10){ pwmval32=200; TIM_SetCompare2(TIM3,pwmval32); a=11;delay_ms(ms);}
if(a==11){ pwmval31=150; TIM_SetCompare1(TIM3,pwmval31); a=1 ;delay_ms(ms);}
}
}
}
全部資料51hei下載地址:
6自由度機械臂 手動按鍵控制.7z
(184.62 KB, 下載次數: 312)
2019-5-19 02:20 上傳
點擊文件名下載附件
|