基于51单片机的三轴机械臂控制系统(PWM)

2023-11-01 11:40

本文主要是介绍基于51单片机的三轴机械臂控制系统(PWM),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2021年参加校内电子竞赛所做的课题,发出来留作纪念,也希望能对大家有所帮助。

此项目获得了校电赛三等奖: )

1系统方案

1.1 控制系统的论证与选择

方案一:使用纯模拟电路控制,利用三极管的通断,一些模拟集成电路(电压比较器、RC延时电路、NE555芯片等)来实现对电机的延时控制,从而达到机械手的各方向移动,并且通过改变延时时间来决定机械手的移动幅度。

分析:纯模拟电路控制理论上可行,但在实际设计方面存在较大困难且在调试及改进方面存在不便,以及电路较不稳定,可能导致延时出现较大误差,可靠性欠佳。除此之外,一般电机达不到机械手控制的精确性要求。虽然换用舵机能达到所需效果,但用模拟电子技术设计PWM驱动电路复杂程度更高,稳定性更难以把握。最终舍弃使用纯模拟电路控制机械手的方案。

方案二:利用以单片机为核心的电路控制,通过单片机检测外部操作(按键开闭),利用单片机内部程序完成延时与高低电平信号的输出,从而控制各个舵机转动,进而达到机械手的各方向移动效果。

分析:单片机体积小、性能强大,功能引脚个数多,足以达到单个单片机控制多个电机的效果;延时功能可靠,足以满足机械手的精确控制。且单片机通过C语言编程形式达到控制,编写基本程序过程较为简单,后续调试与改进工作也相对方便。

综合上述两种方案,选择方案二。

1.2 单片机的论证与选择

当今单片机运用较广泛的是51、PIC、AVR三个系列。其中51系列是最基础且运用最广泛的一种,它从内部的硬件到软件有着一整套完成的位处理系统,处理对象不是字节而是位,能对一些特殊功能寄存器的特定位处理,且能进行位的逻辑运算,满足本次设计需求。且51系列单片机的指令系统、内部结构相对简单,易于上手,虽有运行速度相对较慢的缺点,但足以满足本次设计的指标。

因此,本次设计选择51系列单片机,其具体型号为STC89C516RD+。

2电路与程序设计

2.1系统总体框图

2.1.1系统总体框图

系统总体框图

2.2电路原理图

2.2.1 单片机及外围电路电路原理图

51单片机最小系统板原理图

舵机排针接口原理图

其中,D1对应单片机的P02端,D2对应单片机的P12端,D3对应单片机的P22端,D4对应单片机的P32端,分别根据P00、P01、P10、P11、P20、P21、P30端的信号变化发生信号变化。

按键原理图

        其中,K1、K2分别对应P00、P01,K3、K4分别对应P10、P11,K5、K6分别对应P20、P21,K7对应P30。

2.3单片机程序

2.2.1内部定时器

51单片机带有内部计时器,可以在编程中通过函数调用。不同系列的单片机带有的内部定时器数量和种类各不相同,但定时器0(Timer0)和定时器1(Timer1)是51系列单片机共有的定时器。

本设计以定时器0为基础产生PWM信号用以控制舵机,下面对定时器0的设置进行说明。

51单片机内部定时器状态由寄存器TCON(定时器/计数器控制寄存器)和TCOM(定时器/计数器工作模式寄存器)共同决定。

TCON寄存器

TMOD寄存器

        要使用定时器0,首先要对寄存器TMOD进行设置。本设计使用16位定时器的设置(M1=0,M0=1),需要对TMOD寄存器每位进行赋值。随后在TCON寄存器中启动计时功能(TR0=1)。

        51单片机的内部定时器具有一个特性,即会在定时器设定值TL0和TH0溢出时进入中断程序。本例中将进入定时器0(Timer0)对应的中断程序并在执行完毕后返回定时器。本设计中,我们来利用这种特性产生周期变化的电平(PWM信号),进而控制舵机。

        定时器设置如下,

定时器设定代码

        其中,EA=1,PT0=0,ET0=1为中断程序的前置控制命令。

3.2.2 PWM信号

        PWM技术是一种对模拟信号电平进行数字编码的方法,即通过控制固定周期内高电平的持续时间与周期长度的比值(占空比)来输出信号并控制设备。本设计中利用51单片机内部定时器形成PWM信号输出以调控舵机,其具体实现方法如下。

0.5ms

1ms

1.5ms

2ms

2.5ms

45°

90°

135°

180°

格 SG90舵机转动角度与对应占空比(T=20ms)

        将定时器设置为0.25ms中断一次,设置计数变量counter初始值等于零,在中断程序中每次加一,在counter=80时将其归零一次,从而实现固定的变化周期。另定义可控变量compare,使得当counter小于等于compare时输出高电平,counter大于compare时输出低电平,从而输出一定的PWM信号。

本方法对应实现代码

        根据计算,本套方法对应SG90舵机精度应为22.5度。

3.3.3 程序设计

本设计意在通过按键控制机械手的前后、左右、上下、开合,表明需要在主函数中将按键端口与舵机端口的信号变化联系起来。

附录

附录1 主程序代码

#include <REGX51.H>#include "Timer.h"#include "Key.h"#include "Delay.h"sbit FB=P0^2;//forward&backwardsbit LR=P1^2;//left&rightsbit UD=P2^2;//up&downsbit CLAW=P3^2;//CLAWunsigned char counter=0,compare1=6,compare2=6,compare3=6,compare4=6;unsigned char con1=5,con2=5,con3=5,con4=0,Keynum=0;void main(){Timer0_Init();while(1){Keynum=key();if(Keynum==1){con1++;if(con1>12){con1=12;}}if(Keynum==2){con1--;if(con1<0){con1=0;}}if(Keynum==3){con2++;if(con2>12){con2=12;}}if(Keynum==4){con2--;if(con2<0){con2=0;}}if(Keynum==5){con3++;if(con3>12){con3=12;}}if(Keynum==6){con3--;if(con3<0){con3=0;}}if(Keynum==7){con4++;con4%=2;}switch(con1){case 0:compare1=1;break;case 1:compare1=2;break;case 2:compare1=3;break;case 3:compare1=4;break;case 4:compare1=5;break;case 5:compare1=6;break;case 6:compare1=7;break;case 7:compare1=8;break;case 8:compare1=9;break;case 9:compare1=10;break;case 10:compare1=11;break;case 11:compare1=12;break;}switch(con2){case 0:compare2=1;break;case 1:compare2=2;break;case 2:compare2=3;break;case 3:compare2=4;break;case 4:compare2=5;break;case 5:compare2=6;break;case 6:compare2=7;break;case 7:compare2=8;break;case 8:compare2=9;break;case 9:compare2=10;break;case 10:compare2=11;break;case 11:compare2=12;break;}switch(con3){case 0:compare3=1;break;case 1:compare3=2;break;case 2:compare3=3;break;case 3:compare3=4;break;case 4:compare3=5;break;case 5:compare3=6;break;case 6:compare3=7;break;case 7:compare3=8;break;case 8:compare3=9;break;case 9:compare3=10;break;case 10:compare3=11;break;case 11:compare3=12;break;}switch(con4){case 0:compare4=6;break;case 1:compare4=7;break;}}void Timer0_Routine() interrupt 1{TR0=0;TL0 = 0x06;TH0 = 0xFF;//0.25mscounter%=80;if(counter<=compare1){FB=1;}else{FB=0; }if(counter<=compare2){LR=1;}else{LR=0; }if(counter<=compare3){UD=1;}else{UD=0; }if(counter<=compare4){CLAW=1;}else{CLAW=0; }counter++;TR0=1;}

附录2 调用函数代码(部分)

Delay()函数代码

void Delay(unsigned int xms){unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}}

Key()函数代码

#include <REGX51.H>#include "Delay.h"unsigned char key(){unsigned char KeyNumber=0;if(P0_0==0){Delay(50);while(P3_0==0);Delay(50);KeyNumber=1;}if(P0_1==0){Delay(50);while(P3_1==0);Delay(50);KeyNumber=2;}if(P1_0==0){Delay(50);while(P3_0==0);Delay(50);KeyNumber=3;}if(P1_1==0){Delay(50);while(P3_1==0);Delay(50);KeyNumber=4;}if(P2_0==0){Delay(50);while(P3_0==0);Delay(50);KeyNumber=5;}if(P2_1==0){Delay(50);while(P3_1==0);Delay(50);KeyNumber=6;}if(P3_0==0){Delay(50);while(P3_0==0);Delay(50);KeyNumber=7;}return KeyNumber;}

这篇关于基于51单片机的三轴机械臂控制系统(PWM)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/322692

相关文章

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

基于人工智能的智能家居语音控制系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 随着物联网(IoT)和人工智能技术的发展,智能家居语音控制系统已经成为现代家庭的一部分。通过语音控制设备,用户可以轻松实现对灯光、空调、门锁等家电的控制,提升生活的便捷性和舒适性。本文将介绍如何构建一个基于人工智能的智能家居语音控制系统,包括环境准备

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

有关机械硬盘的基础知识

1,机械硬盘的品牌   目前市场中常见的笔记本电脑的机械硬盘品牌主要有希捷、西部数据、三星等。   2,机械硬盘的容量   硬盘容量,即硬盘所能存储的最大数据量。虽然笔记本电脑硬盘的容量会因单位密度的提升而增加,不过和台式电脑的大容量比起来,笔记本电脑硬盘的容量仍然落后许多。笔记本电脑的硬盘除了对磁盘有体积较小和数量较少的要求之外,对功耗、耐用程度、抗震性及成本等的考虑,也让笔记

基于stm32的河流检测系统-单片机毕业设计

文章目录 前言资料获取设计介绍功能介绍具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机设计精品

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口

MCU5.51单片机的最小系统

1.最小系统的组成部分 晶振电路(时钟),复位电路,电源电路(控制电压,保持稳定),下载电路(外加的,用于烧录程序) 烧录: 通过下载电路,把程序下载到单片机中用于运行 2.晶振电路 电路图: 是晶振 是电容 为了防止晶振起振时产生影响,因此加电容 3.复位电路 电路图: 按按钮RSTK1(保持一段时间的高电平)即可实现STC芯片的复位 4.电源电路 电路图:

单片机XTAL引脚引出的晶振分析

51单片机的18,19脚XTAL1,XTAL2用来提供外部振荡源给片内的时钟电路。 XTAL1和XTAL2引脚,该单片机可以使用外部时钟也可以使用内部时钟。 当使用内部时钟时,此二引线端用于外接石英晶体和微调电容; 当使用外部时钟时,用于接外部时钟信号,NMOS接XTAL2,CMOS接XTAL1。 原理: XTAL1和XTAL2分别是一个反相器的输入和输出。NMOS的反相器是