MSPM0L1306的AD采样配置方法以及实现温度报警器的过程可以大致分为以下几个步骤。
以下步骤是具体的实现硬件和软件方法与步骤。
AD采样配置方法:
选择参考电压:MSPM0L1306的ADC支持使用外部VREF+/-管脚,以使用外部的参考电压源。但也可以选择VDD电压,或者内部的1.4V/2.5V参考电压。在选择内部参考电压时,ADC的采样率最大不能超过200KHz。
配置时钟源和采样时间:在SysConfig中,你需要配置ADC的时钟源,选择SYSISC,并对其进行分频。然后设置采样时间,这个时间可以根据具体需求来设定。
配置采样模式和转换模式:MSPM0L1306的ADC支持自动采样和手动采样两种模式。在自动采样模式下,可以配置不同的采样时间给到采样通道选择。在手动采样模式下,采样时间由ADC寄存器的SC位的高电平时间决定。转换模式可以选择单次转换或序列转换,这两个模式都支持重复模式,也就是连续采样。
配置中断:在ADC转换完成后,可以配置一个中断来通知程序。当ADC转换完成时,程序就可以读取转换结果。
实现温度报警器:
连接温度传感器:需要将温度传感器连接到MSPM0L1306的ADC通道上。具体的连接方式取决于使用的温度传感器型号和MSPM0L1306的引脚定义。
读取AD采样值:在程序中,需要配置一个定时器或中断来定期读取ADC的采样值。这个采样值就代表了温度传感器的输出电压,可以通过一定的算法将其转换为温度值。
设置报警阈值:根据需求,需要设置一个或多个报警阈值。可以设置一个高温报警阈值和一个低温报警阈值。
判断并触发报警:在读取到AD采样值后,需要将其与报警阈值进行比较。如果超过了阈值,就需要触发相应的报警操作。可以通过点亮一个LED灯或蜂鸣器发出一个声音来提醒。
温度模块:DS18B20是一款常用的数字温度传感器,具有多种显著的特点和广泛的应用场景。
主要特点:
输出数字信号:DS18B20能够直接将温度转换为数字信号输出,方便与各种微处理器或其他数字系统连接。
体积小、硬件开销低:由于其紧凑的设计和高效的硬件资源利用,DS18B20非常适合于需要空间紧凑和成本控制的场合。
抗干扰能力强、精度高:DS18B20能够在各种复杂环境中稳定工作,提供高精度的温度测量数据。
接线方便、封装形式多样:DS18B20的接线方式简单,并且可以根据应用场合的不同选择不同的封装形式,管道式、螺纹式、磁铁吸附式、不锈钢封装式等。
独特的单线接口:DS18B20采用独特的单线接口方式,与微处理器连接时仅需要一条口线即可实现双向通讯,大大简化了电路设计。
多点测温功能:DS18B20支持多点测温,多个DS18B20可以并联在唯一的三线上,实现多点温度的实时监测。
应用场景:
DS18B20可以应用于各种非极限温度场合的温度测量和控制,电缆沟测温、高炉水循环测温、锅炉测温、机房测温、农业大棚测温、洁净室测温、弹药库测温等。
由于其耐磨耐碰、体积小的特点,DS18B20也适用于各种狭小空间设备的数字测温和控制领域,轴瓦、缸体、纺机、空调等设备。
DS18B20还可以应用于冷冻库、粮仓、储罐、电讯机房、电力机房等场所的温度监测和控制。
原理图:
蜂鸣器:
蜂鸣器的驱动方式可分为:有源蜂鸣器(内含驱动线路)和无源蜂鸣器(外部驱动)。这里的“源”指的是激励源。蜂鸣器的发声原理由振动装置和谐振装置组成。
无源蜂鸣器内部没有激励源,只有给它一定频率的方波信号,才能让蜂鸣器的振动装置起振,从而实现发声,同时,输入的方波频率不同,发出的声音也不同(所以无源蜂鸣器可以模拟曲调实现音乐效果)。
有源蜂鸣器则不需要外部的激励源,只需要接入直流电源,即可自动发出声音(声音频率相对固定),它的工作发声原理是:直流电源输入经过振荡系统的放大取样电路在谐振装置作用下产生声音信号。
蜂鸣器电路:
ADC框架:
CCS配置ADC:
1. 学习蜂鸣器的控制方法,用蜂鸣器实现按键音效
KeyTmp = DL_GPIO_readPins(GPIO_LEDS_PORT,KEY_SW1_PIN);
if(KeyTmp == 0)
{
KeyBounce ++;
if(KeyBounce >= 1000)
{
TmpVal++;
KeyBounce = 0;
DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_BEEP_PIN);
}
if(TmpVal > 9)TmpVal = 0;
}
else DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_BEEP_PIN);
// Disp_Data(TmpVal);
Disp_Dataa(TmpVal);
学习AD采样的配置,实现数码管显示采样温度
用DS18B20数字温度芯片实现温度报警器:
ADC采集代码:、
void ADC12_0_INST_IRQHandler(void)
{
switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST)) {
case DL_ADC12_IIDX_MEM0_RESULT_LOADED:
Uint_ADC = true;
break;
default:
break;
}
}
读取NTC温度值
ADCture = ReadTemprature();
ADC_TemDEAL = NTC_AD_Search(ADCture) ;
keyDeads();
/*读取DS18B20数据*/
/*界面显示函数*/
if(DisplayMode == 1)
Disp_Data_work4(High_Temperature);
else if(DisplayMode == 2)
Disp_Data_work5(DS18B20_TEMP);
else
Disp_Data_work3(ADC_TemDEAL,DS18B20_TEMP);
}
报警代码:
ADCture = ReadTemprature();
ADC_TemDEAL = NTC_AD_Search(ADCture) ;
if((ADC_TemDEAL >= High_Temperature) && (Cancel_OUT == true ))
{
DL_GPIO_clearPins(Blinky_PORT, GPIO_LEDS_USER_Twinkle_LED_PIN); //PA0= 0;turn on led
DL_GPIO_clearPins(Blinky_PORT, GPIO_BEEP_OUT_01_PIN); //PA16= 0;turn on BEEP
}
if((ADC_TemDEAL < High_Temperature)) //当温度低于设定温度时后,再次超过设定值时,才允许报警
{
Cancel_OUT = true ;
}
/*读取按键功能*/
KeysValue = DL_GPIO_readPins(Blinky_PORT,GPIO_LEDS_USER_KEY_01_PIN); // Read the state of key input
if(KeysValue == 0)
{
DL_GPIO_setPins(Blinky_PORT, GPIO_LEDS_USER_Twinkle_LED_PIN); //PA0= 0;turn on led
DL_GPIO_setPins(Blinky_PORT, GPIO_BEEP_OUT_01_PIN); //PA0= 0;turn on beep
Cancel_OUT = false ;
}
Disp_Data_work2(ADC_TemDEAL,ADCture);
}