IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> RM机器人控制导论 -> 正文阅读

[嵌入式]RM机器人控制导论

关键字

1.static

定义变量:在下一次函数执行时该变量保持不变,并且源文件的所有函数都可以使用它

定义函数:1)其他文件中可以定义相同名字的函数,不会发生冲突 2)静态函数不能被其他文件所用。

2.extern

定义变量: 只在头文件中做声明,在.c文件里面使用时需引用一下头文件。

例:

(1) 在 test1.h 中有下列声明:

#ifndef TEST1H
#define TEST1H
extern char g_str[]; // 声明全局变量g_str
void fun1();
#endif

(2) 在 test1.cpp 中

#include "test1.h"
char g_str[] = "123456"; // 定义全局变量g_str
void fun1() { cout << g_str << endl; }

(3) 以上是 test1 模块, 它的编译和连接都可以通过。
如果我们还有 test2 模块也想使用 g_str , 只需要在原文件中引用就可以了

#include "test1.h"
void fun2()    { cout << g_str << endl;    }

定义函数:如果你想在本源文件中使用另一个源文件的函数,就需要在使用前用声明该函数,声明函数加不加extern都没关系,所以在头文件中函数可以不用加extern。

3.union联合体,枚举类型emua

  • 为什么使用union?

1.解决“相同信息”的困扰,避免重复代码,提高代码的简洁性。

相同成员公用,差异成员则通过 union 区分,这就避免了代码重复,也避免了代码耦合。

2.节省内存

例子:(28条消息) C语言union的用法及好处_rchris520的博客-CSDN博客_union的作用

注:普通结构体占有的空间为所有变量的总和,而union只占有最高位的空间。

枚举:每个值自动赋值0,1,2,3,4,5......

4.typedef

(28条消息) 关于typedef的用法总结_艾斯曼的博客-CSDN博客_typedef的用法

初始单片机与IO口

执行: 把LED一端接到GND上,另外一端接到lo上,让IO口输出0的时候,led灯就不会亮,但是输出高电平就会亮。(MCU微控制器),对IO口需进行配置。

各种热敏电阻:将物理量转换为电压值传给单片机

?寄存器的基本认知

?{1.GPIO基本结构与T作方式

? 引脚的功能:1.输入输出电压(驱动)2.输出某个特殊信号(查芯片手册)

四种输入模式: 1.输入浮空2.输入上拉3.输入下拉4.模拟输入

四种输出模式:1.开漏输出(带上或下拉)2.开漏复用功能(带上或下拉)3.推挽输出(带上或下拉)4.推挽复用功能(带上或下拉)?

四种速度:2MHZ,25MHZ,50MHZ,100MHZ

八种工作模式:模拟输入? 浮空输入? 下拉输入? 上拉输入? 开漏输出? ?推挽输出? 复用开漏输出??复用推挽输出??

概念:

1.5V容忍:用于保护电路,防止被烧坏

2.浮空输入:外部引脚直接进入施密特触发器,直接进入芯片读取。一般用于通讯。

3.上拉输入:可以让内部稳定接收到高电压,对低电压敏感。

4.下拉输入:对高电压敏感

5.模拟输入:不经过施密特触发器,用于模数转换,可以准确的读到实际电压。

6.推挽输出:用于电压驱动类控制,可以稳定的输出电压。

7.开漏输出:用于电流驱动类型控制,(一般不用),用于电压转换可以将io从3.3v升为供电电压(5v),这个需要上拉。}

计时器:通过改变高低电平的时间,就能改变电压。PWM(占空比)

测试使用的是pid算法

无反馈--开环? 有反馈--闭环? P--输入与目标误差值? I--积分? ?D--微分

例:当步兵云台与对方的哨兵机器人角度相差值不是0时,则使用pid算法

反馈:1.角度反馈2.速度反馈

通过编码器来采集频率可以得到速度,知道高低电平的频率,形成波传给单片机

例子:

AB---差了一个相位,用来获取方向? Z-- 用来获知圈数

通信(数据传输)

例:遥控器用无线通信通过接收机传输给单片机

协议:与单片机约定什么时候开始发送,什么时候停止发送等

?串口通信(USART):使用二进制,具备占用传输线数量少、长距离传输时成本低的优点;但数据传输控制相比于并行通信复杂。

并行通信:控制简单、传输速度快;但由于其占用数据线过多,长距离传输数据时成本较高,且接受设备出同时接收数据时容易出现错位即抗干扰能力弱。

异步通信:实现容易、成本低;传输效率不高。

CAN通信:CAN通信只由两根线完成的,一条称为CAN_H(CAN High),一条称为CAN_L(CAN Low),共同构成一组差分信号线。

??????????使用CAN总线共享,减少线路,方便排查一个CAN总线上的所有器件通讯速率必须相同。(28条消息) STM32 CAN通信的学习笔记总结(从小白开始)_从心开始 >的博客-CSDN博客_can通讯原理

?引脚:TX、RX、VCC、GND

步兵机器人控制串讲

1.LED灯:用来提示,判断程序是否正常执行

2.按键:切换红蓝模式

3.串口通信+DMA

使用电机:得到的是云台的相对角度

使用陀螺仪:得到的是云台的绝对角度

底盘跟随:云台转动后底盘与之产生的角度差值,即p(误差值),目标角度为0度。

底盘的绝对角度:云台的绝对角度-云台与底盘的相对角度;

云台跟随:不需要使用pid算法,云台会自动跟随。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 19:08:40  更:2022-05-21 19:09:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:56:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码