找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10742|回復: 20
打印 上一主題 下一主題
收起左側

基于stm32f0103c8t6 6自由度機械手臂源程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:144730 發(fā)表于 2019-5-18 15:42 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
//主程序源碼:代碼變異絕無錯誤,硬件測試過了,由于舵機數(shù)量角度簡易使用5v 2A電源供電
/************************************************************************
                 6自由度機械臂引腳說明:
PB4->1號舵機(左右轉向), PB5->2號舵機(上下轉向),    PB0->3號舵機(上下轉向),
PB1->4號舵機(上下轉向), PB6->5號舵機(機械爪轉向),  PB7->6號舵機(機械爪),
PC13->數(shù)字傳感器輸入端               
PA0->按鍵1(舵機角度+),PA1->按鍵2(舵機角度-),
PA2->按鍵3(舵機選擇+),PA3->按鍵4(舵機選擇-),
PA4->按鍵5(機械爪閉), PA5->按鍵6(機械爪開),

串口1引腳說明:
PA9->TXD(發(fā)送), 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();//延時函數(shù)初始化         
KEY_Init(); //初始化與按鍵連接的硬件接口
digival_value_Init();        //數(shù)字開關輸入初始化
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輸出函數(shù)        
TIM_SetCompare2(TIM3,pwmval32);        //pwm輸出函數(shù)                 
TIM_SetCompare3(TIM3,pwmval33);        //pwm輸出函數(shù)                 
TIM_SetCompare4(TIM3,pwmval34);        //pwm輸出函數(shù)                 
TIM_SetCompare1(TIM4,pwmval41);        //pwm輸出函數(shù)                 
TIM_SetCompare2(TIM4,pwmval42);        //pwm輸出函數(shù)                 
TIM_SetCompare3(TIM4,pwmval43);        //pwm輸出函數(shù)        
TIM_SetCompare4(TIM4,pwmval44);        //pwm輸出函數(shù)        

   while(1)
        {

                key=KEY_Scan(0);        //得到鍵值,0:不支持連續(xù)按,1:支持連續(xù)按.
                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用于舵機手動運行時速度調(diào)節(jié)
                                        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, 下載次數(shù): 312)

QQ截圖20190518153119.png (102.38 KB, 下載次數(shù): 126)

QQ截圖20190518153119.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏13 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:144730 發(fā)表于 2019-5-20 08:32 | 只看該作者

RE: 基于stm32f0103c8t6 6自由度機械手臂源程序

RE: 基于stm32f0103c8t6 6自由度機械手臂源程序補充說明

Screenshot_2019-05-20-08-28-13.png (229.22 KB, 下載次數(shù): 156)

藍牙發(fā)送格式

藍牙發(fā)送格式

IMG_20190513_193226.jpg (1.7 MB, 下載次數(shù): 134)

實物圖

實物圖
回復

使用道具 舉報

板凳
ID:479765 發(fā)表于 2019-8-23 12:41 | 只看該作者
樓主 有材料清單嗎 我想學習一下 謝謝
回復

使用道具 舉報

地板
ID:723527 發(fā)表于 2020-4-6 17:43 | 只看該作者
huhouhezai 發(fā)表于 2019-8-23 12:41
樓主 有材料清單嗎 我想學習一下 謝謝

樓主,我也像學習學習
回復

使用道具 舉報

5#
ID:116773 發(fā)表于 2020-4-6 20:00 | 只看該作者
機械部分有圖紙嗎?自己能做么?
回復

使用道具 舉報

6#
ID:366024 發(fā)表于 2020-4-11 15:59 | 只看該作者
樓主,這個有仿真嗎?電路圖之類的
回復

使用道具 舉報

7#
ID:760164 發(fā)表于 2020-5-24 21:36 | 只看該作者
有沒有電路圖和報告說明書?
回復

使用道具 舉報

8#
ID:610719 發(fā)表于 2020-5-28 08:32 | 只看該作者
樓主,電源是怎么解決的,求助!
回復

使用道具 舉報

9#
ID:144730 發(fā)表于 2020-6-4 11:47 | 只看該作者
1206246381 發(fā)表于 2020-5-28 08:32
樓主,電源是怎么解決的,求助!

手機充電器,5v2A的就可以
回復

使用道具 舉報

10#
ID:144730 發(fā)表于 2020-6-4 11:50 | 只看該作者
hujj 發(fā)表于 2020-4-6 20:00
機械部分有圖紙嗎?自己能做么?

機械部分是標準件,那個寶有賣的,底座部分是用有機玻璃和M3銅柱制作
回復

使用道具 舉報

11#
ID:144730 發(fā)表于 2020-6-4 11:54 | 只看該作者
huhouhezai 發(fā)表于 2019-8-23 12:41
樓主 有材料清單嗎 我想學習一下 謝謝

藍牙模塊,舵機,舵機支架,stm32f103最小系統(tǒng)板,紅外模塊,按鍵模塊,那個寶都有賣
回復

使用道具 舉報

12#
ID:806609 發(fā)表于 2020-7-25 08:52 | 只看該作者
2479408246 發(fā)表于 2019-5-20 08:32
RE: 基于stm32f0103c8t6 6自由度機械手臂源程序補充說明

樓主,有上位機程序嗎?就是操作界面

回復

使用道具 舉報

13#
ID:884211 發(fā)表于 2021-2-14 18:39 | 只看該作者
樓主,請問你這個能實現(xiàn)人機互動嗎?就是人怎么動,這個機械臂就怎么動
回復

使用道具 舉報

14#
ID:884211 發(fā)表于 2021-2-14 18:50 | 只看該作者
樓主,請問能否實現(xiàn)人機交互?就是人怎么動,機械臂就怎么動
回復

使用道具 舉報

15#
ID:884211 發(fā)表于 2021-2-14 18:56 | 只看該作者
請問樓主,那個用手機控制機械臂的是手機app還是什么小程序,具體是什么app和小程序
回復

使用道具 舉報

16#
ID:855071 發(fā)表于 2021-6-19 08:46 | 只看該作者
謝謝樓主,希望學習一下,有沒有電路圖之類的?
回復

使用道具 舉報

17#
ID:906792 發(fā)表于 2021-6-30 14:12 來自手機 | 只看該作者
安排的明明白白的膜拜
回復

使用道具 舉報

18#
ID:270740 發(fā)表于 2021-7-5 10:57 | 只看該作者
樓主,寫程序要分塊,把每個功能細分成模塊,然后在Main中調(diào)用,養(yǎng)成好的習慣
回復

使用道具 舉報

19#
ID:922391 發(fā)表于 2021-7-16 21:41 | 只看該作者
手機藍牙怎么連,具體數(shù)字可以告知一下嗎?
回復

使用道具 舉報

20#
ID:954078 發(fā)表于 2021-7-17 14:33 | 只看該作者
renjingxian 發(fā)表于 2021-2-14 18:56
請問樓主,那個用手機控制機械臂的是手機app還是什么小程序,具體是什么app和小程序

應用商店搜索藍牙調(diào)試器有做好的,只需要把對應按鈕發(fā)送的數(shù)據(jù)修改即可
回復

使用道具 舉報

21#
ID:1048021 發(fā)表于 2022-10-17 16:01 | 只看該作者
樓主,可以簡單說一下6自由度機械臂的原理以及怎么去做出來的嗎,太深奧了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表