【轮式平衡机器人】——TMS320F28069片内外设之GPIO

news2024/12/23 19:59:24

引入

接下来的几期博客会介绍轮式平衡机器人TMS320F28069片内外设,了解片内外设的基本原理,内容较为基础,都是些简单的simulink模型,旨在将复杂的原理过渡到simulink软件应用。足够了解的博友可跳过。

后续还将会结合MATLAB/Simulink实现TMS320F28069外设的模型搭建实验环境和自动代码生成

一、GPIO基本介绍

TMS320F28069有54个GPIO,对应芯片输出的54个引脚,分为A、B两组——A组包括GPIO0~GPIO31B组包括GPIO32~GPIO58(除了GPIO45~GPIO49),且每个引脚都有自己的复用功能。

4种基本配置:

  1. 通用I/O口用GPxDIR配置I/O口方向(1为输出,0为输入);
  2. 复用功能用GPxMUXn配置;
  3. GPxPUD用于配置I/O口上拉功能(0为使能上拉);
  4. 量化寄存器GPxQSEL可对输入信号进行量化限制,以消除数字量I/O引脚噪声干扰。

4种读写操作(写0时均无效):

  1. GPxDAT寄存器独立读/写I/O口信号;
  2. GPxSET寄存器写1对I/O口进行置位操作;
  3. GPxCLEAR寄存器写1对I/O进行清零操作;
  4. GPxTOOGLE寄存器写1对I/O口进行电平翻转操作;

二、GPIO实验(Simulink平台)

1、Simulink基本模型参数配置

首先对模型进行配置,选择模型适应参数后即可生成可读性较强的C语言代码。后续实验模型基本配置都可参考此处!

求解器类型必须选择固定步长(Fixed step),此模型提供多种算法且没有连续状态。固定步长(基础采样时间)根据实际情况而定,在简单的嵌入式代码生成时没有实际作用,可保持默认auto,单位为秒,也可设置为0.005s,相当于定时器0的中断时间间隔;但是若是针对目标芯片定制的代码生成过程中,会将该步长作为芯片外设或内核中定时器的中断周期。

解算器配置

②将“诊断”下的“数据有效性”中的“多任务数据存储”设置为“无”(none)。

③配置选择相关硬件,配置时钟。外部晶振默认为10MHz,这里将系统时钟配置为最高90MHz,低速时钟外设设置为SYSCLKOUT/4分频。其他外设模块按自己需要设置

硬件配置
时钟配置

④配置自动代码生成和报告相关的参数。模型Web视图使得生成的代码可以进行模型与代码之间相互的跟踪。

自动代码生成配置
代码生成报告配置

2、GPIO_OUTPUT控制LED灯

控制目标是当计数值大于或等于200时,即大概0.005x200=1s时,GPIO31置1,另外1s置0,实现一个一亮一灭的效果。

搜索counter limited模块,上限设置为400。

搜索compare to constant模块,设置>=200。

根据芯片系列搜索C2806x GPIO_OUTPUT模块,并配置端口为GPIO31,toogle表示电平翻转。

整体实验模型:

LED流水灯

点击HARDWARE下的编译,即可生成C代码和代码生成报告:

代码生成报告很全,也可在模型参数配置的代码生成中选择只生成代码!

主函数示例如下:

#include "robot.h"
#include "rtwtypes.h"
#include "MW_target_hardware_resources.h"

volatile int IsrOverrun = 0;
static boolean_T OverrunFlag = 0;
void rt_OneStep(void)
{
  /* Check for overrun. Protect OverrunFlag against preemption */
  if (OverrunFlag++) {
    IsrOverrun = 1;
    OverrunFlag--;
    return;
  }

  enableTimer0Interrupt();
  robot_step();

  /* Get model outputs here */
  disableTimer0Interrupt();
  OverrunFlag--;
}

volatile boolean_T stopRequested;
volatile boolean_T runModel;
int main(void)
{
  float modelBaseRate = 0.005;
  float systemClock = 90;

  /* Initialize variables */
  stopRequested = false;
  runModel = false;
  c2000_flash_init();
  init_board();

#if defined(MW_EXEC_PROFILER_ON) || (defined(MW_EXTMODE_RUNNING) && !defined(XCP_TIMESTAMP_BASED_ON_SIMULATION_TIME))

  hardwareTimer1Init();

#endif

  ;
  bootloaderInit();
  rtmSetErrorStatus(robot_M, 0);
  robot_initialize();
  globalInterruptDisable();
  configureTimer0(modelBaseRate, systemClock);
  runModel = rtmGetErrorStatus(robot_M) == (NULL);
  enableTimer0Interrupt();
  globalInterruptEnable();
  while (runModel) {
    stopRequested = !(rtmGetErrorStatus(robot_M) == (NULL));
  }

  /* Terminate model */
  robot_terminate();
  globalInterruptDisable();
  return 0;
}

/*
 * File trailer for generated code.
 *
 * [EOF]
 */

3、GPIO_INPUT扫描_NORMAL模式

GPIO_INPUT扫描_NORMAL模式是一种常见的GPIO(General-Purpose Input/Output)配置模式,用于微控制器或其他嵌入式系统中的GPIO引脚。在这种模式下,GPIO引脚被配置为输入模式后,微控制器将不断地(周期)扫描这些引脚,检查是否有外部信号的输入。当检测到外部信号时,微控制器可以读取该引脚的电平状态(高电平或低电平),并根据需要进行处理。

这种模式通常用于读取传感器、开关或其他外部硬件设备的状态,以便在微控制器中进行进一步的处理或控制。例如,在智能家居系统中,GPIO_INPUT扫描_NORMAL模式可以用于读取门窗传感器、人体传感器等设备的状态,以实现自动化的家居控制功能。

这里简单举例:用扫描按键的方式控制LED灯。按键输入接口在GPIO42,LED灯接在GPIO25。

首先需要配置GPIO的PUD(上拉禁止寄存器)使能GPIO42电平上拉,这样没按下时该端口保持高电平1,LED灭;按键按下时检测到低电平0,LED灯亮。

4、GPIO_INPUT扫描_EXTERNAL模式

还是按键控制LED灯但这次用的INPUT模式不同!

使用External模式可极大方便对数据的观测!GPIO_INPUT扫描_NORMAL模式和GPIO_INPUT扫描_EXTERNAL模式在功能和使用场景上有所不同。GPIO_INPUT扫描_NORMAL模式主要用于周期性读取输入信号,而GPIO_INPUT扫描_EXTERNAL模式则专为实时检测外部事件设计。根据实际应用的需求选择合适的模式可以提高性能和效率。

Simulink的External模式默认使用的是SCIA,波特率为115200b/s,并且默认复用I/O口是GPIO28、GPIO29,对应开发板上的SCIA接口是RXA、TXA。

所以在进行External模式操作时,通过一根USB转TTL通信线将USB的RX、TX分别接在F28069主控板的TXA、RXA引脚。注意USB和F28069的控制板要共地,同时不能将线序接反,否则Simulink无法通过SCI转USB与DSP进行通信。

首先需要在模型配置时对外部模式进行设置,在“硬件实现”中往下翻找到“External mode”,将Communication interface设置为串口通信Serial。

然后在自己电脑的“设备管理器”中找到串行通信的COM口,输入到Seial port中,这里因为未使用硬件实际插入,显示“未检测到串口No serial port detected”(明白流程即可)。

模型还是一致,其他略。

5、GPIO_INPUT中断控制LED灯

上面都属于将GPIO配置为通用I/O数字量输出,也可以将其配置为外部中断实现控制目的。如将按键配置成外部中断,在中断中执行参数或模式的修改,比常用的按键扫描方式节省资源(“硬件外设资源”替代“软件资源”)。

在simulink中搭建模型,利用“system initiize”模块对中断进行GPIO初始化配置,配置GPIO42为外部中断触发源,并将中断配置为下降沿触发(对应外部中断3)

GPIO初始化配置

搜索“C28x Hardware Interrupt”模块进行硬件中断配置,中断号CPU12,PIE-1对应外部中断XINT3,任务优先级默认,Preemption输入1表示中断可以被抢占,0表示不可以

中断配置

利用“subsystem”模块建立Trigger子系统(LED灯控制模型)。在中断函数中分别进行对应的LED翻转,按键(GPIO42)对应LED1灯(GPIO31)、LED2灯(GPIO25)仿真步长0.05s

最后的模型如下,还是与之前一样点击“HARDWARE”下的“编译”生成代码后将代码拷进开发板,可以发现:按下一次按键,对应的LED灯电平便翻转一次。

往期精彩

STM32专栏(付费9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/E2F88

OpenCV-Python专栏(付费9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/zK1jV

AI底层逻辑专栏(付费9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/zic0f

机器学习专栏(免费)icon-default.png?t=N7T8http://t.csdnimg.cn/FaXzAFreeRTOS专栏(免费)icon-default.png?t=N7T8http://t.csdnimg.cn/SjIqU电机控制专栏(免费)icon-default.png?t=N7T8http://t.csdnimg.cn/FNWM7

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

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

相关文章

26、江科大stm32视频学习笔记——I2C读写W25Q64

一、W25Q64简介 1、W25Q64的内存空间结构: 一页256字节,4K(4096 字节)为一个扇区,16个扇区为1块,容量为8M字节,共有128个块,2048 个扇区。 2、W25Q64每页大小由256字节组成,每页的256字节用一次页编程指…

排序算法经典模型: 梯度提升决策树(GBDT)的应用实战

目录 一、Boosting训练与预测 二、梯度增强的思想核心 三、如何构造弱学习器和加权平均的权重 四、损失函数 五、梯度增强决策树 六、GBDT生成新特征 主要思想 构造流程 七、梯度增强决策树以及在搜索的应用 7.1 GDBT模型调参 7.1.1 框架层面参数 n_estimators su…

leetcode:三数之和---双指针

问题: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复…

阿里Animate Anyone:任何静态图像都能动起来,让C罗、梅西、内马尔一起跳科目三!

目录 前言 相关链接 摘要 方法 效果展示 为各种角色制作动画 比较 更多应用 前言 2024年一开年,社交媒体和朋友圈就被一系列惊艳舞蹈视频占领了。钢铁侠跳起了科目三,马斯克也在摆着网红舞步,这些大约10秒的视频都是借助大模…

C# Socket通信从入门到精通(16)——单个同步UDP服务器监听多个客户端C#代码实现

前言: 我们在开发UDP通信程序时,有时候我们也需要开发UDP服务器程序,这个服务器只需要和一个客户端实现通信,比如这篇博文C# Socket通信从入门到精通(15)——单个同步UDP服务器监听一个客户端C#代码实现,但是在实际项目中有的时候需要和多个客户端进行通信,这时和一个…

Pandas实践指南:从基础到高级数据分析

Pandas实践指南:从基础到高级数据分析 引言Pandas基础1. 安装和基本配置2. DataFrame和Series的基础3. 基础数据操作 数据清洗与预处理1. 缺失值处理2. 数据转换3. 数据过滤 数据分析与操作1. 数据聚合和分组操作2. 时间序列数据处理3. 条件逻辑和数据分割 高级数据…

将AWS iot消息数据发送S3

观看此文章之前,请先学习AWS iot的数据收集: 使用Linux SDK客户端向AWS Iot发送数据-CSDN博客 上述的文章向大家展示了如何从客户端向AWS iot发送数据,那么数据收到之后,我们如何通过AWS的服务进行数据处理或者保存呢&#xff1…

Unity - gamma space下还原linear space效果

文章目录 环境目的环境问题实践结果处理要点处理细节【OnPostProcessTexture 实现 sRGB 2 Linear 编码】 - 预处理【封装个简单的 *.cginc】 - shader runtime【shader需要gamma space下还原记得 #define _RECOVERY_LINEAR_IN_GAMMA】【颜色参数应用前 和 颜色贴图采样后】【灯…

【C#】基础巩固

最近写代码的时候各种灵感勃发,有了灵感,就该实现了,可是,实现起来有些不流畅,总是有这样,那样的卡壳,总结下来发现了几个问题。 1、C#基础内容不是特别牢靠,理解的不到位&#xff…

vivo 海量基础数据计算架构应用实践

作者:来自 vivo 互联网大数据团队 本文根据刘开周老师在“2023 vivo开发者大会"现场演讲内容整理而成。公众号回复【2023 VDC】获取互联网技术分会场议题相关资料。 本文介绍了vivo在万亿级数据增长驱动下,基础数据架构建设的演进过程,…

如何创建以业务为中心的AI?

AI是企业的未来,这一趋势越来越明显。各种AI模型可以帮助企业节省时间、提高效率并增加收入。随着越来越多的企业采用AI,AI很快就不再是一种可有可无的能力,而是企业参与市场竞争的必备能力。 然而,作为一名业务决策者&#xff0c…

【jetson笔记】torchaudio报错

原因是因为pip安装的包与jetson不兼容导致 自己安装或者cmake编译也会报错 需要拉取官方配置好的docker镜像 拉取docker镜像 具体容器可以看官网,按照自己需求拉取即可 https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-ml 如果其他包不需要只需要torc…

【学习笔记】遥感影像分类相关精度指标

文章目录 0.混淆矩阵1. 精度名词解释2. Kappa系数3.举个栗子参考资料 0.混淆矩阵 混淆矩阵是分类精度的评定指标。是一个用于表示分为某一类别的像元个数与地面检验为该类别数的比较阵列。 对检核分类精度的样区内所有的像元,统计其分类图中的类别与实际类别之间的…

来自世坤!寻找Alpha 构建交易策略的量化方法

问:常常看到有人说Alpha seeking,这究竟是什么意思? 推荐这本《Finding Alphas: A Quantitative Approach to Building Trading Strategies》。我拿到的PDF是2019年的第二版。来自WorldQuant(世坤)的Igor Tulchinshky…

【数据结构与算法】栈(Stack)之 浅谈数组和链表实现栈各自的优缺点

文章目录 1.栈介绍2. 哪种结构实现栈会更优?3.栈代码实现(C语言) 往期相关文章: 线性表之顺序表线性表之链表 1.栈介绍 栈是一种特殊的线性表,只允许在栈顶(Top)进行插入和删除元素操作&#…

Toolbar

记录一下遇到的问题 Toolbal 使用过程中左右出现间隙 代码&#xff1a; <com.google.android.material.appbar.AppBarLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:t…

SAP 消息编号 KI235

在执行AFAB折旧运行的时候&#xff0c;折旧没有运行出来 通过AFBP查询&#xff0c;出现一下报错 原因是因为在ASCET当中没有配置科目分配对象&#xff0c;所以系统无法把折旧费和CO&#xff08;成本中心&#xff09;关联起来 “科目设置”必选勾选 重新运行AFAB &#xff0c;就…

【新书推荐】2.4节 数据宽度

本节内容&#xff1a;计算机受制于物理器件的制约&#xff0c;存储或读写数据的宽度是有长度限制的&#xff0c;通常我们使用数据位的位数来表示数据宽度&#xff0c;如8位、16位、32位、64位等。 ■计算机计数与数学计数的区别&#xff1a;数学中的数据可以是无穷大或无穷小&a…

01.领域驱动设计:微服务设计为什么要选择DDD学习总结

目录 1、前言 2、软件架构模式的演进 3、微服务设计和拆分的困境 4、为什么 DDD适合微服务 5、DDD与微服务的关系 6、总结 1、前言 我们知道&#xff0c;微服务设计过程中往往会面临边界如何划定的问题&#xff0c;不同的人会根据自己对微服务的理 解而拆分出不同的微服…

解读IP风险画像标签:深度洞察网络安全

在当今数字化的世界中&#xff0c;网络安全成为企业和个人关注的焦点。IP风险画像标签作为网络安全的利器&#xff0c;扮演着深度洞察网络风险的角色。本文将深入解读IP风险画像标签&#xff0c;揭示其在网络安全领域的重要性和功能。 1. IP风险画像标签是什么&#xff1f; I…