虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

自<b>整定</b>控制

  • C++完美演绎 经典算法 如 /* 头文件:my_Include.h */ #include <stdio.h> /* 展开C语言的内建函数指令 */ #define PI 3.141

    C++完美演绎 经典算法 如 /* 头文件:my_Include.h */ #include <stdio.h> /* 展开C语言的内建函数指令 */ #define PI 3.1415926 /* 宏常量,在稍后章节再详解 */ #define circle(radius) (PI*radius*radius) /* 宏函数,圆的面积 */ /* 将比较数值大小的函数写在自编include文件内 */ int show_big_or_small (int a,int b,int c) { int tmp if (a>b) { tmp = a a = b b = tmp } if (b>c) { tmp = b b = c c = tmp } if (a>b) { tmp = a a = b b = tmp } printf("由小至大排序之后的结果:%d %d %d\n", a, b, c) } 程序执行结果: 由小至大排序之后的结果:1 2 3 可将内建函数的include文件展开在自编的include文件中 圆圈的面积是=201.0619264

    标签: my_Include include define 3.141

    上传时间: 2014-01-17

    上传用户:epson850

  • 本电子钟采用PIC16C55单片机控制

    本电子钟采用PIC16C55单片机控制,适于温室的定时恒温或自来水的定时定压控制等。PIC16C55单片机工作电压为2.5~6.25V,功耗低、驱动能力强。本电子钟可以控制一路负载在24小时内的3次开/关;一个双限触发的定时输出口,既可接传统的功率保持型继电器,也可接脉冲继电器。本机用四位LED数码管扫描式显示,还有消隐(省电)工作方式,使用起来非常灵活、方便。

    标签: PIC 16C C55 16

    上传时间: 2014-05-29

    上传用户:GHF

  • 汽车采制业务对接

    1           (1)    过程监控原则,以实现实时状态数据监测; (2)    手自动切换无扰原则; (3)    满足远程控制和参数整定; (4)    时钟同步和心跳检测功能; (5)    满足周期召唤和状态变位主动上送; (6)    满足历史数据召唤; (7)    提供数据点表和通讯方式; (8)    数据传输链路包括PLC通讯链路和上位机通讯链路方式; (9)    具备RJ45以太网通信接口供集中管控系统接入,支持Modbus TCP(作为从站)或者OPC Server通讯协议; 业务数据通过Web Service或者数据库中间表方式进行数据交互。如采用Web Service方式(远光共创作为服务端),双方公布API接口供对方调用,接口方式为报文接口方式,数据报文以XML进行描述;如采用数据库中间表方式,则由第三方提供数据库中间表;

    标签: 汽车采制业务对接

    上传时间: 2016-01-18

    上传用户:ganggehao

  • 12345

    /****************temic*********t5557***********************************/    #include   <at892051.h>     #include   <string.h>    #include   <intrins.h>     #include   <stdio.h>     #define    uchar    unsigned char     #define    uint     unsigned int     #define    ulong    unsigned long     //STC12C2051AD的SFR定义     sfr  WDT_CONTR = 0xe1;//stc2051的看门狗??????     /**********全局常量************/    //写卡的命令     #define    write_command0       0//写密码     #define    write_command1       1//写配置字     #define    write_command2       2//密码写数据     #define    write_command3       3//唤醒     #define    write_command4       4//停止命令     #define    TRUE       1     #define    FALSE      0     #define    OK         0     #define    ERROR      255     //读卡的时间参数us     #define ts_min          250//270*11.0592/12=249//取近似的整数     #define ts_max          304//330*11.0592/12=304     #define t1_min          73//90*11.0592/12=83:-10调整     #define t1_max          156//180*11.0592/12=166     #define t2_min          184//210*11.0592/12=194     #define t2_max          267//300*11.0592/12=276     //***********不采用中断处理:采用查询的方法读卡时关所有中断****************/     sbit p_U2270B_Standby = P3^5;//p_U2270B_Standby PIN=13     sbit p_U2270B_CFE = P3^3;//p_U2270B_CFE     PIN=6     sbit p_U2270B_OutPut = P3^7;//p_U2270B_OutPut  PIN=2     sbit wtd_sck = P1^7;//SPI总线     sbit wtd_si = P1^3;    sbit wtd_so = P1^2;    sbit iic_data = P1^2;//lcd IIC     sbit iic_clk = P1^7;    sbit led_light = P1^6;//测试绿灯     sbit led_light1 = P1^5;//测试红灯     sbit led_light_ok  = P1^1;//读卡成功标志     sbit fengmingqi = P1^5;    /***********全局变量************************************/       uchar data Nkey_a[4] = {0xA0, 0xA1, 0xA2, 0xA3};//初始密码             //uchar idata card_snr[4];   //配置字     uchar data bankdata[28] = {1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7};     //存储卡上用户数据(1-7)7*4=28     uchar data cominceptbuff[6] = {1,2,3,4,5,6};//串口接收数组ram     uchar command; //第一个命令     uchar command1;//     //uint  temp;     uchar j,i;    uchar myaddr = 8;    //uchar ywqz_count,time_count;             //ywqz jishu:     uchar bdata DATA;    sbit BIT0 = DATA^0;    sbit BIT1 = DATA^1;    sbit BIT2 = DATA^2;    sbit BIT3 = DATA^3;    sbit BIT4 = DATA^4;    sbit BIT5 = DATA^5;    sbit BIT6 = DATA^6;    sbit BIT7 = DATA^7;    uchar bdata DATA1;    sbit BIT10 = DATA1^0;    sbit BIT11 = DATA1^1;    sbit BIT12 = DATA1^2;    sbit BIT13 = DATA1^3;    sbit BIT14 = DATA1^4;    sbit BIT15 = DATA1^5;    sbit BIT16 = DATA1^6;    sbit BIT17 = DATA1^7;    bit i_CurrentLevel;//i_CurrentLevel  BIT 00H(Saves current level of OutPut pin of U2270B)     bit timer1_end;    bit read_ok = 0;    //缓存定时值,因用同一个定时器     union HLint { uint W;    struct   {    uchar H;uchar L;   }   B; };//union HLint idata a     union HLint data a;    //缓存定时值,因用同一个定时器     union HLint0 { uint W;    struct {   uchar H;   uchar L; } B; };//union HLint idata a     union HLint0 data b;    /**********************函数原型*****************/    //读写操作     void f_readcard(void);//全部读出1~7 AOR唤醒     void f_writecard(uchar x);//根据命令写不同的内容和操作     void f_clearpassword(void);//清除密码     void f_changepassword(void);//修改密码     //功能子函数     void write_password(uchar data *data p);//写初始密码或数据     void write_block(uchar x,uchar data *data p);//不能用通用指针     void write_bit(bit x);//写位     /*子函数区*****************************************************/    void delay_2(uint x)    //延时,时间x*10us@12mhz,最小20us@12mhz     {    x--; x--;    while(x)    {      _nop_();      _nop_();      x--;    }    _nop_();//WDT_CONTR=0X3C;不能频繁的复位     _nop_();    }    /////////////////////////////////////////////////////////////////////     void initial(void)    {    SCON = 0x50; //串口方式1,允许接收     //SCON  =0x50;     //01010000B:10位异步收发,波特率可变,SM2=0不用接收到有效停止位才RI=1,     //REN=1允许接收     TMOD = 0x21; //定时器1 定时方式2(8位),定时器0 定时方式1(16位)     TCON = 0x40; //设定时器1 允许开始计时(IT1=1)     TH1 = 0xfD;  //FB 18.432MHz 9600 波特率     TL1 = 0xfD;  //fd 11.0592 9600     IE = 0X90;     //EA=ES=1     TR1 = 1;     //启动定时器     WDT_CONTR = 0x3c;//使能看门狗     p_U2270B_Standby = 0;//单电源     PCON = 0x00;    IP = 0x10;//uart you xian XXXPS PT1 PX1 PT0 PX0     led_light1 = 1;    led_light = 0;    p_U2270B_OutPut = 1;    }    /************************************************/    void f_readcard()//读卡     {    EA = 0;//全关,防止影响跳变的定时器计时     WDT_CONTR = 0X3C;//喂狗     p_U2270B_CFE = 1;//      delay_2(232);  //>2.5ms            /*   //   aor    用唤醒功能来防碰撞   p_U2270B_CFE = 0; delay_2(18);//start gap>150us   write_bit(1);//10=操作码读0页   write_bit(0);       write_password(&bankdata[24]);//密码block7   p_U2270B_CFE =1 ;//    delay_2(516);//编程及确认时间5.6ms   */    WDT_CONTR = 0X3C;//喂狗     led_light = 0;    b.W = 0;    while(!(read_ok == 1))    {             //while(p_U2270B_OutPut);//等一个稳定的低电平?超时判断?              while(!p_U2270B_OutPut);//等待上升沿的到来同步信号检测1       TR0 = 1;      //deng xia jiang       while(p_U2270B_OutPut);//等待下降沿       TR0 = 0;   a.B.H = TH0;   a.B.L = TL0;   TH0 = TL0 = 0;   TR0 = 1;//定时器晚启动10个周期       //同步头       if((324 < a.W) && (a.W < 353)) ;//检测同步信号1                  else     {     TR0 = 0;     TH0 = TL0 = 0;     goto read_error;    }      //等待上升沿        while(!p_U2270B_OutPut);   TR0 = 0;   a.B.H = TH0;   a.B.L = TL0;   TH0 = TL0 = 0;   TR0 = 1;//b.N1<<=8;            if(a.B.L < 195);//0.5p       else     {     TR0 = 0;     TH0 = TL0 = 0;     goto read_error;    }      //读0~7块的数据       for(j = 0;j < 28;j++)      {       //uchar i;                  for(i = 0;i < 16;i++)//8个位        {        //等待下降沿的到来         while(p_U2270B_OutPut);                TR0 = 0;     a.B.H = TH0;     a.B.L = TL0;     TH0 = TL0 = 0;     TR0 = 1;              if(t2_max < a.W/*)&&(a.W < t2_max)*/)//1P          {         b.W >>= 2;//先左移再赋值          b.B.L += 0xc0;                             i++;        }        else if(t1_min < a.B.L/*)&&(a.B.L < t1_max)*/)//0.5p         {         b.W >>= 1;         b.B.L += 0x80;                           }        else      {      TR0 = 0;      TH0 = TL0 = 0;      goto read_error;     }        i++;        while(!p_U2270B_OutPut);//上升                   TR0 = 0;     a.B.H = TH0;     a.B.L = TL0;     TH0 = TL0 = 0;     TR0 = 1;                      if(t2_min < a.W/*)&&(a.W < t2_max)*/)//1P          {         b.W >>= 2;         i++;        }        else if(t1_min < a.B.L/*a.W)&&(a.B.L < t1_max)*/)//0.5P         //else if(!(a.W==0))         {         b.W >>= 1;         //temp+=0x00;          //led_light1=0;led_light=1;delay_2(40000);         }        else      {      TR0 = 0;      TH0 = TL0 = 0;      goto read_error;     }        i++;       }       //取出奇位        DATA = b.B.L;       BIT13 = BIT7;    BIT12 = BIT5;    BIT11 = BIT3;    BIT10 = BIT1;       DATA = b.B.H;       BIT17 = BIT7;    BIT16 = BIT5;    BIT15 = BIT3;    BIT14 = BIT1;       bankdata[j] = DATA1;      }              read_ok = 1;//读卡完成了     read_error:    _nop_();    }       }    /***************************************************/    void f_writecard(uchar x)//写卡     {    p_U2270B_CFE = 1;    delay_2(232);  //>2.5ms            //psw=0 standard write     if (x == write_command0)//写密码:初始化密码     {      uchar i;      uchar data *data p;      p = cominceptbuff;      p_U2270B_CFE = 0;   delay_2(31);//start gap>330us       write_bit(1);//写操作码1:10       write_bit(0);//写操作码0       write_bit(0);//写锁定位0       for(i = 0;i < 35;i++)      {       write_bit(1);//写数据位1       }      p_U2270B_CFE = 1;      led_light1 = 0;   led_light = 1;   delay_2(40000);//测试使用       //write_block(cominceptbuff[4],p);       p_U2270B_CFE = 1;      bankdata[20] = cominceptbuff[0];//密码存入       bankdata[21] = cominceptbuff[1];      bankdata[22] = cominceptbuff[2];      bankdata[23] = cominceptbuff[3];    }    else if (x == write_command1)//配置卡参数:初始化     {      uchar data *data p;      p = cominceptbuff;      write_bit(1);//写操作码1:10       write_bit(0);//写操作码0       write_bit(0);//写锁定位0               write_block(cominceptbuff[4],p);      p_U2270B_CFE=  1;    }    //psw=1  pssword mode     else if(x == write_command2)  //密码写数据    {      uchar data*data p;      p = &bankdata[24];      write_bit(1);//写操作码1:10       write_bit(0);//写操作码0       write_password(p);//发口令       write_bit(0);//写锁定位0       p = cominceptbuff;      write_block(cominceptbuff[4],p);//写数据            }    else if(x == write_command3)//aor    //唤醒 {      //cominceptbuff[1]操作码10 X xxxxxB       uchar data *data p;      p = cominceptbuff;      write_bit(1);//10       write_bit(0);             write_password(p);//密码       p_U2270B_CFE = 1;//此时数据不停的循环传出     }    else //停止操作码     {      write_bit(1);//11       write_bit(1);             p_U2270B_CFE = 1;         }    p_U2270B_CFE = 1;    delay_2(560);//5.6ms     }    /************************************/    void f_clearpassword()//清除密码     {    uchar data *data p;    uchar i,x;          p = &bankdata[24];//原密码     p_U2270B_CFE = 0; delay_2(18);//start gap>150us     //操作码10:10xxxxxxB     write_bit(1);    write_bit(0);              for(x = 0;x < 4;x++)//发原密码     {             DATA = *(p++);      for(i = 0;i < 8;i++)      {       write_bit(BIT0);       DATA >>= 1;      }    }    write_bit(0);//锁定位0:0     p = &cominceptbuff[0];    write_block(0x00,p);//写新配置参数:pwd=0             //密码无效:即清除密码     DATA = 0x00;//停止操作码00000000B     for(i = 0;i < 2;i++)    {    write_bit(BIT7);    DATA <<= 1;    }    p_U2270B_CFE = 1;       delay_2(560);//5.6ms     }    /*********************************/    void f_changepassword()//修改密码            {       uchar data *data p;    uchar i,x,addr;    addr = 0x07;//block7     p = &Nkey_a[0];//原密码     DATA = 0x80;//操作码10:10xxxxxxB     for(i = 0;i < 2;i++)    {      write_bit(BIT7);      DATA <<= 1;    }    for(x = 0;x < 4;x++)//发原密码     {             DATA = *(p++);      for(i = 0;i < 8;i++)      {       write_bit(BIT7);       DATA >>= 1;      }    }    write_bit(0);//锁定位0:0     p = &cominceptbuff[0];    write_block(0x07,p);//写新密码     p_U2270B_CFE = 1;    bankdata[24] = cominceptbuff[0];//密码存入     bankdata[25] = cominceptbuff[1];    bankdata[26] = cominceptbuff[2];    bankdata[27] = cominceptbuff[3];    DATA = 0x00;//停止操作码00000000B     for(i = 0;i < 2;i++)    {      write_bit(BIT7);      DATA <<= 1;    }    p_U2270B_CFE = 1;       delay_2(560);//5.6ms     }    /***************************子函数***********************************/    void write_bit(bit x)//写一位     {    if(x)    {      p_U2270B_CFE = 1;   delay_2(32);//448*11.0592/120=42延时448us       p_U2270B_CFE = 0;   delay_2(28);//280*11.0592/120=26写1     }    else    {      p_U2270B_CFE = 1;   delay_2(92);//192*11.0592/120=18       p_U2270B_CFE = 0;   delay_2(28);//280*11.0592/120=26写0     }    }    /*******************写一个block*******************/    void write_block(uchar addr,uchar data *data p)    {    uchar i,j;        for(i = 0;i < 4;i++)//block0数据     {             DATA = *(p++);      for(j = 0;j < 8;j++)      {       write_bit(BIT0);       DATA >>= 1;      }    }    DATA = addr <<= 5;//0地址     for(i = 0;i < 3;i++)    {      write_bit(BIT7);      DATA <<= 1;    }                   }    /*************************************************/    void write_password(uchar data *data p)    {    uchar i,j;        for(i = 0;i < 4;i++)//     {             DATA = *(p++);      for(j = 0;j < 8;j++)      {       write_bit(BIT0);       DATA >>= 1;      }    }        }   /*************************************************/   void main()    {    initial();    TI = RI = 0;    ES = 1;    EA = 1;  delay_2(28);   //f_readcard();     while(1) {   f_readcard();      //读卡   f_writecard(command1);  //写卡    f_clearpassword();   //清除密码     f_changepassword();    //修改密码 } }

    标签: 12345

    上传时间: 2017-10-20

    上传用户:my_lcs

  • 自适应模糊滑模控制方法探究

    随着模糊滑模理论的发展和应用,对模糊滑模控制理论的研究提 出了新的要求,本文针对模糊滑模控制研究中存在的一些问题进行了 深入研究,并最终得出了一系列相应的研究结果。

    标签: 模糊 控制方法 滑模

    上传时间: 2018-08-18

    上传用户:2113583389@qq.com

  • 淋浴器温度

    淋浴器温度控制调节采用MAT LAB 的附加组件Simulink, 仿真系 统的框图如图1 所示。图中的虚线为模糊控制器, 作为二维模糊控制器机构以水的温度偏差temp 和 流量偏差f low 为输入量, 采用模糊推理方法对水 的温度偏差和流量偏差进行整定, 用来确定冷水阀 门和热水阀门的开口大小cold 和hot 以便控制冷 热水的流量, 构成2 输入2 输出的一阶模糊控制系 统; 模糊推理与去模糊化采用MIN - MAX 法及重 心法, 并用MA TLAB 模糊推理工具箱来编辑模糊 控制器。 图1

    标签: 淋浴器 温度

    上传时间: 2018-10-12

    上传用户:一只虫虫

  • 电动汽车车载光伏充电系统设计与实现

    针对电动汽车动力电池组长期不能完全充满而影响其使用寿命,设计了一种光伏电池车载充电装置,能够对动力电池组长时间小电流涓流充电以改善其充电状态,同时部分补充电池组能量,延长电动汽车续航里程与使用寿命。采用TMS320F2808 DSP芯片作为控制核心、以BOOST升压变换器作为主电路的硬件设计方案,完成了主要元器件的选型和参数整定,对设计参数进行了仿真验证和优化,并研制了样机。制定了高性能算法与控制策略,既能完成光伏电池最大输出功率的跟踪,又能提高电池的充电效率,并基于MATLAB平台完成了DSP嵌入式应用程序设计,生成代码。配备了车载监控系统,实现良好的人机交互功能。实验结果表明:该装置性能稳定,光伏电池最大输出功率跟踪速度快,稳态误差小,效率高,并具有防止电池组过充电保护,人性化的人机交互平台,有很强的实用性。

    标签: 电动汽车 光伏 充电 车载 系统设计

    上传时间: 2018-10-17

    上传用户:cyyyyyy

  • 基于STM32的无刷直流电机控制器硬件电路设计及实验研究

    以STM32F103C8T6为核心,设计了无刷直流电机控制器硬件电路。电路主要包括IR2310构成的PWM驱动电路、IRF3808构成的逆变电路、增量式旋转编码构成的速度反馈电路。控制器具有CAN和RS232通信接口,可与计算机或PLC构成速度或位置伺服系统。利用由xPC目标搭建的半实物仿真平台对PI参数进行整定。测试了控制器的速度伺服响应性能,给定速度为2400rpm时,控制器响应时间为0.32s。实验结果表明,系统工作可靠,稳定性好,响应速度快,可以满足上肢康复机器人的机械臂速度控制性能要求。The hardware circuit of Brushless DC motor controller is designed by taking STM32F103C8T6 as the core,which mainly includes PWM driving circuits made up of IR2310,inverter circuit formed by IRF3808,speed feedback circuit composed of incremental rotary encoder and so on.Speed servo control system or position servo control system can be composed of BLDM controller with computer or PLC through CAN communication interface or RS232 serial communication interface.By using the hardware in the loop simulation platform built by xPC target,the PI parameters are set up.The Speed servo response performance of the controller is tested.When the speed is 2 400 rpm,the response time of the controller is 0...

    标签: stm32 无刷直流电机

    上传时间: 2022-05-07

    上传用户:

  • PID算法及其FPGA实现

    PID控制器结构清晰,参数可调,适用于各种控制对象,PID控制器的核心思想是针对控制对象的控制需求,建立描述对象动态特性的数学模型,通过PID参数整定实现在比例,微分,积分三个方面参数调整的控制策略来达到最佳系统响应和控制效果

    标签: verilog pid FPGA

    上传时间: 2022-05-12

    上传用户:qdxqdxqdxqdx

  • 赛元SC95F智能风扇项目源码

    功能设计:1、风扇调速模式;        A、3档调速,低中高风速        B、智能感知控制模式        根据环境温度和人体感应控制风扇启动以及风速大小和摇头功能。        首先利用温度传感器DS18B20检测当前环境温度,当环境温度>25度时,此时又通过人体红外感应传感器感应到有人时,风扇自动启动。温度越高风扇风速越大。温度>32度时风速最大,当温度小于25度时,风扇自动关闭待机。        当风扇人体感应检测到人离开10分钟后,风扇自动停止待机。当检测到人时再重新启动。当夜间0点至早7点除外,无论是否有人都不关机。2、        摇头功能3、        定时时间功能,最长8小时。以分钟计:0,10,20,30,40,50,60,90,120,180,240,300,360,420,480。4、支持红外遥控器和风扇本身按键(开机键,功能键,风速模式切换键,摇头按键,定时按键),按键使用赛元的触摸按键资源。5、OLED液晶屏信息显示        当前环境温度、湿度显示:利用DHT11温湿度传感器检测房间温湿度,当风扇待机时,任意按键后显示。        风扇启动后显示风速模式和大小,是否摇头标志以及房间当前检测温度。        风扇启动后当设置了定时关机时间后,会显示定时时间倒计时。        利用BaseTime定时器定时1秒实现了实时时间和日期,通过按键设置并在OLED上显示。

    标签: sc95f 智能风扇

    上传时间: 2022-05-18

    上传用户: