0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于瑞薩MCU的汽車LIN通訊模擬器設(shè)計(jì)

瑞薩MCU小百科 ? 來(lái)源:立創(chuàng)商城 ? 2024-11-21 13:43 ? 次閱讀

本文轉(zhuǎn)載自立創(chuàng)商城,作者白羊座超越

一、項(xiàng)目功能介紹

此項(xiàng)目是為輔助汽車通訊電子行業(yè)人員調(diào)試LIN通訊邏輯和測(cè)試產(chǎn)品而設(shè)計(jì)。

汽車電子通訊行業(yè),用到LIN通訊的功能模塊可能包括雨量傳感器、雨刮開關(guān)、前大燈、座椅位置馬達(dá)、壓力傳感器、車門的后視鏡、窗戶控制等這些對(duì)通訊速度要求不高(和CAN通訊相比)的產(chǎn)品。車廠需要根據(jù)不同使用場(chǎng)景協(xié)調(diào)所有車身傳感器和執(zhí)行器運(yùn)行不同邏輯,在整車設(shè)計(jì)驗(yàn)證階段,車廠會(huì)分解不同的任務(wù)和通訊信號(hào),然后下發(fā)給對(duì)應(yīng)的供應(yīng)商,供應(yīng)商需要根據(jù)上下節(jié)點(diǎn)通訊設(shè)備的理論設(shè)計(jì)來(lái)針對(duì)性調(diào)試自己家設(shè)備的邏輯,而此時(shí),就會(huì)用到LIN通訊相關(guān)的調(diào)試設(shè)備來(lái)模擬上下節(jié)點(diǎn)的LIN命令。

本項(xiàng)目旨在提供一種對(duì)于調(diào)試和測(cè)試LIN設(shè)備較為方便和友好的嵌入式設(shè)備,且設(shè)計(jì)和生產(chǎn)成本控制較低。設(shè)備的方便性體現(xiàn)在設(shè)備小型化,手持即可,并且集成12V電池可充電設(shè)計(jì)。友好性體現(xiàn)在有直觀的按鍵和屏幕顯示進(jìn)行交互,使用簡(jiǎn)單,學(xué)習(xí)成本很低,對(duì)于需要頻繁調(diào)試LIN通訊邏輯的工作效率很高。

二、項(xiàng)目屬性

項(xiàng)目為近期設(shè)計(jì)驗(yàn)證,首次公開且為原創(chuàng)。

三、開源協(xié)議

GPL 3.0

四、硬件部分

4.1本設(shè)備的原理圖

PCB,3D外殼和面板全部用立創(chuàng)EDA設(shè)計(jì),硬件設(shè)定的需求如下:

a. 支持LIN2.1通訊功能。

b. 設(shè)備在室內(nèi)使用12V電源外部供電,保證全天可靠工作。

c. 設(shè)備在室外使用電池續(xù)航4小時(shí),電池既給本身供電,也給從機(jī)供電,工作功耗平均大概4.5W(12V,375mA)。

d. 有ADC分壓電路,設(shè)備自己能檢測(cè)正極和負(fù)極之間電壓。

e. 有屏幕顯示設(shè)備主機(jī)和從機(jī)信號(hào)狀態(tài)。

f. 有按鍵能方便切換自身信號(hào)狀態(tài)。

g. 能在2個(gè)月內(nèi)的業(yè)余時(shí)間完成,因?yàn)槲?月底才開始有想法設(shè)計(jì)這個(gè)項(xiàng)目,近期工作出差又較多。

考慮到開發(fā)周期并不充裕,還要給軟件設(shè)計(jì)留有時(shí)間,所以單元電路基本都是采用幾種較為成熟的方案來(lái)驗(yàn)證實(shí)際效果是否可行。目前電路和PCB設(shè)計(jì)驗(yàn)證過(guò)程修改過(guò)幾次,下面我將遇到過(guò)的問(wèn)題,解決方法和需要注意的地方介紹一下。

4.2電路主要為以下幾個(gè)部分

4.2.1 供電電路設(shè)計(jì),12V轉(zhuǎn)5V,5V轉(zhuǎn)3.3V電路如下圖

此部分電路變更過(guò)2次,第1次直接使用12V轉(zhuǎn)3.3V的AMS1117,驗(yàn)證后發(fā)現(xiàn)發(fā)燙比預(yù)想嚴(yán)重,手摸上去無(wú)法承受的那種燙,手邊沒(méi)有溫度檢測(cè)儀,沒(méi)測(cè)具體溫度,設(shè)計(jì)之前也大概了解LDO在壓差較大并且?guī)в休^大負(fù)載的情況下會(huì)發(fā)熱,但沒(méi)想到100多毫安就能這么燙,所以后續(xù)改成兩次降壓。

第2次電路和下面截圖這種方案唯一的區(qū)別就是12V轉(zhuǎn)5V芯片使用的也是AMS1117系列,LDO在PCB位置打孔和開窗加快散熱后,溫度已經(jīng)能接受,但搜到的幾款A(yù)MS1117輸入電壓要求都在18V以下,本設(shè)備常規(guī)使用時(shí)供電電壓在9V~16V,但考慮到設(shè)備在極端測(cè)試時(shí),會(huì)有16V到20V供電的場(chǎng)景,所以換成如圖中CJ7805。最大輸入電壓可以到35V,在PCB上增加LDO周圍鋪銅填充面積,同樣打孔和開窗后,溫度可以接受,手摸上去可以感受到發(fā)熱,但不至于燙手。

圖中可以看到有兩路保險(xiǎn)絲,是因?yàn)樵诘谝话鍼CB到手后調(diào)試過(guò)程發(fā)生過(guò)短路,板子上LDO,MCU和LIN等芯片全部燒毀,為避免之后在發(fā)生此類情況,增加了這兩路保險(xiǎn),第一路是保險(xiǎn)絲是單板調(diào)試時(shí)使用,能承受最大電壓16V,保持電流100mA跳閘電流250mA,第二路保險(xiǎn)絲是全場(chǎng)景工作時(shí)使用,能承受最大電壓60V,保持電流500mA,跳閘電流1A。增加的保險(xiǎn)絲也確實(shí)在我后來(lái)的幾次調(diào)試中發(fā)揮了重要作用,所以就保留了下來(lái),根據(jù)實(shí)際負(fù)載情況,用跳線帽選擇其中一路。

a86b59e4-a562-11ef-93f3-92fbcf53809c.pnga882ff2c-a562-11ef-93f3-92fbcf53809c.png

4.2.2 LIN通訊電路設(shè)計(jì)如下圖

參照芯片手冊(cè)典型應(yīng)用設(shè)計(jì),其中2號(hào)SLP_N引腳用來(lái)控制芯片休眠和喚醒,高電平正常工作模式,低電平休眠,指導(dǎo)手冊(cè)里SLP_N和MCU引腳相連,這樣可以控制LIN芯片休眠和喚醒。本項(xiàng)目設(shè)備開機(jī)就是要使用LIN通訊,所以沒(méi)有LIN芯片休眠需求,就接高電平了,注意不能懸空。

a88b6590-a562-11ef-93f3-92fbcf53809c.png

4.2.3 編碼旋鈕和輕觸按鍵電路設(shè)計(jì)如下圖

目前設(shè)備只用到輕觸按鍵,編碼旋鈕是為了給以后其他交互需求預(yù)留。原理圖很簡(jiǎn)單,這里需要注意的是,選擇MCU檢測(cè)按鍵的引腳時(shí),一定要確認(rèn)對(duì)應(yīng)引腳是支持輸入模式的。

a89a2d96-a562-11ef-93f3-92fbcf53809c.png

4.2.4 LCD屏幕接口電路如下圖

圖中LCD底座接口為了使用立創(chuàng)商城編號(hào)C5329587的顯示屏,商城截圖如下,最后幾個(gè)庫(kù)存被我全買了,不知道商城多久會(huì)補(bǔ)貨,淘寶上也有線序和通訊型號(hào)一樣的LCD可以選購(gòu),插到PCB上顯示功能正常,但是尺寸有差異,和本項(xiàng)目一起設(shè)計(jì)的3D外殼可能會(huì)不匹配。

此部分電路設(shè)計(jì)需要注意的是LCD是3.3V供電,LCD的通訊引腳支持的最大電壓也是3.3V,所以MCU的供電也要選擇3.3V。

至于圖中LCD右側(cè)支撐件是為了保證屏幕安裝到PCB上面后,兩端高度一樣,所以在PCB上對(duì)應(yīng)位置放置一個(gè)沒(méi)有任何連接的接插件。這里需要注意的是,選擇MCU與LCD通訊的引腳時(shí),一定要確認(rèn)引腳是支持輸出模式的。

a89e557e-a562-11ef-93f3-92fbcf53809c.pnga8a47936-a562-11ef-93f3-92fbcf53809c.png

4.2.512V電池充放電電路設(shè)計(jì)如下圖

圖中充放電管理IC用的是CM1033-DS。是一款專用于 3 串鋰/鐵電池或聚合物電池包的充放電保護(hù)芯片,串聯(lián)3節(jié)1500mAH以上的18650電池,能滿足設(shè)備續(xù)航需求。圖中網(wǎng)絡(luò)標(biāo)識(shí)12V和12V_02連接是一個(gè)滑動(dòng)開關(guān),上述LDO電路中有具體連接方式,LIN通訊電路里也有用到。

a8af1774-a562-11ef-93f3-92fbcf53809c.png

4.2.6MCU主控選用瑞薩RL78系列型號(hào)R5F10BGGLFB

此型號(hào)是瑞薩RL78/F13系列的車規(guī)級(jí)芯片。

a8b9122e-a562-11ef-93f3-92fbcf53809c.png

4.2.7 ADC檢測(cè)電路如下圖

實(shí)際電池正極12V_02和GND之間的電壓=VOLTAG*15,受限于分壓電阻精度和電源電壓波動(dòng),最終值預(yù)計(jì)會(huì)有0.3V的誤差。作為輔助設(shè)備,此功能只是用來(lái)評(píng)估設(shè)備大概電池電量,已經(jīng)夠用。

a8e48206-a562-11ef-93f3-92fbcf53809c.png

4.2.8預(yù)留TTL串口輸出調(diào)試接口

a8eb6120-a562-11ef-93f3-92fbcf53809c.png

五、軟件部分

封面圖片是調(diào)試LCD成功后先顯示了這次比賽的官方圖片。因?yàn)檫@張圖片占用ROM空間達(dá)23K多,為了給需求功能代碼保留足夠ROM空間,此張圖片僅用來(lái)單獨(dú)做展示。

a8fe51c2-a562-11ef-93f3-92fbcf53809c.jpg

為了方便說(shuō)明,功能演示視頻里只用了兩個(gè)設(shè)備,一個(gè)主機(jī)和一個(gè)從機(jī),只選用了兩個(gè)容易理解的參數(shù)。演示軟件也是在此基礎(chǔ)上進(jìn)行的裁剪和調(diào)整。實(shí)際應(yīng)用時(shí)一個(gè)主機(jī)會(huì)和多個(gè)從機(jī)通訊,然后主機(jī)根據(jù)不同從機(jī)的參數(shù)綜合判斷,執(zhí)行不同的邏輯。

5.1本設(shè)備的軟件使用瑞薩官方編譯工具

CS+ for CC (RL78,RX,RH850)設(shè)計(jì),硬件調(diào)試工具使用瑞薩官方下載器E2_Lite。軟件設(shè)定的需求如下:

a. 主機(jī)有發(fā)送LIN數(shù)據(jù)幀和接收LIN數(shù)據(jù)幀的任務(wù)。

b. 從機(jī)有接收LIN數(shù)據(jù)幀和回復(fù)LIN數(shù)據(jù)幀的任務(wù)。

c. 有計(jì)時(shí)器任務(wù)。

d. 有檢測(cè)按鍵任務(wù)。

e. 有屏幕刷新任務(wù)。

f. 有ADC檢測(cè)任務(wù),顯示正極和負(fù)極之間電壓值。

g. 上述每個(gè)功能任務(wù)被調(diào)用時(shí)持續(xù)阻塞時(shí)間不能超過(guò)10毫秒。

5.2從機(jī)軟件幾個(gè)任務(wù)設(shè)計(jì)思路如下

5.2.1 檢測(cè)按鍵key任務(wù)

key.c代碼

左右滑動(dòng)查看完整內(nèi)容

SYS_Key_Task  comm_Key;                                       /*結(jié)構(gòu)體變量定義*/
/*按鍵檢測(cè)任務(wù)*/
void Comm_Key_Task(void)
{
switch( comm_Key.mode )                                   /*comm_Key.mode:任務(wù)狀態(tài)值*/
{
case ST_Check_Key_first:                                /*第1步:實(shí)時(shí)檢測(cè)按鍵狀態(tài)*/
if( (0 == KEY_01 )||(0 == KEY_02 )||(0 == KEY_03 )||(0 == KEY_04 )||(0 == KEY_05 )||(0 == KEY_06 )||(0 == BUTTON_01 )||(0 == BUTTON_02 )||(0 == BUTTON_03 ) )
{
comm_Key.time = 0;
comm_Key.mode = ST_Check_Key_second;         /*檢測(cè)到任一按鍵按下,切換comm_Key.mode的值進(jìn)入ST_Check_Key_second狀態(tài)*/
}
break;
case ST_Check_Key_second:                             /*第2步:延時(shí)后再次檢測(cè),即按鍵去抖*/
if( comm_Key.time >= 20 )                          /*去抖時(shí)間20毫秒*/
{
comm_Key.mode = 0;                         /*避免后續(xù)無(wú)出口進(jìn)入此狀態(tài)的無(wú)線循環(huán),先設(shè)置初始值,如果確實(shí)有按鍵,則會(huì)重新修改此值*/
comm_Key.time = 0;
if( KEY_01 == 0 )
{
comm_Key.mode = ST_Confirm_Key_01;     /*確認(rèn)按鍵K1被按下,切換comm_Key.mode的值進(jìn)入ST_Confirm_Key_01狀態(tài)*/
}
if( KEY_02 == 0 )
{
comm_Key.mode = ST_Confirm_Key_02;     /*同上*/
}
if( KEY_03 == 0 )
{
comm_Key.mode = ST_Confirm_Key_03;
}
if( KEY_04 == 0 )
{
comm_Key.mode = ST_Confirm_Key_04;
}
if( KEY_05 == 0 )
{
comm_Key.mode = ST_Confirm_Key_05;
}
if( KEY_06 == 0 )
{
comm_Key.mode = ST_Confirm_Key_06;
}
if( BUTTON_01 == 0 )
{
comm_Key.mode = ST_Confirm_Button_01;    /*確認(rèn)按鍵B1被按下,切換comm_Key.mode的值進(jìn)入ST_Confirm_Button_01狀態(tài)*/
}
if( BUTTON_02 == 0 )
{
comm_Key.mode = ST_Confirm_Button_02;    /*同上*/
}
if( BUTTON_03 == 0 )
{
comm_Key.mode = ST_Confirm_Button_03;
}
}
break;
case ST_Confirm_Key_01:                            /*按鍵K1按下后邏輯*/
LIN_config.Num_00 = LIN_config.Num_00 + 1;      /*LIN_config.Num_00的值就是雨刷開關(guān)的參數(shù)*/
if( LIN_config.Num_00 >= 2 )                    /*LIN_config.Num_00=0,雨刷開關(guān)參數(shù)=關(guān); LIN_config.Num_00=1,雨刷開關(guān)參數(shù)=開;*/
{
LIN_config.Num_00 = 0;                    /*LIN_config.Num_00的值超出范圍后,賦初值*/
}
comm_Key.mode = ST_Check_End;                /*按鍵K1按下邏輯處理結(jié)束,切換comm_Key.mode的值進(jìn)入ST_Check_End狀態(tài)*/
break;
case ST_Confirm_Key_02:                            /*按鍵K2按下后邏輯*/
LIN_config.Num_01 = LIN_config.Num_01 + 1;      /*LIN_config.Num_01的值就是雨量大小的參數(shù)*/
if( LIN_config.Num_01 >= 4 )                    /*LIN_config.Num_01=0,雨量參數(shù)=無(wú)雨; LIN_config.Num_01=1,雨量參數(shù)=小雨;*/
{                                           /*LIN_config.Num_01=2,雨量參數(shù)=中雨; LIN_config.Num_01=3,雨量參數(shù)=大雨;*/
LIN_config.Num_01 = 0;
}
comm_Key.mode = ST_Check_End;
break;
case ST_Confirm_Key_03:                 /**/
comm_Key.mode = ST_Check_End;
break;
case ST_Confirm_Key_04:                 /**/
comm_Key.mode = ST_Check_End;
break;
case ST_Confirm_Key_05:                 /**/
comm_Key.mode = ST_Check_End;
break;
case ST_Confirm_Key_06:                 /**/
comm_Key.mode = ST_Check_End;
break;
case ST_Confirm_Button_01:                /**/
comm_Key.mode = ST_Check_End;
break;
case ST_Confirm_Button_02:                /**/
comm_Key.mode = ST_Check_End;
break;
case ST_Confirm_Button_03:                /**/
comm_Key.mode = ST_Check_End;
break;
case ST_Check_End:                               /*按鍵按下后等待松開的邏輯*/
if( (1 == KEY_01 )&&(1 == KEY_02 )&&(1 == KEY_03 )&&(1 == KEY_04 )&&(1 == KEY_05 )&&(1 == KEY_06 )&&(1 == BUTTON_01 )&&(1 == BUTTON_02 )&&(1 == BUTTON_03 ) )
{
comm_Key.mode = ST_Check_Key_first;       /*只有按鍵松開后,才會(huì)進(jìn)入下一次按鍵檢測(cè),能避免按鍵連擊*/
}
break;
default:
comm_Key.mode = ST_Check_Key_first;
break;
}
}
key.h代碼
/*狀態(tài)機(jī)預(yù)設(shè)的枚舉變量*/
enum{
  ST_Check_Key_first,
  ST_Check_Key_second,
  ST_Confirm_Key_01,
  ST_Confirm_Key_02,
  ST_Confirm_Key_03,
  ST_Confirm_Key_04,
  ST_Confirm_Key_05,
  ST_Confirm_Key_06,
  ST_Confirm_Button_01,
  ST_Confirm_Button_02,
  ST_Confirm_Button_03,
  ST_Check_End
};
/*按鍵宏定義*/
#define KEY_01  P3_bit.no2
#define KEY_02  P7_bit.no0
#define KEY_03  P7_bit.no1
#define KEY_04  P7_bit.no3
#define KEY_05  P14_bit.no0
#define KEY_06  P0_bit.no0
#define BUTTON_01  P6_bit.no3
#define BUTTON_02  P6_bit.no2
#define BUTTON_03  P6_bit.no1
/*任務(wù)狀態(tài)相關(guān)結(jié)構(gòu)體*/
typedef struct 
{
  uint8_t  time;
  uint8_t  mode;
}SYS_Key_Task;
/*結(jié)構(gòu)體變量聲明*/
extern SYS_Key_Task  comm_Key;
/*任務(wù)函數(shù)*/
void Comm_Key_Task(void);

5.2.2 屏幕刷新任務(wù)

LCD驅(qū)動(dòng)基礎(chǔ)代碼資料,可以從本屏幕的廠家 HS(漢昇)得到,此屏幕的立創(chuàng)商品編號(hào)C5329587。從網(wǎng)上其他論壇或者網(wǎng)購(gòu)平臺(tái)也容易下載到此屏幕用到的ST7789芯片資料。下面對(duì)應(yīng)用層做一些說(shuō)明:

刷新屏幕數(shù)據(jù)是很耗時(shí)的,本項(xiàng)目的芯片IO刷新一次整個(gè)屏幕數(shù)據(jù)(320*240),大概需要1.3秒,所以上電后先把固定顯示的內(nèi)容刷新出來(lái),然后只刷新實(shí)時(shí)變動(dòng)的參數(shù),這也是普遍做法。為了保證任務(wù)被調(diào)用時(shí)持續(xù)阻塞時(shí)間不能超過(guò)10毫秒,刷新完其中一個(gè)參數(shù)就先退出本任務(wù),執(zhí)行完其他任務(wù)再刷新下一個(gè)參數(shù),以此類推。

LCD固定顯示內(nèi)容如下:

左右滑動(dòng)查看完整內(nèi)容

void Init_Lcd_Interface_Chinese(void)
{
  int Show=0;
  LCD_Fill(0,0,LCD_W,LCD_H,LGRAYBLUE);                                             /*刷新整個(gè)屏幕填充色*/
  LCD_ShowChinese(0,  0, "本從機(jī)回復(fù)參數(shù)主機(jī)下發(fā)指令",RED,WHITE,16,0);
  LCD_ShowChinese(0, 35, "雨刷開關(guān)參數(shù):",RED,WHITE,16,0);
  LCD_ShowChinese(0, 70, "雨量大小參數(shù):雨",RED,WHITE,16,0);
  LCD_ShowChinese(0, 105, "雨刷運(yùn)動(dòng)指令:",RED,WHITE,16,0);
  LCD_ShowString( 0, 195, "__________________________",   RED,LGRAYBLUE,12,0);   /*電池電壓值不屬于通訊參數(shù),通過(guò)橫線區(qū)分開*/
  LCD_ShowChinese(0, 210, "本機(jī)電池電壓:",RED,WHITE,16,0);
  LCD_ShowString(144,210, "V",RED,WHITE,16,0);
  for(Show=0;Show<20;Show++)
 ? ?{
 ? ? ? ?LCD_ShowString(152, ?Show*12,"|",RED,LGRAYBLUE,16,0); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/*主機(jī)和從機(jī)參數(shù)通過(guò)中線分開*/
 ? ?}
 ? ?LCD_WR_REG(0x29);
}


LCD刷新任務(wù)


void Comm_Updata_Lcd_Task(void)
{
switch( comm_Lcd_Task.mode )
{
case ?0x00: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/**/
if( LIN_config.Num_00 == 0 )
{
LCD_ShowChinese(112, 35, ?"關(guān)",RED,WHITE,16,0);
}
else if( LIN_config.Num_00 == 1 )
{
LCD_ShowChinese(112, 35, ?"開",RED,WHITE,16,0);
}
comm_Lcd_Task.mode = comm_Lcd_Task.mode + 1;
break;
case ?0x01: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/**/
if( LIN_config.Num_01 == 0 )
{
LCD_ShowChinese(112, 70, ?"無(wú)",RED,WHITE,16,0);
}
else if( LIN_config.Num_01 == 1 )
{
LCD_ShowChinese(112, 70, ?"小",RED,WHITE,16,0);
}
else if( LIN_config.Num_01 == 2 )
{
LCD_ShowChinese(112, 70, ?"中",RED,WHITE,16,0);
}
else if( LIN_config.Num_01 == 3 )
{
LCD_ShowChinese(112, 70, ?"大",RED,WHITE,16,0);
}
comm_Lcd_Task.mode = comm_Lcd_Task.mode + 1;
break;
case ?0x02: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /**/
if( LIN_config.Num_02 == 0 )
{
LCD_ShowChinese(288, 105, ?"靜止",RED,WHITE,16,0);
}
else if( LIN_config.Num_02 == 1 )
{
LCD_ShowChinese(288, 105, ?"慢速",RED,WHITE,16,0);
}
else if( LIN_config.Num_02 == 2 )
{
LCD_ShowChinese(288, 105, ?"中速",RED,WHITE,16,0);
}
else if( LIN_config.Num_02 == 3 )
{
LCD_ShowChinese(288, 105, ?"快速",RED,WHITE,16,0);
}
comm_Lcd_Task.mode = comm_Lcd_Task.mode + 1;
break;
case ?0x03: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/**/
comm_Lcd_Task.mode = 0; ? ? ? ? ? ? ? ?/*所有參數(shù)刷新一輪,返回第一個(gè)參數(shù)重新開始*/
break;
case ?0x10: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/*英文界面*/
Init_Lcd_Interface_English();
comm_Lcd_Task.mode = 0;
break;
case ?0x11: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/*中文界面*/
Init_Lcd_Interface_Chinese();
comm_Lcd_Task.mode = 0;
break;
default:
comm_Lcd_Task.mode = 0;
break;
}
}

5.2.3 ADC檢測(cè)任務(wù)

左右滑動(dòng)查看完整內(nèi)容

uint16_t buffer_abc;
void Comm_Adc_Task(void)
{
switch( comm_Adc.mode )
{
case 0x00:                 /**/
R_ADC_Get_Result(&buffer_abc);     /*VOLTAG引腳的ADC值放入變量buffer_abc*/
comm_Adc.voltag = ((float)buffer_abc*3300/1024)*15;   /*分壓電阻15倍*/
comm_Adc.voltag = comm_Adc.voltag/1000;           /*mV轉(zhuǎn)換成V*/
comm_Adc.mode = comm_Adc.mode + 1;
break;
case 0x01:                 /**/
if( comm_Adc.time >= 2000 )              /*每隔2秒更新一次電壓值*/
{
comm_Adc.time = 0;
LCD_ShowFloatNum1(112, 210,comm_Adc.voltag,3,RED,YELLOW,16);
comm_Adc.mode = 0;
}
break;
case0x02:                 /**/
break;
default:
break;
}
}

上述從機(jī)的幾個(gè)軟件任務(wù)設(shè)計(jì)思路,在主機(jī)軟件任務(wù)設(shè)計(jì)里也類似,不再贅述。下面給出其他兩段代碼來(lái)說(shuō)明:LIN初始化代碼,其實(shí)這部分代碼從瑞薩官網(wǎng)和技術(shù)支持那里也可以得到,需要一些LIN通訊基礎(chǔ)知識(shí)。

左右滑動(dòng)查看完整內(nèi)容

void RLIN_Master_Init(void)
{
LCHSEL = 0x00;     /* Selects RLIN0 */
PER2 |= 0x04;     /* Enable input clock supply RLIN0*/
LINCKSEL=0x00;     /* selects the fclk=32MHz clock to RLIN0.*/
LWBR0 = 0x01;     /* b0=1, LIN2.0 or 2.1; Prescaler Clock Selcet 1/1; bit sampling count select 0000 : 16 sampling. */ 
LBRP00 = 0x67;     /*  fa:0X67=103D, Baud rate= 32M/ (103+1)*16= 19230 bps fb:9615bps  fc:2403bps */
LBRP01 = 0x5F;     /*  fd:10416bps*/
LIN0RVCIF = 0U;    /* Clear Reception interrupt request signal */
LIN0TRMIF = 0U;    /* Clear Transmission interrupt request signal */
LIN0WUPIF = 0U;    /* Clear Wake up interrupt request signal */
LIN0IF  = 0U;    /* Clear LIN or LIN Status interrupt */
LIN0RVCMK = 0U;    /* interrupt reception servicing enable */
LIN0TRMMK = 0U;    /* interrupt transmission servicing enable */
LIN0WUPMK = 0U;    /* interrupt wake up servicing enable */
LIN0MK  = 0U;    /* interrupt Status servicing enable */
LIE0 |= 0x0F;    /* Enable successful response/wake-up reception interrupt, enable all interrupt*/
LEDE0 |= 0x8F;    /* Enable error detection */
/* Header format setting*/
LMD0 =  0x10;     /*  b0b1=00: LIN master mode ; b3b2=00: fa=LIN sysclock; b4=1:transmission interrupt,sucessful reception interrupt...; b5=0: The noise filter is enable.*/
LBFC0 =  0x15;     /* b3-b0=0101: transmission break width 18Tbits; b5b4=01: break delimiter 2Tbit*/
LSC0 =  0x11;     /* b2-b0=001:inter-byte space 1bit or Response space 4bit; b5b4=01: inter-byte space 1Tbit;*/
LWUP0 =  0x30;     /* b7-b4=0100: Wake-up Transmission low width 4 bits.*/
LIDB0 &= 0x00;     /* Clear the ID buffer */
ISC  =  0x00;     /* INTP11 pin input signal is set as external interrupt input*/
LINCKSEL|=0x10;     /* Enable RLIN0 engine clock supply,*/
}

主機(jī)處理從機(jī)參數(shù)邏輯:

左右滑動(dòng)查看完整內(nèi)容

void LIN_received(void)
{
/* Processing received LIN data */
LIN_config.Num_09 = Master_RxData1[0];  /*接收的雨刷開關(guān)參數(shù)*/
LIN_config.Num_10 = Master_RxData1[1];  /*接收的雨量大小參數(shù)*/
if(LIN_config.Num_09 == 1 )            /*開關(guān)參數(shù):開*/
{
if( LIN_config.Num_10 == 0 )       /*雨量參數(shù):無(wú)雨*/
{
LIN_config.Num_02 = 0;      /*雨刷運(yùn)動(dòng)指令:靜止*/
}
else if( LIN_config.Num_10 == 1 )   /*雨量參數(shù):小雨*/
{
LIN_config.Num_02 = 1;      /*雨刷運(yùn)動(dòng)指令:慢速*/
}
else if( LIN_config.Num_10 == 2 )   /*雨量參數(shù):中雨*/
{
LIN_config.Num_02 = 2;      /*雨刷運(yùn)動(dòng)指令:中速*/
}
else if( LIN_config.Num_10 == 3 )   /*雨量參數(shù):大雨*/
{
LIN_config.Num_02 = 3;      /*雨刷運(yùn)動(dòng)指令:快速*/
}
}
else
{
LIN_config.Num_02 = 0;           /*雨刷運(yùn)動(dòng)指令:靜止*/
}
}

六、大賽LOGO驗(yàn)證

a9030582-a562-11ef-93f3-92fbcf53809c.jpg

手工焊接前PCB正面(打樣時(shí)選擇了基礎(chǔ)庫(kù)SMT)

a90d5e24-a562-11ef-93f3-92fbcf53809c.jpg

PCB背面

a913676a-a562-11ef-93f3-92fbcf53809c.jpg

全部焊接后正面

a93de6b6-a562-11ef-93f3-92fbcf53809c.jpg

背面

a94e1fe0-a562-11ef-93f3-92fbcf53809c.jpg

3D外殼+面板組裝后

a9593920-a562-11ef-93f3-92fbcf53809c.png

立創(chuàng)EDA設(shè)計(jì)界面截圖

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17194

    瀏覽量

    351864
  • 汽車電子
    +關(guān)注

    關(guān)注

    3027

    文章

    7988

    瀏覽量

    167392
  • 瑞薩
    +關(guān)注

    關(guān)注

    35

    文章

    22309

    瀏覽量

    86494
  • LIN
    LIN
    +關(guān)注

    關(guān)注

    4

    文章

    217

    瀏覽量

    40314
  • 模擬器
    +關(guān)注

    關(guān)注

    2

    文章

    879

    瀏覽量

    43291

原文標(biāo)題:立創(chuàng)電賽展優(yōu)秀案例分享:《基于瑞薩MCU的汽車LIN通訊模擬器》

文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MCU產(chǎn)品技術(shù)解析

    / Tiny 系列組成的Tiny家族是適用于家電、AV、PC周邊、工業(yè)機(jī)器等的系統(tǒng)控制。該系列是有著低成本、少管腳、小型封裝等特征的MCU品牌。從20管腳到80管腳的少管腳、小型
    發(fā)表于 08-08 19:59

    節(jié)能的“功能模塊”解決方案

    本帖最后由 eehome 于 2013-1-5 09:56 編輯 “功能模塊”是由的高性能MCU和功率器件、模擬器件組合而成的,將硬件、軟件和系統(tǒng)技術(shù)作為整套解決方案提供給客
    發(fā)表于 12-06 16:15

    MCU汽車儀表上的應(yīng)用

    /228X的開發(fā)工具軟件包括編譯、匯編程序和連接程序,還有調(diào)試模擬器;硬件包括仿真、JTAG仿真、評(píng)估板和CPU板。HEW是
    發(fā)表于 01-21 17:24

    MCU型號(hào)速查手冊(cè)

    `MCU型號(hào)速查手冊(cè)`
    發(fā)表于 10-27 11:11

    解決方案匯總帖

    方案【視頻】電子RL78/G14 MCU直流無(wú)刷電動(dòng)工具解決方案【視頻】電子BLDC無(wú)傳感
    發(fā)表于 01-30 18:27

    有破解MCU的嗎

    有一MCU需要解密,高手請(qǐng)聯(lián)系我,謝謝。
    發(fā)表于 02-03 10:18

    MCU汽車儀表解決方案

    科技于2003年4月由日立制作所和三菱電機(jī)的半導(dǎo)體部門合并成立,致力于提供移動(dòng)通信、汽車電子以及PC/AV(數(shù)碼家電)領(lǐng)域的半導(dǎo)體解決方案。在全球汽車半導(dǎo)體市場(chǎng)中,
    發(fā)表于 07-05 07:11

    MCU汽車儀表解決方案

    科技于2003年4月由日立制作所和三菱電機(jī)的半導(dǎo)體部門合并成立,致力于提供移動(dòng)通信、汽車電子以及PC/AV(數(shù)碼家電)領(lǐng)域的半導(dǎo)體解決方案。在全球汽車半導(dǎo)體市場(chǎng)中,
    發(fā)表于 07-08 07:45

    日本renesas MCU---專為汽車電子定制完美解決方案

    專業(yè)制造商電子誕生?!つ壳皳碛?b class='flag-5'>MCU,系統(tǒng)LSI,模擬和功率半導(dǎo)體器件三大事業(yè)群。·在移動(dòng)通信、汽車電子和PC/AV 等領(lǐng)域獲得了全球最
    發(fā)表于 05-28 09:28

    RISC 32MCU Flash SuperH的相關(guān)資料推薦

    推出SH7216系列32-位片上Flash存儲(chǔ)MCU作者:時(shí)間:2009-04-21來(lái)源:電子產(chǎn)品世界字號(hào): 小 中 大關(guān)鍵詞:
    發(fā)表于 01-26 06:01

    怎么讀取mcu的checksum?

    怎么讀取mcu的checksum?
    發(fā)表于 02-10 07:03

    電子推出包括汽車級(jí)在內(nèi)的 10款全新成功產(chǎn)品組合

    ,使用高端MCU來(lái)控制功率因數(shù)校正(PFC)和管理零電壓開關(guān)(ZVS)。這一“成功產(chǎn)品組合”包括MCU、模擬、電源和PWM控制
    發(fā)表于 03-02 14:29

    MCU汽車儀表及CAN/LIN應(yīng)用中的解決方案

    議程1.汽車業(yè)務(wù)概述2.儀表盤MCU解決方案3.CAN/LIN(車身)MCU解決方案
    發(fā)表于 09-11 09:59 ?38次下載

    關(guān)于電子模擬器件技術(shù)講座視頻

    電子在北京賽區(qū)舉辦一場(chǎng)電子技術(shù)研討會(huì),本視頻為電子
    的頭像 發(fā)表于 06-14 01:15 ?4306次閱讀
    關(guān)于<b class='flag-5'>瑞</b><b class='flag-5'>薩</b>電子<b class='flag-5'>模擬器</b>件技術(shù)講座視頻

    美國(guó)模擬器件公司與電子合作開發(fā)雷達(dá)傳感

    美國(guó)模擬器件公司(Analog Devices,ADI)與電子(Renesas Electronics)共同致力于77/79-GHz系統(tǒng)級(jí)雷達(dá)傳感,以提高先進(jìn)駕駛輔助系統(tǒng)(ADA
    發(fā)表于 11-01 14:51 ?963次閱讀