示例一:

        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. 【PHP】统计问卷调查结果的选项票数和百分比

    遇到问题: 有以下数组,每一条记录是用户的每一条问卷题目的回答情况,q_id是问题id,o_id是选项id.需要统计每一个选项被选择的次数和每个选项占该问题的百分比.如问题1的选项有A和B,一个用户选 ...

  2. python基础之初识

    一. 计算机是什么 基本组成: 主板+cpu+内存 cpu: 主频, 核数(16) 内存:大小(8G, 16G, 32G) 型号: DDR3, DDR4, DDR5, 主频(海盗船,玩家国度) 显卡: ...

  3. Python3 函数参数

    # # 常规参数 # def jiafa(a,b): # print(a+b) # # jiafa(5,6) # # # def xinxi(name,location,sex='male'): # ...

  4. Go语言的标准net库使用

    Go语言的标准net库使用 与大多数语言一样,Go的标准库是很全的,因为Go的出现本来就是为了网络通信的高并发实现,所以其相关的网络库封装得很简洁,也更加的易读.这里对使用到的api进行记录. net ...

  5. go学习笔记-语言指针

    语言指针 定义及使用 变量是一种使用方便的占位符,用于引用计算机内存地址.取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址. 一个指针变量指向了一个值的内存地址.类似于变量和常量, ...

  6. grunt in webstorm

    1.install grunt sudo npm install -g grunt-cli npm install grunt --save-dev

  7. Git的升级版本

    关于升级版本,例如我们要升级service版本,我们可以这样子操作 1.在master里面pull完了之后,到自己的分支,然后merge master里面的代码,然后把pom文件 里面的版本升一级,然 ...

  8. hdu1233 继续畅通工程 (最小生成树——并查集)

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  9. namenode处于安全模式怎么解决?

    当我们在hdfs上操作文件的时候,有时候会报错 ,出现namenode   in   safemode namenode处于安全模式的原因: 1.NameNode发现集群中DataNode丢失达到一定 ...

  10. 实用脚本 2 -- Linux下定时执行脚本

    今天学习Linux下定时执行脚本,看到一篇讲解比较好的文章,特此拿来分享. 原文链接:http://www.blogjava.net/decode360/archive/2009/09/18/2877 ...