第五次硬件培训

第五次硬件培训

  • 1.ADC转换
    • 概念
    • XPT2046
    • SPI通信
      • SPI时序
  • 2.DAC转换
  • 3.串口通信复习
  • 4.IIC总线通信

1.ADC转换

概念

ADC是一个将模拟量(连续的,可用一条线表示的,如水泵的出水量,电压值)转化为数字量(离散的,非连续的,如高电平,低电平)
假定需要把0-1V的模拟电压信号转换成三位二进制代码,这时便可以取△=(1/8)V,并规定凡数值在0-(1/8)V之间的模拟电压都当做0X△看待,用二进制的000表示:凡数值在((1/8)~(2/8)V之间的模拟电压都当做1X△看待,用二进制的001表示,最大的量化误差可达△,即(1/8)V。

XPT2046

第五次硬件培训_第1张图片

在C51单片机中使用XPT2046作为ADC转换模块,其最高可达12位转换分辨率,即当转换1V的电压位数字量时,误差不会超过1/2^12V
在C51中可以将电位器,热敏电阻的阻值,光敏电阻的阻值,或自己外接的模拟量转换为数字量,并使用SPI协议通信与其通信
第五次硬件培训_第2张图片
使用XPT2046的单端输入方式和12位ADC寄存器对其进行配置,其中我们使用AIN0通道

int Read_AD_Data(uchar cmd)
{
	char i;
	int AD_Value;
	CLK = 0;
	CS  = 0;
	SPI_Write(0xB4);
	for(i=6; i>0; i--); 	//延时等待转换结果
	CLK = 1;	  //发送一个时钟周期,清除BUSY
	_nop_();	  //空语句,为一个机器周期=12个时钟周期,确保被检测到:1us	
	_nop_();    //
	CLK = 0;
	_nop_();
	_nop_();
	AD_Value=SPI_Read();
	CS = 1;
	return AD_Value;	
}

SPI通信

SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议
我们通常使用这种通信协议来配置芯片的各种模式,如之前的XPT2046就给其传输0XB4来对其的模式进行配置

SPI时序

第五次硬件培训_第3张图片

CS:片选位:开始时拉低,停止时拉高
CLK:空闲时为低,上升沿采集数据(第一个跳变沿)
与iic不同的是,它没有应答位,这个是它的一个缺点

因为C51没有硬件接口,故我们使用软件模拟SPI和XPT2046通信,为了移植方便,我们也通常使用软件模拟来对其进行模拟,在一些其他有硬件接口的单片机上,我们可以通过改变极性来配置SPI

void SPI_Write(char dat)
{
	uchar i;
	CLK = 0;
	for(i=0; i<8; i++)//2个字节,占8位
	{
		DIN = dat >> 7;  	//放置最高位
		dat <<= 1;
		CLK = 0;		//上升沿发送数据
				//不会产生应答              
		CLK = 1;

	}
}//先放置再发送,注意顺序
int SPI_Read(void)
{
	uint i, dat=0;
	CLK = 0;
	for(i=0; i<12; i++)//接收12位数据
	{
		dat <<= 1;//接收最低位
		CLK = 1;
		CLK = 0;
		dat |= DOUT;

	}
	return dat;	
}

通过上述代码可以实现通过SPI协议进行发送和接收。

2.DAC转换

第五次硬件培训_第4张图片

Vref为参考电压,通常我们是接在系统电源上,即5V,8个开关表示DAC精度为8位每流过一个R,电流少一半
V0=I01*Rfb
通过读取D0-D7和基准电压VREF来完成从数字量到模拟量的转变

因为硬件电路较为复杂,处于成本考虑,我们通常使用PWM来模拟DAC输出
例如在51单片机中,高电平为5v,低电平为0v,若我想输出一个1.5V的电压,我可在10ms中进行占空比的调节,前3ms为高,后7ms为低,这一个周期的有效值即为1.5v
第五次硬件培训_第5张图片


```c
void main()
{	
	char DIR;
	Timer1Init();  //定时器1初始化
	while(1)
	{
		if(count>100)							
		{  
			count=0;
			if(DIR==1)					   //DIR控制增加或减小
			{
			  value++;
			}			
			if(DIR==0)
			{
			  value--;
			}
				
		}

		if(value==1000)//周期为1000
		{
		  DIR=0;
		}
		if(value==0)
		{
		  DIR=1;
		}	
				
		if(timer1>1000)  
		{
			timer1=0;
		}
		if(timer1 <value)	
		{
			PWM=1;
		}
		else
		{
			PWM=0;
		}		
	}		
}

通过对定时器的初始化而完成PWM波的输出

3.串口通信复习

第五次硬件培训_第6张图片
第五次硬件培训_第7张图片
第五次硬件培训_第8张图片

第五次硬件培训_第9张图片
配置流程
1.配置串口模式
2.配置定时器1来设置波特率
3.开启串口中断、定时器中断、总中断
第五次硬件培训_第10张图片

4.IIC总线通信

一.什么是IIC
IIC是集成电路总线,IIC总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。
第五次硬件培训_第11张图片
每个接到I2C总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由总线上接收数据的器件则为接收器。
第五次硬件培训_第12张图片
第五次硬件培训_第13张图片
第五次硬件培训_第14张图片
第五次硬件培训_第15张图片
第五次硬件培训_第16张图片
第五次硬件培训_第17张图片
第五次硬件培训_第18张图片

你可能感兴趣的:(硬件,单片机,stm32,fpga开发)