會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)



« 1 2 3 (4) 5 6 7 ... 6873 »


Re: 想請教使用交換式電源的話 如何克服zcd偵測問題 (PIC16F1613)
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 13936
等級: 72; EXP: 17
HP : 1067 / 1779
MP : 4645 / 67911
離線
硬體電路出了問題,這些多出來的脈衝最好消完以後在送進 ZCD 的偵測腳位。

建議用個低通濾波器先率掉這些脈衝,只讓 60Hz 的訊號通過。可以將 560K ohm 改為兩個串聯式的電阻 270K + 270K ohm 電阻中間接個 1000pF 的電容看看。如果在不行改成 三個電阻+兩個電容的 拍型綠波器。

5月19日 12:38:16
轉換PDF檔 列印


想請教使用交換式電源的話 如何克服zcd偵測問題 (PIC16F1613)
初級會員
註冊日期:
2013/01/21 11:28
所屬群組:
註冊會員
文章: 34
等級: 4; EXP: 59
HP : 0 / 89
MP : 11 / 1137
離線
請教各位前輩,小弟也已參考過貴站的cip那份文件,也看過官網的zcd說明,但最後發現問題都不在那邊,而是在交換式電源的問題,波形如附圖

黃色線條的方波波形則是模擬跳入zcd中斷的時候,每跳一次反向一次這樣模擬,而青色線條的弦波則是ac 60hz訊號接zcdin腳的位置,中間已隔560k電阻,因為zcd點的訊號很小,所以偵測特別靈敏,可以看到連交換式電源的最大缺點漣波問題都偵測進去

眾前輩應該都知道交換式電源特性,裡面的d跟s腳會一直持續拉電,把5v放大看之後那個一根一根的漣波特別明顯,所以一個弦波偵測了跳了好幾次zcd中斷

因為案子有寬電源輸入以及成本的需求,所以使用簡單的lnk306交換式電源ic去做一個低壓給mcu吃,而程式確定沒問題,接過訊號產生器的訊號,也用過電容式降壓出來的的電源以及訊號,出來的相位調變都很正常,只有交換式電源才有這個問題

所以不知道有沒有前輩遇過這個問題,如何克服,zcd配合非隔離交換式電源的方式去做相位調變,謝謝

附加檔案:



jpg  456.jpg (84.72 KB)
11967_591e6021975e3.jpg 708X944 px

5月19日 11:01:53
轉換PDF檔 列印


Re: 有關CAN bus傳輸問題
新會員
註冊日期:
2011/05/22 18:13
所屬群組:
註冊會員
文章: 16
等級: 2; EXP: 74
HP : 0 / 43
MP : 5 / 765
離線
你怎麼看有漏封包??從你的描述只看得到一片30F4011,沒看到其他的device,不是你環境的問題,就是你設定,但從你的設定看起來好像又沒有問題,可以多提供一點你測試環境的說明嗎,這樣大家比較好幫你debug

5月19日 09:10:39
轉換PDF檔 列印


Re: 有關CAN bus傳輸問題
資深會員
註冊日期:
2004/07/23 16:25
所屬群組:
註冊會員
文章: 1149
等級: 29; EXP: 66
HP : 0 / 716
MP : 383 / 26867
離線
蝦米叫漏封包?

can bus 至少要有兩個『正常』的設備才能正常運作

一、沒有一個正常的can device ,你程式怎麼寫都不會正常

二、can bus 的傳輸,區區的1hz,500k 250k 都在傳了,不可能1hz 傳到會出錯

5月19日 01:25:51
轉換PDF檔 列印


Re: 有關CAN bus傳輸問題
新會員
註冊日期:
5月18日 15:19:28
所屬群組:
註冊會員
文章: 2
等級: 1; EXP: 2
HP : 0 / 0
MP : 0 / 0
離線
您好,大致上了解您的意思,就是發值時C1TX0CONbits.TXREQ會等於1,傳送完畢後會歸0,這樣對嗎?

我將發值的function改為:

void keep_send_electricity(void)
{
if(C1TX0CONbits.TXREQ == 0)
{
delay(500);
CAN1SendMessage(( CAN_TX_SID(0x791)) & CAN_TX_EID_DIS & CAN_SUB_NOR_TX_REQ ,
0 , can_info.iSend_CANData_purifiercln , 8 , 0 ) ;
CAN1AbortAll();
}
if(C1TX0CONbits.TXREQ == 0)
{
delay(500);
CAN1SendMessage(( CAN_TX_SID(0x792)) & CAN_TX_EID_DIS & CAN_SUB_NOR_TX_REQ ,
0 , can_info.iSend_CANData_wipers , 8 , 0 ) ;
CAN1AbortAll();
}
.....
}

漏封包的情形還是沒有改善,不曉得是我理解有問題還是哪裡沒有加到..謝謝!

5月18日 18:18:21
轉換PDF檔 列印


Re: 請問什麼是unmasked interrupt?
初級會員
註冊日期:
2014/09/29 12:04
所屬群組:
註冊會員
文章: 24
等級: 3; EXP: 62
HP : 0 / 65
MP : 8 / 508
離線
另外,想請教PORTAbits.RA = 1是什麼意思? = 0又是指什麼意思?

是指在TRISA = O時,RA輸出為1與輸出為0嗎?(PIC16F系列,沒LAT)

5月18日 17:25:31
轉換PDF檔 列印


請問什麼是unmasked interrupt?
初級會員
註冊日期:
2014/09/29 12:04
所屬群組:
註冊會員
文章: 24
等級: 3; EXP: 62
HP : 0 / 65
MP : 8 / 508
離線
在INTCON裡面看到GIE跟PEIE,裡面有講到unmasked interrupt,不太懂是什麼意思。

5月18日 16:16:15

firststop0 於 2017年05月18日 17:09:51
轉換PDF檔 列印


Re: 有關CAN bus傳輸問題
資深會員
註冊日期:
2010/07/12 16:45
來自 台灣的某一個角落
所屬群組:
註冊會員
文章: 251
等級: 14; EXP: 81
HP : 0 / 345
MP : 83 / 6928
離線
好幾年前有用過,印象中是這樣的

// Enable transmission
C1TX0CONbits.TXREQ = 1;
while (C1TX0CONbits.TXREQ == 1)
{
LATDbits.LATD2 = !PORTDbits.RD2;
}

看sample code發送都會看C1TX0CONbits.TXREQ有沒有變成0,
有變成0表示傳送出去,才可以在送下一筆封包。
另外也會檢查是否有錯誤flag發生,
因為有錯誤也會造成CAN BUS停止。

CAN1SendMessage這個函數只有作到C1TX0CONbits.TXREQ = 1;
印象中他沒有檢查是否有做發送成功的回應,所以應該要自己做。

微薄意見請參考。

5月18日 16:02:43
_________________
除役的胖子FAE
轉換PDF檔 列印


有關CAN bus傳輸問題
新會員
註冊日期:
5月18日 15:19:28
所屬群組:
註冊會員
文章: 2
等級: 1; EXP: 2
HP : 0 / 0
MP : 0 / 0
離線
目前使用30F4011這塊晶片來做can的傳輸,目前遇到的問題是用Timer控制,約一秒一次,一次發兩組封包時不會有問題,但增加到四組以上封包連續傳送的時候就有蠻高的機率會漏封包。
連續傳四組封包一次可能會漏一到兩組封包,連續傳20組就漏四、五組封包,甚至更多。
如果使用判斷封包進來的方式,一次丟10組,漏封包的次數少很多,原本懷疑是發太快導致的,但現在多加了delay function,也沒有改善…

想問看看是否是有甚麼條件導致這個問題產生,以下是我的程式碼:

void Init_CAN(void)
{
CAN1SetOperationMode( CAN_IDLE_CON & CAN_MASTERCLOCK_0 & CAN_REQ_OPERMODE_CONFIG ) ;

while ( C1CTRLbits.OPMODE <= 3 );
CAN1Initialize( CAN_SYNC_JUMP_WIDTH1 & CAN_BAUD_PRE_SCALE(6),
CAN_WAKEUP_BY_FILTER_DIS &
CAN_PHASE_SEG2_TQ(3) &
CAN_PHASE_SEG1_TQ(4) &
CAN_PROPAGATIONTIME_SEG_TQ(2) &
CAN_SEG2_FREE_PROG & CAN_SAMPLE1TIME ) ;

CAN1SetFilter ( (char) 0 , CAN_FILTER_SID( 0x000 ) & CAN_RX_EID_DIS ,
CAN_FILTER_EID( 0x00000 )) ;

CAN1SetMask ( (char)0 , CAN_MASK_SID ( 0x000 ) & CAN_MATCH_FILTER_TYPE ,
CAN_MASK_EID( 0x00000) ) ;

CAN1SetTXMode( (char) 0 , CAN_TX_STOP_REQ & CAN_TX_PRIORITY_HIGH ) ;
CAN1SetRXMode( (char) 0 , CAN_RXFUL_CLEAR & CAN_BUF0_DBLBUFFER_EN ) ;

CAN1SetOperationMode( CAN_IDLE_CON & CAN_CAPTURE_DIS & CAN_MASTERCLOCK_0 &
CAN_REQ_OPERMODE_NOR ) ;

DIR_CAN1_TX = OUTPUT ;
DIR_CAN1_RX = INPUT ;
}


int main( void )
{
can_init();
while(1)
{
if(CAN_count>5)
{
CAN_count=0;
keep_send_engine();
delay(100000);
keep_send_chassis();
delay(100000);
keep_send_electricity();
delay(100000);
keep_send_outward();
delay(100000);
keep_send_audio();
delay(100000);
}
}
}

void keep_send_electricity(void)
{
delay(500);
CAN1SendMessage(( CAN_TX_SID(0x791)) & CAN_TX_EID_DIS & CAN_SUB_NOR_TX_REQ ,
0 , can_info.iSend_CANData_purifiercln , 8 , 0 ) ;
CAN1AbortAll();
delay(500);
CAN1SendMessage(( CAN_TX_SID(0x792)) & CAN_TX_EID_DIS & CAN_SUB_NOR_TX_REQ ,
0 , can_info.iSend_CANData_wipers , 8 , 0 ) ;
CAN1AbortAll();
delay(500);
CAN1SendMessage(( CAN_TX_SID(0x793)) & CAN_TX_EID_DIS & CAN_SUB_NOR_TX_REQ ,
0 , can_info.iSend_CANData_betterv , 8 , 0 ) ;
CAN1AbortAll();
delay(500);
CAN1SendMessage(( CAN_TX_SID(0x794)) & CAN_TX_EID_DIS & CAN_SUB_NOR_TX_REQ ,
0 , can_info.iSend_CANData_aircompress , 8 , 0 ) ;
CAN1AbortAll();
delay(500);
CAN1SendMessage(( CAN_TX_SID(0x795)) & CAN_TX_EID_DIS & CAN_SUB_NOR_TX_REQ ,
0 , can_info.iSend_CANData_refrigerpre , 8 , 0 ) ;
CAN1AbortAll();
delay(500);
CAN1SendMessage(( CAN_TX_SID(0x796)) & CAN_TX_EID_DIS & CAN_SUB_NOR_TX_REQ ,
0 , can_info.iSend_CANData_insidetemp , 8 , 0 ) ;
CAN1AbortAll();
delay(500);
CAN1SendMessage(( CAN_TX_SID(0x797)) & CAN_TX_EID_DIS & CAN_SUB_NOR_TX_REQ ,
0 , can_info.iSend_CANData_outsidetemp , 8 , 0 ) ;
CAN1AbortAll();
delay(500);
CAN1SendMessage(( CAN_TX_SID(0x798)) & CAN_TX_EID_DIS & CAN_SUB_NOR_TX_REQ ,
0 , can_info.iSend_CANData_convertible , 8 , 0 ) ;
CAN1AbortAll();
delay(500);
CAN1SendMessage(( CAN_TX_SID(0x799)) & CAN_TX_EID_DIS & CAN_SUB_NOR_TX_REQ ,
0 , can_info.iSend_CANData_electhrottle , 8 , 0 ) ;
CAN1AbortAll();
delay(500);
CAN1SendMessage(( CAN_TX_SID(0x790)) & CAN_TX_EID_DIS & CAN_SUB_NOR_TX_REQ ,
0 , can_info.iSend_CANData_drivemode , 8 , 0 ) ;
CAN1AbortAll();
delay(500);
CAN1SendMessage(( CAN_TX_SID(0x770)) & CAN_TX_EID_DIS & CAN_SUB_NOR_TX_REQ ,
0 , can_info.iSend_CANData_map , 8 , 0 ) ;
CAN1AbortAll();
delay(500);
CAN1SendMessage(( CAN_TX_SID(0x771)) & CAN_TX_EID_DIS & CAN_SUB_NOR_TX_REQ ,
0 , can_info.iSend_CANData_catalytic , 8 , 0 ) ;
CAN1AbortAll();
delay(500);
CAN1SendMessage(( CAN_TX_SID(0x772)) & CAN_TX_EID_DIS & CAN_SUB_NOR_TX_REQ ,
0 , can_info.iSend_CANData_tiltangle , 8 , 0 ) ;
CAN1AbortAll();
delay(500);
CAN1SendMessage(( CAN_TX_SID(0x773)) & CAN_TX_EID_DIS & CAN_SUB_NOR_TX_REQ ,
0 , can_info.iSend_CANData_windheater , 8 , 0 ) ;
CAN1AbortAll();
delay(500);
}

void delay(int x)
{
unsigned int m,n;
for(n=0; n<20; n++)
{
for(m=0; m<x; m++);
}
}


謝謝。

5月18日 15:41:04
轉換PDF檔 列印


5月 6 月 開發工具省錢大作戰──Microchip (Atmel) 開發工具58折起
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 13936
等級: 72; EXP: 17
HP : 1067 / 1779
MP : 4645 / 67911
離線
目前,Atmel原有產品均可直接在microchipDIRECT線上商店購買。為讓更多的客戶能體驗我們全方位服務管道 ── microchipDIRECT所帶來的一切便利,現針對中國大陸、香港和台灣地區的工程師,推出指定開發工具58折起的促銷活動!

優惠碼有效期:即日起至2017年6月30日

請趕緊登錄microchipDIRECT網站,感受Microchip線上商店既省錢又便捷的超值服務!

按一下“立即訂購”轉到microchipDIRECT網站,將開發工具加到購物車,並在結算時輸入優惠碼。


(注:實際價格以microchipDIRECT網站為準。)

http://web.eeplace.com/emkts/webtools ... cf5be3182f6ec814444252a6e

5月18日 13:47:12
轉換PDF檔 列印



« 1 2 3 (4) 5 6 7 ... 6873 »




搜尋
線上教學影片
網頁捷徑
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project