亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? m16_rectctrl.c

?? 通信電源中
?? C
?? 第 1 頁 / 共 2 頁
字號:
// ATmega16_MCtrl_4.0 : 2005-02-24

//ICC-AVR application builder : 2004-12-8 11:04:46
// Target : M16
// Crystal: 8.0000Mhz

#include <iom16v.h>
#include <macros.h>
#include <slavr.h>

#define uchar unsigned char
#define uint 	unsigned int
#define ulong unsigned long

uchar  *DBYTE;	   								//DBYTE指針,指向字節地址

//Signal bit definitions
#define YELON		PORTB&=~(1<<PB6)	//黃燈亮,USART發送
#define	YELOFF	PORTB|=(1<<PB6)		//黃燈滅,USART接收

#define SIO_RX_LEN 6
#define SIO_TX_LEN 10

#define RCT_CUR_RANG 400 					//1023 -- 40A

//聲明變量一定要賦初值!!
//UART Parameters
uchar sio_rx_num=0;								//接收字節數
uchar sio_tx_num=0;								//發送字節數
uchar sio_rx_buf[SIO_RX_LEN];			//接收幀緩沖區
uchar sio_tx_buf[SIO_TX_LEN];			//應答幀緩沖區

//Other Parameters

uchar rct_cur_channel=0;					//AD通道
uint 	adc_rel=0;									//AD轉換結果

uint 	ibuf[9];										//AD采樣數組

uchar	flag_rct=0;									//0:浮沖(默認)  1:均充
uint	vol_flt=0;									//模塊浮沖電壓
uint	vol_ave=0;									//模塊均充電壓
uint	cur_chr=0;									//模塊充電限流
uint	cur_out=0;									//模塊輸出限流

uint  ad_vol_set=0;								//調壓輸出測量值
uint  pwm_vol_set=0;							//PWM調壓輸出(0-1023)
uint	pwm_cur_lmt=0;							//PWM調壓輸出(0-1023)
uint  vol_set=0;									//調壓輸出設置值(0-1023)
uint  cur_lmt=0;									//限流輸出設置值(0-1023)

uchar id_addr=0;									//模塊組地址
uchar rct_addr=0;									//模塊地址
uchar rct_pow=0;									//模塊關機————聲明變量時一定要賦初值(編譯器的Bug)!!
uchar rct_warn=0;									//模塊告警
uint  rct_cur[6];									//模塊電流

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

uchar bittest(uchar var,uchar bitno)	//位測試
{
	if((var>>bitno)&0x01==1)
		return 1;
 	else
 		return 0;
}

void port_init(void)
{
 	PORTA = 0b00000000;									//AD不要上拉電阻
 	DDRA  = 0b00000000;					
	PORTB = 0b11000000;									//模塊全開機
 	DDRB  = 0b11111111;
 	PORTC = 0b11111111;
 	DDRC  = 0b01010000;
 	PORTD = 0b11111111;
 	DDRD  = 0b00110010;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Watchdog initialize
// prescale: 2048K
void watchdog_init(void)
{
 	WDR(); 					//看門狗計數清零 - this prevents a timout on enabling
 	WDTCR = 0x0F; 	//使能watchdog,并且,采用2048K分頻,典型溢出時間5V時2.1S - dont forget to issue WDRs
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void get_warn_status(void)						//獲得模塊狀態
{
	uchar t=0,img_PINC=0,img_PIND=0;

  PORTC|=(1<<PC6);										//VSET=1,設置模塊狀態比較值3.3V
	delay_us(10);
	img_PINC=PINC;
	img_PIND=PIND;
	t=((img_PINC&0x02)>>1)|((img_PINC&0x01)<<1)|((img_PIND&0x80)>>5)|((img_PIND&0x40)>>3)|((img_PIND&0x08)<<1)|((img_PIND&0x04)<<3);

	rct_warn=t&0x3F;										//獲得模塊告警信號
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void pow_process(void)								//關機處理(0為開機,1為關機)
{		
	if(bittest(rct_pow,0))							//開機0
		PORTB&=~(1<<PB0);
	else	 															//SHUT0
		PORTB|=(1<<PB0);
	if(bittest(rct_pow,1))							//開機1
		PORTB&=~(1<<PB1);
	else										 						//SHUT1
		PORTB|=(1<<PB1);
	if(bittest(rct_pow,2))							//開機2
		PORTB&=~(1<<PB2);
	else										 						//SHUT2
		PORTB|=(1<<PB2);
	if(bittest(rct_pow,3))							//開機3
		PORTB&=~(1<<PB3);
	else										 						//SHUT3
		PORTB|=(1<<PB3);
	if(bittest(rct_pow,4))							//開機4
		PORTB&=~(1<<PB4);
	else										 						//SHUT4
		PORTB|=(1<<PB4);
	if(bittest(rct_pow,5))							//開機5
		PORTB&=~(1<<PB5);
	else										 						//SHUT5
		PORTB|=(1<<PB5);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//ADC initialize
// Conversion time: 208uS
void adc_init(void)
{
  ADCSRA= 0x00; //disable adc
  ADMUX = 0x1F; //select adc input GND
  ACSR  = 0x80;	//禁用模擬比較器
  ADCSRA|=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS2)|(1<<ADPS1);	//使能ADC,128預分頻
}

void adc_start(uchar adc_chn)					//啟動一次指定通道AD轉換,返回轉換結果
{
	ADMUX=adc_chn&0x07;									//指定通道
	delay_us(20);												//延時以使通道穩定!!
	ADCSRA|=(1<<ADSC);									//啟動一次轉換
	while(bittest(ADCSRA,ADSC));				//等待轉換完畢
	adc_rel=ADC&0x3ff;									//轉換完畢,立刻得到結果
}

uint adc_execute(uchar adc_chn)				//執行9次AD轉換,對轉換結果進行防脈沖干擾平均濾波
{
	uchar i=0;
	uint  sum=0;
	uint  ad_max=0,ad_min=0;

	for(i=0;i<9;i++)										//采樣9次(約20ms)
	{
		adc_start(adc_chn);
		ibuf[i]=adc_rel;
	}

	ad_max=ad_min=ibuf[0];							//求出9次采樣的最大值和最小值
	for(i=1;i<9;i++)
	{
		if(ibuf[i]<ad_min)
    	ad_min=ibuf[i];
  	if(ibuf[i]>ad_max)
    	ad_max=ibuf[i];
	}

	for(i=0;i<9;i++)										//求排除最大值、最小值之外的7個數的平均值
  	sum+=ibuf[i];
 	sum-=ad_max;
 	sum-=ad_min;
 	sum/=7;

	return sum&0x3ff;
}

void rct_measure(void)								//測量每一路電流(電壓)值
{
	ulong ad_result=0;

	//開始測量一路模塊電流(一次主循環只測一次電流值)
	switch(rct_cur_channel)
	{
		case 0:
		{
			ad_result=adc_execute(PA7);
			break;
		}
		case 1:
		{
			ad_result=adc_execute(PA6);
			break;
		}
		case 2:
		{
			ad_result=adc_execute(PA5);
			break;
		}
		case 3:
		{
			ad_result=adc_execute(PA3);
			break;
		}
		case 4:
		{
			ad_result=adc_execute(PA2);
			break;
		}
		case 5:
		{
			ad_result=adc_execute(PA1);
			break;
		}
	}

	ad_result*=RCT_CUR_RANG;
 	ad_result/=1024;
	
	if(ad_result>RCT_CUR_RANG)
	  ad_result=0;

 	rct_cur[rct_cur_channel]=(uint)ad_result;

	rct_cur_channel++;
 	rct_cur_channel%=6;
	//結束測量一路模塊電流

	ad_result=adc_execute(PA0);					//測量電壓控制輸出(反饋)值
	ad_vol_set=(uint)ad_result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//TIMER1 initialize - prescale:1
// WGM: 3) PWM 10bit phz correct, TOP=0x3FF
// desired value: 3.910KHz
// actual value:  3.910KHz (0.0%)
void timer1_init(void)
{
 	TCCR1B = 0x00; 			//stop
 	OCR1AH = 0x03;
 	OCR1AL = 0xFF;
 	OCR1BH = 0x03;
 	OCR1BL = 0xFF;
 	ICR1H  = 0x03;			//top value
 	ICR1L  = 0xFF;
 	TCCR1A|=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11)|(1<<WGM10);
 	TCCR1B|=(1<<CS10); 	//start Timer
}

uint uint_abs_sub(uint i,uint j)			//無符號整數絕對值減法
{
	if(i>j)
  	return i-j;
 	else
	  return j-i;
 }

uchar uchar_abs_sub(uchar i,uchar j)	//無符號字節絕對值減法
{
	if(i>j)
  	return i-j;
 	else
   	return j-i;
}

/**************************************************************
 下面函數計算與調整輸出電壓

 目的:消除7805供電電壓、ATmega16以及運放等電路產生的輸出誤差
 此函數很重要:因為控制電壓信號與模塊輸出電壓有12倍增益關系,
               不同模控板之間0.1V的輸出壓差將造成不均流現象。
               
 函數對設定值的設定調整范圍:正負50(實際試驗正負10)
***************************************************************/
#define DIF_ZERO    128
#define MAX_DIF_ERR 25
#define MAX_ITG_ERR 51

void  calc_vol_set_pwm(void)   				//計算與調整輸出電壓
{
	static uchar err_itg;								//電壓控制信號
	uchar t;
 	uint 	i;
 	ulong vol_chg=0;
 
 	vol_set=(flag_rct==0)?vol_flt:vol_ave;	//采用浮沖電壓或均沖電壓
 	
 	vol_chg=(ulong)1729*vol_set;				//將命令電壓值換算成PWM設置值。考慮到界限母排的電壓降,此PWM值應比命令值略大!!
 	vol_chg=(vol_chg/100-1299)/100;
 	vol_set=(uint)vol_chg; 	
 	
 	if(uint_abs_sub(vol_set,ad_vol_set)>2*MAX_DIF_ERR)	//計算設定于采樣的誤差是否大于50
  {
  	err_itg=DIF_ZERO;									//誤差積分清0
    if(ad_vol_set<vol_set) 						//PWM數值步進MAX_DIF_ERR調整 
    	pwm_vol_set=(pwm_vol_set>1023-MAX_DIF_ERR)?1023:pwm_vol_set+MAX_DIF_ERR;								
    else
      pwm_vol_set=(pwm_vol_set<MAX_DIF_ERR)?0:pwm_vol_set-MAX_DIF_ERR;
  }
 	else																//計算誤差積分
  {
  	err_itg=(err_itg>DIF_ZERO+2*MAX_DIF_ERR)?DIF_ZERO+2*MAX_DIF_ERR:err_itg;
    err_itg=(err_itg<DIF_ZERO-2*MAX_DIF_ERR)?DIF_ZERO-2*MAX_DIF_ERR:err_itg;
      
    if(ad_vol_set<vol_set) 
    	err_itg-=(uchar)(vol_set-ad_vol_set);
    else
      err_itg+=(uchar)(ad_vol_set-vol_set);

    t=uchar_abs_sub(DIF_ZERO,err_itg)/MAX_ITG_ERR;	//計算積分誤差調整值,增益1/25(經驗數值,此值過大、過小都引起系統輸出電壓振蕩) 
    
    if(t)															//根據調正量修正PWM輸出
    {
    	if(err_itg<DIF_ZERO)
      	pwm_vol_set=(pwm_vol_set>1023-t)?1023:pwm_vol_set+t;
      else
        pwm_vol_set=(pwm_vol_set<t)?0:pwm_vol_set-t;
    }
  }

	if(uint_abs_sub(vol_set,pwm_vol_set)>2*MAX_DIF_ERR)	//修正范圍超出50,按照最大正負50調整
  {
  	if(vol_set>pwm_vol_set)
    {
    	if(vol_set<2*MAX_DIF_ERR)
      	i=0;
      else

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男人都懂的| 精品在线观看免费| 老司机精品视频在线| 国产 欧美在线| 欧美成人一级视频| 亚洲成人一区在线| 成人av在线一区二区| 91麻豆精品国产91久久久久久久久 | 91麻豆精品国产91久久久久| 亚洲人成精品久久久久久| 青青草一区二区三区| 91国偷自产一区二区三区成为亚洲经典 | 日本韩国欧美在线| 国产欧美日韩久久| 九色综合狠狠综合久久| 欧美性大战久久| 亚洲青青青在线视频| 国产成a人亚洲| 久久免费美女视频| 国产一本一道久久香蕉| 日韩欧美视频在线| 日产国产高清一区二区三区| 欧美最猛黑人xxxxx猛交| 中文字幕在线不卡一区| 国产成人精品三级| 久久精品一区二区| 国产成人超碰人人澡人人澡| 久久久久久久综合日本| 国产一区二区三区久久久| 日韩免费高清电影| 久久精品国产亚洲一区二区三区| 欧美性色欧美a在线播放| 亚洲与欧洲av电影| 欧美亚洲动漫精品| 亚洲成av人影院在线观看网| 欧美性一二三区| 首页欧美精品中文字幕| 91精品在线麻豆| 日本特黄久久久高潮| 91精品国产高清一区二区三区蜜臀| 亚洲综合男人的天堂| 欧美精品第1页| 免费日本视频一区| 久久蜜臀中文字幕| voyeur盗摄精品| 一区二区理论电影在线观看| 日韩午夜av一区| 日本在线不卡视频| 久久久午夜电影| 成人免费看的视频| 一区二区三区在线观看动漫| 欧美日韩精品一区二区天天拍小说 | 久久综合九色综合97_久久久| 久久国产尿小便嘘嘘| 久久久综合九色合综国产精品| 国产综合色视频| 国产精品理伦片| 欧美色综合天天久久综合精品| 日韩精品午夜视频| 久久天堂av综合合色蜜桃网 | 久久精品国产第一区二区三区| 2欧美一区二区三区在线观看视频| 国产精品一二三四区| 亚洲精品视频免费看| 日韩美女在线视频| 色综合一区二区三区| 日本中文字幕一区二区有限公司| 国产日韩精品一区| 欧美日韩视频专区在线播放| 美女免费视频一区| 国产精品麻豆网站| 69p69国产精品| 欧美日韩aaaaa| 国产精品一区二区x88av| 亚洲亚洲人成综合网络| 久久久久久免费| 欧美午夜一区二区三区| 国产尤物一区二区| 亚洲va天堂va国产va久| 国产欧美综合色| 欧美一区二区三区不卡| 91小视频免费看| 国产99久久久国产精品| 午夜精品福利久久久| 中文字幕一区二区三区不卡在线| 欧美老年两性高潮| 99久久精品免费看国产免费软件| 美女网站在线免费欧美精品| 亚洲美女少妇撒尿| 国产色综合久久| 欧美r级电影在线观看| 日本大香伊一区二区三区| 国产ts人妖一区二区| 极品少妇一区二区三区精品视频| 亚洲最大的成人av| 欧美激情一区二区| 久久久另类综合| 日韩一本二本av| 日韩av不卡一区二区| 黄色成人免费在线| 在线观看免费视频综合| 亚洲女同一区二区| 亚洲天天做日日做天天谢日日欢 | 国产福利一区二区三区视频在线| 亚洲成年人影院| 五月综合激情网| 同产精品九九九| 精品电影一区二区| 久久精品亚洲麻豆av一区二区| 久久精品一区四区| 一区二区日韩av| 免费成人在线视频观看| 懂色av一区二区三区免费观看| 91免费视频网| 精品国产成人系列| 综合电影一区二区三区| 日韩成人伦理电影在线观看| 国产精品亚洲人在线观看| 91麻豆国产自产在线观看| 777a∨成人精品桃花网| 国产精品网曝门| 日日夜夜精品视频免费| 成人午夜碰碰视频| 欧美人xxxx| 18成人在线视频| 激情偷乱视频一区二区三区| 99re在线视频这里只有精品| 久久精品一区八戒影视| 爽好多水快深点欧美视频| 成人精品国产免费网站| 日韩一区二区免费在线观看| 最好看的中文字幕久久| 国内精品伊人久久久久av一坑| 日本韩国视频一区二区| 欧美国产一区视频在线观看| 日韩 欧美一区二区三区| 日本高清无吗v一区| 国产视频一区二区三区在线观看| 日韩成人精品视频| 日本久久精品电影| 国产精品水嫩水嫩| 国产麻豆精品视频| 日韩亚洲欧美一区二区三区| 一个色在线综合| 91亚洲午夜精品久久久久久| 国产午夜精品久久久久久免费视 | 在线观看网站黄不卡| 欧美激情一区在线观看| 全部av―极品视觉盛宴亚洲| 欧美主播一区二区三区| 中文字幕亚洲一区二区va在线| 加勒比av一区二区| 日韩一级二级三级| 日韩和欧美一区二区| 色综合天天综合网天天看片| 国产精品无码永久免费888| 国内成人自拍视频| 精品国产一二三| 美女爽到高潮91| 91精品国产综合久久精品麻豆| 亚洲国产精品嫩草影院| 91黄色免费版| 亚洲一区二区三区在线播放| 91福利在线导航| 一区二区三区在线观看欧美| 色老汉一区二区三区| 亚洲精品国产一区二区精华液 | 亚洲高清中文字幕| 欧美午夜精品免费| 亚洲一级二级三级| 欧美日韩免费高清一区色橹橹| 亚洲综合网站在线观看| 欧美日韩在线播放| 日韩电影网1区2区| 精品国产不卡一区二区三区| 国产在线视频一区二区三区| 久久午夜色播影院免费高清| 国产成人aaaa| 亚洲日穴在线视频| 在线观看av一区二区| 亚洲一区二区美女| 欧美一级夜夜爽| 韩国成人精品a∨在线观看| 久久久久高清精品| 成人av免费在线| 一级做a爱片久久| 在线不卡一区二区| 久久精品国产一区二区| 欧美经典一区二区| 欧美制服丝袜第一页| 免费人成在线不卡| 中文一区二区在线观看| 91美女蜜桃在线| 人人爽香蕉精品| 国产女人aaa级久久久级| 日韩欧美成人激情| 成人一级黄色片| 亚洲图片欧美色图| 欧美大黄免费观看| 99vv1com这只有精品|