当前位置:首页 > stc单片机
  • STC单片机 IAP(EEPROM)的使用

    STC89C51、52内部都自带有2K字节的EEPROM,54、55和58都自带有16K字节的EEPROM,STC单片机是利用IAP技术实现的EEPROM,内部Flash擦写次数可达100,000 次以上,先来介绍下ISP与IAP的区别和特点。知识点:ISP与IAP介绍 ISP:In System Programable 是指在系统编程,通俗的讲,就是片子已经焊板子上,不用取下,就可以简单而方便地对其进行编程。比如我们通过电脑给STC单片机下载程序,或给AT89S51单片机下载程序,这就是利用了ISP技术。IAP:In Application Programable 是指在应用编程,就是片子提供一系列的机制(硬件/软件上的)当片子在运行程序的时候可以提供一种改变flash数据的方法。通俗点讲,也就是说程序自己可以往程序存储器里写数据或修改程序。这种方式的典型应用就是用一小段代码来实现程序的下载,实际上单片机的ISP功能就是通过IAP技术来实现的,即片子在出厂前就已经有一段小的boot程序在里面,片子上电后,开始运行这段程序,当检测到上位机有下载要求时,便和上位机通信,然后下载数据到存储区。大家要注意千万不要尝试去擦除这段ISP引导程序,否则恐怕以后再也下载不了程序了。STC单片机内部有几个专门的特殊功能寄存器负责管理ISP/IAP功能的,见表1。表1 ISP/IAP相关寄存器列表名称地址功能描述D7D6D5D4D3D2D1D0复位值ISP_DATAE2hFlash数据寄存器1111 1111ISP_ADDRHE3hFlash高字节地址寄存器0000 0000ISP_ADDRLE4hFlash低字节地址寄存器0000 0000ISP_CMDE5hFlash命令模式寄存器----------MS2MS1MS0xxxx x000ISP_TRIGE6hFlash命令触发寄存器xxxx xxxxISP_CONTRE7hISP/IAP 控制寄存器ISPENSWBSSWRST----WT2WT1WT0000x x000ISP_DATA:ISP/IAP操作时的数据寄存器。ISP/IAP从Flash读出的数据放在此处,向Flash写入的数据也需放在此处。ISP_ADDRH:ISP/IAP操作时的地址寄存器高八位。ISP_ADDRL:ISP/IAP操作时的地址寄存器低八位。ISP_CMD:ISP/IAP操作时的命令模式寄存器,须命令触发寄存器触发方可生效。命令模式如表2所示。表2 ISP_CMD寄存器模式设置D7D6D5D4D3D2D1D0模式选择保留命令选择----------000待机模式,无ISP操作----------001对用户的应用程序flash区及数据flash区字节读----------010对用户的应用程序flash区及数据flash区字节编程----------011对用户的应用程序flash区及数据flash区扇区擦除程序在系统ISP程序区时可以对用户应用程序区/数据Flash区(EEPROM)进行字节读/字节编程/扇区擦除;程序在用户应用程序区时,仅可以对数据Flash区(EEPROM)进行字节读/字节编程/扇区擦除。STC89C51RC/RD+系列单片机出厂时已经固化有ISP引导码,并设置为上电复位进入ISP程序区,并且出厂时就已完全加密。ISP_TRIG:ISP/IAP操作时的命令触发寄存器。在ISPEN(ISP_CONTR.7) =1时,对ISP_TRIG 先写入46h,再写入B9h,ISP/IAP命令才会生效。STC89C52RC,STC89LE52RC单片机内部可用Data Flash(EEPROM)的地址如表3所示,其它型号单片机请查阅相关资料。表3 STC89C52RC、STC89LE52RC单片机内部EEPROM地址表第一扇区第二扇区第三扇区第四扇区起始地址结束地址起始地址结束地址起始地址结束地址起始地址结束地址2000H21FFH2200H23FFH2400H25FFH2600H27FFH第五扇区第六扇区第七扇区第八扇区起始地址结束地址起始地址结束地址起始地址结束地址起始地址结束地址2800H29FFH2A00H2BFFH2C00H2DFFH2E00H2FFFH每个扇区为512字节,建议大家在写程序时,将同一次修改的数据放在同一个扇区,方便修改,因为在执行擦除命令时,一次最少要擦除一个扇区的数据(需要提供扇区的首地址),每次在更新数据前都必须要擦除原数据方可重新写入新数据,不能直接在原来数据基础上更新内容。 注意:上面的是数据存储区的地址,程序存储区地址是从0~1FFF,共8K,程序区只能是ISP编程。以下是自己写的这部分功能代码,因为风格问题,不太喜欢原著代码,感觉自己的还严谨一点。/****************************************************************************//* IAP驱动 *//****************************************************************************//************************************************************************************************************************//*ISP/IAP相关寄存器列表*//*名称地址功能描述D7D6D5D4D3D2D1D0复位值*//*ISP_DATAE2hFlash数据寄存器1111 1111*//*ISP_ADDRHE3hFlash高字节地址寄存器0000 0000*//*ISP_ADDRLE4hFlash低字节地址寄存器0000 0000*//*ISP_CMDE5hFlash命令模式寄存器----------MS2MS1MS0xxxx x000*//*ISP_TRIGE6hFlash命令触发寄存器xxxx xxxx*//*ISP_CONTRE7hISP/IAP 控制寄存器ISPENSWBSSWRST----WT2WT1WT0000x x000*//************************************************************************************************************************//************************************************************************************//*ISP_CMD寄存器模式设置*//* D7D6D5D4D3D2D1D0模式选择*//*保留命令选择*//* ----------000待机模式,无ISP操作*//* ----------001对用户的应用程序flash区及数据flash区字节读*//* ----------010对用户的应用程序flash区及数据flash区字节编程*//* ----------011对用户的应用程序flash区及数据flash区扇区擦除*//************************************************************************************//*在ISPEN(ISP_CONTR.7) =1时,对ISP_TRIG 先写入46h,再写入B9h,ISP/IAP命令才会生效。*//* 定义常量 */#define ERROR 0#define OK 1/* 定义Flash 操作等待时间 *///#define WAIT_TIME 0x00 //mcu clock 40mhz//#define WAIT_TIME 0x01 //mcu clock 20mhz//#define WAIT_TIME 0x02 //mcu clock 10mhz#define WAIT_TIME 0x03 //mcu clock 5mhzsfr ISP_DATA= 0xe2; // Flash数据寄存器sfr ISP_ADDRH= 0xe3;// Flash高字节地址寄存器sfr ISP_ADDRL= 0xe4;// Flash低字节地址寄存器sfr ISP_CMD= 0xe5;// Flash命令模式寄存器sfr ISP_TRIG= 0xe6;// Flash命令触发寄存器sfr ISP_CONTR= 0xe7;// ISP/IAP 控制寄存器#define CMD_READ0x01// 定义IAP的读字节操作#define CMD_PRGM0x02// 定义IAP的写字节操作#define CMD_ERASE0x03// 定义IAP的擦除扇区操作/*********************** 打开 ISP,IAP 功能 ***********************/static void ISPIAPEnable(void){  //EA= 0; // 关中断  ISP_CONTR= ISP_CONTR & 0x18; // 0001,1000  ISP_CONTR= ISP_CONTR | WAIT_TIME;// 写入硬件延时  ISP_CONTR= ISP_CONTR | 0x80; // ISPEN = 1}/*********************** 关闭 ISP,IAP 功能 ***********************/static void ISPIAPDisable(void){  ISP_CONTR= ISP_CONTR & 0x7f;// ISPEN = 0  ISP_TRIG= 0x00;  //EA = 1; // 开中断}/************************* 触发Flash操作 *************************/static ActiveOperate(void){  bit eacpy;  eacpy = EA;  EA = 0;  ISPIAPEnable();  ISP_TRIG = 0x46; // 触发ISP_IAP命令字节1  ISP_TRIG = 0xb9; // 触发ISP_IAP命令字节2  {UINT8 i=2; while(i--);}  ISPIAPDisable();  EA = eacpy;}/**************************** 读一字节 ****************************/static UINT8 IAPReadByte(const UINT16 uiAddr){  ISP_ADDRH= (UINT8)(uiAddr >> 8);// 写地址  ISP_ADDRL= (UINT8)(uiAddr&0xFF);  ISP_CMD = ISP_CMD & 0xf8;// 清低三位  ISP_CMD = ISP_CMD | CMD_READ;// 写入读命令  ActiveOperate();// 触发执行  return (ISP_DATA); // 返回读到的数据}/**************************** 写一字节 ****************************/static void IAPWriteByte(const UINT16 uiAddr, const UINT8 ucData){  ISP_ADDRH= (UINT8)(uiAddr >> 8);// 写地址  ISP_ADDRL= (UINT8)(uiAddr&0xFF);  ISP_CMD = ISP_CMD & 0xf8;// 清低三位  ISP_CMD = ISP_CMD | CMD_PRGM;// 写入写命令  ISP_DATA= ucData; // 写入数据准备  ActiveOperate();// 触发执行}/**************************** 擦除一扇区 ****************************/static void IAPEarseSection(const UINT16 uiAddr){  UINT16uiSecAddr;  uiSecAddr= (uiAddr & 0xfe00);// 取扇区地址  ISP_ADDRH= (UINT8)(uiSecAddr >> 8);// 写地址  ISP_ADDRL= 0x00;  ISP_CMD= ISP_CMD & 0xf8; // 清低三位  ISP_CMD= ISP_CMD | CMD_ERASE;// 写入擦除命令  ActiveOperate();// 触发执行}------------------------------------------------------------------------------------------------------------------------#include//到宏晶网站下载头文件或自己在现有的头文件上加上相应的寄存器定义即可。#include#define uchar unsigned char#define uint unsigned int/****************uart init***********/void UART_inti(void){AUXR=0x40;//定时器1速度是普通8051的12倍,不分频TMOD=0x20;//定时器1工作在方式2,用来产生波特率SCON=0x50;//串口工作在方式1,允许接收TL1=0xF7;//波特率为38400;FB为115200TH1=0xF7;PCON=0x00;//SMOD=0TR1=1; //产生波特率}void ISP_write

    时间:2019-01-08 关键词: eeprom iap stc单片机

  • STC单片机PWM的实现方法与原理参考实例

    /*==============================================================at12c2052所带的PWM功能演示,内部公用了一个定时器,当启动PWM时PCA定时器只工作在8位模式,匹配比较器也是按8位的。本程序演示了PWM启动的设置和调节。改用在tasking c51下面编译,并尝试了tasking 方便的在线汇编方式------- 晓奇 2006.01.12===============================================================*/#include "STC12C2052AD.h"/*#include*/#define uint unsigned int#define uchar unsigned charuint i;uchar upordn;/* 升降标志,1=上升 */voidinitall(void);_interrupt(1)voidtimers0(void);_interrupt (6)voidPCA_LVD(void);voidinitall(void){TMOD= 0x11;/* 0000 0001 T0作为16位计数器 */TH0 = 0xc0;/* 定时器0初始值装入 */TL0 = 0x00;ET0 = 1;//开中断IE |= 0x40;/* 使能PCA定时功能 */EA = 1;AUXR = 0x80;/* 1000 0000|||| ||++-保留|||| |+---低电压中断允许:0=禁止,1=允许,5V..3.7V,3V..2.4V以下|||| +----SPI中断允许位:0=禁止,1=允许|||+------ADC中断允许位:0=禁止,1=允许||+-------串口模式0时时钟设定:0=传统1/12, 1=1/2 2分频;|+--------定时器ct1时钟源设定:0=传统1/12,1=1:1不分频;+---------定时器ct0时钟源设定:0=传统1/12,1=1:1不分频;*/P1 = 0xff;P1M0 = 0x00;/* P1口用传统51准双向口模式 */P1M1 = 0x00;CMOD = 0x03;/* 内部时钟,Fosc/2, PCA计数溢出中断使能*//* 0000 0011 PCA 模式寄存器|||| |||+--ECF...PCA计数溢出中断使能:ECF=1时,使能寄存器CCON CF位的|||| ||| 中断。ECF=0时,禁止该功能。|||| |++---CPS1,CPS0 选择PCA 时钟源输入(PCA计数脉冲选择)|||| | 0 0 0,内部时钟,Fosc/12|||| | 0 1 1,内部时钟,Fosc/2|||| | 1 0 2,定时器0溢出,由于定时器0可以工作在1T方式,|||| | 所以可以达到计一个时钟就溢出, 频率反而|||| | 是最高的,可达到Fosc|||| | 1 1 3,ECI/P3.4脚的外部时钟输入(最大速率=Fosc/2)|+++-+-----保留+----------CIDL...计数器阵列空闲控制:CIDL=0时,空闲模式下PCA计数器继续工作。CIDL=1时,空闲模式下PCA计数器停止工作。*/CH = 0x00;/* PCA计数器初始值高8位 */CL = 0x00;/* PCA计数器初始值低8位 */CCAP0H = 0x00;/* 当出现捕获或比较时,它们用来保存16 位的计数值。当PCA 模块用在PWM 模式中时,它们用来控制输出的占空比。CCAP0H.CCAP0L分别为高低8位,组合使用*/CCAP0L = 0x00;CCAP1H = 0x00;/* 当出现捕获或比较时,它们用来保存16 位的计数值。当PCA 模块用在PWM 模式中时,它们用来控制输出的占空比。CCAP1H.CCAP1L分别为高低8位,组合使用*/CCAP1L = 0x00;CCAPM1 = 0x4c;/* PCA 比较/捕获模块寄存器1作为16位软件定时器。使能比较器,PCA计数值与模块的比较/捕获寄存器的值的匹配将置位CCON寄存器的中断标志位CCF1,使能CCF1中断 *//*0100 1100 功能说明|||| |||+---ECCF1.. 使能CCF1中断。使能寄存器CCON的比较/捕获标志CCF1,|||| ||| 用来产生中断。|||| ||+----PWM1... 脉宽调节模式。当PWMn=1时,使能CEXn脚用作脉宽调节输出。|||| |+-----TOG1... 翻转。当TOG1= 1时, PCA计数值与模块的比较/捕获寄存|||| | 器的值的匹配将使CEXn脚翻转。(CEX1/P3.5)|||| +------MAT1... 匹配。当=1时, PCA计数值与模块的比较/捕获寄存器的值|||| 的匹配将置位CCON寄存器的中断标志位CCF1。|||+--------CAPN1.. 负捕获。CAPN1= 1时使能下降沿捕获。||+---------CAPP1.. 正捕获。CAPP1= 1时使能上升沿捕获。|+----------ECOM1.. 使能比较器。ECOM1= 1时使能比较器功能。+-----------CCAPM1^7保留使用的机种基本模式组合:ECOM1 CAPP1 CAPN1 MAT1 TOG1 PWM1 ECCF1 模块功能0 0 0 0 0 0 0 无此操作X 1 0 0 0 0 X 16位捕获模式,由CEX1的上升沿触发X 0 1 0 0 0 X 16位捕获模式,由CEX1的下降沿触发X 1 1 0 0 0 X 16位捕获模式,由CEX1的跳变触发1 0 0 1 0 0 X 16位软件定时器1 0 0 1 1 0 X 16位高速输出1 0 0 0 0 1 0 8位PWM*/CCAPM0 = 0x42;/* PCA 比较/捕获模块寄存器0作为16位软件定时器。使能比较器,PCA计数值与模块的比较/捕获寄存器的值的匹配将置位CCON寄存器的中断标志位CCF0,使能CCF0中断 寄存器位功能同上*/CR = 1;//Start PCA Timer.TR0 = 1;//启动计时i = 0;upordn = 1;}/* ------------- 定时器0用来定时调节PWM的输出占空比 ------------- */_interrupt(1)voidtimers0(void){TL0 = 0x00;TH0 = 0xc0;CCAP0H = i>>8;/* CCAP0L不用赋值,他不参与工作 */if(upordn)/* 逐步加宽PWM、加快脉冲输出 */{if(++i==65535)/* 到头 */{upordn=0;/* 调头 */}}else/* 逐步减窄PWM、减慢脉冲输出 */{if(--i==0)/* 到头 */{upordn=1;/* 调头 */}}P1 = ~(i>>8);/* 高8位输出LED指示,作监视用 */}/* ------------ PCA 定时中断,负责清除溢出标志并赋初值 ------------- *//* 摇晃编程板可以看到P3.5连接的led闪亮频率的缓慢变化,虚线在变长变短 */_interrupt (6)voidPCA_LVD(void){CH = i>>8;CL = i&0xff;CF = 0;CCF0 = 0;// LedPCA ^= 1; /* 频率要求不高的时候这里可以插入用户代码 */}voidmain(void){initall();// 测试tasking c51的在线汇编功能#pragma asmmov r0,#0f0hv1: nopnopdjnz r0,v1nop#pragma endasm// 编译很顺利通过,不用作任何附加的设定while(1){};}

    时间:2018-12-04 关键词: pwm 脉宽调制 stc单片机

  • STC单片机掉电断电失电瞬间EEPROM数据保存处理办法

      由于客户在请人设计开发一设备,但是设备用户处总停电,造成设备及其周边耗材损耗严重,因此请我司在现有STC为主要芯片的基础上做掉电瞬间EEPROM里的20个参数保存,上电后通过读取EEPROM中的参数回到掉电的状态,基于此,荣致电子科技做了大量的工作,并选用了很多种方案:1、 通过1法拉大电容做掉电临时备份电池。2、 通过备份电池或者DS1302里的31个字节ram+电池方案。3、 通过MAX813L检测掉电,然后通过普通STC10某个引脚读取MAX813L的第五脚高低电平状态。4、 购买铁电芯片来不停的存储用户数据。基于以上4种方案,荣致电子科技做了大量的试验与验证工作,最后敲定方案3经济、安全、可靠,并且存储20个参数无任何问题,具体实施细节如下:一、割掉单片机单独供电VCC线路.二、外部进电源VCC接IN5819二极管后单独给单片机供电.三、VCC5V通过4.7K与2K电阻分压给MAX813L第四脚,高于1.25V即可。四、MAX813L第五脚连接至STC10单片机某个引脚,如:P2.0。五、通过软件来检测P2.0引脚的电平状态,如果为低,立刻关闭所有的外部输出,然后进行EEPROM的写操作,通过延时约100ms后即可很好的保存在掉电时的动态参数。通过各类验证,在断电几十次的情况下,所有的参数及执行程序未发生丢失及错误的情况,说明可用。具体图纸如下:我的PCB图纸:还可以借用MAX813L的复位等功能来实现。

    时间:2018-11-22 关键词: 数据保存 掉电断电 失电瞬间 eeprom stc单片机

  • STC单片机串口发送数据汇编程序

    本段程序是在STC官方程序的基础上精简而成,只保留了串口单向发送,使用串口助手可以接收到数据。本段代代码目的是为了调试的方便,单片机内部一些工作状态和数据可以通过串口发送出来,比如AD采集到的数据等,对调试程序会起到事半功倍的效果。以下为asm格式汇编代码:; --- 使用伟福6000编译,STC15W401AS 实测通过------------;-----定时器2用作串口1的波特率发生器-------;在Keil开发环境下请选择Intel的8058芯片型号进行编译;工作频率为11.0592MHz;-----------------------------------------AUXR EQU 08EH ;//辅助寄存器T2H DATA 0D6H ;//定时器2高8位T2L DATA 0D7H ;//定时器2低8位BUSY BIT 20H.0 ;//忙标志位;-----------------------------------------ORG 0000HLJMP MAINORG 0023HLJMP UART_ISR;//-----------------------------------------ORG 0100HMAIN:CLR ACLR BUSYCLR EAMOV SP,#3FH;//------------------------------- MOV SCON,#50H ;//8位可变波特率,无校验MOV T2L,#0D0H ;//设置波特率重装值(65536-18432000/4/115200)MOV T2H,#0FFH ; #FFD0对应波特率57600MOV AUXR,#14H ;//T2为1T模式, 并启动定时器2ORL AUXR,#01H ;//选择定时器2为串口1的波特率发生器SETB ES ;//使能串口中断SETB EA;//-------------------------------;发送串口测试数据,三次 MOV A,#0FHLCALL SENDDATAMOV A,#0BHLCALL SENDDATAMOV A,#0CHLCALL SENDDATASJMP $;UART 中断服务程序;----------------------------*/UART_ISR:PUSH ACCPUSH PSWJNB TI,ISR_EXIT ;//检测TI位CLR TI ;//清除TI位CLR BUSY ;//清忙标志ISR_EXIT:POP PSWPOP ACCRETI;SENDDATA:JB BUSY,$ ;//等待前面的数据发送完成SETB BUSYMOV SBUF,A ;//写数据到UART数据寄存器RET;//-----------------------------------------END

    时间:2018-11-16 关键词: 汇编程序 串口发送数据 stc单片机

  • STC单片机EEPROM读写

    //**************************************************************** // STC单片机EEPROM读写--最简洁的的拿来就用保证没错^_^简洁至上! //---------------------------------------------------------------- //--------------------------------//-------------------------------- //注意:以下为STC89系列的地址 //--------------------------------//-------------------------------- sfr isp_data = 0xe2;//ISP/IAP操作时的数据寄存器 sfr isp_addrh = 0xe3;//高地址 sfr isp_addrl = 0xe4;//低地址 sfr isp_cmd = 0xe5;//命令模式寄存器 sfr isp_trig = 0xe6;//命令触发寄存器 sfr isp_contr = 0xe7;//ISP/IAP控制寄存器 */ /* //--------------------------------//-------------------------------- //注意:以下为1T新STC系列的地址 //--------------------------------//-------------------------------- sfr isp_data = 0xc2;//ISP/IAP操作时的数据寄存器 sfr isp_addrh = 0xc3;//高地址 sfr isp_addrl = 0xc4;//低地址 sfr isp_cmd = 0xc5;//命令模式寄存器 sfr isp_trig = 0xc6;//命令触发寄存器 sfr isp_contr = 0xc7;//ISP_IAP控制寄存器 //---------------------------------------------------------------- uchar eeprom_read(uint addres);// void eeprom_write(uint address,uchar wdata);// void eeprom_eares(uint addres);//扇区擦除 //**************************************************************** // 扇区擦除 //---------------------------------------------------------------- void eeprom_eares(uint addres) { uchar i; isp_addrl=addres; //低位地址 isp_addrh=addres>>8; //高位地址 isp_contr=0x01; isp_contr=isp_contr|0x80; //设时间与充ISP操作。 isp_cmd=0x03; //扇区命命令 isp_trig=0x46; //触发 isp_trig=0xb9; //触发启动。 for(i=0;i>8; //高位地址 isp_contr=0x01; isp_contr=isp_contr|0x80; //设时间与充ISP操作。 isp_cmd=0x01; //写命令 isp_trig=0x46; //触发 isp_trig=0xb9; //触发启动。 for(i=0;i>8; //高位地址 isp_contr=0x01; isp_contr=isp_contr|0x80; //设时间与充ISP操作。 isp_cmd=0x02; //写命令 isp_trig=0x46; //触发 isp_trig=0xb9; //触发启动。 for(i=0;i

    时间:2018-10-31 关键词: eeprom读写 stc单片机

  • STC单片机IO方波脉冲输出

    STC单片机IO方波脉冲输出

    有时候我们工作中要组建的系统结构简单,只用到了简单的stc51系列的单片机,但是考虑到驱动一些1-Wire控制的芯片,需要用到一定形式的方波信号,可以的是我们的stc内部没有PWM调制输出IO,只有用一些其他的办法来模仿。一般我个人使用下面两个方法,各有自己的方便之处:方法一:一般可以使用两个定时器(工作方式2:8位重装模式)来实现,用T0定时器完成PWM输出,脉宽固定,T1来决定高平的宽带来进行PWM调制代码如下:#include < reg51.h > #include < intrins.h > sbit  K1 =P1^4 ;                    //增加键 sbit  K2 =P1^5 ;                    //减少键 sbit  P00 =P0^1; unsigned char PWM=0xe7;   //赋初值 void delayms(unsigned char ms); void delay(unsigned char t); /*********************************************************/ void main() {       P1=0xff;     TMOD=0x21 ;     TH0=0xff ;             //50us延时常数     TL0=0xce ;            //频率调节     TH1=PWM ;            //脉宽调节     TL1=0 ;      EA=1;      ET0=1;      ET1=1;          TR0=1 ;    while(1)    {      do{             if(PWM!=0xff)            {PWM++ ;delayms(10);}            else Beep() ;          }      while(K1==0);      do{            if(PWM!=0xce)           {PWM-- ;delayms(10);}            else Beep() ;           }      while(K2==0);    } } void timer0() interrupt 1 {      TR1=0 ;     TH0=0xff ;     TL0=0xce ;     TH1=PWM ;     TR1=1 ;     P00=0 ;      //启动输出 } void timer1() interrupt 3 {     TR1=0 ;     P00=1 ;     //结束输出 } /*********************************************************/ // 延时子程序 /*********************************************************/  void delay(unsigned char t)  {     while(t--)   ;  } /*********************************************************/ // 延时子程序 /*********************************************************/ void delayms(unsigned char ms) {     unsigned char i ;     while(ms--)      {         for(i = 0 ; i < 120 ; i++) ;      } } /*********************************************************/如果不需要连续的脉冲,就像我这次一样,只需要确定低电平的时间以及几个上升沿,可以直接用IO口来模仿出方波即可。下面贴出代码:#include#includetypedef unsigned int uint; typedef unsigned char uchar; sbit bo=P2^2; sbit key2=P3^0; sbit key3=P3^1; sbit key4=P3^2; static int Cout; void delay_ms(uint mt) { uint x,y; for(x=mt;x>0;x--) { for(y=114;y>0;y--); } } void delay_10us() { _nop_(); } void boproduce(Cout) { for(;Cout>=1;Cout--) { bo=0; delay_10us(); bo=1; } } void  main() { while(1) { if(~key2) { delay_ms(10); if(~key2) { boproduce(3); } } if(~key3) { delay_ms(10); if(~key3) { boproduce(2); } } if(~key4) { delay_ms(10); if(~key4) { boproduce(1); } } } }

    时间:2018-10-23 关键词: 单片机 stc单片机

  • 基于STC单片机的经济型步进电机控制系统

    基于STC单片机的经济型步进电机控制系统

    0 引 言 步进电机是工业控制中应用十分广泛的一种电动机,它能将数字信号直接转换成角位移或线位移,驱动速度和指令脉冲能严格同步,具有较高的定位精度,控制系统成本低廉,在经济型数控机床等领域应用广泛。这里针对电磁干扰较强以及要求低成本应用的场合,采用超强抗干扰、小巧低功耗的工业级STC12C系列单片机,充分利用单片机内部的硬件资源,设计实用的步进电机控制和驱动系统。 1 控制系统总体方案设计 系统功能原理示意图如图1所示。 在该系统中由单片机直接输出电机的各相控制脉冲序列,光耦进行必要的光电隔离,采用分立元件构成功率.MOSFET管驱动电路,带动电机转动。键盘接口与 LED显示功能由具有SPI串行接口功能的ZLG7289实现。既可使用按键输入的方式精确设置电机的工作方式与转速,也可以通过调速旋钮实现电机转速的连续调节,还能通过上位机实现对电机工作方式的调整与控制。 2 硬件电路设计 2.1 控制电路设计 控制芯片采用STC12C4052AD,它是1个时钟/机器周期的单片机,速度比普通的8051单片机快8~12倍,有20个引脚且为小巧封装。该单片机具有超强抗干扰,抗静电的特点,能轻松通过4 kV快速脉冲干扰,其功耗超低,正常工作模式下的典型功耗为2.7~7 mA。芯片自带硬件看门狗,具有高速SPI通信端口,8通道8位A/D转换,2路PWM输出,4 KB容量的FLASH存储器,256 B容量的SRAM,4个定时器,1个全双工串行通信口。由于单片机内部的资源丰富,性价比高,能够满足该设计的要求,而且减少了硬件电路的设计,提高了工作效率。单片机的外部引脚定义,及其在该设计中的资源分布如图2所示。 P1.4(ADC4)口外接4.7 kΩ的可调电位器,利用单片机内部的模/数转换功能转换成数字量,进而控制输出脉冲频率,完成步进电机速度的“连续”调节。过流检测的结果直接引入到外部中断0,实现对电流的快速控制。 2.2 驱动电路设计 功率MOSFET管的部分驱动电路如图3所示。该电路的设计可改进功率MOSFET管的快速开通时间,提高了驱动电流的前后沿陡度,能够改善高频响应。功率MOSFET管栅源间的阻抗很高,工作于开关状态下漏源间电压的突变会通过极间电容耦合到栅极,产生相当幅度的VGS脉冲电压。正方向的VGS脉冲电压可能会导致器件的误导通。为此,需要适当降低栅极驱动电路的阻抗,在栅源之间并接阻尼电阻或接一个稳压值小于20 V,而又接近20 V的齐纳二极管,以防止栅源开路工作。 为了抑制功率管内的快恢复,二极管出现反向恢复效应,在电路中接入4只快恢复二极管。其中,反并联快恢复二极管的作用是为电机相绕组提供续流通路,其余2 只是为了使功率MOSFET管内部的快恢复二极管不流过反向电流,以保证功率MOSFET管在动态工作时能起到正常的开关的作用。 2.3 显示与按键处理电路 在单片机应用系统中,典型的键盘显示接口电路由基于并行扩展技术的8155,8279构成控制电路。现代单片机应用系统广泛采用串行扩展技术。相对于并行方式,串行扩展接线灵活,占用单片机资源少。 ZLG7289A是具有SPI串行接口功能的可同时驱动8位数码管或64只独立LED的智能显示驱动芯片,单片即可完成显示、键盘接口的全部功能。采用串行方式与微处理器通信,数据从DIO引脚送入芯片,并由CLK端同步。当选信号变为低电平后,DIO引脚上的数据在CLK引脚的上升沿被写入 ZLG7289A的缓冲寄存器。图4是ZLG7289的典型应用。ZLG7289A连接共阴式数码管,应用中不需要的数码管与键盘可以不连接,省去数码管或对数码管设置消隐属性,这均不会影响键盘的使用。整个电路无需添加锁存器和驱动器,耗电少,软件设计中无需编写显示译码程序,省去了静态显示扩展芯片,大大节省了CPU的时间。该电路设计中仅采用4×4键盘和4位数码管,已完全满足设计需要。 3 软件设计 软件部分采用模块化结构设计。对步进电机转速的控制是通过定时器工作在中断方式实现的。定时器定时中断产生周期性脉冲序列,不是采用软件延时的方式,这样不占用CPU的时间。CPU在非中断时间内可以处理其他事件,只有在中断发生时才驱动步进电机转动一步。根据步进电机励磁状态转换,采用查表法求出所需的输出状态,并以二进制码的形式依次存入单片机内部的存储器中;然后按照正向或反向顺序依次取出地址的状态字,送给STC12C4052AD,输出各励磁状态,从而实现环形分配器的功能。 程序总体框架包括:主程序、过流检测中断服务子程序、定时器中断服务子程序、以及其他子程序(包括正转、反转子程序、键盘显示控制子程序、A/D转换子程序等),由于篇幅限制,在此不一一叙述。 4 系统测试 该系统采用超强抗干扰,小巧低功耗的工业级STC12C4052AD单片机为控制核心,工作可靠性高,抗于扰能力强。系统测试在专门的检测实验室内进行。利用群脉冲发生器(EFT-4001)、周波电压跌落发生器(VDG-1105)、静电放电发生器(ESD-20)以及雷击浪涌发生器(SG-5006) 等专用仪器对系统的电压变化抗扰度、快速瞬变脉冲群抗扰度、抗静电和雷击浪涌等参数进行检测。经过实验,系统功能正常,所有参数均已达标。 5 结 语 电子技术发展日新月异,新型单片机层出不穷。在电机控制系统开发过程中,如果恰当选取单片机以及各电路模块的型号,能够简化设计过程,起到事半功倍的效果。该系统采用STC12C4052AD单片机,其工作方式、转动速率及转矩数可以通过键盘输入,也可通过普通旋钮或上位机调节。键盘显示模块采用 ZLG7289实现。本系统具有通用性,适当改变输出口各位控制端,便可控制不同相数的步进电机。

    时间:2018-09-19 关键词: 控制系统 电源技术解析 步进电机 经济型 zlg7289 stc12c4052ad stc单片机

  • stc单片机adc程序

    stc12c5620ad系列单片机的adc模块是逐次比较型adc模块,所以转换速度非常快。速度可达100K每秒,即每秒10万次,一共有8路10位的ADC转换引脚。检测范围0~VCC。ADC初始化的代码如下:void ADC_INIT(){P1M0=0x01;P1M1=0x00;ADC_CONTR = ADC_CONTR|0x80;delay1(10);delay1(10);ADC_CONTR = ADC_CONTR&0xe7;}P1M0和P1M1寄存器是P1口的模式配置寄存器,第3 4句把P1.0配置为ADC输入引脚。ADC_CONTR是ADC控制寄存器,第5句是打开ADC电源,第8句是清FALG转换完成标志和START开启位标志。ADC转换的函数如下:unsigned int adpro(){unsigned int adbuf;ADC_DATA = 0;ADC_LOW2 = 0;ADC_CONTR = ADC_CONTR|0x08;delay1(10);do{;}while((ADC_CONTR&0x10)==0);ADC_CONTR = ADC_CONTR&0xE7;adbuf=0;adbuf = ((adbuf|ADC_DATA)

    时间:2018-07-09 关键词: adc程序 stc单片机

  • STC单片机程序下载失败问题总结

     STC为宏晶公司推出的国产51单片机,其优点在于价格低廉,功能强大,使用方便,尤其是其串口ISP下载程序的方式方便了大量用户,免去了购买昂贵的编程器,非常适合单片机入门学习使用。 但是初学者常会遇到程序无法下载的情况,很多人甚至因此放弃了学习,实在可惜,在此给大家总结了常见的出错原因、判断方法和解决方法。 STC单片机下载程序需要的硬件主要分三部分: 单片机最小系统、下载电路、计算机端。 下载失败一般就从这三个方面来解决问题。 如果你有或者能向别人借到一套可以正常下载程序的电脑、单片机下载线、开发板,通过控制变量的方法,很快就能找到问题出在哪个环节。 1、你可以将自己的开发板连接在能正常下载的电脑上进行下载,如果可以下载,说明问题出在你的电脑上。 2、然后通过将正常的开发板连接到自己电脑上下载,如果能下载,可以判断自己的电脑正常,问题在开发板上。 3、当然还可以通过调换开发板上的单片机,来确定自己的单片机是否损坏。这样就很快解决问题了。 如果没有这样的条件,则可以从以下的可能性逐条判断(红色字体表示的是比较常见的问题)。 一、最小系统的问题 1、不是STC系列单片机,如果是AT或其他品牌单片机,下载方式与STC不同。 2、单片机损坏,比如有的单片机内由于ISP系统引导码出错,能运行之前下载进的程序,但不能下载程序;或者单片机已损坏(通常单片机损坏从外表看不出异常,只有通过换用正常工作的单片机才能判定)。 3、晶振问题,如:没有晶振,晶振放在插座上接触不良,或者引脚太长不起振等。 最小系统电路图如下,由电源、单片机、复位电路、晶振时钟电路组成: STC89C52RC单片机: 二、下载电路的问题 1、下载芯片损坏(一般下载涉及的芯片有PL2303、CH341、MAX232)。 2、PL2303的晶振不是12M。 3、USB接口松动,下载线断路等。 4、接线错误,如:TXD、RXD接反。 MAX232电路图(用于实现串口电平转换): USB转串口(一般用CH341芯片): USB-TTL小板(一般用PL2303芯片): USB-TTL电路图: 三、计算机端的问题 1、下载软件的问题,最好使用STC_ISP最新版本,在Win7系统中有时可能要以管理员身份运行。 2、驱动安装的问题,如果设备管理器中有COM口“USB-to-Serial”且无黄色感叹号,一般驱动就没有问题,但是还是可以重装驱动看看;安装的驱动要与系统对应(Windows732位、64位或者WindowsXP)。 3、COM口设置错,一般下载时,STC-ISP软件会提示打开串口失败(COM口的选择应查看设备管理器中的端口号)。 4、单片机的型号设置错,一般下载时,STC-ISP软件会提示不是此型号的单片机。 5、波特率太高,适当调低一点或许有用,高、低波特率都选1200。(这一点比较常见,STC-ISP有些版本就有这样的问题) STC-ISP软件 安装好驱动,连接上USB转TTL芯片后的设备管理器(以下截图来自Win7系统): 四、操作步骤的问题 注意先点击电脑上的下载按钮后再给单片机上电;或者在电脑上点击下载,关掉单片机电源再打开。 下载程序顺序如下: 1、设置单片机型号,COM口,波特率等参数。 2、装载好要烧的单片机程序。 3、点击“下载”。 4、给单片机上电。 5、下载软件显示:正在下载.... 6、下载完成。 五、附:STC_ISP软件对下载失败给出的提示 1、在单片机停电状态下,点下载按钮,再给单片机上电 2、停止下载,重新选择RS-232串口,接好电缆 3、可能需要先将P1.0/P1.1短接到地 4、可能外部时钟未接 5、因PLCC、PQFP转换座引线过长而引起时钟不振荡,请调整参数 6、可能要升级电脑端的STC-ISP.exe软件 7、若仍然不成功,可能MCU/单片机内无ISP系统引导码,或需退回升级,或MCU已损坏 8、若使用USB转RS-232串口线下载,可能会遇到不兼容的问题,可以让我们帮助购买兼容的USB转RS-232串口线 六、如果条件允许,可按以下步骤检查 1、检查单片机是不是STC系列、是否有晶振,以及最小系统电路是否有错(如果用的是之前能正常工作的开发板,最小系统电路一般不会有错)。 2、检查串口设置,操作步骤(先下载后上电)。 3、换个串口(对于有串口的台式机),或者换个USB口。 4、重启下载软件再试。 5、重启计算机。 6、换最新的下载软件(在宏晶官网下载)。 7、重装驱动(如果是有串口的台式机,直接连接串口则不需要驱动)。 8、换其他单片机。 9、换一根下载线。 10、换其他电脑。

    时间:2017-08-09 关键词: 程序 stc单片机

  • 有关STC单片机发热、复位的问题

    最近有个项目,需要一个继电器,接收到低电平就动作,用的STC15W104、使用的市面上的开关电源5V/3A. 本来看似简单到底的一个东西,却花费了将近3天的时间搞定。 1.现象一 产品是1U机箱 内部一个ARM主板,需要定时硬重启一次。暂且叫STC控制板,控制板在不带载的情况下,触发正常,与程序很符合,但是带载后,第一次触发正常,第二次单片机就开始发烫,能到80多度,然后直接冒烟,这个现象100%会出现,控制板的继电器没有使用隔离。 解决办法: 在5V电源处并了一个1000UF的大电容。曾尝试并5.1V稳压管,发现不顶用。 2.现象二 板子会误动作,尤其是周围有人,或者是工作一段时间,或者是开关963电烙铁都会让继电器误触发。 解决办法: 修改程序的检测,增加一个消抖的操作(20ms延时);将下载器的“允许低压复位去掉”,此做法会产生低压中断,没有进行检测(可以加程序自行验证,主要没时间去测试),感觉这个的可能性很大,也就是周围的环境导致单片机复位了。 以上是个人的一些调试经验,分享一下,望后来人能用到。

    时间:2017-01-16 关键词: 复位 发热 stc单片机

  • 基于STC单片机智能探测机器车的设计

    摘要:介绍一种智能探测机器车,该车由智能探测系统和数据接收系统两部分组成。探测系统分为核心板和任务板,核心板采用STC单片机 IAP15F2K61S2为控制单元,完成循迹、定位、码盘测速、360度转身,采用蓝牙模块实现与接收系统无线通信;任务板由温度和湿度传感器、超声波传感器、颜色传感器构成,完成测距、温度检测、湿度检测和颜色识别。接收系统同样以IAP15F2K61S2为核心,由蓝牙模块、12864液晶显示模块、语音播报部分组成,完成无线数据的接收、数据的实时显示、同步语音播报的功能。 本文来源于全国大学生电子设计竞赛,任务要求制作一台智能探测机器车,能实现在特定轨道上行驶一周,在设定的任务点精准停车,完成超声波测距,温湿度测量,颜色识别,360°转身等任务,同时要求将测得的数据通过无线通信的方式传输到另外一台设备上,进行实时显示。在原有任务的基础上新增转向灯,模拟真实汽车行走状态,左转时左前和左后转向灯亮,右转时右前和右后转向灯亮,遇到黑线时灯全亮。每次任务完成会有蜂鸣器提示,同时在液晶显示系统有任务完成的语音提示。 1 系统设计 1.1 硬件设计 本系统主要有两大部分构成:智能探测系统和数据接收系统。主控芯片是智能小车智能探测系统和接收系统的核心,小车的控制、探测、数据发送、接收都是通过主控芯片连接外围电路实现智能探测车的各系统功能。采用的是宏晶科技生产的国产单片机IAP15F2K61S2,此款芯片具有高速、高可靠、低功耗、超强干扰等优点,能够完全支持智能探测车实现任务要求的所有功能。 1.2 系统框图 系统总体框图由智能探测系统和接收系统两部分构成。 1.2.1 智能探测系统 智能探测系统由核心板和任务版两部分组成。核心板主要部分是IAP15F2K61S2芯片、电压转换模块、蓝牙发送模块以及外设和驱动电路。任务板主要包括波模块、颜色识别、温湿度模块等电路,如图2所示。 1.2.2 接收系统 接收系统主要由IAP15F2K61S2芯片,语音模块、LCD12864显示模块,蓝牙接收模块组成,如图3所示。 1.3 软件设计 程序设计同样分为智能探测系统和数据接收系统两个部分。智能探测系统设计流程图如图4所示。数据接收系统流程图略。 2 理论分析与计算 2.1 循迹电路分析 循迹电路采用8路红外对管进行循迹线、定位点、转身区、起点终点线进行循,循迹灯顺序从左到右是0到7八个红外对管,红外对管照在黑线输出高电平,遇到全黑(2 cm)时全灭;照到白色部分输出低电平,遇到全白部分时全亮。 当红外对管4、5遇到黑线时,全速前进,当循迹是其他对管,都要进行不同程度的微调(向左或向右),越靠近两边,调的幅度越大。小车电机的驱动芯片是 L298N,该芯片内部是H桥电路,可以控制电机的正反转。小车驱动板的PWM驱动是实现小车转向的必要条件,通过PWM控制小车的速度,从而实现转向。 2.2 精确定位和360度转身模块分析与计算 小车精确定位中,需要实现90°、360°转身,小车是通过光电码盘实现小车的精确定位和转身。根据小车旋转一周码盘计数值与实际测量相结合进行调节实现360°精确转身。 2.3 温度、湿度检测模块分析 任务中要完成定点1的温度检测和定点4的湿度检测,这里使用的是DHT11温湿度传感器。此模块的传感器有VCC、DATA、NC、 GND四个管脚,NC是悬空状态,这里将NC和VCC连接在一起,DHT和核心板上的P1.3连接,GND引脚接地。主要实现对温度、湿度的检测,然后将检测到的信号转换成数字信号。然后送到单片机进行分析处理,从而得到定位点1的温度值和定位点4的湿度值。 2.4 超声波检测模块分析 定位点2要完成超声波对距离进行检测,我们利用ICL7555振荡产生一个40 kHz的方波信号发射,然后通过CX20106芯片处理信号接收。当CX20106芯片1管脚超声波信号输入端接收到40 kHz的信号时,会在第7管脚遥控命令输出端产生一个低电平下降脉冲,这个信号可以接到单片机的外部中断引脚作为中断信号输入,用于计算时间差。通过单片机来计算发射信号到收到信号时产生下降沿的这段时间的长度,再通过数学计算,转化为距离,显示在液晶显示器上。 3 测试数据及分析 3.1 温度、湿度数据采集 测试条件是:在定位点1一侧,放置圆柱形容器直径6 cm,高度25 cm,内装液体水,用于调节环境温度,对温度进行采集,测试结果与温度计比较如表1所示。在定位点4一侧,放置一个加湿器,加湿器可前后移动10 cm~30 cm,用于调节环境湿度,并对温度进行采集,测试结果和湿度计比较如表2所示。 3.2 超声波测距数据采集 测试条件:在定位点2处放置长方体尺寸长度20 cm,高度25 cm,2 cm左右,长方体可前后移动10 cm~20 cm,测试结果与卷尺测量结果比较结果如表3所示。 4 小结 通过多次的模块单独调试和整体软硬件结合调试,不断地对系统、程序进行优化,小车能比较流畅的沿着黑线循迹,完成4个定位点的精确定位,并在转身区内完成 360°转身;完成温湿度、超声波、颜色等数据采集及显示,并通过蓝牙串口通信实现了数据无线发送,上位机无线接收数据,能够进行数据显示和语音播报。

    时间:2015-09-15 关键词: 蓝牙 智能探测机车 stc单片机

  • 基于STC单片机的太阳能热水器智能节水控制系统设计

     0 引言 太阳能热水器在北方家庭中应用非常普遍,但是普通的家庭太阳能热水器在节约电能的同时也存在一些缺点。因为一般的太阳能热水器基本放置在楼房的屋顶,从楼顶到出水龙头这一段距离较长,管道中存了大量水,北方的冬季空气比较寒冷,管道中的水温普遍较低。当人们用热水时,通常要将管道中的水排掉,出水龙头距离楼房顶部距离越远,需要排掉的冷水就越多,这部分水在普通家庭中通常会浪费掉。 针对这一问题,我们设计出了冬季太阳能节水、蓄水控制系统,具有参数可以人工调节、到达合适温度自动声光报警、水充分利用等特点。安全可靠、成本低廉、节水效果显著。非常适合普通家庭的太阳能热水器,改造成本很低,具有很高的推广价值。 1 系统整体组成 本系统主要有单片机控制模块、温度测量模块、电磁阀控制模块、按键模块、储水箱、抽水泵等组成。当人们需要热水时,按下启动按键,单片机监测管道中水的温度,当水温不超过设定温度时,打开冷水电磁阀,冷水先通过电磁阀流到一水箱中存储起来。当温度超过设定温度时,关闭冷水电磁阀,并同时发出声光报警,提醒人们现在可以利用热水进行洗漱。存储在水箱中的冷水可以利用水泵重新送到太阳能热水器中,也可以用来进行冲洗厕所等用途。系统组成框图如图1所示。 2 系统主要电路组成 本系统以STC15F2K60S2芯片为控制核心,由温湿度传感器SHT10、电磁阀、水温传感器DS18B20和语音提示电路、数码管显示电路、按键电路等部分组成。系统电路组成框图如图2所示。 2.1 主控制器 采用STC15F2K60S2单片机作为主控制芯片,这是一种低功耗、高性能的CMOS 8位微控制器,片内大容量2048字节SRAM,内部集成高可复位电路并可彻底省掉外部昂贵的复位电路,具有8K在系统可编程FLASH存储器,32个可设置四种模式的外部双向I/O口,运行速度快、价格便宜、性价比高。主控制器电路原理图如图3所示。 2.2 水温检测电路 水温检测采用常用的DS18B20数字温度传感器,外面带有防水不锈钢护套。DS18B20是一种单总线传感器,其输出为数字量,可以直接利用单片机将代表温度的数字量读到单片机中进行处理,不需要额外增加AD转换器。其封装形式为TO-92,体积比较小。为方便测量水温,将DS18B20放入防水不锈钢套中,并用胶加以密封,便于我们测量水温。DS1B 20可以设置为12位的转换精度,测量温度的分辨率可以达到0.0625℃,测量精度为±0.5℃,满足家庭测量水温需要。DS18B20应用原理图如图4所示。 2.3 数码管显示电路 数码管显示采用0.5英寸共阳极数码管,显示直观,方便家庭中老年人查看。数码管驱动采用了串入并出74HC595芯片驱动,动态扫描,节省了宝贵的I/O资源。74LS595的驱动能力大,可以直接驱动数码管的显示。数码管显示电路原理图如图5所示。 2.4 电磁阀及抽水泵控制电路 当单片机电磁阀(或抽水泵)控制引脚输出低电平时,三极管导通,继电器动作,电磁阀(或抽水泵)打开;反之,三极管截止,继电器不动作,电磁阀(或抽水泵)关闭。电磁阀(或抽水泵)控制电路原理图如图6所示。 2.5 语音提示电路 系统利用语音芯片ISD1820实现语音提示功能。美国ISD公司推出一种单片8~20s单段语音录放电路ISD1820,它采用CMOS技术,内含振荡器、话筒前置放大、自动增益控制、防混淆滤波器、扬声器驱动及FLASH阵列。其可以进行10s左右的语音录放高质量自然的语音还原、外围元件少、电路连接简单、控制方便、成本低,可以通过单片机控制操作。当系统检测到管道中水温超过设定温度时,在单片机的控制下,语音提示电路发出声音提醒。语音提示电路原理图如图7所示。 2.6 按键电路 按键采用了独立式按键,主要有水温/环境温度切换按键、启动/停止键、温度上升键、温度下降键、水泵抽水键。按键功能直接,配合数码管显示,操作方便、直观。对家庭中老年人来讲,十分方便。按键电路原理图如图8所示。 3 控制系统软件设计 在软件设计中充分利用了IAP15F2K60S2单片机的优势,根据DS18B20、SHT10传感器的特点,以及按键扫描、数码管动态显示的要求,利用时间触发机制进行软件设计。利用STC的单片机定时计数器0产生系统滴答时钟,然后产生不同的时间片,系统在不同的时间片执行不同的任务。系统分时调度程序框架如图9所示。 4 结束语 在调查家庭太阳能热水器用户应用需求和现在存在浪费水这个问题的基础上,设计了一种基于单片机控制的节水控制系统。本系统能够实现冷水流向控制、管道温度的实时显示、环境温湿度检测、语音提示等功能,具有良好的人机界面。通过本系统在家庭中的试运行,表明其较好地解决了家庭太阳能热水器冬季水浪费的困扰,经济实用,足以满足用户的节水需求,给人们的日常生活提供了极大便利。

    时间:2015-06-03 关键词: 太阳能热水器 节水 stc单片机

  • 基于STC单片机的超声波清洗机

    摘要:针对目前工业清洗问题,设计了一款基于STC单片机超声波清洗机系统。该系统采用STC15F2系列的单片机为控制核心,加以功率调节、半桥逆变、PWM发生与控制等模块电路,利用了调谐匹配和阻抗匹配,使压电换能器输出最大功率。本超声波清洗机具有功率、频率可调、定时清洗的功能,以及清洗效率高、成本低、运行稳定的特点,达到节能环保的目的,应用前景广阔。 随着超声波技术的不断发展,超声波广泛应用于检测、清洗、焊接、医疗等领域,甚至在纺织、航空领域也能见到它的踪迹。目前,超声的研究和应用可分为功率超声和检测超声两大领域,超声清洗是功率超声最为广泛的应用之一。它通过换能器,将功率超声的声能转换成机械振动,同时强超声波在液体传播时会产生“空化效应”。在空化气泡突然闭合时发出的冲击波可在其周围产生上千个大气压力,对污层的直接反复冲击,一方面破坏污物与清洗件表面的吸附,另一方面也会引起污物层的破坏而脱离清洗件表面并使它们分散到清洗液中,以清除物体表面的杂质、污垢或油膩。与其他清洗相比,超声波清洗具有效率高、能耗低、清洁环保的特点,特别在清洗复杂零件、盲孔、狭缝多的物件时,更凸显它的优势。 1 超声波清洗机总体方案设计 文中设计的超声波清洗机是以STC单片机为控制核心,包括整流滤波、逆变、IGBT驱动、PWM发生与控制、频率扫描显示、功率调节、调谐匹配与阻抗匹配模块以及相关保护模块。 在超声波清洗机中,220 V50 Hz的市电输入后分为两路,一路用来产生大功率超声波,另一路用来检测、控制与显示的供电作用,具体如图1所示。其中,通过双向可控硅可控制清洗机的功率。逆变模块为半桥逆变,把直流电压逆变为高频交流电压,再经调谐匹配与阻抗匹配模块的变压器升压以及电感匹配,可以高效率、最大功率地输送到压电换能器。最后,压电换能器把超声波电源输出的电能转化为高频机械振动。 2 超声波清洗机各模块设计原理 2.1 整流滤波与功率调节模块 220 V50 Hz交流电经整流桥B1整流以及电解电容C12滤波后产生直流输出电压。其中双向可控硅TR1用于功率调节,C11为安规电容,R11和C11主要用于消除高频干扰。而U1为光耦,型号可以选择MOC3021,1脚和3脚接调功模块。光耦U1起到隔离强弱电的作用,增强了电路的可靠性和安全性。 在超声波电源系统的工作过程中,整流滤波模块与逆变模块会发热,可以将两个模块安装在一个铝片散热器上,进行风冷散热。这样,系统可以更安全可靠工作。 2.2 逆变与脉冲驱动模块 由于半桥逆变电路所用到的功率器件少,成本低,而且控制相对简单,因此本文设计的超声波清洗机采用半桥逆变电路。 在半桥逆变电路中,两个全控型开关器件为IGBT,即Q1与Q2和二极管D11和D12构成半桥逆变,在Q1和Q2上加以互补的信号,O1与Q2两IGBT是轮流触发的,即各交替进行导通。同时,在直流侧输入端接的电容C1和C2应足够大,并且C1=C2,容值可选2μF以上。同样,电阻R14、R15也应足够大,并且R14=R15,阻值可选100 kΩ以上。熔断器F11和F12用于保护开关管Q1和Q2,防止电流过大。 变压器T1和电阻R16、R17、R18、R19组成脉冲驱动模块,为Q1和Q2提供互补的触发信号。由于IGBT的驱动电压应小于20 V,而T12,T14间的输入电压约12 V,因此变压器T1变比设计为1:1:1。R18、R19用于限流作用,可选20 Ω左右的电阻。在本超声波清洗机中,上下两个IGBT器件留有一定的死区时间,以防止两者同时导通。 2.3 变压与线性稳压 220 V50 Hz交流电经变压器T4降压为12 V,再经整流桥B4整流、C41滤波以及U1(L7812)线性稳压后,输出12 V直流电压,给PWM发生与控制模块供电。同时,直流12 V再经U2(L7805)二次稳压变为5 V,为处理器IAP15F2K61S2工作提供电源。LED1发光二极管,起电源指示作用。为了减少电压的脉动系数,加入了电容C43、C44多次滤波。 2.4 PWM发生与控制模块以及驱动模块 在本超声波清洗机中,以KA3525A作为PWM发生与控制芯片。如图5所示,KA3525A振荡频率的设定范围为20~40 kHz,芯片的脚5和脚7间串联一个电阻Rd就可以在较大范围内调节死区时间。KA3525A的振荡频率可表示为: 式中:CT、RT分别是与脚5、脚6相连的振荡器的电容和电阻;Rd是与脚7相连的放电端电阻。此处:Rd、CT、RT分别为图中的R52、C5、(R51+Rp51)。其中,Rp51为精密可调电阻,即通过R1和R2可以调节PWM输出频率。管脚8接一个电容C51用来软启动,减少功率开关管的开机冲击。11和14脚输出两路互补的PWM波,经中功率的三极管Q1、Q2、Q3、Q4放大,再经脉冲驱动变压器T1驱动两个IGBT,控制逆变模块实现半桥逆变(如图3所示)。高频变压器T1起隔离强电与弱电的作用,增强了驱动能力和电源的可靠性。 2.5 功率调节模块 功率调节的实现原理:通过IAP15F2K61S2单片机的一个AD口检测调功电阻上电压大小,再通过模数转换获得AD数值。再根据此值控制双向可控硅TR1过零延时触发,即通过控制触发脉冲的相位来控制输出功率。其中,图6为过零触发原理图,12 V交流电经二极管D31、D32整流以及R31、R32、R33限流限压,再经三极管Q3检测过零点。当电网电压过零时,P3.3产生负脉冲。另外,IAP15F2K61S2单片机的P3.3口是一个外部中断口,通过检测过零脉冲获得工频电压的过零点。 2.6 调谐匹配与阻抗匹配模块 超声波电源与换能器的匹配主要是调谐匹配和阻抗匹配。在调谐匹配中为减少静电抗产生的无功损耗,使压电换能器输出最大功率,需要通过匹配使换能器近似于纯电阻状态,提高超声波电源输出效率。另外,若完成了调谐匹配时,即负载为纯电阻状态时,为使电源输出最大功率,需要令实际负载和电源的最佳输出阻抗相等,而实现方法为:通过高频变压器使换能器的阻抗变换为超声波电源的最佳输出阻抗,从而使压电换能器输出最大功率。 图7为超声波清洗机调谐匹配与阻抗匹配模块。其中,虚线框内为压电换能器的等效电路图。 其中,Co是压电换能器的静态电容,主要是由夹持而产生的电容,它是一个真实的电学量;Ro是压电换能器的介电损耗电阻,一般认为Ro无穷大,通常忽略不计;Ld、Cd、Rd分别为压电换能器的动态电感、动态电容和动态电阻。当Ld、Cd处于谐振时,串联支路为纯阻。在串联电感调谐匹配作用下,超声波电源的整个负载呈现出纯电阻性。当电源的输出电压稳定时,阻性负载上得到的功率只和负载的阻值有关,因此,需要采用高频变压器来进行阻抗变换,从而使超声波电源能够以最大功率输出。 3 结束语 文中根据实际需求,以STC一款型号为IAP15F2K61S2的单片机作为控制核心,提出了超声波清洗机系统整体设计方案。根据设计方案,进行了软件、硬件的设计和调试,保证其工作频率在20~50 kHz范围内连续可调,死区时间稳定,从而使与超声波电源与压电换能器匹配后能够产生大功率的超声波。最后根据设计制作出了一款具有调功、调频、定时功能的超声波清洗机。通过现场试验,本超声波电源系统能够长时间稳定地工作。

    时间:2014-08-03 关键词: 换能器 超声波清洗机 空化效应 半桥逆变 stc单片机

发布文章

技术子站

更多

项目外包