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

引入

接下来的几期博客会介绍轮式平衡机器人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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端学习:HTTP协议、请求响应、分层解耦

HTTP协议 HTTP-概述 HTTP:Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间数据传输的规则。如果想知道http协议的数据传输格式有哪些,可以打开浏览器,点击 F12 打开开发者工具,点击Network 来…

DataStream API(转换算子)

目录 源算子 转换算子 1,基本转换算子 1.1映射(map) 1.2过滤(filter) 1.3扁平映射(flatMap) 2,聚合算子 2.1按键分区(keyBy) 2.2简单聚合 3&#x…

2024-01-24(ElasticSearch)

1.mysql和elasticsearch的架构: 2.IK分词器利于分中文词汇。 底层是有一个中文字典,这个字典中的中文词汇也是可以拓展的和禁用某些词。 3.mapping常见属性: type:数据类型 index:是否索引 analyzer:分…

2024年mongodb自建三节点副本集详细教程

环境说明 系统centos7.9 自建服务器或云服务器,硬件要求不低于2核2G内存,20G硬盘,文件系统默认是ext4即可。 生产环境最好单独一个磁盘存放数据库,方便数据备份和还原,避免干扰到其他磁盘的运作。 mongodb 4.4.27 …

QT 实现自动生成小学两位数加减法算式

小学生加减法训练 QT实现–自动生成两位数加减法算式,并输出txt文件 可以copy到word文件,设置适当字体大小和行间距,带回家给娃做做题 void MainWindow::test(int answerMax, int count) {// 创建一个随机数生成器QRandomGenerator *gener…

引领AI变革:边缘计算与自然语言处理结合的无尽可能

引言 讲到Ai,你第一时间会想到什么?是Chagpt和文心一言这样与人类交流自然的Ai生成式对话服务?还是根据关键字快速制图的Ai绘图?这些都是近年来人们所常知的Ai用途,我们今天来讲讲以自然语言处理为辅,在Ai赋…

JS之歌词滚动案例

让我为大家带来一个歌词滚动的案例吧&#xff01; 详细的介绍都在代码块中 我很希望大家可以自己动手尝试一下&#xff0c;如果需要晴天的mp3音频文件可以私信我 上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset&quo…

Vue好看的组件库:Element

文章目录 1、什么是Element2、Element快速入门3、Element布局3.1、 Layout 局部3.2、容器布局 1、什么是Element Element&#xff1a;是饿了么公司前端开发团队提供的一套基于 Vue 的网站组件库&#xff0c;用于快速构建网页 Element 提供了很多组件&#xff08;组成网页的部件…

使用DBSyncer同步Oracle11g数据到Mysql5.7中_实现全量数据同步和增量数据实时同步_操作过程---数据同步之DBSyncer工作笔记007

之前都是用mysql和Postgresql之间进行同步的,已经实现了数据的实时同步,现在要实现Oracle数据库到Mysql数据库的全量,以及增量同步. 因为之前配置的不对,这里架构名写成了orcl,所以导致,虽然能连接上,但是,在进行数据同步的时候,看不到表,所以这里说一下如何进行连接 这里,首先…

全球机器人产业:技术创新驱动下的市场与竞争新态势

原创 | 文 BFT机器人 近年来&#xff0c;随着颠覆性技术创新的不断涌现、市场新需求的迅速崛起以及外部冲击的深远影响&#xff0c;机器人产业正经历着前所未有的变革。在技术领域&#xff0c;机器人技术不断突破&#xff0c;智能化、自主化、协同化水平日益提升&#xff1b;在…

Java设计模式-装饰器模式(10)

大家好,我是馆长!今天开始我们讲的是结构型模式中的装饰器模式。老规矩,讲解之前再次熟悉下结构型模式包含:代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式,共7种设计模式。。 装饰器模式(Decorator Pattern) 定义 装饰(Decorator)模式…

前端开发如何自己开发组件库

好多前端小伙伴干了五六年&#xff0c;一直在做切图仔&#xff0c;一看项目没啥亮点。今天开始&#xff0c;我就分享下自己开发组件库的历程。 注&#xff1a;文章会持续更新 环境 "dumi": "^2.2.0","father": "^4.1.0",这里我们站在巨…

消息中间件之八股面试回答篇:一、问题概览+MQ的应用场景+RabbitMQ如何保证消息不丢失(生产者确认机制、持久化、消费者确认机制)+回答模板

问题概览 目前主流的消息队列技术&#xff08;MQ技术&#xff09;分为RabbitMQ和Kafka&#xff0c;其中深蓝色为只要是MQ&#xff0c;一般都会问到的问题。浅蓝色是针对RabbitMQ的特性的问题。蓝紫色为针对Kafka的特性的问题。 MQ的应用场景 MQ主要提供的功能为&#xff1a;异…

Database history tablesupgraded

zabbix升级到6之后&#xff0c;配置安装完成会有一个红色输出&#xff0c;但是不影响zabbix使用&#xff0c;出于强迫症&#xff0c;找到了该问题的解决方法。 Database history tables upgraded: No. Support for the old numeric type is deprecated. Please upgrade to nume…

【新课上架】安装部署系列Ⅲ—Oracle 19c Data Guard部署之两节点RAC部署实战

01 课程介绍 Oracle Real Application Clusters (RAC) 是一种跨多个节点分布数据库的企业级解决方案。它使组织能够通过实现容错和负载平衡来提高可用性和可扩展性&#xff0c;同时提高性能。本课程基于当前主流版本Oracle 19cOEL7.9解析如何搭建2节点RAC对1节点单机的DATA GU…

LLM之RAG实战(二十一)| 使用LlamaIndex的Text2SQL和RAG的功能分析产品评论

亚马逊和沃尔玛等电子商务平台上每天都有大量的产品评论&#xff0c;这些评论是反映消费者对产品情绪的关键接触点。但是&#xff0c;企业如何从庞大的数据库获得有意义的见解&#xff1f; 我们可以使用LlamaIndex将SQL与RAG&#xff08;Retrieval Augmented Generation&#x…

中国县域统计年鉴,含县市卷和乡镇卷,时间覆盖2001-2022年

数据名称: 中国县域统计年鉴 数据格式: pdf、xls不定 数据时间: 2001-2022年 数据几何类型: 文本 数据坐标系: —— 数据来源&#xff1a;国家统计局 数据字段: 中国县域统计年鉴&#xff08;县市卷&#xff09;中国县域统计年鉴&#xff08;乡镇卷&#xff09;目录…

Unity - 将项目转为HDRP

Camera window -> Package Manager 之后会出现HDRP向导窗口&#xff0c;均点击修复。 在Edit中&#xff0c;更改项目中的材质

科技发展趋势,墨水屏电子桌牌将发挥更重要作用

随着科技的不断发展&#xff0c;电子桌牌作为信息展示和宣传的新型设备&#xff0c;逐渐在各个行业得到广泛应用。在国企单位、政府部门、大企业、外企等&#xff0c;墨水屏电子桌牌作为一种新型的数字化展示工具&#xff0c;也已经得到了越来越多的应用。下面&#xff0c;中科…

【Leetcode】2865. 美丽塔 I

文章目录 题目思路代码结果 题目 题目链接 给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。 你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i &#xff0c;高度为 heights[i] 。 如果以下条件满足&#xff0c;我们称这些塔是 美丽 的&#xff1a; 1 < hei…