张华伟-基于STM32F4ARM单片机精确温控的设计与实现(8)
附录
RG_PID_Calc();
if(RG_PID.FDUk>=1) { } else {
RG_stop();
if(RG_PID.FDUk>=999) { }
RG_PID.FDUk=999;
RG_PID.FDUk=1000-RG_PID.FDUk; RG_hot(RG_PID.FDUk);
} }
//AD转换程序 #include \#include
#define PUTCHAR_PROTOTYPE intfputc(intch, FILE *f) #define PRINT_ON_LCD
#define ADC1_DR_ADDRESS ((uint32_t)0x4001204C) //ADC1 DR寄存器基地址
ADCConvertedValue的低12位有效 __IO uint16_t ADC1ConvertedValue = 0; __IO uint32_t ADC1ConvertedVoltage = 0;
31
附录
void ADC1_CH0_DMA_Config(void) //选择ADC1的通道0 映射在DMA2的数据流0 ; {
ADC_InitTypeDefADC_InitStructure;
ADC_CommonInitTypeDefADC_CommonInitStructure; DMA_InitTypeDefDMA_InitStructure; GPIO_InitTypeDefGPIO_InitStructure; /* Enable ADC1, DMA2 and GPIO clocks ****************************************/
// RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOC, ENABLE);
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); /* Configure PC.03 (ADC Channel13) as analog input -------------------------*/ // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; GPIO_Init(GPIOA, &GPIO_InitStructure); // GPIO_Init(GPIOC, &GPIO_InitStructure);
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE); //ADC1复位 RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);
/* DMA2 Stream0 channel0 configuration **************************************/ DMA_InitStructure.DMA_Channel = DMA_Channel_0;
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC1ConvertedValue; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
DMA_InitStructure.DMA_BufferSize = 1; //DMA_InitStructure.DMA_BufferSize =
32
附录
CH_NUM;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; //DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(DMA2_Stream0, &DMA_InitStructure); DMA_Cmd(DMA2_Stream0, ENABLE); /* ADC Common Init
**********************************************************/ ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4; // 不要超过36M ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA失能
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
ADC_CommonInit(&ADC_CommonInitStructure);
/* ADC1
Init****************************************************************/ ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //连续转换开启; ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; //启动转换方式
33
附录
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //数据对齐方式 ADC_InitStructure.ADC_NbrOfConversion = 1; ADC_Init(ADC1, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles); /* Enable DMA request after last transfer (Single-ADC mode) */ ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE); /* Enable ADC1 DMA */ ADC_DMACmd(ADC1, ENABLE); /* Enable ADC1 */ ADC_Cmd(ADC1, ENABLE);
/* Start ADC1 Software Conversion */ ADC_SoftwareStartConv(ADC1); }
unsigned intGetADCValue(void) {
//设置指定ADC的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles); }
//PT100温度值转换 void temperature_pt100(void) {
unsigned int nm ;
float tem_pt100,tem_pt,turn_v,turn_v1,turn_v2 = 0; turn_v1 = GetADCValue();
for(nm=0;nm < 1000;nm++) //限幅滤波 ADC_SoftwareStartConv(ADC1);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束 return ADC_GetConversionValue(ADC1);
//使能指定的ADC1的软件转换启动功能
34
附录
{ }
ADC1ConvertedValue = turn_v2 / 1000 ; tem_pt = ADC1ConvertedValue ;
turn_v = GetADCValue(); // AD 转换PT100的电阻值 if( ((turn_v - turn_v1 ) < 2) || (turn_v1 - turn_v )< 2) //加热时 ; { } else { }
turn_v2 = turn_v2 + turn_v;
turn_v = turn_v ; turn_v = turn_v1;
// tem_pt=tem_pt/65.536; //1℃相差0.373847mV; 1mV相差2.674891℃
tem_pt = tem_pt / 4.096 ;
// tem_pt=tem_pt*5; //mV }
tem_pt=tem_pt*3.3;
tem_pt=tem_pt/63.4; //放大前电位差(mv) tem_pt=89.189189-tem_pt; //PT100的压降 tem_pt=(5600*tem_pt)/(3300-tem_pt); //PT100阻值 tem_pt100=R2T(tem_pt); tem_pt100=tem_pt100+0.7; tem_real = tem_pt100 ;
35
…… 此处隐藏:2682字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [实用模板]第八章:法国“新浪潮”与“左岸派”
- [实用模板]2021年北京上半年临床医学检验技师生物
- [实用模板]SAP GUI 7.10客户端安装配置文档
- [实用模板]2001年临床执业医师资格考试综合笔试试
- [实用模板]36机场工作实用英语词汇总结
- [实用模板](一)社会保险稽核通知书
- [实用模板]安全教育主题班会材料
- [实用模板]濉溪县春季呼吸道传染病防控应急演练方
- [实用模板]长沙房地产市场周报(1.30-2.3)
- [实用模板]六年级数学上册典中点 - 图文
- [实用模板]C程序设计(红皮书)习题官方参考答案
- [实用模板]中国证监会第一届创业板发行审核委员会
- [实用模板]桥梁工程复习题
- [实用模板]2011学而思数学及答案
- [实用模板]初中病句修改专项练习
- [实用模板]监理学习知识1 - 图文
- [实用模板]小机灵杯四年级试题
- [实用模板]国贸专业毕业论文模板
- [实用模板]教育学概论考试练习题-判断题4
- [实用模板]2015届高考英语一轮复习精品资料(译林
- 00Nkmhe_市场营销学工商管理_电子商务_
- 事业单位考试法律常识
- 诚信教育实施方案
- 吉大小天鹅食品安全检测箱方案(高中低
- 房地产销售培训资料
- 高一地理必修1复习提纲
- 新概念英语第二册lesson_1_练习题
- 证券公司内部培训资料
- 小学英语时间介词专项练习
- 新世纪英语专业综合教程(第二版)第1册U
- 【新课标】浙教版最新2018年八年级数学
- 工程建设管理纲要
- 外研版 必修一Module 4 A Social Surve
- Adobe认证考试 AE复习资料
- 基于H.264AVC与AVS标准的帧内预测技术
- 《食品检验机构资质认定管理办法》(质
- ABB变频器培训课件
- (完整版)小学说明文阅读练习题及答案
- 深思洛克(SenseLock) 深思IV,深思4,深
- 弟子规全文带拼音




