博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SMT(SF)
阅读量:4548 次
发布时间:2019-06-08

本文共 8921 字,大约阅读时间需要 29 分钟。

示例一:

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

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

 

SMT(SF)

uint iPwmDuty;        uint temp,temp4,temp6;        static uint LastiPwmDuty;            temp = AdConvert(AN_TEMPERATURE);        temp = temp/25; //放大10倍,保留一位小数                temp6 = (temp+4)/10;        temp4 = (temp+6)/10;        temp = temp/10;                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 = 0;    } if (temp > 80)//   1V = 1/2.5/4.096*4096 = 400;         0.1V = 40;     {        ChgState = TRUE;                 }    else if(temp <= 0)    {        ChgState = FALSE;             }    return ChgState;}

 

  示例三:

//#include
#include
#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.5Vvoid 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(8); 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 <180){
//12V LoadConnect3 = Connect3>>1; LoadDisConnect3 = DisConnect3>>1; LoadConnect2 = Connect2>>1; LoadDisConnect2 = DisConnect2>>1; LoadConnect1 = Connect1>>1; LoadDisConnect1 = DisConnect1>>1; }else if(BAT_VOLT >360){
//48V LoadConnect3 = Connect3<<1; LoadDisConnect3 = DisConnect3<<1; LoadConnect2 = Connect2<<1; LoadDisConnect2 = DisConnect2<<1; LoadConnect1 = Connect1<<1; LoadDisConnect1 = DisConnect1<<1; }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(1) { BAT_SENSE = MiddleADValue(8); 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(30000); }}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
#include
#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.5Vvoid 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(8); 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 <180){
//12V LoadConnect3 = Connect3>>1; LoadDisConnect3 = DisConnect3>>1; LoadConnect2 = Connect2>>1; LoadDisConnect2 = DisConnect2>>1; LoadConnect1 = Connect1>>1; LoadDisConnect1 = DisConnect1>>1; }else if(BAT_VOLT >360){
//48V LoadConnect3 = Connect3<<1; LoadDisConnect3 = DisConnect3<<1; LoadConnect2 = Connect2<<1; LoadDisConnect2 = DisConnect2<<1; LoadConnect1 = Connect1<<1; LoadDisConnect1 = DisConnect1<<1; }else{
//24V LoadConnect3 = Connect3; LoadDisConnect3 = DisConnect3; LoadConnect2 = Connect2; LoadDisConnect2 = DisConnect2; LoadConnect1 = Connect1; LoadDisConnect1 = DisConnect1; } flag = 0; RLY1 = RLY_OFF; RLY2 = RLY_OFF; RLY3 = RLY_OFF; LED1 = LED_OFF; LED2 = LED_OFF; LED3 = LED_OFF; } while(1) { BAT_SENSE = MiddleADValue(8); BAT_VOLT = (uint)(BAT_SENSE*0.78125);//5*160/1024 =800/1024 = 0.78125 //Determine which range of BAT_VOLT if(BAT_VOLT
=LoadDisConnect1)&&(BAT_VOLT
1)//由大到小 { //RLY1 = RLY1; RLY2 = RLY_OFF; RLY3 = RLY_OFF; }else if(flag <= 1){ } flag = 1; } else if((BAT_VOLT>=LoadDisConnect2)&&(BAT_VOLT
2) { //RLY1 = RLY1; //RLY2 = RLY2; RLY3 = RLY_OFF; } flag = 2; } /*-------------------------------------------------------*/ else if((BAT_VOLT>=LoadDisConnect3)&&(BAT_VOLT
=LoadConnect1)&&(BAT_VOLT
=LoadConnect2)&&(BAT_VOLT
=LoadConnect3) { RLY1 = RLY_ON; RLY2 = RLY_ON; RLY3 = RLY_ON; flag = 6; } DisplayLed(); _delay(30000); }}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 }}

 

 

施密特算法

转载于:https://www.cnblogs.com/liushao/p/7324089.html

你可能感兴趣的文章
C++读取文本文件
查看>>
Python 字典排序
查看>>
sql中写标量函数生成大写拼音首字母
查看>>
ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler)
查看>>
服务器返回状态码说明
查看>>
GitHub for Windows提交失败“failed to sync this branch”
查看>>
linux 安装 git
查看>>
Margin
查看>>
完成登录与注册页面的前端
查看>>
centos 源码安装php7
查看>>
Log4j详细教程
查看>>
UVa-1368-DNA序列
查看>>
ConfigParser模块
查看>>
如何开发优质的 Flutter App:Flutter App 软件测试指南
查看>>
决胜Flutter 第一章 熟悉战场
查看>>
如何开发优质的 Flutter App:Flutter App 软件调试指南
查看>>
决胜经典算法之冒泡排序
查看>>
决胜经典算法之选择排序
查看>>
11、求二进制中1的个数
查看>>
【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--请求处理结果适配篇(7/8)...
查看>>