示例一:

        uint iPwmDuty;
double temp; temp = (double)AdConvert(AN_TEMPERATURE);
temp = temp/; iPwmDuty = (int)(temp+0.5)>(int)temp?(int)temp+:(int)temp;

如果参数在xx.5附近,易产生不稳定摆动

SMT(SF)

        uint iPwmDuty;
uint temp,temp4,temp6;
static uint LastiPwmDuty; temp = AdConvert(AN_TEMPERATURE);
temp = temp/; //放大10倍,保留一位小数 temp6 = (temp+)/;
temp4 = (temp+)/;
temp = temp/; if(temp6 > temp)
{
iPwmDuty = temp6;
}
else if(temp4 == temp)
{
iPwmDuty = temp;
}
else
{
if(temp >= LastiPwmDuty)//由小到大
{
iPwmDuty = temp6;
}
else //(iPwmDuty < LastiPwmDuty)
{
iPwmDuty = temp4;
}
}
LastiPwmDuty = iPwmDuty;

示例二:

uchar CanCharge(void)
{
uint temp;
static uchar ChgState = FALSE; if(AdResult[AD_SUNBORD] > AdResult[AD_OPEN_BAT] )
{
temp = AdResult[AD_SUNBORD] - AdResult[AD_OPEN_BAT];
}
else
{
temp = ;
}
if (temp > )// 1V = 1/2.5/4.096*4096 = 400; 0.1V = 40;
{
ChgState = TRUE;
}
else if(temp <= )
{
ChgState = FALSE;
}
return ChgState;
}

示例三:

//#include<pic16f1828.h>
#include<htc.h>
#include "adc.h" __CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLRE_OFF&CP_ON&CPD_ON&BOREN_ON&CLKOUTEN_OFF&IESO_OFF&FCMEN_OFF);
__CONFIG(WRT_ALL&PLLEN_OFF&STVREN_ON&LVP_OFF); #define uchar unsigned char
#define uint unsigned int #define RLY1 LATA5
#define RLY2 LATA4
#define RLY3 LATC4 #define RLY_ON 0
#define RLY_OFF 1
#define LED_ON 1
#define LED_OFF 0
#define TRUE 1
#define FALSE 0 #define LED1 LATC2 //LED1(DS3)-RLY1
#define LED2 LATC1 //LED2(DS2)-RLY2
#define LED3 LATC0 //LED3(DS1)-RLY3 #define Connect3 262 //26.2V
#define DisConnect3 238 //23.8V
#define Connect2 260
#define DisConnect2 225
#define Connect1 255 //25.5V
#define DisConnect1 215 //21.5V void DisplayLed(void); void main()
{
uint BAT_SENSE ,BAT_VOLT;
static uint LoadConnect3,LoadConnect2,LoadConnect1;
static uint LoadDisConnect3,LoadDisConnect2,LoadDisConnect1;
static uchar RLY1_States,RLY2_States,RLY3_States; init_a2d(); TRISA = 0x08; //MCLR = 1;
TRISC = 0x40;
ANSELC= 0x40; //set anolog in BAT_SENSE = MiddleADValue();
BAT_VOLT = (uint)(BAT_SENSE*0.78125);//AD/1024*5*16 = (V); 5*160/1024 =800/1024 = 0.78125(参数放大10倍) //Automatic system voltage recognition
if(BAT_VOLT <){//12V
LoadConnect3 = Connect3>>;
LoadDisConnect3 = DisConnect3>>;
LoadConnect2 = Connect2>>;
LoadDisConnect2 = DisConnect2>>;
LoadConnect1 = Connect1>>;
LoadDisConnect1 = DisConnect1>>;
}else if(BAT_VOLT >){//48V
LoadConnect3 = Connect3<<;
LoadDisConnect3 = DisConnect3<<;
LoadConnect2 = Connect2<<;
LoadDisConnect2 = DisConnect2<<;
LoadConnect1 = Connect1<<;
LoadDisConnect1 = DisConnect1<<;
}else{//24V
LoadConnect3 = Connect3;
LoadDisConnect3 = DisConnect3;
LoadConnect2 = Connect2;
LoadDisConnect2 = DisConnect2;
LoadConnect1 = Connect1;
LoadDisConnect1 = DisConnect1;
} RLY1_States = FALSE;
RLY2_States = FALSE;
RLY3_States = FALSE;
RLY1 = RLY_OFF;
RLY2 = RLY_OFF;
RLY3 = RLY_OFF; LED1 = LED_OFF;
LED2 = LED_OFF;
LED3 = LED_OFF;
} while()
{
BAT_SENSE = MiddleADValue();
BAT_VOLT = (uint)(BAT_SENSE*0.78125);//5*160/1024 =800/1024 = 0.78125 if(BAT_VOLT < LoadDisConnect1)
{
RLY1_States = FALSE;
}
else if(BAT_VOLT > LoadConnect1)
{
RLY1_States = TRUE;
} if(BAT_VOLT < LoadDisConnect2)
{
RLY2_States = FALSE;
}
else if(BAT_VOLT > LoadConnect2)
{
RLY2_States = TRUE;
} if(BAT_VOLT < LoadDisConnect3)
{
RLY3_States = FALSE;
}
else if(BAT_VOLT > LoadConnect3)
{
RLY3_States = TRUE;
}
//=====================================================
if(RLY1_States == TRUE)
{
RLY1 = RLY_ON;
}
else
{
RLY1 = RLY_OFF;
}
if(RLY2_States == TRUE)
{
RLY2 = RLY_ON;
}
else
{
RLY2 = RLY_OFF;
}
if(RLY3_States == TRUE)
{
RLY3 = RLY_ON;
}
else
{
RLY3 = RLY_OFF;
}
DisplayLed();
_delay();
}
} void DisplayLed(void)
{
//LED state set synchronization
if(RLY1_States == TRUE)
{
LED1 = LED_ON;
}
else
{
LED1 = !LED1;
} if(RLY2_States == TRUE)
{
LED2 = LED_ON;
}
else
{
LED2 = !LED2;
} if(RLY3_States == TRUE)
{
LED3 = LED_ON;
}
else
{
LED3 = !LED3; //One LED twinkle
}
}
//#include<pic16f1828.h>
#include<htc.h>
#include "adc.h" __CONFIG(FOSC_INTOSC&WDTE_ON&PWRTE_OFF&MCLRE_OFF&CP_ON&CPD_ON&BOREN_ON&CLKOUTEN_OFF&IESO_OFF&FCMEN_OFF);
__CONFIG(WRT_ALL&PLLEN_OFF&STVREN_ON&LVP_OFF); #define uchar unsigned char
#define uint unsigned int #define RLY1 LATA5
#define RLY2 LATA4
#define RLY3 LATC4 #define RLY_ON 0
#define RLY_OFF 1
#define LED_ON 1
#define LED_OFF 0 #define LED1 LATC2 //LED1(DS3)-RLY1
#define LED2 LATC1 //LED2(DS2)-RLY2
#define LED3 LATC0 //LED3(DS1)-RLY3 #define Connect3 262 //26.2V
#define DisConnect3 238 //23.8V
#define Connect2 260
#define DisConnect2 225
#define Connect1 255 //25.5V
#define DisConnect1 215 //21.5V void DisplayLed(void); void main()
{
uchar flag;
uint BAT_SENSE ,BAT_VOLT; static uint LoadConnect3,LoadConnect2,LoadConnect1;
static uint LoadDisConnect3,LoadDisConnect2,LoadDisConnect1; init_a2d(); TRISA = 0x08; //MCLR = 1;
TRISC = 0x40;
ANSELC= 0x40; //set anolog in BAT_SENSE = MiddleADValue();
BAT_VOLT = (uint)(BAT_SENSE*0.78125);//AD/1024*5*16 = (V); 5*160/1024 =800/1024 = 0.78125(参数放大10倍) //Automatic system voltage recognition
if(BAT_VOLT <){//12V
LoadConnect3 = Connect3>>;
LoadDisConnect3 = DisConnect3>>;
LoadConnect2 = Connect2>>;
LoadDisConnect2 = DisConnect2>>;
LoadConnect1 = Connect1>>;
LoadDisConnect1 = DisConnect1>>;
}else if(BAT_VOLT >){//48V
LoadConnect3 = Connect3<<;
LoadDisConnect3 = DisConnect3<<;
LoadConnect2 = Connect2<<;
LoadDisConnect2 = DisConnect2<<;
LoadConnect1 = Connect1<<;
LoadDisConnect1 = DisConnect1<<;
}else{//24V
LoadConnect3 = Connect3;
LoadDisConnect3 = DisConnect3;
LoadConnect2 = Connect2;
LoadDisConnect2 = DisConnect2;
LoadConnect1 = Connect1;
LoadDisConnect1 = DisConnect1;
} flag = ;
RLY1 = RLY_OFF;
RLY2 = RLY_OFF;
RLY3 = RLY_OFF; LED1 = LED_OFF;
LED2 = LED_OFF;
LED3 = LED_OFF;
} while()
{
BAT_SENSE = MiddleADValue();
BAT_VOLT = (uint)(BAT_SENSE*0.78125);//5*160/1024 =800/1024 = 0.78125 //Determine which range of BAT_VOLT
if(BAT_VOLT<LoadDisConnect1)
{
RLY1 = RLY_OFF;
RLY2 = RLY_OFF;
RLY3 = RLY_OFF;
flag = ;
}
else if((BAT_VOLT>=LoadDisConnect1)&&(BAT_VOLT<LoadDisConnect2))
{
if(flag > )//由大到小
{
//RLY1 = RLY1;
RLY2 = RLY_OFF;
RLY3 = RLY_OFF;
}else if(flag <= ){ }
flag = ;
}
else if((BAT_VOLT>=LoadDisConnect2)&&(BAT_VOLT<LoadDisConnect3))
{
if(flag > )
{
//RLY1 = RLY1;
//RLY2 = RLY2;
RLY3 = RLY_OFF;
}
flag = ;
}
/*-------------------------------------------------------*/
else if((BAT_VOLT>=LoadDisConnect3)&&(BAT_VOLT<LoadConnect1))
{
//RLY1 = RLY1;
//RLY2 = RLY2;
//RLY3 = RLY3;
flag = ;
}
/*-------------------------------------------------------*/
else if((BAT_VOLT>=LoadConnect1)&&(BAT_VOLT<LoadConnect2))
{
if(flag < ){ RLY1 = RLY_ON;
//RLY2 = RLY2;
//RLY3 = RLY3;
}
flag = ;
}else if((BAT_VOLT>=LoadConnect2)&&(BAT_VOLT<LoadConnect3))
{
if(flag < )
{
RLY1 = RLY_ON;
RLY2 = RLY_ON;
//RLY3 = RLY3;
}
flag = ; }else if(BAT_VOLT>=LoadConnect3)
{
RLY1 = RLY_ON;
RLY2 = RLY_ON;
RLY3 = RLY_ON;
flag = ;
}
DisplayLed();
_delay();
}
} void DisplayLed(void)
{
//LED state set synchronization
if(RLY1 == RLY_ON)
{
LED1 = LED_ON;
}
else
{
LED1 = !LED1;
} if(RLY2 == RLY_ON)
{
LED2 = LED_ON;
}
else
{
LED2 = !LED2;
} if(RLY3 == RLY_ON)
{
LED3 = LED_ON;
}
else
{
LED3 = !LED3; //One LED twinkle
}
}

施密特算法

SMT(SF)的更多相关文章

  1. 查看Unix/Linux的CPU个数和内存大小,系统位数(转载)

    一.AIX 1.查看CPU数: (1) smtctl 从AIX5.3起,对于power5的机器,系统引入了SMT(Simultaneousmulti-threading)的功能,其允许两个处理线程在同 ...

  2. 备考2019年6月份PMP考试-分享一些考试笔记(二)

    最新比较经典的100道试题,有备考的小伙伴可以练练手,文章末尾附答案. 1     一个项目经理在运作一个数据中心安装项目.他发现相关方很恼火,因为他超出了预算,原因是人员费用要高于原先的计划.另外项 ...

  3. (0)Lora及LoraWAN

    Lora和LoraWAN的区别 LoRa经常被误用来描述整个LPWAN通信系统,其实Lora是Semtech拥有的专有调制格式. SX1272和SX1276 LoRa芯片使用称为chirp扩频(CSS ...

  4. (3)LoraWAN:链路控制、SF BW CR

    三.Introduction on LoRaWAN options 本文件描述了一种用于可为移动的或固定在一个固定位置的电池供电的终端设备而优化的LoRaWAN™网络协议.LORA™是一个由Semte ...

  5. 机器学习算法整理(五)决策树_随机森林——鹃尾花实例 Python实现

    以下均为自己看视频做的笔记,自用,侵删! 还参考了:http://www.ai-start.com/ml2014/ In [8]: %matplotlib inline import pandas a ...

  6. AIX常用命令汇总(转)

    在本文中,我将讨论这其中的一些核心命令.其目的旨在为您提供一个可用作便捷参考的列表.虽然这些命令的行为在所有 AIX 版本中都应该相同,但是仅在 AIX 5.3 下对它们进行了测试. 注意:以下段落中 ...

  7. Vue.js学习笔记(1)

    数据的双向绑定(ES6写法) 效果: 没有改变 input 框里面的值时

  8. 用C#实现MD5的加密(转载)

    方法一 首先,先简单介绍一下MD5 MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer scien ...

  9. 10分钟了解设计模式(C#)

    最近把<大话设计模式>重温了下(看完序才知道原来作者是也是博客园园友,这本书的最早博客版本在这里).体会最深的就是面向接口编程的重要性,如何在自己的项目中进行抽象,合理的利用各种设计模式. ...

随机推荐

  1. 图片懒加载 jquery.lazyload

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  2. IDEA项目启动报Unable to open debugger port (127.0.0.1:51554): java.net.SocketException "socket closed"

    启动报错: Unable to open debugger port (127.0.0.1:51554): java.net.SocketException "socket closed&q ...

  3. flask过滤器

    过滤器的本质就是函数.有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化.运算等等,而在模板中是不能直接调用 Python 中的某些方法,那么这就用到了过滤器. 过滤器的使用方 ...

  4. FIFO队列(First In First Out)和优先队列

    queue<类型名> q; q.size() - 返回队列中元素个数 q.empty() - 若队列为空,返回true ,否则返回false q.pop() - 删除队首元素,但不返回其值 ...

  5. Spring MVC怎么统一异常管理?

    1. 在类上加上@ControllerAdvice注解 2. 在方法上加上@ExceptionHandler注解 @ExceptionHandler(Exception.class) @Respons ...

  6. 博科brocade光纤交换机alias-zone的划分-->实操案例

    一,图形化操作 光纤交换机作为SAN网络的重要组成部分,在日常应用中非常普遍,本次将以常用的博科交换机介绍基本的配置方法. 博科300实物图: 环境描述: 如上图,四台服务器通过各自的双HBA卡连接至 ...

  7. WCF入门四[WCF的通信模式]

    一.概述 WCF的通信模式有三种:请求/响应模式.单向模式和双工通信. 二.请求/响应模式 请求/响应模式就是WCF的默认模式,前面几篇随笔中的示例都是这种模式,当客户端发送请求后(非异步状态下),即 ...

  8. 根据生产场景对Linux系统进行分区

    转自:http://oldboy.blog.51cto.com/2561410/629558 老鸟谈生产场景如何对linux系统进行分区? █  前言:    我们买房子时,会考虑1室1厅,2室1厅, ...

  9. 安装Sql Server 2008时出错

           在安装Sql Server 2008的时候,出现一个错误,说是"SQL Server 2005 Express tools"安装了,需要移除,但是我在控制面板里面找了 ...

  10. PostgreSQL 10.0 压缩版的 pgAdmin 不能用的问题

    PostgreSQL终于发布10.0正式版了!下载压缩版的更新了一下本机的版本,然后打开pgAdmin的时候总是报错“The application server could not be conta ...