找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8493|回复: 20
收起左侧

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

  [复制链接]
ID:144730 发表于 2019-5-18 15:42 | 显示全部楼层 |阅读模式
//主程序源码:代码变异绝无错误,硬件测试过了,由于舵机数量角度简易使用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, 下载次数: 306)
QQ截图20190518153119.png
回复

使用道具 举报

ID:144730 发表于 2019-5-20 08:32 | 显示全部楼层

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

RE: 基于stm32f0103c8t6 6自由度机械手臂源程序补充说明

蓝牙发送格式

蓝牙发送格式

实物图

实物图
回复

使用道具 举报

ID:479765 发表于 2019-8-23 12:41 | 显示全部楼层
楼主 有材料清单吗 我想学习一下 谢谢
回复

使用道具 举报

ID:723527 发表于 2020-4-6 17:43 | 显示全部楼层
huhouhezai 发表于 2019-8-23 12:41
楼主 有材料清单吗 我想学习一下 谢谢

楼主,我也像学习学习
回复

使用道具 举报

ID:116773 发表于 2020-4-6 20:00 | 显示全部楼层
机械部分有图纸吗?自己能做么?
回复

使用道具 举报

ID:366024 发表于 2020-4-11 15:59 | 显示全部楼层
楼主,这个有仿真吗?电路图之类的
回复

使用道具 举报

ID:760164 发表于 2020-5-24 21:36 | 显示全部楼层
有没有电路图和报告说明书?
回复

使用道具 举报

ID:610719 发表于 2020-5-28 08:32 | 显示全部楼层
楼主,电源是怎么解决的,求助!
回复

使用道具 举报

ID:144730 发表于 2020-6-4 11:47 | 显示全部楼层
1206246381 发表于 2020-5-28 08:32
楼主,电源是怎么解决的,求助!

手机充电器,5v2A的就可以
回复

使用道具 举报

ID:144730 发表于 2020-6-4 11:50 | 显示全部楼层
hujj 发表于 2020-4-6 20:00
机械部分有图纸吗?自己能做么?

机械部分是标准件,那个宝有卖的,底座部分是用有机玻璃和M3铜柱制作
回复

使用道具 举报

ID:144730 发表于 2020-6-4 11:54 | 显示全部楼层
huhouhezai 发表于 2019-8-23 12:41
楼主 有材料清单吗 我想学习一下 谢谢

蓝牙模块,舵机,舵机支架,stm32f103最小系统板,红外模块,按键模块,那个宝都有卖
回复

使用道具 举报

ID:806609 发表于 2020-7-25 08:52 | 显示全部楼层
2479408246 发表于 2019-5-20 08:32
RE: 基于stm32f0103c8t6 6自由度机械手臂源程序补充说明

楼主,有上位机程序吗?就是操作界面

回复

使用道具 举报

ID:884211 发表于 2021-2-14 18:39 | 显示全部楼层
楼主,请问你这个能实现人机互动吗?就是人怎么动,这个机械臂就怎么动
回复

使用道具 举报

ID:884211 发表于 2021-2-14 18:50 | 显示全部楼层
楼主,请问能否实现人机交互?就是人怎么动,机械臂就怎么动
回复

使用道具 举报

ID:884211 发表于 2021-2-14 18:56 | 显示全部楼层
请问楼主,那个用手机控制机械臂的是手机app还是什么小程序,具体是什么app和小程序
回复

使用道具 举报

ID:855071 发表于 2021-6-19 08:46 | 显示全部楼层
谢谢楼主,希望学习一下,有没有电路图之类的?
回复

使用道具 举报

ID:906792 发表于 2021-6-30 14:12 来自手机 | 显示全部楼层
安排的明明白白的膜拜
回复

使用道具 举报

ID:270740 发表于 2021-7-5 10:57 | 显示全部楼层
楼主,写程序要分块,把每个功能细分成模块,然后在Main中调用,养成好的习惯
回复

使用道具 举报

ID:922391 发表于 2021-7-16 21:41 | 显示全部楼层
手机蓝牙怎么连,具体数字可以告知一下吗?
回复

使用道具 举报

ID:954078 发表于 2021-7-17 14:33 | 显示全部楼层
renjingxian 发表于 2021-2-14 18:56
请问楼主,那个用手机控制机械臂的是手机app还是什么小程序,具体是什么app和小程序

应用商店搜索蓝牙调试器有做好的,只需要把对应按钮发送的数据修改即可
回复

使用道具 举报

ID:1048021 发表于 2022-10-17 16:01 | 显示全部楼层
楼主,可以简单说一下6自由度机械臂的原理以及怎么去做出来的吗,太深奥了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表