STM32 调试TM7711驱动原理图驱动代码

本文使用工程代码如下

(1条消息) STM32调试TM7711驱动原理图驱动源代码,参考如下博客,有原理图设计资源-CSDN文库

背景

项目选用TM7711,还是很令人吃惊的,主要是有如下几个理由

第一就是便宜

第二精度高

STM32的ADC精度不够,才12bit,TM7711的精度可以,可以提供单通道 24bit 高精度 ADC。

项目主要是使用TM7711测量热电偶的温度,温度范围要求比较大-99-999读,这里就对ADC的精度要求比较高。

本文不详细探讨热电偶的温度计算过程,只是将TM7711数据读取过程展现出来。热电偶的计算过程比较复杂,有时间需要静下心来好好写这方便的文章。

硬件设计

TM7711的基本资料

特性描述
TM7711 是应用于电子秤低频测量的单通道模拟前端。 该器件可以接受直接来自传感器的低电平的输入信号,然后产生串行的数字输出。利用 Σ-Δ 转换技术实现了 24 位无丢失代码性能。通过选定的输入信号被送到一个基于模拟调制器的增益可编程专用前端。片内数字滤波器处理调制器的输出信号,通过通信口发命令可调节滤波器的截止点和输出更新速率,从而对数字滤波器的第一个陷波进行编程。
TM7711 只需 2.6~5.5V 单电源供电。TM7711 是全差分模拟输入,带有一个基准输入。
TM7711 是一款用于高精度电子秤系统的理想产品,由于采用特殊的结构确保器件具有极低功耗,
并且内建有掉电模式以减少待机功耗。该芯片还具有集成度高、响应速度快、抗干扰强等优点,可以大大降低电子秤系统的整机成本,提高整机系统的性能和可靠性。

功能特点
 1 对全差分输入通道的 ADC
 片内直接温度测量和数字输出
 24 位无丢失代码
 片内低噪声放大器,增益为 128
 ±0.001%非线性
 可选 10Hz 和 40Hz 的输出数据速率
 同步抑制 50Hz 和 60Hz 的电源干扰
 内置时钟振荡器无需任何外接器件
 简单的二线串行通信口
 工作电压范围:2.6 ~ 5.5V
 工作温度范围:-40 ~ +85℃
 封装形式:SOP8 /DIP8

典型应用

 管脚电压

串口通信时序

这里只是针对使用到的信息,做一些切割,如果想看详细的数据手册,还是下载一份TM7711的datasheet

原理图设计如下

主要注意的就是TM7711是使用STM32的管脚PB6/PB7

因为STM32是3.3v,TM7711的设计使用了推荐电压5v,所以接口部分需要进行做电平转换。如下图所示

图1处为STM32的管脚PB6/PB7

图2处为TM7711的管脚

 

 软件设计

原始数据读取驱动

根据上述原理图实现的驱动

这里说明一下,就是TM7711手册中也提供了一个函数,实际使用还是需要修改的

我这里的读取原始数据函数如下


int Read_TM7711(unsigned char next_select)
{
	unsigned char i = 0;
	unsigned int data_temp = 0;
	int ret;
	for(i = 0;i < 24;i++)
	{
		SET_SCK_H(); //
		data_temp <<= 1;
		delay_us(5); //延时5微妙
		//if(READ_PORT & (1 << PIN_DOUT)) //判断DOUT是否为高电平
		if(TM711_DO != 0)
			data_temp |= 1;
		SET_SCK_L();//
	}
	switch(next_select) //确定下一次数据更新率或者切换通道
	{
		case CH1_10HZ:
			SET_SCK_H();
			delay_1us();
			SET_SCK_L();
		break;
		case CH1_40HZ:
			SET_SCK_H();
			delay_1us();
			SET_SCK_L();
			delay_1us();
			SET_SCK_H();
			delay_1us();
			SET_SCK_L();
			delay_1us();
			SET_SCK_H();
			delay_1us();
			SET_SCK_L();
		break;
		case CH2_TEMP:
			SET_SCK_H();
			delay_1us();
			SET_SCK_L();
			delay_1us();
			SET_SCK_H();
			delay_1us();
			SET_SCK_L();
		break;
		default:
			break;
	}
	data_temp >>= 7;
	ret = data_temp;
	if(data_temp & 0x10000)//负数的补码,转化为源码
	{
		data_temp &= 0xffff;
		data_temp = ~data_temp;
		data_temp &= 0xffff;
		data_temp += 1;
		ret = - data_temp;
	}
	return(ret); //返回从TM7711中读取的数据
}

转化为温度的关系

这里主要是测试热电偶,转化温度的计算公式和硬件设计相关

void tm7711_test_main(void)
{
	float temperature;

	initTm7711GPIOPin();

	while(1)
	{
		temperature = Read_TM7711(CH1_10HZ) * 3.3 / 128 / 1024 / 1024 / 8;
		printf("the raw value is:%f\n",temperature);
		printf("\n");
		HAL_Delay(500);
	}
}

测试调用

主函数中,进行测试调试


/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  delay_init();
  tm7711_test_main();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

本文使用工程代码如下

(1条消息) STM32调试TM7711驱动原理图驱动源代码,参考如下博客,有原理图设计资源-CSDN文库

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大牛攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值