




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于ARM嵌入式温度控制原型系统的设计1温度控制应用的总体介绍一般的计算机的过程控制系统的主要流程是周期性地采集A/D中的模拟量,然后比较给定量和采样值,把差值通过一些控制算法(PID控制)进行数据处理,处理结果经过D/A变换将数字信号转换成模拟信号,然后输出到执行机构,从而对被控对象进行控制。针对计算机控制系统的特点,本文设计的温度闭环控制系统如下图1-1所示:图1-1 温度闭环控制系统结构其主要流程是在手动状态下对AD通道中的模拟量周期采集,采样值经过socket上传服务器,同时服务器等待发控制字,然后系统接收到控制字,并通过DA转换进而在标准信号控制相应设备输出;在自动状态下对AD通道的
2、模拟量周期采集,把给定值和采样值进行比较,对差值进行控制算法处理,然后得到计算结果,该结果通过DA转换成相应的模拟量,然后由标准信号输出,根据上述功能所要求来编写应用程序。本设计中没有服务器端程序的设计,客户端的应用程序主要有main(主程序)、AD数据采集程序、DA数据接收程序、数据读取程序,温度控制报警和灯亮程序等几个部分。、2 主要的应用程序实现主程序函数主要是起到一个创建子程序并监视子程序运行情况的作用,如果子进程不能运行,则该进程重新创建需要重新创建;如果要安装信号,主进程在退出时应该向子进程传递发出一个终止信号,以处理一些收尾的工作。主程序关键函数:void main() tmp_
3、data = ds18b20_fun();if(tmp_data50C结束NY恢复正常图1-2 主程序流程图2.1 DS18B20驱动程序设计本文设计选用的是主芯片为Samsung公司的S3C2440的mini2440开发板为硬件平台,软件平台是Linux的最新内核Linux2.6.29。通过mini2440的扩展接口引出GPIO口(GPBl)为数据线DQ。由于DS18B20为单总线器件,所以它对操作的时序比较严格。正确地编写复位程序、位写程序和位读程序,对于DS18B20驱动最终能否正常运行并且得到实时的温度值,起到很关键的作用。2.2 DS18B20读写函数unsigned short d
4、s18b20_fun(void)int fd;int ret;float temp;unsigned short data;fd = open(/dev/TX2440-ds18b20, 0);if (fd 0)perror(open device ds18b20);exit(1);ret = read(fd,&data,4);if(ret0)printf(read ds18b20 errorn);return data;close(fd); if(strncmp(buf,$FLAG1$,7)=0)tmp_data = ds18b20_fun();tmp_temp = tmp_data * 0.
5、0625;tmp_data = tmp_temp * 10 + 0.5;if (tmp_data 1000)printf( %2d.%d n, tmp_data/10, tmp_data%10);elseprintf( 85.0 n); 2.3 复位程序一般我们在对DS18B20进行读写之前时,首先应该对其复位程序的初始化,从而检测DS18B20是否存在。复位时,我们一般要求通过MCU把数据线下拉480960 s,然后再释放数据线,大约等待60 s左右。如果MCU接收到DS18B20发出的数据显示是低电平,那么表示复位成功。复位函数程序如下#defi
6、ne DQ S3C2440_GPB1 #define DQ_INPUT S3C2440_GPB1_INP#define DQ_OUTPUT S3C2440_GPB1_OUTPUTvoid reset() do S3C2440_gpio_cfgpin(DQ,DQ_OUTPUT); S3C2440_gpio_setpin(DQ,1); udelay(1); S3C2440_gpio_setpin(DQ,0) ; udelay(600); S3C2440_gpio_setpin(DQ,1); udelay(60);While(S3C2440_gpio_getpin(DQ)!=0);While(S3C
7、2440_gpio_getpin(DQ)=0);2.4写1字节子程序 发送ROM和RAM指令,需向DS18B20写入数据。写1字节子程序如下:void writebyte(uchar comd) uchar i ; S3C2440_gpio_cfgpin(DQ,DQ_OUTPUT)for(i=o;i1;2.5读N字节子程序 如果温度转换完毕,则需要进入DS18B20的RAM中读取第0和第1字节的二进制数据。读1字节的子程序如下:uchar readbyte(void) uchar i ,temp=0; for(i=0;i1; S3C2440_gpio_cfgpin(DQ,DQ_OUTPUT);
8、S3C2440_gpio_setpin(DQ,0);udelay(1);S3C2440_gpio_setpin(DQ,1);S3C2440_gpio_cfgpin(DQ,DQ_INPUT);udelay(10);if(S3C2440_gpio_getpin(DQ) temp=(temp0x80);udelay(65);S3C2440_gpio_cfgpin(DQ,DQ_OUTPUT);S3C2440_gpio_setpin(DQ,1);return(temp);读取N字节的子程序如下:void readnbyte(uchar N,Uchar *temp) uchar i; for(i=0;iN
9、;i+) *temp=readbyte(); temp+; 本文采用模块加载的方法来调试DS18B20的驱动程序2.6 A/D数据采集程序功能与实现.一般在工业生产中不需要很高的采集频率,当通过A/D程序采集数据时,采集通道一般设置为每隔1秒钟采集一次,然后按照接收模式来确定采用手动或者自动模式,并把采集到的数据写入或D/A共享内存或者 A/D共享内存中。如果通道无法采集时,一般程序会通过调用非阻塞的:eleet()函数来解决这个问题,这样就避免了浪费系统资源和系统阻塞的问题。A/D程序流程如下图1-3所示【15】。A/D控制算法初始化共享内存读取A/D通道值读socket共享内存存模式转化写
10、D/A共享内存写A/D共享内存手动自动图1-3 A/D程序流程图函数关键部分实现如下:if(fd=open(”/dev/ADS7842”,O_WRONLY)= = -l)Perror(“open ADC error!n”):exit(l);while(l)fs_sel=seleet(fd+1,NULL,&fs-Write,NULL,&tv_timeout):if(fs_sel)/读AD通道值result=write(fd,&CHA, sizeof(unsigned int);if(result0)Printf( “WriteADChannelError!n”);Retum -1; value=
11、(float)result)/4096)*5.0;Prinif(“CH%d=%fVn”,CHA,value);Read_share_SOCKET():/读soeket共享内存GetMode(szBuf_SOCKET,mode);if(*mode)=“AA”)AD_data=gcvt(value,4,AD_data);write_share_AD(CHA,AD_data);写AD共享内存 elseif(*mode)=“MM”)Control_ALG(res,value);/控制算法 Write_Share_DA(CHA,res);写DA共享内存elsePrintf(“Find mode char
12、 error!n”);Continue;2.7 D/A数据采集程序功能与实现在确定自动或者手动模式后,D/A数据采集程序会决定读取数据包的路径:DA共享内存或者socket共享内存,D/A的程序流程图如下图1-4所示【15】。D/A初始化共享内存读socket共享内存读D/A共享内存读socket共享内存模式转换自动手动图1-4 D/A程序流程图函数关键部分实现如下:while(1)Read_Share_SOCKET():/读soeket共享内存GetMode(szBuf_SOCKET,mode);if(*mode)=“AA”)Read_share_DA();/AUTO:读DA共享内存GetD
13、ata(szBuf_DA,RecvPack);DA_data=atof(ReevPack); elseif(*mode)=”MM” )/MANUAL:读soeket共享内存GetData(szBuf_SOCKET,RecvPack):/取DA数据包DA_data=atof(RecvPack);elsecontinue;if(fd=oPen(“ /dev/DAC712”,O_WRONLY)= =-l)Perror(“open DAC error”);exit(1):rev=write(fd,&DA_data,sizeof(DA_data);close(dafd);2.8 温度控制报警主函数实现i
14、nt main(int argc, char *argv)int freq = 1000 ; int tmp_data ; float tmp_temp ; if(tmp_data50) tmp_data = ds18b20_fun(); tmp_temp = tmp_data * 0.0625; tmp_data = tmp_temp * 10 + 0.5; open_buzzer(); printf( nBUZZER PWM Control n ); printf( Press ESC key to Exit this programnn ); printf( %2d
15、.%d n, tmp_data/10, tmp_data%10); else printf( 85.0 n);通过linux交叉编译程序 ,并成功没错误 如下图1-5界面所示:图1-5交叉编译界面即得到可执行文件然后挂载到开发板上,执行命令# ./pwm蜂鸣器会响2.9 温度灯控主要函数实现int main(void) int tmp_data ; float tmp_temp ; tmp_data = ds18b20_fun(); tmp_temp = tmp_data * 0.0625; tmp_data = tmp_temp * 10 + 0.5; if(tmp_data50) :system(kill -s STOP pidof led-player); m_fd = :open(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JG/T 351-2012纤维增强复合材料筋
- JG/T 34-1999土方机械维修工具第1部分:通用维修调整工具
- JG/T 326-2011平开玻璃门用五金件
- JG/T 3044-1998住宅厨房排风道
- JG 170-2005生物安全柜
- GB/T 42233-2022快速检测术语与定义
- GB/T 45692-2025建筑构筑物清洁服务通则
- DZ/T 0276.11-2015岩石物理力学性质试验规程第11部分:岩石溶蚀试验
- DZ/T 0196.9-1997测井仪通用技术条件仪器指标分级
- DZ 67-1988天然冰洲石技术要求
- 2025年反恐与公共安全管理职业资格考试试卷及答案
- 2025高考语文押题作文10篇
- 福建卷-2025届高考化学全真模拟卷
- 2022隧道顺光照明技术指南
- 2025年广东省广州市增城区中考一模化学试题(含答案)
- 2025高考英语作文考前背诵(应用文+读后续写)
- 河北开放大学2025年《西方行政制度》形成性考核3答案
- 人教版九年级语文中考真题汇编 《水浒传》(2022-2024)全国中考语文真题
- 2025年铁路列车员(初级)职业技能鉴定参考试题库(含答案)
- 浙江省杭州市2025届高三下学期二模试题 数学 含答案
- 2025年初中语文名著阅读《林海雪原》故事梗概
评论
0/150
提交评论