STM32菜鸟成长记录---AD7792遇到的问题

A/D转换原理及参数指标

1.      采样定理

2.      为了正确无误的用图5.2.2中所示的采样信号vs表示模拟信号vi,必须满足式中,        fs>=2fmax

fs为采样频率;fmax为输入信号vi的最高频率分量的频率;上式就是所谓的采样定理。满足采样定理的条件下,可以用一个低通滤波器将信号vs还原为vi,这个低通滤波器的电压传输系数|A(f)|在低于fmax的范围内应保持不变,而在fs-fmax以前应迅速下降为零,采样定理规定了A/D转换的频率下限。

AD7792 遇到的问题/学到的知识点

学到的知识点:

1.在stm32中

U8 : unsigned   char

U16: unsigned  short

U32: unsigned  int

2. 在stm32中 AD7792采样的电压数值要经过转换成ASCII码字符在串口中打印出来有两种编程方式实现:

u8TempD;

u16  Datau16;

char str[20];

unsigned short iData[3];

u8 Strvbat[8]={'/','/','/',',',0,0,0,0};

u8 ASCII[21]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','+',//10->16

                                                                                         ',',//11-17

                                                                                         '-',//12-18

                                                                                         '.',//13-19

                                                                                         '/',//14-20

               };

方式一:(简洁版)

AD_VBat[TempD] = SPI_Read16Bit();

memcpy(&iData[0],& AD_VBat[TempD],2);

sprintf(str,"%d",iData[0]);

UART1_TX485_Puts(USART1,&str[0]);

方式二:(复杂版)

AD_VBat[TempD] = SPI_Read16Bit();

Datau16 = AD_VBat[TempD];

Strvbat[0]=ASCII[Datau16/10000];

Strvbat[1]=ASCII[Datau16%10000/1000];

Strvbat[2]=ASCII[Datau16%1000/100];

Strvbat[3]=ASCII[Datau16%100/10];

Strvbat[4]=ASCII[Datau16%10];

UART1_TX485_Puts(USART1,&Strvbat[0]);

while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);

说明一下情况。手上有一个单片机进行数据采集,需要24小时不间断工作。但迫于条件限制只能放在宿舍,但是诸位懂得大学宿舍晚上是会断电的,偷电的话不是长久之道,遂打算使用移动电源作为其晚间供电来源。但是如果这样就要求移动电源支持边充电边放电——白天边充边放,晚上为单片机供电。据我了解移动电源部分有这样的设计而部分没有,诸位高人能否推荐一个符合我这个情况的移动电源,或者其他解决方案?另外这么做是否对移动…

3.遇到的问题

问题一:通过串口打印,采样的数值为32768左右转化后的电池电压为2.5V,而电池实际电压应该为3.32v采样数值应该为43582左右的数值;

 

问题根源:通道切换的问题;

AD7792有3个模拟输入通道,初始化AD7792配置函数中,写配置寄存器SPI_SendByte(0x10);           /* 写配置寄存器*/

SPI_Send16Bit(0x1080);   // 偏置电压禁用禁用熔断电流单极性编码内部基准

SPI_Send16Bit(0x1080)设置的采样通道是采样电流的通道,所以采样的是电流的数值;

 题二:在移植AD7792独立出来时,发现电池电压采样值打印为0000;

问题根源:SPI配置问题;

原理图:

 错误配置:

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5  | GPIO_Pin_7 ;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出

GPIO_Init(GPIOA, &GPIO_InitStructure);

正确配置:

/* Configure SPI1 pins: SCK, MISO and MOSI */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_4|GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //通用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* 配置MISO为输入 */

GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入

GPIO_Init(GPIOA, &GPIO_InitStructure);

 

转自:http://blog.csdn.net/yx_l128125/article/details/8033718

生成海报
点赞 0

thePro

我还没有学会写个人说明!

相关推荐

OV7670摄像头模块资料

OV7670摄像头模块资料 一、实物图和原理图 二、模块简介 OV7670 是 OV( OmniVision)公司生产的 CMOS VGA 图像传感器。该传感器体积小、工作电压低,提供单片 VGA

pwm电机调速的原理介绍与代码实现

1、pwm实现调速的原理与介绍 PWM(Pulse Width Modulation)脉冲宽度调制。 1)占空比 pwm占空比就是一个脉冲周期内有效电平在整个周期所占的比例。 通过调节PWM的占空比就能调节IO口上电压的持续

【STM32Cube笔记】2-STM32Cube安装教程

【STM32Cube笔记】系列文章目录 1-基于STM32的VSCode入门级教程前言 2-STM32Cube安装教程 3-STM32CubeIDE汉化 4-STM32Cube配置时钟设置 5-跑马灯引脚配置 6-Cortex-M7内核基本配