单片机与PLC通讯_第1页
单片机与PLC通讯_第2页
单片机与PLC通讯_第3页
单片机与PLC通讯_第4页
单片机与PLC通讯_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机C8051F206在多路数据采集中的应用摘 要: 本文介绍以CYGNAL公司C8051F206单片机构成的多通道AI采集系统,这种数据采集系统具有结构简单,成本低廉,性能可靠等特点,有一定的使用价值。关键词 单片机 数据采集 在工业自动化控制中,经常要进行现场数据的采集,实现工艺参数的调节和控制,出现了许多带各种功能的数据采集模块、系统,但很多产品成本较高,本文介绍用单片机C8051F206构成的多通道模拟信号数据采集系统,通过扩展的RS-485总线,实现现场数据采集与PLC通讯,具有结构简单,造价低,性能可靠等特点,本文介绍的单片机多通道模拟信号采集板以成功地应用于几套DCS系统中,取得了较好的效果。C8051F206是CYGNAL公司的集成产品,是一种高集成度的混合信号系统MCU 芯片,它是真正的单片机。它包含一个真正12 位多通道ADC,有一个与8051 兼容的微控制器内核,有8k 字节的FLASH 存储器,还有用硬件实现的UART 和SPI 串行接口,此系列产品的特点是有32 个通用的I/ O 引脚,其中有一些能用于指定的数字外设接口,任意一个I/O 引脚均可配置成为模拟输入至ADC。片内还有VDD 监视器硬件看门狗定时器WDT 和时钟振荡器。片内FLASH 存储器可在系统多次重复编程且能用于非易失性数据的存储,集成外设中可分别关断单个或所有外设,节省功耗,有256 字节的SRAM 。在F226 中还附加有1024 字节的RAM,片内JTAG 调试功能,允许使用安装在最终应用系统上的, 进行非侵入方式不使用片内资源全速在系统调试。系统调试支持存储器寄存器的察看和修改、设置断点监视点单步及运行和停机命令。在用JTAG 口调试时所有的模拟和数字量外设均可全功能运行。可在工业温度范围-45- +85 内以2.7V-3.6V 电压工作封装为48 脚TQFP ,端口I/ O 都容许5V 输入信号电压。1、C8051F206的功能、特点l CIP-51TM 微控制器内核l 与8051 完全兼容l 指令处理能力提高l 有一个可选的1024 字节的XRAMl 256 字节的数据RAM包含8k+128 字节的FLASHl 有片内JTAG 和调试逻辑,实现系统在线调试任意一个引脚都可用软件配置成模拟输入至ADCl 带有一个可编程增益放大器PGAl 有一个全双工UART 和串行外设接口l 低电源电压 2.7V3.6V ,电流10mA25MH2C8051F2xx 系列器件的引脚排列同8051系列单片机兼容,C8051F206有P1、P2、P3口,每一根口线都可以通过软件设置成AI输入,TDI、TDO、TMS、TCK分别JTAG编程口相连,可以实现在线调试和程序下载。下面是C8051F226的TQFP封装的引脚排列图(如图1) 图2 C8051F2XX 引脚排列图3 单片机C8051F206在多路数据采集系统硬件组成运用C8051F206单片机制作AI采集系统,硬件十分简单,就是一片C8051F206单片机加上电源、RS-485总线的扩展及告完成。信号采集接口与传感器接线见图2,AI口连接方便,可以选择不同的输入方式,对于二线制仪表,传感器直接接入1、2脚,24V电源经滤波处理给传感器供电,传感器020mA的电流信号从2脚竟检波、嵌位、滤波等信号处理进入单片机的AI端口,对于四线制传感器,传感器电源由单独的开关电源供给,传感器的输出信号接入2、3脚。在我们开发的数据采集系统中,用C8051F206的32个输入定义为模拟输入,单片机巡回采集32个通道并进行数据处理,用此采集板和PLC通讯完成信号的传输。参见图3。 图2 AI传感器连接 图3 单片机数据采集与通讯原理图31 软件设计 下面为32通道的AI采集并通过RS-485与PLC通讯,进行参数传递的部分C程序,包括系统主程序、串行口通讯处理程序、ADC初始化等部分。主要功能是堆32个AI通道进行采集,并进行数值处理(8次平均)后,通过RS-485总线送给PLC。/-/ 主程序/-void main (void) unsigned char i; unsigned char j; unsigned char k; EA=0; WDTCN = 0xde; / 禁止看门狗定时器 WDTCN = 0xad; SYSCLK_Init (); / 初始化震荡器 PORT_Init (); / 初始化数据交叉开关和通用IO UART0_Init (); / 初始化UART0 ADC0_Init (); / 初始化ADC / Timer3_Init (SYSCLK/SAMPLE_RATE); / 初始化Timer3作为ADC0的采样率 / Timer2_Init (SYSCLK / 12 / 1000); / 初始化Timer2,1mS产生中断 Timer2_Init (922); ADCEN = 1; / 允许 ADC/ WDTCN = 0xa5; /启动看门狗定时器/ WDTCN = 0xff;/锁定看门狗定时器 EA = 1; / 允许所有中断 / /-/ 主循环程序/-while (1) / WDTCN = 0xa5;/重置看门狗定时器 /* if (ad_count 7) / 如果AD转换8次 ad_count = 0; / AD转换次数计数器清零 for (i=0;i3); /AD转换结果除以“8”resulti=0; /AD结果的累加和清零 */-/ 串行口处理程序if (inbufful ) /收到一帧信息,而且本机站地址?/收到一帧信息处理inbufful=0; /收到一帧信息标志复位puchmsg=inlast;crc (puchmsg,3);if(*(inlast+3)=crclo & *(inlast+4)=crchi) /CRC正确? /CRC正确后的处理 if ( inbuf0=STATION_NUMER) /收到一帧信息,而且本机站地址?outbuf0=01; /本机地址送发送缓冲区第一字节outbuf1=inbuf1;/收到的命令送发送缓冲区第一字节outbuf2=inbuf2;/收到的组号送发送缓冲区第一字节j=(inbuf2&0x03)-1)3; /取得本“组”号for (i=0;i8; outbufk=result_pjj+; /outlast=outbuf; /发送缓冲区起始地址发送指针 puchmsg=outlast; crc(puchmsg,19); *(outlast+19)=crclo; *(outlast+20)=crchi; sendtx(21); /CRC正确处理结束 /收到一帧信息处理结束 /循环扫描程序结束 /主程序结束/-/ UART发送数据启动子程序/-void sendtx (unsigned char chd) if(t_empty) txen=1; /占总线 txchsh=chd; /本次发送的长度 fschsh=0; /发送指针清零 t_empty=0; /置发送缓冲器“不空”标志 rs485_timer_send1=1; /启动延迟定时器/ TI=1;-/ 系统时钟初始化void SYSCLK_Init (void) int i,j; / 延时计数器 OSCXCN = 0x67; / 启动外部震荡器(11.0592mHz) for (j=0; j 50; j+) for (i=0; i 1ms) while (!(OSCXCN & 0x80) ; / 等待振荡器稳定 OSCICN = 0x88; / 选择外部振荡器作为系统时钟源并允许丢失 for (j=0; j 100; j+) for (i=0; i 256; i+) ; / 延时10mS以上 /时钟监测器/-/-/ UART0 初始化/-/ 配置 UART,使用定时器1为波特率发生器和 8-N-1./void UART0_Init (void)/ SCON = 0x50; / SCON: 模式1, 8位UART, 使能RX/ TMOD = 0x20; / TMOD: 定时器1, 模式2, 8位重装 SCON = 0xd0; TMOD = 0x20; TH1 = -(SYSCLK/BAUDRATE/16); / 按波特率设置定时器1 重装值 TR1 = 1; / 启动定时器1 CKCON |= 0x10; / 定时器1 使用SYSCLK作为时基 PCON |= 0x80; / SMOD = 1,模式1 IE |= 0x10; inlast=inbuf; /接收指针指向接收缓冲器 inbufful=0; /复位“接收一帧数据”标志 txen =0; /RS485释放总线,准备接收 TI = 1; / 指示TX准备好 rs485_timer_send1=0; rs485_timer_send2=0; rs485_timer_receive1=10; rs485_timer_receive2=0;/-/ ADC0初始化/-/ 配置ADC0,使用定时器3溢出作为转换启动, 转换结束产生中断,使用左对齐输出模式/ 使能ADC转换结束中断。禁止ADC。/ 注意:使能低功耗跟踪模式,保证当改变通道时的跟踪次数最少。/void ADC0_Init (void) ADC0CN = 0x8d; / 激活ADC,联系跟踪模式,当定时器溢出启动,数据左对齐 REF0CN = 0x00; / 选择外部基准电压(“03”选择VDD为基准电压) ADC0CF = 0x62; / 转换时钟为8个系统时钟,增益为“4” for (channel=0;channel24;channel+) resultchannel=0; /清零AD转换结果缓冲器 for (channel=0;channel24;channel+) result_pjchannel=0; /清零AD结果平均值缓冲器 channel=0; AMX0SL= ad_chann

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论