K_A14_004 基于STM32等单片机驱动旋转角度传感器模块 串口与OLED0.96双显示

news2025/1/16 8:15:00

K_A14_004 基于STM32等单片机驱动旋转角度传感器模块 串口与OLED0.96双显示

  • 一、资源说明
  • 二、基本参数
    • 参数
    • 引脚说明
  • 三、驱动说明
    • IIC地址/采集通道选择/时序
    • 对应程序:
  • 四、部分代码说明
    • 1、接线引脚定义
      • 1.1、STC89C52RC+旋转角度传感器模块
      • 1.2、STM32F103C8T6+旋转角度传感器模块
  • 五、基础知识学习与相关资料下载
  • 六、视频效果展示与程序资料获取
  • 七、注意事项
  • 八、接线说明
    • STC89C52RC
    • STM32F103C8T6

请添加图片描述

一、资源说明

单片机型号测试条件模块名称代码功能
STC89C52RC晶振11.0592M旋转角度传感器模块STC89C52RC采集旋转角度传感器参数 串口与OLED0.96双显示
STM32F103C8T6晶振8M/系统时钟72M旋转角度传感器模块STM32F103C8T6采集旋转角度传感器参数 串口与OLED0.96双显示

其他资料目录 直戳跳转

二、基本参数

参数

供电电压:DC 5V
工作环境温度:-40°℃~85℃
旋转寿命:300K次
旋转扭矩:1mN. m(Ref. :10.5gf.cm)
有效旋转角度:333.3°
线性度:±2%
电位器总电阻阻值:10KQ ±30%

引脚说明

旋转角度传感器模块引脚说明
VCC正极 3.3-5V供电
GND负极 接GND
OUT模拟量输出

三、驱动说明

STC89C52RC无ADC所以需要借助外部ADC模块 此处用PCF8591模块进行采集

IIC地址/采集通道选择/时序

请添加图片描述
请添加图片描述
请添加图片描述

对应程序:

以51为例

/*******************************************************************
                     起动总线函数               
函数原型: void  Start_I2c();  
功能:     启动I2C总线,即发送I2C起始条件.  
********************************************************************/
void Start_I2c()
{
  PCF8591_SDA=1;         /*发送起始条件的数据信号*/
  PCF8591_SCL=1;
  IIC_Delay();
  PCF8591_SDA=0;         /*发送起始信号*/
  IIC_Delay();      
  PCF8591_SCL=0;       /*钳住I2C总线,准备发送或接收数据 */
  IIC_Delay();
}

/*******************************************************************
                      结束总线函数               
函数原型: void  Stop_I2c();  
功能:     结束I2C总线,即发送I2C结束条件.  
********************************************************************/
void Stop_I2c()
{
  PCF8591_SDA=0;      /*发送结束条件的数据信号*/
  PCF8591_SCL=1;      /*结束条件建立时间大于4μs*/
  IIC_Delay();
  PCF8591_SDA=1;      /*发送I2C总线结束信号*/
  IIC_Delay();
}

/*******************************************************************
                 字节数据发送函数               
函数原型: void  SendByte(UCHAR c);
功能:     将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
          此状态位进行操作.(不应答或非应答都使ack=0)     
           发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
********************************************************************/
void SendByte(uint8_t  c)
{
 uint8_t  BitCnt;
 
 for(BitCnt=0;BitCnt<8;BitCnt++)  /*要传送的数据长度为8位*/
    {
	     if((c<<BitCnt)&0x80)PCF8591_SDA=1;   /*判断发送位*/
	     else  PCF8591_SDA=0;                
	
	     PCF8591_SCL=1;               /*置时钟线为高,通知被控器开始接收数据位*/
		 IIC_Delay();       
	     PCF8591_SCL=0; 
    }
    
    IIC_Delay();
    PCF8591_SDA=1;                /*8位发送完后释放数据线,准备接收应答位*/
    IIC_Delay();  
    PCF8591_SCL=1;
    IIC_Delay();
    if(PCF8591_SDA==1)ack=0;     
       else ack=1;        /*判断是否接收到应答信号*/
    PCF8591_SCL=0;
  IIC_Delay();
}

/*******************************************************************
                 字节数据接收函数               
函数原型: UCHAR  RcvByte();
功能:        用来接收从器件传来的数据,并判断总线错误(不发应答信号),
          发完后请用应答函数应答从机。  
********************************************************************/    
uint8_t RcvByte()
{
  uint8_t  retc;
  uint8_t  BitCnt;
  
  retc=0; 
  PCF8591_SDA=1;                     /*置数据线为输入方式*/
  for(BitCnt=0;BitCnt<8;BitCnt++)
  {
      
      PCF8591_SCL=0;                  /*置时钟线为低,准备接收数据位*/
	  IIC_Delay();
      PCF8591_SCL=1;                  /*置时钟线为高使数据线上数据有效*/
	  IIC_Delay();
      retc=retc<<1;
      if(PCF8591_SDA==1)retc=retc+1;  /*读数据位,接收的数据位放入retc中 */
		IIC_Delay();
    }
  		PCF8591_SCL=0;    
  		IIC_Delay();
  		return(retc);
}

/********************************************************************
                     应答子函数
函数原型:  void Ack_I2c(bit a);
功能:      主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)
********************************************************************/
void Ack_I2c(uint8_t a)
{
  
  if(a==0)PCF8591_SDA=0;              /*在此发出应答或非应答信号 */
  else PCF8591_SDA=1;
  IIC_Delay();    
  PCF8591_SCL=1;
  IIC_Delay();
  PCF8591_SCL=0;                     /*清时钟线,钳住I2C总线以便继续接收*/
  IIC_Delay();  
}

采集通道选择:
ISendByte(PCF8591,0x42);

地址:
#define  PCF8591 0x90    //PCF8591 地址

四、部分代码说明

1、接线引脚定义

需要自定义引脚可在此处更改,STM32要自定义引脚的话也要注意引脚时钟使能的更改

1.1、STC89C52RC+旋转角度传感器模块

//旋转角度传感器+PCF8591模块引脚定义
旋转角度传感器模块---------------------PCF8591
OUT------------------------------------AIN2

sbit  PCF8591_SCL=P1^0;       //I2C  时钟 
sbit  PCF8591_SDA=P1^1;       //I2C  数据 
//OLED0.96模块引脚定义
sbit SCL=P1^2; //串行时钟
sbit SDA=P1^3; //串行数据

1.2、STM32F103C8T6+旋转角度传感器模块

//旋转角度传感器模块引脚定义 GPIOA_0  ADC1通道0
#define    ADC_GPIO_APBxClock_FUN        RCC_APB2PeriphClockCmd
#define    ADC_GPIO_CLK                  RCC_APB2Periph_GPIOA  
#define    ADC_PORT                      GPIOA
#define    ADC_PIN                       GPIO_Pin_0
//OLED0.96模块引脚定义					
		//-----------------OLED IIC端口定义----------------  					   

#define OLED_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_8)//SCL
#define OLED_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_8)

#define OLED_SDIN_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_9)//SDA
#define OLED_SDIN_Set() GPIO_SetBits(GPIOB,GPIO_Pin_9)

五、基础知识学习与相关资料下载

1、STC89C52RC程序下载 直戳跳转

2、STM32F103C8T6程序下载
(1)串口下载 直戳跳转
(2)ST-LINK下载 直戳跳转
(3)J-LINK下载 直戳跳转
(4)DAP-LINK下载 直戳跳转

3、OLED0.96程序说明 直戳跳转

4、串口助手下载与使用
(1)安信可调试助手使用 直戳跳转
(2) sscom33串口调试助手使用 直戳跳转
(3)STC-ISP串口调试助手使用 直戳跳转

六、视频效果展示与程序资料获取

视频连接 直戳跳转
资料获取 ( 滑到最后添加个人号)

七、注意事项

1、VCC GND请勿接反,接反易烧
2、OLED显示异常时,排除接线接触不良

八、接线说明

STC89C52RC

/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : 旋转角度传感器模块测试程序
//  测试条件   : STC89C52RC   晶振11.0592
接线
旋转角度传感器模块-----------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
旋转角度传感器模块-----------------------PCF8591
SIG-------------------------------------AIN2

PCF8591--------------------------------STC89C52RC
VCC-- ---------------------------------5V
GND- ----------------------------------GND
SCL- ----------------------------------P1.0 //SCL
SDA- ----------------------------------P1.1 //SDA

OLED0.96(IIC) -------------------------STC89C52RC
VCC------------------------------------3.3V
GND------------------------------------GND
SCL------------------------------------P1^2
SDA------------------------------------P1^3
*************************************************************************************/

STM32F103C8T6

/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : 旋转角度传感器模块测试程序
//  测试条件   : STM32F103C8T6   晶振8M  系统时钟 72M
接线
旋转角度传感器模块-----------------------STM32F103C8T6
VCC-------------------------------------3.3V
GND-------------------------------------GND
SIG--------------------------------------PA_0 

OLED0.96
VCC-- -----------------------------------3.3V
GND- ------------------------------------GND
SCL- ------------------------------------PB_8 //SCL
SDA- ------------------------------------PB_9 //SDA	
*****************************************************************************************/

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

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

相关文章

Arthas阿尔萨斯的使用安装详细教程

Arthas阿尔萨斯的使用安装详细教程一、阿尔萨斯能解决什么什么问题二、安装与命令三、实际应用四、自学途径本篇文章是自学B站“御风大世界”视频的提炼和总结。 原视频见&#xff1a;Arthas使用教程 一、阿尔萨斯能解决什么什么问题 alibaba出品线上JVM监控诊断利器 1、是一…

Flask源码篇:Flask路由规则与请求匹配过程(超详细,易懂)

目录1 启动时路由相关操作&#xff08;1&#xff09;分析app.route()&#xff08;2&#xff09;分析add_url_rule()&#xff08;3&#xff09;分析Rule类&#xff08;4&#xff09;分析Map类&#xff08;5&#xff09;分析MapAdapter类&#xff08;6&#xff09;分析 url_rule_…

深度学习技巧应用2-神经网络中的‘残差连接’

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍 深度学习技巧应用2-神经网络中的‘残差连接’。 一、残差连接介绍 残差连接是一种神经网络中的一种运用技巧。由于深层网络容易出现梯度消失或梯度爆炸的问题&#xff0c;因此可以通过残差连接的方式&#xff0c;将网…

C++数据结构 —— 红黑树

目录 1.红黑树概念 2.红黑树节点的定义 3.红黑树的插入操作 4.红黑树的调整动作 4.1调整动作1 4.2调整动作2 4.3调整动作3 4.4插入算法的完整代码 4.5验证红黑树 4.6完整代码 1.红黑树概念 与AVL树一样&#xff0c;红黑树也是map、set等关联式容器的底层结构。但红黑…

大数据开发学习好找工作么

工作到底好不好找&#xff0c;市场需求是一方面&#xff0c;更多的还是要看个人成长背景和实际能力抛开两点都不谈就单说好找或者不好找纯属有点耍流氓了大数据需求越来越多&#xff0c;只有技术在手不愁找不到工作。 大数据开发主要是负责大数据挖掘&#xff0c;大数据清洗处…

谷歌验证码的使用

1. 表单重复提交之验证码 1.1 表单重复提交三种常见情况 提交完表单。服务器使用请求转来进行页面跳转。这个时候&#xff0c;用户按下功能键 F5&#xff0c;就会发起最后一次的请求。造成表单重复提交问题。解决方法&#xff1a;使用重定向来进行跳转用户正常提交服务器&…

行为型模式之策略模式

行为型模式&#xff1a;类和对象如何交互&#xff0c;划分责任和算法&#xff0c;即对象之间通信。 概念 策略模式是对算法的包装&#xff0c;是把使用算法的责任和算法本身分割开来&#xff0c;委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面…

Servlet请求响应

文章目录Servlet请求响应进阶内容回顾Servlet 体系结构get/post 请求Servlet 的生命周期web.xml 配置文件HttpServletRequest 接口文件上传HttpServletResponse 接口文件下载响应表格的案例转发与重定向简介请求转发原理请求转发案例重定向原理重定义与请求转发的区别Servlet请…

分巧克力(二分)

儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有 N 块巧克力&#xff0c;其中第 i 块是 HiWi 的方格组成的长方形。为了公平起见&#xff0c;小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足&#xff1a;形…

百度“松果“ OJ赛第一周 题解

百度"松果" OJ赛第一周 题解 第一周的周赛基本考察的都是模拟和递推递归问题&#xff0c;虽然不涉及很难的算法&#xff0c;但是还是比较考察代码能力和思维能力的。 1.数据流的中位数 题意&#xff1a;要求你做一个系统可以进行两个操作&#xff0c;第一个操作是…

cloud flare 真不错(常规思路)

2022-10-20 前言 接到一个测试目标&#xff0c;开局cloudflare&#xff0c;最后运气不错还是拿下了。因授权测试等原因&#xff0c;文章仅展示思路历程。 过程 信息搜集 给的目标是test.com&#xff0c;前期经过一些基本的信息搜集&#xff0c;发现了一个求职子域employee…

FreeRTOS入门

目录 一、简介 二、堆的概念 三、栈的概念 四、从官方源码中精简出第一个FreeRTOS程序 五、修改官方源码增加串口打印 一、简介 FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统&#xff0c;功能包括&#xff1a;任务管理、时间管理、信号量、消息队列、…

嵌入式开发:McObject eXtremeDB嵌入式数据库系统

嵌入式数据库已经成为数据库技术的一种流行应用&#xff0c;尤其是对于企业中的物联网应用。有很多理由将数据库嵌入到应用程序的端点中&#xff0c;而不仅仅是将数据推送到设备中。嵌入式开发人员在选择嵌入式数据库时&#xff0c;真正重要且与众不同的解决方案是写入速度、大…

【边缘端环境配置】英伟达Jetson系列安装pytorch/tensorflow/ml/tensorrt环境(docker一键拉取)

【边缘端环境配置】英伟达Jetson系列安装pytorch/tensorflow/ml/tensorrt环境&#xff08;docker一键拉取&#xff09;0.JetPack1.安装输入法2.安装docker和nvidia-docker3.拉取l4t-pytorch镜像4.拉取l4t-tensorflow镜像5.拉取l4t-ml镜像6.拉取tensorrt镜像7.镜像换源8.其他&am…

三数之和(双指针 or hash表)

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

ubuntu22.04 Desktop 服务器安装

操作系统 使用的是Uubntu22.04 Desktop的版本&#xff0c;系统安装后&#xff0c;默认开启了53端口和631端口 关闭udp 5353、53791端口&#xff08;avahi-daemon服务&#xff09; sudo systemctl stop avahi-daemon.socket avahi-daemon.service sudo systemctl disable ava…

[1.2]计算机系统概述——操作系统的发展与分类

文章目录第一章 计算机系统概述操作系统的发展与分类&#xff08;一&#xff09;手工操作阶段&#xff08;二&#xff09;批处理阶段——单道批处理系统&#xff08;三&#xff09;批处理阶段——多道批处理系统&#xff08;四&#xff09;分时操作系统&#xff08;五&#xff…

【Java开发】JUC进阶 01:Lock锁详解

1 Lock锁介绍已经在【JUC基础】04简单介绍过了&#xff0c;本文做进一步的拓展&#xff0c;比如公平锁和非公平锁、&#x1f4cc; 明白锁的核心四个对象&#xff1a;线程&#xff0c;共享资源&#xff0c;锁&#xff0c;锁操作包括线程如何操作资源&#xff0c;使用锁锁哪个资源…

xgboost: 分割查找算法:贪婪算法、分桶算法

1、Basic Exact Greedy Algorithm 树学习的关键问题之一是找到最好的分割&#xff0c;如Eq(7)所示。 贪婪算法:分割查找算法枚举所有特征上的所有可能的分割。精确的贪婪算法如Alg. 1所示。为了高效地完成这一任务&#xff0c;算法必须首先根据特征值对数据进行排序&#xff…

SpringMVC 参数绑定(视图传参到控制器)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…