- 博客(16)
- 收藏
- 关注
原创 基于rt_thread的软件模拟spi
最近在研究rtthread,里面有硬件spi,最近因为项目需要用io口来模拟spi,但是网上能找到的资料不多,所以自己研究了一下,搞出来两套写法,一套是基于rtthread封装好的spi-bit-ops这个文件中的函数来注册一个软件spi。两套我都测试过了,都可以用,但是频率差了好多。还有就是rtthread官方的spi-bit-ops里面的xfer读写有点小bug,我这里把这个函数更改了一点。上面这个可以直接使用,但是频率只有400K,如果去掉延时可能还能高一些,但是最高也就400K了。
2024-04-24 17:38:11
741
1
原创 关于RT_Thread中的Sensor的用法
sensor驱动的作用其实就是给上层的传感器提供了统一的接口,里面有个函数,主要是fetch_data用于读取数据,和control用于配置传感器。也就是说我们可以通过调用这两个函数来初始化传感器,并从传感器中读取所需要的数据。
2023-08-30 16:20:40
494
原创 LSM6DSR驱动
ST陀螺仪LSM6DSR的驱动由于最近MPU的价格疯涨,不得已只能更换主控上的陀螺仪芯片,刚好VL53L1X这颗激光芯片的厂家ST有几颗陀螺仪可以用,就拿了几颗试一下,感觉效果还不错,好像可以用于手机做单击双击的判断,于是突发奇想是不是也可以用作我们小车的对抗系统用来检测是否被炮弹击中呢?不过目前还没有尝试这个功能,只是先用来给无人机做姿态解算。直接贴代码,驱动还是蛮简单的,对着说明书就能搞出来。#define LSM6DSR_IIC_ADDR 0XD4#define LSM6DSR_INT1_CTR
2022-04-11 10:08:43
3548
14
原创 DMA模式的多路ADC
在做控制无人机(也包括小车)的时候需要用到2.4G无线通信将遥感和按键的值传输过去,需要用到ADC。如果用中断来做的话需要频繁进入中断,按键多的话占用的资源就很多,摇杆加上按键一共有14个了,再加上需要读取电池的电量啊等等需要用到蛮多的数模转换。所以直接搞个DMA来查询ADC岂不美哉?废话不都说,直接贴代码首先时钟初始化/* ADCCLK = PCLK2/4 */ RCC_ADCCLKConfig(RCC_APB2CLK_Div16); RCC_APB2PeriphClockCmd(RCC_APB2
2021-11-04 16:14:55
469
2
原创 定时器产生PWM驱动电机
接上一篇无人机的学习笔记,补充一些硬件驱动的内容。本文介绍如何通过定时器产生PWM来驱动电机。void RCC_Configuration(){ /*GPIO*/ RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB, ENABLE); /*TMR*/ RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_TMR3, ENAB
2021-11-01 20:07:04
380
原创 电机测速
电机测速的方式有很多。这次使用的是一个自制模块。这个模块在接收到光信号时,会保持高电平状态,没接收到光时电平状态会翻转为低电平,滑动变阻器可以调节接收器的灵敏度。因此当电机的桨叶转到灯管和接收器之间时会挡住光,电平翻转,转过后电平再次翻转,产生一个脉冲。这样通过计算脉冲个数就可以计算出电机的转速了,但是这样会有很大的误差。另一种方法是通过计算两个脉冲之间系统运行时间的差值,再通过计算得到电机的转速,精度会高很多,所以采用第二种做法。这样做就需要知道系统时间,因此采用定时器0中断来计算系统时间,单位为ms
2021-02-08 19:06:25
1541
原创 PCA模块生成PWM方波
电机可以通过单片机产生PWM方波来驱动,那么重点就放在PWM方波上。PWM什么是PWM首先什么是PWM方波?这里直接摘抄百度百科的知识了。PWM全称Pulse width modulation,中文名脉冲宽度调制技术,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化。占空比那什么又是占空比呢?正占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,那么当然负占空比也就是
2021-02-02 10:45:33
5877
4
原创 PID算法学习笔记
最近在学习与无人机有关的一些控制算法,在这里做一些笔记,今天学的是有关于PID的算法。什么是PID首先关于PID的定义,因为我本身不是自动控制专业出身所以对于概念这个东西比较模糊,可以去社区里面搜一些有趣的小故事来看,前几天自学的时候有看到一个讲小明给水桶装水的故事挺有趣,也比较直观,可以去搜一下看看。话说回来,什么是PID。其实就是一种控制算,P表示比例,I表示积分,D表示微分:PID方式PID分两种,位置式PID算法和增量式PID算法,因为我要做无人机的控制算法,所以用的是位置式PID,公式
2021-01-23 11:47:12
4339
1
原创 51单片机模拟I2C协议
什么是I2C首先需要知道什么是I2C协议。I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息(摘自百度百科)。I2C主要有两条线,一条SDA数据线,一条SCL时钟线。由于I2C支持主机与多从机之间的通信,所以在传输数据之前先进行寻址操作,才能与对应的从机建立通信。多从机的存在可能出现多个从机同时需要占用总线的情况,这时候就要通过总线仲裁来选择与某个从机进行通信了。每次通信发送或接收的数据为8位一个字节。I2C时序图详解及通信协议程序
2021-01-21 17:27:04
2871
原创 NRF24L01+双向通信
之前写过了对于NRF24L01的单向通信,即一个作为固定发送端,另一个作为固定接收端的程序。这次在之前的基础上更进一步,让两个NRF24L01芯片互相通信,两个芯片在发送和接收模式之间来回切换。这样就可以做到双向通信。NRF24L01芯片中有一个应答机制,就是在接收到信息后,接收端延时一段时间后会给发送端一个应答信号,但是这个应答信号我在实际使用过程中会出现错误,我也找不到错误在哪里,所以干脆就不使用它的应答,直接将应答关掉。NRF_WriteRegister(NRF_REG_EN_AA, ENAA_A
2021-01-21 11:01:20
4653
2
原创 51串口发送数据
串口通信需要知道几个基础知识点。波特率 起始位 停止位 校验位,具体的可以去查书。串口通信为串行通信方式,即每次只能发送一位,且为单工,一端固定为发送端,另一端为接收端。51单片机的串口需要配置的寄存器可以直接通过STC-ISP这个软件配置,选择好晶振的频率和波特率直接生成就可以了下面直接贴代码bit uart1_busy=0;void UartInit(void) //115200bps@12.000MHz{ SCON = 0x50; //8位数据,可变波特率 AUX
2021-01-20 15:33:45
5006
1
原创 union的用法
什么是unionunion类似于结构体,但是又不完全一样。union也可以叫做共用体,声明方式是这样的:union{变量A变量B}共用体名称;之所以叫做共用体是因为union中的所有变量共用一段内存,储存在相同的内存地址中,因此其中的某个变量在被赋值之后,其他的变量也会共用这个值。比如:union{float rgb_data; //float型数据共32位,4个字节unsigned long color; //long型数据共32位,4个字节unsigned c
2021-01-20 15:05:12
8605
原创 NRF24L01P芯片的通信
之前有写一篇学习SPI通讯协议的文章,这次就通过NRF24L01+这款2.4G无线芯片来实际应用一下SPI协议,主控芯片用的STC15系列。初始化首先根据NRF24L01P的芯片手册对其进行初始化void NRF_RC_Init(void){ NRF_WriteRegister(NRF_REG_CONFIG,(RX_IRQ_ENABLE | TX_IRQ_ENABLE | MAX_RT_IRQ_ENABLE | CRC_ON | CRC_1bytes | PWR_DOWN | RX_ON)
2021-01-19 18:19:25
725
原创 软件模拟SPI协议
软件模拟SPI协议什么是SPISPI的通讯模式通讯协议详细程序简写程序结语最近在学习51单片机的内容,为了防止自己学过就忘,在这里写一些平时的学习笔记,如果有错误希望大家可以给我指正一下。这里是最近学习的SPI串行总线通讯协议的内容,由于所用单片机没有硬件SPI,所以需要用IO口来模拟SPI。什么是SPISPI的定义可以去网上查,能查到很多,这里主要记一下比较有用的部分。SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时
2021-01-13 18:02:28
1942
7
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人