stc8a控制MG90S舵机

news/2024/11/24 18:37:20/

1、实验目的:
利用硬件PWM进行控制舵机;
硬件PWM使用P6端口;
2、实验设备:
单片机开发板stc8a8k最小核心板;
7pin的OLED
MG90S舵机;
3、原理:
舵机的控制原理,
 舵机的伺服系统由可变宽度的脉冲来进行控制,控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号都是周期为20ms,宽度为1.5ms。这个基准信号定义的位置为中间位置。舵机有最大转动角度,中间位置的定义就是从这个位置到最大角度与最小角度的量完全一样。最重要的一点是,不同舵机的最大转动角度可能不相同,但是其中间位置的脉冲宽度是一定的,那就是1.5ms。如下图:
 角度是由来自控制线的持续的脉冲所产生。这种控制方法叫做脉冲调制。脉冲的长短决定舵机转动多大角度。例如:1.5毫秒脉冲会到转动到中间位置(对于180°舵机来说,就是90°位置)。当控制系统发出指令,让舵机移动到某一位置,并让他保持这个角度,这时外力的影响不会让他角度产生变化,但是这个是由上限的,上限就是他的最大扭力。除非控制系统不停的发出脉冲稳定舵机的角度,舵机的角度不会一直不变。

当舵机接收到一个小于1.5ms的脉冲,输出轴会以中间位置为标准,逆时针旋转一定角度。接收到的脉冲大于1.5ms情况相反。不同品牌,甚至同一品牌的不同舵机,都会有不同的最大值和最小值。一般而言,最小脉冲为1ms,最大脉冲为2ms。如下图:

*舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的:
  0.5ms--------------0度;
  1.0ms------------45度;
  1.5ms------------90度;
  2.0ms-----------135度;
  2.5ms-----------180度;
  舵机的追随特性
  假设现在舵机稳定在A点,这时候CPU发出一个PWM信号,舵机全速由A点转向B点,在这个过程中需要一段时间,舵机才能运动到B点。
  保持时间为Tw

代码:
代码目的:
0度–45度–90度–135度–180度–0度再转动。

这里利用1-0.075等,为什么要1-x呢;
主要是因为自己写的函数,是低电平的时间;
舵机是高电平的占空比;
这个要根据实际的情况使用;
最好用示波器等测试下,是高电平的比例,还是低电平的比例。

用到P61引脚输入到舵机的PWM信号脚
HPWM_Set(1, 50,1-0.150);//1.5/20
频率是50赫兹;
后面的是占空比。

#include "stc8a8k.h"
#include "delay.h"
#include "key.h"
#include "led.h"
#include "oled.h"
#include "hpwm.h"
//全局变量,也可以再外面新建一个头文件,存放全局变量unsigned char KeyNum=100;//按键的代号,存储按键之后返回数值void main()
{int shownum=0;float aaa=0.2;LED_PortMode();KEY_Init();//包括端口和中断初始化OLED_Init();HPWM_Init();delay_tms(2000);OLED_ShowString(2,2, "Hello China!");	while(1){// 		*************呼吸灯
// 			HPWM_Set(1, 50,aaa);//0.5/20
// 		aaa=aaa+0.02;
// 			delay_tms(100);
// 		if(aaa>0.92)
// 			aaa=0.1;
// 		*************呼吸灯	delay_tms(1000);OLED_ShowString(2,2, "0025!");	HPWM_Set(1, 50,1-0.025);//0.5/20   0dudelay_tms(3000);OLED_ShowString(2,2, "0005!");HPWM_Set(1, 50,1-0.05);//1/20    45dudelay_tms(3000);OLED_ShowString(2,2, "0075!");  // 90du	HPWM_Set(1, 50,1-0.075);//1.5/20delay_tms(3000);OLED_ShowString(2,2, "0100!");   //135du	HPWM_Set(1, 50,1-0.1);//1.5/20delay_tms(3000);OLED_ShowString(2,2, "0125!");  // 180du	HPWM_Set(1, 50,1-0.125);//1.5/20delay_tms(3000);OLED_ShowString(2,2, "0150!");  // 180du	HPWM_Set(1, 50,1-0.150);//1.5/20delay_tms(3000);OLED_ShowString(2,2, "aaaaaaa!");	delay_tms(3000);}
}

实验结论:

1、一开始上电,舵机跑到180度的位置;不管是在那个位置,都是会跑到180度的位置;本舵机是MG90S,0-180度的舵机;
2、一开始,可以调节舵机指针的位置,结合实际的场合进行调节。松开,然后放到你需要的位置;
但是不管怎么放,都是在0-180度旋转;
具体操作:
(1)上电,然后舵机回到180度的位置;
(2)断电,把指针放到你需要的极限位置,这个是极限位置;

也可以用本程序,
(1)断电,运行单片机,等舵机回到0-180度的中间位置,也就是90度的位置,作为机械结构的原点位置;拆下舵机指针,然后放到合适的位置。

在这里插入图片描述


http://www.ppmy.cn/news/480005.html

相关文章

转转前端周刊第七十期

转转前端周刊 本刊意在将整理业界精华文章给大家,期望大家一起打开视野 如果你有发现一些精华文章想和更多人分享,可以点击我们的公众号名称,将文章链接和你的解读文案发给我们!我们会对内容进行筛选和审核,保留你的推…

Vue 中防止用户频繁点击按钮的优秀实践

系列文章目录 文章目录 系列文章目录前言一、为什么要防止用户频繁点击按钮?二、优秀的防止用户频繁点击按钮的实践方法1.禁用按钮2.添加防抖函数3.添加节流函数 总结 前言 在 Vue 开发中,我们常常会遇到用户频繁点击按钮的问题,这不仅会导致…

从PETA数据集中提取性别

0、前言 本文提供了一个从PETA数据集中提取性别属性的方法。 1、方法 通过以下代码,可以从数据集中解析出每个图片的属性,并根据性别存放到不同文件夹: """ parse persons gender from PETA """ import gl…

android 人脸解锁 锁屏动画,人脸保护锁(人脸识别锁屏)

这是一款十分炫酷的锁屏工具,还记得电影中的特工所用的人脸识别锁吗?这款应用也能让你过过瘾!人脸识别锁屏安卓版是一款用人脸做密码来打开手机屏保锁的一个APP。不仅可以作屏保锁,也可以单独保护某些重要程序不被偷窥,例如查看短…

android 紧急拨号界面,紧急拨号解锁

摘要 腾兴网为您分享:云上广水,云南人社12333app,缘之空,酷乐家软件,找我测,酷盘,msn聊天软件,新视通会议系统,剑网三体验服,迷你pdf转word,意大利炮表情包,星…

iOS VS Android ,10年之战,谁是最后赢家?

2019独角兽企业重金招聘Python工程师标准>>> 2007 年,功能机巨头林立的时代,苹果在 Macworld 大会上公布了 iOS 系统。同一年,Google 与多家制造商、开发商、电信运营商和芯片制造商联合创立开放手持设备联盟(OHA&…

iOS最全的三方库、插件、博客汇总

目录 UI 日历三方库 下拉刷新 模糊效果 富文本 图表 颜色 表相关(TabbleView、Tabbar、即时聊天界面) TableView CollectionView 隐藏与显示 HUD与Toast 对话框 状态栏 导航栏 设置 Switch Category 主题 电影选座 瀑布流 菜单 Tabbar 进度 小红点 page 轮播 时间选择器 其他UI…

电脑超级使用的快捷键和小工具!高手都是很酷的~

电脑超级实用的快捷键、小工具! 生活中掌握快捷键的使用,可以有效提升办公效率。在这里,我主要说除了基础的快捷键之外几个比较实用的快捷键。 虽然有人说我用鼠标操作也可以,但是吧,我是觉得用键盘方便一点&#xff0…