I2C总线改变MCP4017阻值和ADC多通道采集电压

目录

MCP4017简介

 通过I2C总线改变数字电位器阻值

 ADC多通道采集分样电压(PB14)


MCP4017简介

MCP4018适合做分压,MCP4017可以做可变电阻,滑到左边是R(AB),滑到中间是R(AB)/2,滑到右边是0Ω。100kΩ的阻值,可以分成127个档。掉电然后重新上电会恢复到中间电阻50kΩ。

7bit ——>0x7f    0~127

MCP4017器件地址:

R/W=0:写 0101 1110     0x5e

R/W=1:读 0101 1111     0x5f

MCP4017电阻网络:R(AB)=R(S) X N。R(S) X 127 = 100k。R(S) = 0.787kΩ。

 通过I2C总线改变数字电位器阻值

//写MCP4017
void MCP4017_Write(u8 val)
{   
	I2CStart();
	I2CSendByte(0x5E);  
	I2CWaitAck();
	
	I2CSendByte(val);  
	I2CWaitAck();
	I2CStop();
}

 

//读MCP4017
u8 MCP4017_Read(void)
{   
	u8 val; 
	I2CStart();
	I2CSendByte(0x5F);  
	I2CWaitAck();
	
	val = I2CReceiveByte();
	I2CSendNotAck();
	I2CStop();

	return val;
}

没有对MCP4017进行操作的时候可以先测一下电压,大概在2,75左右就是好的。

3.3 * ( 50 / (50+10))  供电电压不同,也可能是不到3.3V。

写入最大值:MCP4017_Write(0x7f);

测量得:3.262 * ( 100 / (100+10))  = 2.96V

MCP4017_Write(0x08);      100kΩ / 127 X 8 = 6.3kΩ。3.262 * ( 6.3 / (6.3+10)) = 1.26V。 

0x3f ~ 2.72V左右。

 ADC多通道采集分样电压(PB14)

ADC1用到了两个通道,所以number of conversion要改成2。RANK1 2里设置先转换哪个通道再转换哪个通道。有多个采样通道时采样速度不要太快,所以sampling time调到最大周期。

 

//ADC执行程序
u16 adc1_val,adc2_val;
float volt_r37,volt_r38,volt_mcp;//定义两个电压变量

void ADC_Process(void)
{
	//RANK1 - CH5
	HAL_ADC_Start(&hadc1);
	volt_mcp = HAL_ADC_GetValue(&hadc1)/4096.0f*3.3f;
	//RANK2 - CH11
	HAL_ADC_Start (&hadc1 );//自动切换RANK
	adc1_val = HAL_ADC_GetValue (&hadc1 );//再获取值
	volt_r38 = adc1_val/4096.0f*3.3f;
	//ADC2的采集
	HAL_ADC_Start (&hadc2 );//先启动
	adc2_val = HAL_ADC_GetValue (&hadc2 );//再获取值得到0~4095的值
	volt_r37 = adc2_val/4096.0f*3.3f;       //除以4096得到实际电压值
}

显示在lcd上:

//LCD执行程序
void LCD_Process(void )
{
	u8 display_buf[20];
	sprintf((char*)display_buf,"%3d",startup_times);
	LCD_DisplayStringLine(Line0,display_buf);
	
	sprintf((char*)display_buf,"MCP:%5.2f",volt_mcp);
	LCD_DisplayStringLine(Line2,display_buf);
	
	sprintf((char*)display_buf,"R37:%5.2f R38:%5.2f",volt_r37,volt_r38);
	LCD_DisplayStringLine(Line3,display_buf);
	
}

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MCP3008是一种集成电路(IC),常用于与Arduino等微控制器连接,实现多通道交流电压测量。以下是关于MCP3008与Arduino连接测量多通道交流电压的步骤: 1. 将MCP3008与Arduino连接。 - 将MCP3008的引脚VDD(电源正极)连接到Arduino的5V引脚,引脚GND(接地)连接到Arduino的GND引脚。 - 将MCP3008的引脚CLK(时钟)连接到Arduino的时钟引脚(常见为D13)。 - 将MCP3008的引脚DIN(数据输入)连接到Arduino的MOSI引脚(常见为D11)。 - 将MCP3008的引脚DOUT(数据输出)连接到Arduino的MISO引脚(常见为D12)。 - 将MCP3008的引脚CS/SHDN(片选/关断)连接到Arduino的任意数字引脚(例如D10)。 2. 编写Arduino代码。 - 在Arduino IDE中打开一个新的项目,并导入SPI库。 - 在设置部分,初始化SPI通信以与MCP3008进行通信。 - 在循环部分,通过SPI传输命令来选择MCP3008的通道并取交流电压值。 - 将取的电压值转换为所需单位(例如毫伏),并输出或记录下来。 3. 运行代码并测量多通道交流电压。 - 将Arduino与计算机连接,并将代码上传到Arduino板上。 - 在代码中设置要测量的通道。 - 将交流电压源连接到MCP3008的输入通道。 - 打开串口监视器以查看Arduino取的交流电压值。 通过以上步骤,我们能够成功地将MCP3008与Arduino连接,并测量到多通道交流电压值,可以根据实际需要来应用此功能,例如监测多个传感器的输出电压值或控制多个电器设备。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值