本文使用工程代码如下
(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文库