复制描述一下
LTC6915是一款精准的可编程增益放大器。可以通过一个并行或串行接口将增益设置为0,1,2,4,8,16…4096。
看着就很明白
大概安排一下电路
手册上提供了一个典型的应用那就按照这个进行画图
由于是也可以通过并行的方式进行控制,仅多一个控制位就一起做上吧
由于这次的主控用的是32不是FPGA,实际使用中,R40是不进行焊接的,因为11脚是串并行的选择脚(GN封装)。
使用模拟SPI
因为使用的32没办法使用标准库,具体的一些初始化就使用STM32CubeMX进行,考虑这次使用的是32,就不使用并行了,通过模拟SPI来编程增益就好。
//模拟SPI耳熟能详系列
#define CS_H() HAL_GPIO_WritePin(CS_GPIO_Port,CS_Pin,GPIO_PIN_SET)
#define CS_L() HAL_GPIO_WritePin(CS_GPIO_Port,CS_Pin,GPIO_PIN_RESET)
#define SCK_H() HAL_GPIO_WritePin(SCK_GPIO_Port,SCK_Pin,GPIO_PIN_SET)
#define SCK_L() HAL_GPIO_WritePin(SCK_GPIO_Port,SCK_Pin,GPIO_PIN_RESET)
#define MOSI_H() HAL_GPIO_WritePin(MOSI_GPIO_Port,MOSI_Pin,GPIO_PIN_SET)
#define MOSI_L() HAL_GPIO_WritePin(MOSI_GPIO_Port,MOSI_Pin,GPIO_PIN_RESET)
#define MISO_R() HAL_GPIO_ReadPin(MISO_GPIO_Port,MISO_Pin)
根据手册给出的串行接口时序图以及最小时间要求
//如果只有一片,低4位为增益控制位,高4位随便,可以通过SPI读出高四位
/*
+──────────── +───────+
| 增益控制位D3,D2,D1,D0 |增益 |
+──────────── +───────+
| 0000 | 0 |
| 0001 | 1 |
| 0010 | 2 |
| 0011 | 4 |
| 0100 | 8 |
| ... | 以此类推 |
| 1101-1111 | 4096 |
+──────────── +───────+
*/
u8 SPI_Write_Read(u8 data)
{
u8 i;
u8 read = 0;
SCK_L();
CS_L();
delay_us(100);
for(i = 0; i < 8; i++)
{
if (data & 0x80)
{
MOSI_H();
}
else
{
MOSI_L();
}
delay_us(60);
SCK_H();
data <<= 1;
delay_us(100);
SCK_L();
read<<=1;
if(MISO_R()==GPIO_PIN_SET)
{
read|=0x01;
}
delay_us(95);
}
CS_H();
SCK_L();
MOSI_L();
return read;
}
大概的一个测试数据
直流仪器输入:20mv
示波器采集输入(平均值):22mv
示波器采集1倍增益输出(平均值):20mv
示波器采集2倍增益输出(平均值):40mv
示波器采集4倍增益输出(平均值):80mv
示波器采集8倍增益输出(平均值):164mv
示波器采集16倍增益输出(平均值):328mv