【Mini-F5265-OB开发板试用测评】2、PWM驱动遥控车RX2接收解码带马达驱动控制IC

手头有带转向电机和动力电机小车底盘,买了很久一直在吃灰。
最近查了一下小车的驱动IC是富满微的8D420L,是一款传统的RX2接收解码芯片,带马达驱动。

在这里插入图片描述

手头没有TX2发送芯片,所以考虑用MCU直接发送PWM直接接入RX2,可能可以驱动。

一、8D420L芯片

在这里插入图片描述

RX2芯片一般是通过天线接收TX2发送的无线信号,解码后用自带的马达驱动电机,带动小车运行。

在这里插入图片描述

本文将用Mini-F5265发送PWM信号直接驱动RX2芯片。8D420L应该是一款简化版RX2芯片,因为一般的RX2芯片,3脚是编码输入引脚,可以PWM信号接入该脚做测试使用。8D420L没有编码输入引脚,可以将PWM接入14脚VI1,这个引脚是天线接收引脚可以替代编码输入引脚。

下图是一个一般的RX2芯片管脚图:
在这里插入图片描述

二、编码规则

在这里插入图片描述
需要发送2种PWM信号:
W1:频率1khz,占空比 50%。
W2:频率500hz,占空比75%。

W2是引导码,一个引导码要连续发4个PWM信号。
W1是功能码,发送个数视功能而定。

举例说明:
如果要小车前进:先发4个W2,再发10个W1;
如果要小车左转:先发4个W2,再发58个W1;

三、硬件连接

在这里插入图片描述

如图MM32F5260和接收板连接。

四、程序

1、利用TIM8初始化

void TIM1_8_Configure(void)
{GPIO_InitTypeDef        GPIO_InitStruct;TIM_OCInitTypeDef       TIM_OCInitStruct;TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;uint32_t Prescaler8;uint32_t TimerPeriod8 = 0, Channel1Pulse8 = 0;Prescaler8=TIM_GetTIMxClock(TIM8)/10000-1;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);TIM_TimeBaseStructInit(&TIM_TimeBaseStruct);TIM_TimeBaseStruct.TIM_Prescaler         = Prescaler8;TIM_TimeBaseStruct.TIM_CounterMode       = TIM_CounterMode_Up;TIM_TimeBaseStruct.TIM_Period            = TimerPeriod8;TIM_TimeBaseStruct.TIM_ClockDivision     = TIM_CKD_Div1;TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStruct);TIM_OCStructInit(&TIM_OCInitStruct);TIM_OCInitStruct.TIM_OCMode       = TIM_OCMode_PWM1;TIM_OCInitStruct.TIM_OutputState  = TIM_OutputState_Enable;TIM_OCInitStruct.TIM_Pulse        = 0;TIM_OCInitStruct.TIM_OCPolarity   = TIM_OCPolarity_High;TIM_OCInitStruct.TIM_OCIdleState  = TIM_OCIdleState_Set;TIM_OCInitStruct.TIM_Pulse = Channel1Pulse8;TIM_OC1Init(TIM8, &TIM_OCInitStruct);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_3);    /* TIM8_CH1 */GPIO_StructInit(&GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_6 ;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AF_PP;GPIO_Init(GPIOC, &GPIO_InitStruct);TIM_Cmd(TIM8, ENABLE);//TIM_CtrlPWMOutputs(TIM8, ENABLE);}

2、发送W2信号

void send_W2(void)
{TIM_SetAutoreload(TIM8,19);		//500HzTIM_SetCompare1(TIM8,16);			//3/4占空比delay_ms(8);									//4个W2
}

3、发送W1信号

void send_W1(uint8_t nW1)
{uint8_t i;TIM_SetAutoreload(TIM8,9);		//1000HzTIM_SetCompare1(TIM8,5);			//1/2占空比delay_ms(nW1);
}

4、发送前进指令

#define FORWARD_CMD 10
void forward(void)
{TIM_CtrlPWMOutputs(TIM8, ENABLE);send_W2();send_W1(FORWARD_CMD);TIM_CtrlPWMOutputs(TIM8, DISABLE);
}

5、发送左转指令

#define LEFT_CMD		58
void left(void)
{TIM_CtrlPWMOutputs(TIM8, ENABLE);send_W2();send_W1(LEFT_CMD);TIM_CtrlPWMOutputs(TIM8, DISABLE);
}

6、主程序

void TIM1_8_PWM_Output_Sample(void)
{uint8_t i;printf("\r\nTest %s", __FUNCTION__);TIM1_8_Configure();EXTI_Configure();//先发一些pwm信号,让子弹飞一会儿,算做8D420L初始化吧TIM_CtrlPWMOutputs(TIM8, ENABLE);send_W2();send_W1(100);send_W2();send_W1(STOP_CMD);TIM_CtrlPWMOutputs(TIM8, DISABLE);while (1){if(car_cmd_flag==FORWARD_CMD){printf("car_cmd_flag==1\r\n");for(i=0;i<20;i++)	forward();car_cmd_flag=0;}if(car_cmd_flag==LEFT_CMD){	for(i=0;i<20;i++)left();car_cmd_flag=0;}delay_ms(200);}
}

7、外部中断控制发送指令

void EXTI0_IRQHandler(void)
{/* KEY1 */if (SET == EXTI_GetITStatus(EXTI_Line0)){PLATFORM_LED_Toggle(LED1);car_cmd_flag=FORWARD_CMD;EXTI_ClearITPendingBit(EXTI_Line0);}
}void EXTI1_IRQHandler(void)
{/* KEY2 */if (SET == EXTI_GetITStatus(EXTI_Line1)){PLATFORM_LED_Toggle(LED2);car_cmd_flag=LEFT_CMD;EXTI_ClearITPendingBit(EXTI_Line1);}
}

五、效果

在这里插入图片描述

后记

Mini-F5265可以用重载、改变比较值、延时这几个非常简单语句就实现了对PWM周期、占空比的控制意见指定PWM个数的输出,真是十分方便。也试图在其他MCU用类似方法实现该功能都没有成功。

	TIM_SetAutoreload(TIM8,9);		//1000HzTIM_SetCompare1(TIM8,5);		//1/2占空比delay_ms(nW1);

RX2是遥控芯片,上面驱动失去了遥控的意义,只是利用RX2的马达驱动。

如何进一步开发可以将遥控车改造成循迹小车,还可以加一个蓝牙模块,升级为蓝牙驱动小车。
当然直接利用蓝牙模块二次开发驱动也可以,只是还要考虑如何发送指定PWM个数的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87570.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tcpdump网络抓包工具详解!

一、简介 tcpdump就是&#xff1a;dump the traffic on a network&#xff0c;根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump是一个用于截取网络分组&#xff0c;并输出分组内容的工具。凭借强大的功能和灵活的截取策略&#xff0c;使其成为类UNIX系统下用…

Spring Boot的Security安全控制——应用SpringSecurity!

应用Spring Security 前面介绍了在项目开发时为什么选择Spring Security&#xff0c;还介绍了它的原理。本节开始动手实践Spring Security的相关技术。 实战&#xff1a;Spring Security入门 现在开始搭建一个新项目&#xff0c;实践一个Spring Security的入门程序。 &…

FPGA基础 -- Verilog行为级建模之alawys语句

Verilog 中的 always 语句块&#xff0c;这是行为级建模的核心结构之一&#xff0c;在 RTL 级设计中广泛用于时序逻辑和组合逻辑的建模。 一、什么是 always 语句&#xff1f; ✅ 定义&#xff1a; always 语句用于描述可综合的硬件行为逻辑&#xff0c;表示一个**“事件驱动…

【力扣 简单 C】704. 二分查找

目录 题目 解法一&#xff1a;二分查找 题目 解法一&#xff1a;二分查找 int find(const int* nums, int size, int target) {int left 0, right size - 1;while (left < right){int mid (left right) / 2;if (nums[mid] < target)left left 1;else if (nums[m…

Java并发编程实战 Day 30:并发编程未来展望与最佳实践总结

【Java并发编程实战 Day 30】并发编程未来展望与最佳实践总结 文章简述 经过30天的系统学习&#xff0c;我们从Java并发编程的基础知识逐步深入到高并发系统的架构设计与性能优化。本文作为“Java并发编程实战”系列的收官之作&#xff0c;将全面回顾整个系列的核心内容&#…

量化面试绿皮书:23. 醉酒乘客

文中内容仅限技术学习与代码实践参考&#xff0c;市场存在不确定性&#xff0c;技术分析需谨慎验证&#xff0c;不构成任何投资建议。 23. 醉酒乘客 100名乘客排队登机&#xff0c;每人持有一张对应座位的机票&#xff08;第n位乘客的座位号为n&#xff09;。 第一位乘客喝醉后…

AntV G6入门教程

以下教程聚焦于 AntV G6 的 数据操作 API,详细介绍各个方法的用途、参数以及完整的使用示例,帮助你在图实例上精细地读取、修改和管理节点/边/组合等数据。文中示例代码均基于 G6 v5.0.47 官方文档 ([g6.antv.antgroup.com][1])。 一、获取完整图数据 1.1 graph.getData() …

67、数据访问-crud实验-分页数据展示

67、数据访问-crud实验-分页数据展示 分页数据展示是数据访问中常见的功能&#xff0c;用于将大量数据分割成多个页面显示&#xff0c;提升用户体验和系统性能。以下是分页数据展示的相关介绍&#xff1a; #### 基本原理 1. **确定每页显示数量**&#xff1a;设定每页显示的数…

常见 Web 服务器

Web 服务器有很多种&#xff0c;功能和用途略有不同&#xff0c;下面我会分类介绍主流的 Web 服务器&#xff08;包含静态/动态/反向代理支持&#xff09;并重点说明类似 Tomcat 的 Java 支持型。 常见 Web 服务器分类 类型名称描述与特点&#x1f310; 静态资源服务器Nginx高…

【MacOS】M3 Pro芯片MacBook极速搭建Kubernetes

M3 Pro 芯片 MacBook 2023上使用 Colima 安装 Kubernetes。 Colima 轻量、高效&#xff0c;并且在 Apple Silicon 架构上表现出色。 下面是详细的、一步一步的安装和配置指南。 核心思路 我们将通过以下步骤完成整个过程&#xff1a; 准备工作: 安装必要的工具&#xff0c;…

import { Add, Dongdong, UserAdd } from ‘@nutui/icons-react‘ 使用图标导入库报错

import { Add } from "nutui/icons-react-taro"; 官网的导入的库名字不全&#xff0c;后面要加-taro&#xff0c;就行了

猿人学js逆向比赛第一届第七题

分析响应 看到响应体里面的data是个字体加密&#xff0c;于是这里可以看到woff文件也给返回了&#xff0c;这里现分析这个文件。 打开可以看到这里a351对应的是3和页面中的3是对应的&#xff0c;于是用ddddocr动态识别字体文件中的字体&#xff0c;然后对应对应的字体替换是不…

股票心理学习篇:交易的人性弱点 - 频繁交易

以下内容为学习时的笔记整理&#xff0c;视频作者来自B站&#xff1a;老猫与指标 视频链接&#xff1a;频繁交易必死&#xff1f;底层逻辑深度剖析&#xff0c;老猫的的破局心法与实战策略分享 交易的人性弱点 - 频繁交易 主讲人&#xff1a; 老猫 1. 引言&#xff1a;问题的…

WPF入门 #1 WPF布局基础、WPF样式基础、WPF数据模板、WPF绑定

WPF当中有许多的布局容器控件&#xff0c;例如<Grid>、<StackPanel>、<WrapPanel>、<DockPanel>、<UniformGrid>。接下来分别介绍一下各个布局容器控件。 布局基础 Grid <Grid><Grid.RowDefinitions><RowDefinition Height&qu…

开源大型语言模型的文本记忆新突破!

在现代科技的推动下&#xff0c;人工智能领域正在不断地突破人类认知的极限。今年&#xff0c;由斯坦福大学、康奈尔大学和西弗吉尼亚大学的计算机科学家们&#xff0c;与法律学者共同展开了一项引人入胜的研究&#xff0c;聚焦于开源大型语言模型的文本记忆表现。这项研究不仅…

LeetCode 3090.每个字符最多出现两次的最长子字符串

题目链接 https://leetcode.cn/problems/maximum-length-substring-with-two-occurrences/ 题目描述 给定一个字符串 s&#xff0c;找出满足每个字符最多出现两次的最长子字符串&#xff0c;并返回其长度。 示例 输入&#xff1a;s "aabba" 输出&#xff1a;5解…

使用开源NVIDIA cuOpt加速决策优化

使用开源NVIDIA cuOpt加速决策优化 文章目录 使用开源NVIDIA cuOpt加速决策优化决策优化的现实挑战供应链优化的复杂性实时决策的挑战计算复杂性的挑战 NVIDIA cuOpt&#xff1a;GPU加速的决策优化解决方案cuOpt的核心技术架构支持的优化问题类型性能优势分析 实际应用案例&…

【JVM 09-垃圾回收】

垃圾回收 笔记记录 1. 如何判断对象可以回收1.1 引用计数法1.1.1 缺点 1.2 可达性分析算法1.2.1 可达分析、根对象1.2.2 优缺点 1.3 四种引用(强软弱虚)1.3.1 软引用的实际使用案例1.3.2 软引用-引用队列1.3.3 弱引用的实际使用案例 2. 垃圾回收算法2.1 标记清除算法2.2 标记整…

《二叉搜索树》

引言&#xff1a; 上次我们结束了类和对象的收尾&#xff0c;之后我们就要学习一些高级的数据结构&#xff0c;今天我们先来看一个数据结构-- 二叉搜索树。 一&#xff1a; 二叉搜索树的概念(性质) 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是…

【Redis】Sentinel哨兵

&#x1f6e1;️ 深入理解 Redis Sentinel&#xff1a;高可用架构的守护者 在实际开发中&#xff0c;我们常用 Redis 构建缓存系统或数据中间件。然而&#xff0c;主从复制虽然能实现数据同步&#xff0c;但无法自动故障转移&#xff08;failover&#xff09;&#xff0c;这就…