1680|8

7047

帖子

11

TA的资源

版主

楼主
 

[X-NUCLEO-53L4A3 TOF评估板] 之手势控制舵机 [复制链接]

[X-NUCLEO-53L4A3 TOF评估板] 之手势识别 https://bbs.eeworld.com.cn/thread-1299302-1-1.html
[X-NUCLEO-53L4A3 TOF评估板] TouchGFX测距尺 - 传感器 - 电子工程世界-论坛
[X-NUCLEO-53L4A3 TOF评估板] 开箱体验以及常规测距 - 传感器 - 电子工程世界-论坛

在前面的三篇文章里,我实现了手势的识别,这一篇分享手势控制舵机。

【舵机控制实现】

舵机是通过一个20ms的周期PWM波型来控制他的方向,这里我先使用TIM2来通过PA1实现输出50Hz的pwm波形。

首先配置TIM2 CH2来输出50Hz的pwm波形,配置如下图所示:

  通过查看总线TIM的总线时钟,我们配置他为84MHz的时钟,那么配置成84000 000/8400-1 即为10Khz,再除上Period 200即为50Hz的周期。生成代码后,我们还需要手工添加代码为设置TIM2的启动即:

 

	HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);  //开启定时器2的通道2
	__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, 200/20);  //设置他的占空比为 1ms.

在手势识别函数中,我们来设定,不同的方向手势,对占空比进行修改,最后实现对舵机的实时控制:

		ret = isApproximatelyLinear(timeData, distanceData, DATA_POINTS);
		if (ret <100) 
			{
				printf("物体静止或近似静止。\n");
			}
			else if( ret >=100 && ret <5000)
			{
					double sum_t = 0, sum_d = 0, sum_tt = 0, sum_td = 0;
					for (int i = 0; i < DATA_POINTS; i++) {
							sum_t += timeData[i];
							sum_d += distanceData[i];
							sum_tt += timeData[i] * timeData[i];
							sum_td += timeData[i] * distanceData[i];
					}
					double denominator = DATA_POINTS * sum_tt - sum_t * sum_t;
					double a = (DATA_POINTS * sum_td - sum_t * sum_d) / denominator;
					if (a > 0) {
							printf("物体向前运动。\n");
							pwmvalue --;
						if(pwmvalue <5)
							pwmvalue = 5;
						__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, pwmvalue);  //修改舵机运行位置
					} else if (a < 0) {
							printf("物体向后运动。\n");
						pwmvalue ++;
						if(pwmvalue >25)
							pwmvalue = 25;
						__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, pwmvalue); //修改舵机运行位置
					} else {
							printf("物体静止或近似静止。\n");
						
					}
				} else {
						printf("数据点不近似在一条直线上,无法简单判断运动方向。\n");
				}

通过原理图,我们找到A1的位置,并把A1接到舵机的信号输入位置:

【实现效果】

下载程序后,就可以通过手势来对舵机的控制了。详见视频:

20241117115525

 

此帖出自传感器论坛

最新回复

感谢楼主分享知识,每天一点新知识,快乐学习每一天。   详情 回复 发表于 6 天前
点赞 关注
 
 

回复
举报

6534

帖子

9

TA的资源

版主

沙发
 

快速进行采样的时候最快可以达到多少的采样率? 

此帖出自传感器论坛

点评

这个没有详细搞呢。这个是他一个系列中采样最快的,因为他只采一个点。  详情 回复 发表于 2024-11-18 16:56
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

7047

帖子

11

TA的资源

版主

板凳
 
秦天qintian0303 发表于 2024-11-18 14:56 快速进行采样的时候最快可以达到多少的采样率? 

这个没有详细搞呢。这个是他一个系列中采样最快的,因为他只采一个点。

此帖出自传感器论坛

点评

ADC+DMA自动转换,多个也应该会比较快,就看内部设置最快能到多少了  详情 回复 发表于 2024-11-18 16:58
 
 
 

回复

6534

帖子

9

TA的资源

版主

4
 
lugl4313820 发表于 2024-11-18 16:56 这个没有详细搞呢。这个是他一个系列中采样最快的,因为他只采一个点。

ADC+DMA自动转换,多个也应该会比较快,就看内部设置最快能到多少了

此帖出自传感器论坛

点评

不是的,如果要实时性高要不断的往分析数组里添加数据,然后再去计算,这算法有点头痛。应该可以做出姿态的多判断。  详情 回复 发表于 2024-11-18 17:01
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

7047

帖子

11

TA的资源

版主

5
 
秦天qintian0303 发表于 2024-11-18 16:58 ADC+DMA自动转换,多个也应该会比较快,就看内部设置最快能到多少了

不是的,如果要实时性高要不断的往分析数组里添加数据,然后再去计算,这算法有点头痛。应该可以做出姿态的多判断。

此帖出自传感器论坛

点评

我说的是芯片内部,外部接口采集肯定麻烦,才到一个就得算一遍  详情 回复 发表于 2024-11-18 17:03
 
 
 

回复

6534

帖子

9

TA的资源

版主

6
 
lugl4313820 发表于 2024-11-18 17:01 不是的,如果要实时性高要不断的往分析数组里添加数据,然后再去计算,这算法有点头痛。应该可以做出姿态 ...

我说的是芯片内部,外部接口采集肯定麻烦,才到一个就得算一遍

此帖出自传感器论坛

点评

国产有的手势识别应该有特有算法,可以直接读取他的几个状态的。  详情 回复 发表于 2024-11-18 17:13
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

7047

帖子

11

TA的资源

版主

7
 
秦天qintian0303 发表于 2024-11-18 17:03 我说的是芯片内部,外部接口采集肯定麻烦,才到一个就得算一遍

国产有的手势识别应该有特有算法,可以直接读取他的几个状态的。

此帖出自传感器论坛
 
 
 

回复

1633

帖子

0

TA的资源

五彩晶圆(初级)

8
 
感谢楼主分享知识,每天一点新知识,快乐学习每一天。
此帖出自传感器论坛
 
 
 

回复

1633

帖子

0

TA的资源

五彩晶圆(初级)

9
 

感谢楼主分享知识,每天一点新知识,快乐学习每一天。

此帖出自传感器论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表