自己的原文哦~? ? ? ? ??https://blog.51cto.com/whaosoft/14133002
一、一鍵開關機電路的設計方案
方案一:電路圖
????一鍵開關機電路分析如下:
電路工作流程如下:
- Key按下瞬間,Q2、Q1導通,7805輸入電壓在8.9V左右,7805工作,輸出5V電壓給單片機供電。
- 單片機工作后,將最先進行IO口初始化,IO1設為輸入狀態,啟用內部上拉;IO2設為輸出狀態,輸出高電平。這時Q2、Q3導通,LED1發光,7805能夠正常工作,單片機進入工作狀態。
- 當Key再次按下時,檢測IO1電平為低,單片機可以通過使IO2輸出低電平,Q2、Q3不導通,此時7805輸入電壓幾乎為0,單片機不工作,系統關閉。
方案二:電路圖
?原理很簡單,Q1,Q2組成雙穩態電路。由于C1的作用,上電的時候Q1先導通,Q2截止,如果沒按下按鍵,電路將維持這個狀態。Q3為P溝道增強型MOS管,因為Q2截止,Q3也截止,系統得不到電源。
????此時Q1的集電極為低電平0.3V左右,C1上的電壓也為0.3V左右,當按下按鍵S1后,Q1基極被C1拉到0.3V,迅速截止。Q2開始導通,電路的狀態發生翻轉,Q2導通以后將Q3的門極拉到低電位,Q3導通,電源通過Q3給系統供電。
????Q2導通后,C1通過R1,R4充電,電壓上升到1V左右,此時再次按下按鍵,C1的電壓加到Q1基極,Q1導通,Q1集電極為低電平,通過R3強迫Q2截止,Q3也截止,系統關機。整個開關機的過程就是這樣。
????如果要求這個電路的靜態功耗低,可以全部采用MOS管,成本要高點,電路如下圖,原理都是一樣的,雙穩態電路。
方案三:電路圖
單鍵實現單片機開關機
- 控制流程,按下按鍵,Q1導通.單片機通電復位,進入工作。
- 檢測 K-IN 是否低電平,否 不處理.是 單片機輸出 K-OUT 為高電平,Q2導通,相當于按鍵長按.LED指示燈亮。
- 放開按鍵,K-IN 經過上拉電阻,為高電平.單片機可以正常工作。
- 在工作期間,按鍵按下,K-IN 為低電平,單片機檢測到長按1秒,K-OUT 輸出低電平,Q2截止.LED指示燈熄滅.放開按鍵,Q1截止,單片機斷電。
- 通過軟件處理,可以實現短按開機,長按關機。
????單片機用PIC16F84A,通過簡單的程序演示,證實此電路的可行性。
????這種電路如果這樣用,是體現不出它的優點,用到開關電源控制,控制光耦.可以做到完全關斷電原,實現零功耗待機.有些打印機上就是用這種電路。
方案四:用 CD4013 構建的電路
?CD4013電路關斷時已經把后面電路切斷了,而4013本身的電源不需關閉,COMS電路靜態工作電流極少,1uA以下,可以忽略不計。
????用 4013 的電路對電源范圍適用較廣,3~18V都沒問題,電路唯一需調整的就是根據電源電壓和負載電流適當更改R1的值。
????開關管可使用MOSFET,效果更佳。
?.
二、單片機程序崩了...
在編寫單片機程序的時候,由于中斷服務程序寫的不好,導致單片機程序總是跑飛,最后費了好長時間,花了很大功夫才找到問題原因,由此總結了單片機程序跑飛的三種現象、原因及解決方法。
1?數組越界/溢出
現象:
????單片機程序在函數中運行時,總是在運行到函數末尾,要跳出函數時,程序跑飛。
原因:
????數組越界(數組溢出),函數中定義的數組元素的個數小于程序中實際使用的數組元素的個數,例如在函數中定義了一個數組ucDataBuff[10],這個數組只有10個元素,但是在函數中卻有這樣的語句ucDataBuff[10]=0x1a,這個語句是給數組的第11個元素賦值,:由于定義的數組只有10個元素,從而導致賦值語句中不知道把0x1a放到什么地方,從而導致程序跑飛。
解決方法:
????如果在調試程序時,發現程序總是在函數執行完畢時跑飛,多數情況是發生了數組越界(數組溢出)的錯誤,仔細檢查函數中調用的數組是否存在越界(溢出)的情況。
2?中斷服務程序缺失
現象:
????程序運行過程中總是跑飛。
原因:
????程序中打開了某個中斷,但是卻沒有相應的中斷服務程序,從而導致在中斷發生后,找不到中斷服務程序入口,從而導致程序跑飛。
解決方法:
????檢查程序中是否存在打開了某個中斷,但是沒有相對應的中斷服務程序。
3?看門狗復位
現象:
????在執行一段較為耗費時間的程序時,程序跑飛,并且總是跳到復位位置處。
原因:
????程序中使用了看門狗,但是沒有及時“喂狗”,從而導致看門狗復位,使程序直接跳到復位位置。
解決方法:
????根據程序運行時間,尤其是一定要計算清楚最耗時的那段程序的運行時間,然后準確設置看門狗的復位時長,定時“喂狗”,尤其是如果有死循環的情況,一定要在死循環中記得“喂狗”。
狗確實還是挺重要的~~~
三、蜂鳴器播放音樂
就是無聊弄一下~~
開發軟件是STM32CubeIDE
蜂鳴器
有源蜂鳴器
????內部有震蕩源,只要通電就會有響聲,但是聲音頻率固定。
無源蜂鳴器
????內部不含振蕩源,蜂鳴器管腳輸出一定頻率的信號,才能發聲。
????本實例中用到的是無源蜂鳴器,控制頻率高低發出不同聲調的聲音。
電路原理圖
?由電路原理圖可知,蜂鳴器在PB5管腳,以一定頻率翻轉PB5管腳的電平,可以使蜂鳴器發聲。
STM32工程
????打開STM32CubeIDE軟件,新建STM32工程。
????配置時鐘。
???項目設置。
?設置調試模式。
開啟PB5管腳。
?? 寫延時函數。
????開啟定時器TIM7,是為了寫延時函數HAL_Delay_us()。
????保存,生成代碼。?
????打開gpio.c,添加如下代碼。?
依次從音調數組中取music[i]。
????根據music[i]的值在tone數組中得到該音的發聲頻率(tone[music[i]]),調用sound函數控制蜂鳴器發聲。
????聲音的發聲時間由time數組控制。
????蜂鳴器演奏音樂的兩個要素就是聲音頻率、聲音持續時間,分別對應樂譜中的音調、節拍。
.
四、SPI原理詳解
什么是SPI
????SPI 是英語Serial Peripheral interface的縮寫,顧名思義就是串行外圍設備接口。是Motorola(摩托羅拉)首先在其MC68HCXX系列處理器上定義的。
????SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節約了芯片的管腳,同時為PCB的布局上節省空間,提供方便,主要應用在 EEPROM,FLASH,實時時鐘,AD轉換器,還有數字信號處理器和數字信號解碼器之間。
SPI主從模式
????SPI分為主、從兩種模式,一個SPI通訊系統需要包含一個(且只能是一個)主設備,一個或多個從設備。提供時鐘的為主設備(Master),接收時鐘的設備為從設備(Slave),SPI接口的讀寫操作,都是由主設備發起。當存在多個從設備時,通過各自的片選信號進行管理。
????SPI是全雙工且SPI沒有定義速度限制,一般的實現通常能達到甚至超過10 Mbps
SPI信號線
????SPI接口一般使用四條信號線通信:
????SDI(數據輸入),SDO(數據輸出),SCK(時鐘),CS(片選)。
????MISO:主設備輸入/從設備輸出引腳。該引腳在從模式下發送數據,在主模式下接收數據。
????MOSI:主設備輸出/從設備輸入引腳。該引腳在主模式下發送數據,在從模式下接收數據。
????SCLK:串行時鐘信號,由主設備產生。
????CS/SS:從設備片選信號,由主設備控制。它的功能是用來作為“片選引腳”,也就是選擇指定的從設備,讓主設備可以單獨地與特定從設備通訊,避免數據線上的沖突。
????硬件上為4根線。
SPI一對一
SPI一對多
SPI設備選擇
????SPI是[單主設備( single-master )]通信協議,這意味著總線中的只有一支中心設備能發起通信。當SPI主設備想讀/寫[從設備]時,它首先拉低[從設備]對應的SS線(SS是低電平有效),接著開始發送工作脈沖到時鐘線上,在相應的脈沖時間上,[主設備]把信號發到MOSI實現“寫”,同時可對MISO采樣而實現“讀”,如下圖:
SPI數據發送接收
????SPI主機和從機都有一個串行移位寄存器,主機通過向它的SPI串行寄存器寫入一個字節來發起一次傳輸。
????首先拉低對應SS信號線,表示與該設備進行通信
????主機通過發送SCLK時鐘信號,來告訴從機寫數據或者讀數據
????這里要注意,SCLK時鐘信號可能是低電平有效,也可能是高電平有效,因為SPI有四種模式,這個我們在下面會介紹
????主機(Master)將要發送的數據寫到發送數據緩存區(Menory),緩存區經過移位寄存器(0~7),串行移位寄存器通過MOSI信號線將字節一位一位的移出去傳送給從機,,同時MISO接口接收到的數據經過移位寄存器一位一位的移到接收緩存區。
????從機(Slave)也將自己的串行移位寄存器(0~7)中的內容通過MISO信號線返回給主機。同時通過MOSI信號線接收主機發送的數據,這樣,兩個移位寄存器中的內容就被交換。
SPI只有主模式和從模式之分,沒有讀和寫的說法,外設的寫操作和讀操作是同步完成的。如果只進行寫操作,主機只需忽略接收到的字節;反之,若主機要讀取從機的一個字節,就必須發送一個空字節來引發從機的傳輸。也就是說,你發一個數據必然會收到一個數據;你要收一個數據必須也要先發一個數據。
SPI通信的四種模式
????SPI的四種模式,簡單地講就是設置SCLK時鐘信號線的那種信號為有效信號
????SPI通信有4種不同的操作模式,不同的從設備可能在出廠是就是配置為某種模式,這是不能改變的;但我們的通信雙方必須是工作在同一模式下,所以我們可以對我們的主設備的SPI模式進行配置,通過CPOL(時鐘極性)和CPHA(時鐘相位)來控制我們主設備的通信模式,具體如下:
????時鐘極性(CPOL)定義了時鐘空閑狀態電平:
- CPOL=0,表示當SCLK=0時處于空閑態,所以有效狀態就是SCLK處于高電平時
- CPOL=1,表示當SCLK=1時處于空閑態,所以有效狀態就是SCLK處于低電平時
????時鐘相位(CPHA)定義數據的采集時間:
- CPHA=0,在時鐘的第一個跳變沿(上升沿或下降沿)進行數據采樣。,在第2個邊沿發送數據
- CPHA=1,在時鐘的第二個跳變沿(上升沿或下降沿)進行數據采樣。,在第1個邊沿發送數據
????例如:
typedef struct
{
uint16_t SPI_Direction; /*!< 傳輸方向,兩向全雙工,單向接收等*/
uint16_t SPI_Mode; /*!< 模式選擇,確定主機還是從機 */
uint16_t SPI_DataSize; /*!< 數據大小,8位還是16位 */
uint16_t SPI_CPOL; /*!< 時鐘極性選擇 */
uint16_t SPI_CPHA; /*!< 時鐘相位選擇 */
uint16_t SPI_NSS; /*!< 片選是硬件還是軟件*/
uint16_t SPI_BaudRatePrescaler; /*!< 分頻系數 */
uint16_t SPI_FirstBit; /*!< 指定數據傳輸是從MSB還是LSB位開始的。M
SB就是二進制第一位,LSB就是最后一位 */
uint16_t SPI_CRCPolynomial; /*!< CRC校驗 ,設置 CRC 校驗多項式,提高通
信可靠性,大于 1 即可*/
}SPI_InitTypeDef;
- Mode0:CPOL=0,CPHA=0:此時空閑態時,SCLK處于低電平,數據采樣是在第1個邊沿,也就是SCLK由低電平到高電平的跳變,所以數據采樣是在上升沿(準備數據),(發送數據)數據發送是在下降沿。
- Mode1:CPOL=0,CPHA=1:此時空閑態時,SCLK處于低電平,數據發送是在第1個邊沿,也就是SCLK由低電平到高電平的跳變,所以數據采樣是在下降沿,數據發送是在上升沿。
- Mode2:CPOL=1,CPHA=0:此時空閑態時,SCLK處于高電平,數據采集是在第1個邊沿,也就是SCLK由高電平到低電平的跳變,所以數據采集是在下降沿,數據發送是在上升沿。
- Mode3:CPOL=1,CPHA=1:此時空閑態時,SCLK處于高電平,數據發送是在第1個邊沿,也就是SCLK由高電平到低電平的跳變,所以數據采集是在上升沿,數據發送是在下降沿。
???它們的區別是定義了在時鐘脈沖的哪條邊沿轉換(toggles)輸出信號,哪條邊沿采樣輸入信號,還有時鐘脈沖的穩定電平值(就是時鐘信號無效時是高還是低)。每種模式由一對參數刻畫,它們稱為時鐘極(clock polarity)CPOL與時鐘期(clock phase)CPHA。
SPI的通信協議
主從設備必須使用相同的工作模式——SCLK、CPOL 和 CPHA,才能正常工作。如果有多個從設備,并且它們使用了不同的工作模式,那么主設備必須在讀寫不同從設備時需要重新修改對應從設備的模式。以上SPI總線協議的主要內容。
????是不是感覺,這就完了?SPI就是如此,他沒有規定最大傳輸速率,沒有地址方案,也沒規定通信應答機制,沒有規定流控制規則。
????只要四根信號線連接正確,SPI模式相同,將CS/SS信號線拉低,即可以直接通信,一次一個字節的傳輸,讀寫數據同時操作,這就是SPI
????些通信控制都得通過SPI設備自行實現,SPI并不關心物理接口的電氣特性,例如信號的標準電壓。
????PS:這也是SPI接口的一個缺點:沒有指定的流控制,沒有應答機制確認是否接收到數據。
SPI的三種模式
????SPI工作在3中模式下,分別是運行、等待和停止。
運行模式(Run Mode)
????這是基本的操作模式
等待模式(Wait Mode)
????SPI工作在等待模式是一種可配置的低功耗模式,可以通過SPICR2寄存器的SPISWAI位進行控制。在等待模式下,如果SPISWAI位清0,SPI操作類似于運行模式。如果SPISWAI位置1,SPI進入低功耗狀態,并且SPI時鐘將關閉。如果SPI配置為主機,所有的傳輸將停止,但是會在CPU進入運行模式后重新開始。如果SPI配置為從機,會繼續接收和傳輸一個字節,這樣就保證從機與主機同步。
停止模式(Stop Mode)
????為了降低功耗,SPI在停止模式是不活躍的。如果SPI配置為主機,正在進行的傳輸會停止,但是在CPU進入運行模式后會重新開始。如果SPI配置為從機,會繼續接受和發送一個字節,這樣就保證了從機與主機同步。
SPI原理圖連接
STM32中SPI初始化配置
1.初始化GPIO口,配置相關引腳的復用功能,使能SPIx時鐘。調用函數:void GPIO_Init();
2.使能SPI時鐘總線:RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE)
3.配置SPI初始化的參數,設置SPI工作模式:SPI_Init(SPI1,&SPI_Initstructure)
4.使能SPI外設:SPI_Cmd(SPI1,ENABLE);
SPI配置設置
void SPI2_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;SPI_InitTypeDef SPI_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );//PORTB時鐘使能 RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2, ENABLE );//SPI2時鐘使能 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //PB13/14/15復用推挽輸出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOBGPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); //PB13/14/15上拉SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //設置SPI單向或者雙向的數據模式:SPI設置為雙線雙向全雙工SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //設置SPI工作模式:設置為主SPISPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //設置SPI的數據大小:SPI發送接收8位幀結構SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //串行同步時鐘的空閑狀態為高電平SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //串行同步時鐘的第二個跳變沿(上升或下降)數據被采樣SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信號由硬件(NSS管腳)還是軟件(使用SSI位)管理:內部NSS信號有SSI位控制SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //定義波特率預分頻的值:波特率預分頻值為256SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //指定數據傳輸從MSB位還是LSB位開始:數據傳輸從MSB位開始SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值計算的多項式SPI_Init(SPI2, &SPI_InitStructure); //根據SPI_InitStruct中指定的參數初始化外設SPIx寄存器SPI_Cmd(SPI2, ENABLE); //使能SPI外設SPI2_ReadWriteByte(0xff);//啟動傳輸
}
SPI發送函數(標準庫/HAL庫)
//標準庫:
u8 SPIx_ReadWriteByte(u8 TxData)
{u8 retry=0;while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET){}//等待發送區空SPI_I2S_SendData(SPI2, TxData); //通過外設SPIx發送一個byte 數據while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET){} //等待接收完一個bytereturn SPI_I2S_ReceiveData(SPI2); //返回通過SPIx最近接收的數據
}//HLA庫:
uint8_t SPI_SendByte(uint8_t byte)
{uint8_t d_read,d_send=byte;if(HAL_SPI_TransmitReceive(&hspi1,&d_send,&d_read,1,0xFFFFFF)!=HAL_OK)d_read=0XFF;return d_read;
五、PCB為什么一定要做阻抗
在具有電阻、電感和電容的電路里,對交流電所起的阻礙作用叫做阻抗。阻抗常用Z表示,是一個復數,實部稱為電阻,虛部稱為電抗。
其中電容在電路中對交流電所起的阻礙作用稱為容抗,電感在電路中對交流電所起的阻礙作用稱為感抗,電容和電感在電路中對交流電引起的阻礙作用總稱為電抗。
那么,阻抗對于PCB電路板的意義何在,PCB電路板為什么要做阻抗?一起往下看。
阻抗類型有五種:
- 特性阻抗
在計算機﹑無線通訊等電子信息產品中, PCB的線路中的傳輸的能量, 是一種由電壓與時間所構成的方形波信號(square wave signal, 稱為脈沖pulse),它所遭遇的阻力則稱為特性阻抗。
- 差動阻抗
驅動端輸入極性相反的兩個同樣信號波形,分別由兩根差動線傳送,在接收端這兩個差動信號相減。差動阻抗就是兩線之間的阻抗Zdiff。
- 奇模阻抗
兩線中一線對地的阻抗Zoo,兩線阻抗值是一致。
- 偶模阻抗
驅動端輸入極性相同的兩個同樣信號波形, 將兩線連在一起時的阻抗Zcom。
- 共模阻抗
兩線中一線對地的阻抗Zoe,兩線阻抗值是一致,通常比奇模阻抗大。
PCB線路板為什么要做阻抗?
PCB線路板阻抗是指電阻和對電抗的參數,對交流電所起著阻礙作用。在PCB線路板生產中,阻抗處理是必不可少的。原因如下:
1、PCB線路(板底)要考慮接插安裝電子元件,接插后考慮導電性能和信號傳輸性能等問題,所以就會要求阻抗越低越好。
2、PCB線路板在生產過程中要經歷沉銅、電鍍錫(或化學鍍,或熱噴錫)、接插件焊錫等工藝制作環節,而這些環節所用的材料都必須保證電阻率低,才能保證線路板的整體阻抗達到產品質量要求,并能正常運行。
3、PCB線路板的鍍錫是整個線路板制作中最容易出現問題的地方,是影響阻抗的關鍵環節。化學鍍錫層最大的缺陷就是易變色(既易氧化或潮解)、釬焊性差,會導致線路板難焊接、阻抗過高導致導電性能差或整板性能的不穩定。
4、PCB線路板中的導體中會有各種信號傳遞。為提高其傳輸速率而必須提高其頻率時,線路本身如果因蝕刻、疊層厚度、導線寬度等因素不同,將會造成阻抗值的變化,使其信號失真,導致線路板使用性能下降,所以就需要控制阻抗值在一定范圍內。
阻抗對于PCB電路板的意義
對電子行業來說,化學鍍錫層最致命的弱點就是易變色(即易氧化或潮解)、釬焊性差導致難焊接、阻抗過高導致導電性能差或整板性能的不穩定、易長錫須,導致PCB線路短路以至燒毀或著火事件。
因為PCB線路板的主體線路是銅箔,在銅箔的焊點上就是鍍錫層,而電子元件就是通過焊錫膏(或焊錫線)焊接在鍍錫層上面的。
事實上,焊錫膏在融熔狀態焊接到電子元件和錫鍍層之間的是金屬錫(即導電良好的金屬單質),所以可以簡單扼要地指出,電子元件是通過錫鍍層再與PCB板底的銅箔連接的,所以錫鍍層的純潔性及其阻抗是關鍵;
未有接插電子元件之前,我們直接用儀器去檢測阻抗時,其實儀器探頭(或稱為表筆)兩端也是通過先接觸PCB板底的銅箔表面的錫鍍層,再與PCB板底的銅箔來連通電流的,所以錫鍍層是關鍵。它是影響阻抗的關鍵和影響PCB整板性能的關鍵,也是易于被忽略的關鍵。
除金屬單質外,其化合物均是電的不良導體或甚至不導電的(這也是造成線路中存在分布容量或傳布容量的關鍵),所以錫鍍層中存在這種似導電而非導電的錫的化合物或混合物時,其現成電阻率或未來氧化、受潮所發生電解反應后的電阻率及其相應的阻抗是相當高的(足以影響數字電路中的電平或信號傳輸,)而且其特征阻抗也不相一致。所以會影響該線路板及其整機的性能。
總的來說,PCB板底上的鍍層物質和性能是影響PCB整板特征阻抗的最主要原因和最直接的原因,但又由于其具有隨著鍍層老化及受潮電解的變化性,所以其阻抗產生的憂患影響變得更加隱性和多變性。
其隱蔽的主要原因在于:第一不能被肉眼所見(包括其變化),第二不能被恒常測得,因為其有隨著時間和環境濕度的改變而變的特性,所以易被人忽略。
.
六、PCB布局思路
分析好整個電路原理以后,就可以開始對整個電路進行布局布線,下面,給大家介紹一下布局的思路和原則。
1.首先,我們會對結構有要求的器件進行擺放,擺放的時候根據導入的結構,連接器得注意1腳的擺放位置。
2.布局時要注意結構中的限高要求。
3.如果要布局美觀,一般按元件外框或者中線坐標來定位(居中對齊)。
4.整體布局要考慮散熱。
5.布局的時候需要考慮好布線通道評估、考慮好等長需要的空間。
6.布局時需要考慮好電源流向,評估好電源通道。
7.高速、中速、低速電路要分開。
?8.強電流、高電壓、強輻射元器件遠離弱電流、低電壓、敏感元器件。
9.模擬、數字、電源、保護電路要分開。
10.接口保護器件應盡量靠近接口放置。
11.接口保護器件擺放順序要求:
- 一般電源防雷保護器件的順序是:壓敏電阻、保險絲、抑制二極管、EMI濾波器、電感或者共模電感,對于原理圖 缺失上面任意器件順延布局。
- 一般對接口信號的保護器件的順序是:ESD(TVS管)、隔離變壓器、共模電感、電容、電阻,對于原理圖缺失上面任意器件順延布局,嚴格按照原理圖的順序(要有判斷原理圖是否正確的能力)進行“一字型”布局。
12.電平變換芯片(如RS232)靠近連接器(如串口)放置。.
13.易受ESD干擾的器件,如NMOS及CMOS等器件,盡量遠離易受ESD干擾的區域(如單板的邊緣區域)。
14.時鐘器件布局:
- 晶體、晶振和時鐘分配器與相關的IC器件要盡量靠近;
- 時鐘電路的濾波器(盡量采用“∏”型濾波)要靠近時鐘 電路的電源輸入管腳;
- 晶振和時鐘分配器的輸出是否串接一個22歐姆的電阻;
- 時鐘分配器沒用的輸出管腳是否通過電阻接地;
- 晶體、晶振和時鐘分配器的布局要注意遠離大功率的元器件、散熱器等發熱的器件;
- 晶振距離板邊和接口器件是否大于1inch。
15.開關電源是否遠離AD\DA轉換器、模擬器件、敏感器件、時鐘器件。
16.開關電源布局要緊湊,輸入\輸出要分開,嚴格按照原理圖的要求進行布局,不要將開關電源的電容隨意放置。
17.電容和濾波器件 :
- 電容務必要靠近電源管腳放置,而且容值越小的電容要越靠近電源管腳;
- EMI濾波器要靠近芯片電源的輸入口;
- 原則上每個電源管腳一個0.1uf的小電容、一個集成電路一個或多個10uf大電容,可以根據具體情況進行增減。
.
七、STM32和51的區別
無聊的話題也說一下哈哈 不知道還有人弄51嗎
單片微型計算機簡稱單片機,簡單來說就是集CPU(運算、控制)、RAM(數據存儲-內存)、ROM(程序存儲)、輸入輸出設備(串口、并口等)和中斷系統處于同一芯片的器件,在我們自己的個人電腦中,CPU、RAM、ROM、I/O這些都是單獨的芯片,然后這些芯片被安裝在一個主板上,這樣就構成了我們的PC主板,進而組裝成電腦,而單片機只是將這所有的集中在了一個芯片上而已。
51單片機
????應用最廣泛的8位單片機當然也是初學者們最容易上手學習的單片機,最早由Intel推出,由于其典型的結構和完善的總線專用寄存器的集中管理,眾多的邏輯位操作功能及面向控制的豐富的指令系統,堪稱為一代“經典”,為以后的其它單片機的發展奠定了基礎。
51單片機特性
????51單片機之所以成為經典,成為易上手的單片機主要有以下特點:
????從內部的硬件到軟件有一套完整的按位操作系統,稱作位處理器,處理對象不是字或字節而是位。不但能對片內某些特殊功能寄存器的某位進行處理,如傳送、置位、清零、測試等,還能進行位的邏輯運算,其功能十分完備,使用起來得心應手。
????同時在片內RAM區間還特別開辟了一個雙重功能的地址區間,使用極為靈活,這一功能無疑給使用者提供了極大的方便。
????乘法和除法指令,這給編程也帶來了便利。很多的八位單片機都不具備乘法功能,作乘法時還得編上一段子程序調用,十分不便。
51單片機缺點
AD、EEPROM等功能需要靠擴展,增加了硬件和軟件負擔
雖然I/O腳使用簡單,但高電平時無輸出能力,這也是51系列單片機的最大軟肋
運行速度過慢,特別是雙數據指針,如能改進能給編程帶來很大的便利
51保護能力很差,很容易燒壞芯片
51單片機應用范圍
????目前在教學場合和對性能要求不高的場合大量被采用,使用最多的器件是8051、80C51。
STM32單片
????由ST廠商推出的STM32系列單片機,行業的朋友都知道,這是一款性價比超高的系列單片機,應該沒有之一,功能及其強大。其基于專為要求高性能、低成本、低功耗的嵌入式應用專門設計的ARM Cortex-M內核,同時具有一流的外設:1μs的雙12位ADC,4兆位/秒的UART,18兆位/秒的SPI等等,在功耗和集成度方面也有不俗的表現,當然和MSP430的功耗比起來是稍微遜色的一些,但這并不影響工程師們對它的熱捧程度。
STM32單片機特性
????由STM32簡單的結構和易用的工具再配合其強大的功能在行業中赫赫有名,其強大的功能主要表現在:
內核:ARM32位Cortex-M3CPU,最高工作頻率72MHz,1.25DMIPS/MHz,單周期乘法和硬件除法
存儲器:片上集成32-512KB的Flash存儲器。6-64KB的SRAM存儲器
時鐘、復位和電源管理:2.0-3.6V的電源供電和I/O接口的驅動電壓。POR、PDR和可編程的電壓探測器(PVD)。4-16MHz的晶振。內嵌出廠前調校的8MHz RC振蕩電路。內部40 kHz的RC振蕩電路。用于CPU時鐘的PLL。帶校準用于RTC的32kHz的晶振
調試模式:串行調試(SWD)和JTAG接口。最多高達112個的快速I/O端口、最多多達11個定時器、最多多達13個通信接口。
STM32使用最多的器件:
STM32F103系列
STM32 L1系列
STM32W系列
51單片機和STM32單片機的區別
????51單片機是對所有兼容Intel8031指令系統的單片機的統稱,這一系列的單片機的始祖是Intel的8031單片機,后來隨著flash ROM技術的發展,8031單片機取得了長足的進展成為了應用最廣泛的8bit單片機之一,他的代表型號就是ATMEL公司的AT89系列。
????STM32單片機則是ST(意法半導體)公司使用arm公司的cortex-M3為核心生產的32bit系列的單片機,他的內部資源(寄存器和外設功能)較8051、AVR和PIC都要多的多,基本上接近于計算機的CPU了,適用于手機、路由器等等。
.
八、拆解新能源車
是不是錢多了難受 吃多了~?? 就是這么土豪
比亞迪“元”的電池系統和電驅系統~~~
電池系統-電池包
元EV電池采用獨立鋁制托盤,安裝于底盤下,電池采用三元鋰離子電池,容量為43. 2kWh,電池包能量密度為127Wh/kg,全部為比亞迪自制。
電池系統-電池包內部由石棉絕熱墊起到阻隔保護作用。
元EV360的電池包總計43. 2kWh,由11個串聯電池模組,其中6個模組為10節單體串聯,5個模組為8節單體串聯,即電池包由共計100節單體串聯組成。
電池系統-電芯、模組
電池包采用單體電池為120Ah的三元鋰離子電池,額定電壓3.6V。單體電芯尺寸參數:173*122.5*50mm。
電池系統-BMS CECU
電池包的BMS采用分布式架構,包括一個中央控制器(CECU,電池包外)和3個局部控制器(LECU,電池包內),其中CECU采用飛思卡爾MC9S12XET256MAA(HCS12系列),其主要作用是實施監測電池狀態(SOC、溫度、SOH等)。
電池系統-BMS CECU
電池包內包括3個LECU,對別對應11個電池模組的采樣數據。
LECU的主要作用是采集電池模組內的一次狀態信息,主要是各個串聯電芯的電壓和溫度傳感器測量的模組內2個溫度數據,其采用的數據采集IC芯片是美信的MAX17823B。
電驅系統
元EV采用三合一的電驅總成,即電機、減速器和控制器集成的方案,電驅總成核心部件均為比亞迪自制。
電驅系統-電機、減速器
電機采用單電機方案,為永磁同步電機,峰值功率70kW,額定功率35kW。
電機控制器采用TI的DSP(數字信號處理器)芯片TMS320配合Lattice的CPLD(復雜可編程邏輯器件)芯片LAMXO256C。
小三電模塊
元EV采用三合一的小三電集成方案,即車載充電機(OBC)、DC-DC、PDU集成在一個模塊內。
充電接口在整車前部,分為6. 6kW的慢充接口和60kW的快充接口,支持7小時慢充或者0. 5小時快充(沖至80% SOC)。?
啟停電池
元EV的12V低壓系統仍然采用鉛酸電池,為天能的38B20L,主要為低壓系統供電可以通過DC-DC由高壓系統充電。
熱管理系統
本車的熱管理系統采用傳統的空調制冷+PTC加熱的方式,熱管理系統總體包括了空調制冷系統、PTC加熱系統、冷卻液/冷媒管路和控制面板等組成。
空調制冷系統
一個典型的空調制冷系統包括電動壓縮機、電子膨脹閥和冷凝器/蒸發器等核心部件。壓縮機是空調系統的“心臟”,其作用是將低溫低壓的氣態冷媒從低壓側吸入壓縮,使其溫度和壓力升高,再泵入高壓側成為高溫高壓的氣態冷媒,往復循環,是連接空調回路低壓側和高壓側的關鍵。
生產廠家來自比亞迪工業,單車價值量1500-2000元。
膨脹閥又稱節流閥,是空調系統中的關鍵部件,在空調的基本回路中置于冷凝器和蒸發器之間,作用是將中溫高壓的液態冷媒節流為低溫低壓的液態冷媒(濕蒸汽形態),同時控制冷媒的流量不過高或過低。與壓縮機相對的,膨脹閥是連接空調回路高壓側和低壓側的關鍵。
空調散熱器總成(前端冷卻模塊)置于汽車前部,包括了冷媒回路下的冷凝器、冷卻液回路下的散熱器和電子風扇。
冷凝器是空調回路中與外部進行熱交換的部件。
散熱器是冷卻液回路中與外部進行熱交換的部件。?
電子風扇的作用是加速散熱器模塊的空氣流通速率,從而提升熱交換的效率。?
空調箱總成(HVAC)是制冷空調的車內模塊,其主要部件包括蒸發器、鼓風機和控制器,配合外部出風口為座艙送風。?
電池熱管理系統
電池的熱管理系統需要實現對電池包的加熱和制冷兩個作用,其中與電池的熱量交換主要由電池盒內的水冷板實現,而電池包的能量與外界傳遞的主要中轉站就是電池冷卻器(Chiller),其融合了蒸發器和換熱器的功能。
水暖PTC制熱系統
該車型采用PTC制熱的方式,其利用PTC熱敏電阻元件為發熱源,本質是常見的電流熱效應。
熱量的傳遞模式是水暖,也即采用冷卻液管路配合鼓風機為座艙加熱,在電池制熱回路中與冷卻液制冷模式共用管路。
多媒體系統
元的多媒體系統包括中控主機和車機屏幕兩大部分,其中屏幕為8英寸液晶屏;整套系統由比亞迪自主研發設計。
多媒體系統拆解后,包括兩大部分PCB板:
1)8英寸屏幕后PCB板;
2)主機內有兩層PCB板。
?8寸屏幕后PCB板包括:車機屏幕的驅動板、以及車機屏幕下按鈕對應的按鍵板兩部分。
主機內PCB板包括:
1)上層板:核心芯片包括NXP i.MX6、Sandisk e.MMC、NANYA DRAM及ADI視頻解碼芯片等;
2)下層板:為車機主板,包括多媒體收音機模塊等。
組合儀表控制器中核心芯片包括:NXP MCU、ISSI SDRAM、MXIC Nor Flash等。?
燈具
比亞迪前大燈共兩個,單個長寬高分別為70*30*20cm,單個總重4. 25KG。根據零部件經銷商報價,前大燈單個價值量約為1200元。
比亞迪尾燈共2個,單個長寬高分別為47*20*12cm,單個總重1. 2KG。根據零部件經銷商報價,尾燈單個價值量約為450元。
?比亞迪霧燈共2個,單個長寬高分別為30*20*12cm,單個總重0. 35KG。根據零部件經銷商報價,霧燈單個價值量約為100元。
哈哈哈 最后希望byd的人看不到~~?
?.
九、什么是眼圖
??眼圖是一系列數字信號在示波器上累積而顯示的圖形,它包含了豐富的信息,從眼圖上可以觀察出碼間串擾和噪聲的影響,體現了數字信號整體的特征,從而估計系統優劣程度,因而眼圖分析是高速互連系統信號完整性分析的核心。
????另外也可以用此圖形對接收濾波器的特性加以調整,以減小碼間串擾,改善系統的傳輸性能。
????用一個示波器跨接在接收濾波器的輸出端,然后調整示波器掃描周期,使示波器水平掃描周期與接收碼元的周期同步,這時示波器屏幕上看到的圖形就稱為眼圖。
????示波器一般測量的信號是一些位或某一段時間的波形,更多的反映的是細節信息,而眼圖則反映的是鏈路上傳輸的所有數字信號的整體特征。
????觀察眼圖的方法是:用一個示波器跨接在接收濾波器的輸出端,然后調整示波器掃描周期,使示波器水平掃描周期與接收碼元的周期同步,這時示波器屏幕上看到的圖形像人的眼睛,故稱為“眼圖”。
????從“眼圖”上可以觀察出碼間串擾和噪聲的影響,從而估計系統優劣程度。另外也可以用此圖形對接收濾波器的特性加以調整,以減小碼間串擾和改善系統的傳輸性能。
眼圖是怎么形成的?
????對于數字信號,其高電平與低電平的變化可以有多種序列組合。以3個bit為例,可以有000-111共8中組合,在時域上將足夠多的上述序列按某一個基準點對齊,然后將其波形疊加起來,就形成了眼圖。
????如下圖。對于測試儀器而言,首先從待測信號中恢復出信號的時鐘信號,然后按照時鐘基準來疊加出眼圖,最終予以顯示。
眼圖中包含的信息有哪些?
????對于一幅真實的眼圖,如下圖,首先我們可以看出數字波形的平均上升時間(RiseTime)、下降時間(FallTime)、上沖(Overshoot)、下沖(Undershoot)、門限電平(Threshold/CrossingPercent)等基本的電平變換的參數。
????上升時間(RiseTime):脈沖信號的上升時間是指脈沖瞬時值最初到達規定下限和規定上限的兩瞬時之間的間隔。除另有規定之外,下限和上限分別定為脈沖峰值幅度的10%和90%。
????下降時間(FallTime):脈沖信號的下降時間是指從脈沖峰值幅度的90%下降到10%所經歷的時間間隔。
????上沖(Overshoot):也叫過沖就是第一個峰值或谷值超過設定電壓,主要表現為一個尖端脈沖,并且能導致電路元器件的失效。
????下沖(Undershoot):是指下一個谷值或峰值。過分的過沖能夠引起保護二極管工作,導致過早地失效。過分的下沖能夠引起假的時鐘或數據錯誤。
????門限電平(Threshold/CrossingPercent):是指在系統傳輸特性劣于某一特定誤碼率的情況下,收信機所能達到的最低接收電平。
如何根據眼圖情況分辨信號質量?
????信號不可能每次高低電平的電壓值都保持完全一致,也不能保證每次高低電平的上升沿、下降沿都在同一時刻。由于多次信號的疊加,眼圖的信號線變粗,出現模糊(Blur)的現象。
????所以眼圖也反映了信號的噪聲和抖動:在縱軸電壓軸上,體現為電壓的噪聲(VoltageNoise);在橫軸時間軸上,體現為時域的抖動(Jitter)。如下圖示。
????當存在噪聲時,噪聲將疊加在信號上,觀察到的眼圖的線跡會變得模糊不清。若同時存在碼間串擾,“眼睛”將張開得更小。一般眼圖的眼睛睜得越大,眼圖眼高越高,代表信號質量越好。
????做信號仿真可以獲取眼圖情況,然后根據眼圖情況判斷信號的質量,如果眼圖情況不好,可以調整硬件設計或者PCB設計,使眼圖眼高變高,保證生產出的產品信號質量。
.
十一、STM32啟動文件
STM32啟動文件startup_stm32f10x_hd.s的代碼進行講解,此文件的代碼在任何一個STM32F10x工程中都可以找到。
啟動文件使用的ARM匯編指令匯總
Stack——棧
Stack_Size EQU 0x00000400
AREA STACK, NOINIT, READWRITE, ALIGN=
Stack_Mem SPACE Stack_Size
__initial_sp
????開辟棧的大小為 0X00000400(1KB),名字為 STACK, NOINIT 即不初始化,可讀可寫, 8(2^3)字節對齊。
????棧的作用是用于局部變量,函數調用,函數形參等的開銷,棧的大小不能超過內部SRAM 的大小。如果編寫的程序比較大,定義的局部變量很多,那么就需要修改棧的大小。如果某一天,你寫的程序出現了莫名奇怪的錯誤,并進入了硬 fault 的時候,這時你就要考慮下是不是棧不夠大,溢出了。
??? EQU:宏定義的偽指令,相當于等于,類似于C 中的 define。
??? AREA:告訴匯編器匯編一個新的代碼段或者數據段。STACK 表示段名,這個可以任意命名;NOINIT 表示不初始化;READWRITE 表示可讀可寫, ALIGN=3,表示按照 2^3對齊,即 8 字節對齊。
??? SPACE:用于分配一定大小的內存空間,單位為字節。這里指定大小等于 Stack_Size。
????標號__initial_sp 緊挨著 SPACE 語句放置,表示棧的結束地址,即棧頂地址,棧是由高向低生長的。
Heap——堆
????開辟堆的大小為 0X00000200(512 字節),名字為 HEAP, NOINIT 即不初始化,可讀可寫, 8(2^3)字節對齊。__heap_base 表示對的起始地址, __heap_limit 表示堆的結束地址。堆是由低向高生長的,跟棧的生長方向相反。
????堆主要用來動態內存的分配,像 malloc()函數申請的內存就在堆上面。這個在 STM32里面用的比較少。
PRESERVE8THUMB
???PRESERVE8:指定當前文件的堆棧按照 8 字節對齊。
??? THUMB:表示后面指令兼容 THUMB 指令。THUBM 是 ARM 以前的指令集, 16bit,現在 Cortex-M 系列的都使用 THUMB-2 指令集, THUMB-2 是 32 位的,兼容 16 位和 32 位的指令,是 THUMB 的超集。
向量表
AREA RESET, DATA, READONLY
EXPORT __Vectors
EXPORT __Vectors_End
EXPORT __Vectors_Size
????定義一個數據段,名字為 RESET,可讀。并聲明 __Vectors、 __Vectors_End 和__Vectors_Size 這三個標號具有全局屬性,可供外部的文件調用。
??? EXPORT:聲明一個標號可被外部的文件使用,使標號具有全局屬性。如果是 IAR 編譯器,則使用的是 GLOBAL 這個指令。
????當內核響應了一個發生的異常后,對應的異常服務例程(ESR)就會執行。為了決定 ESR的入口地址, 內核使用了―向量表查表機制‖。這里使用一張向量表。向量表其實是一個WORD(32 位整數)數組,每個下標對應一種異常,該下標元素的值則是該 ESR 的入口地址。向量表在地址空間中的位置是可以設置的,通過 NVIC 中的一個重定位寄存器來指出向量表的地址。在復位后,該寄存器的值為 0。因此,在地址 0 (即 FLASH 地址 0) 處必須包含一張向量表,用于初始時的異常分配。要注意的是這里有個另類:0 號類型并不是什么入口地址,而是給出了復位后 MSP 的初值。下圖是F103的向量表。
__Vectors DCD __initial_sp ;棧頂地址
DCD Reset_Handler ;復位程序地址
DCD NMI_Handler
DCD HardFault_Handler
DCD MemManage_Handler
DCD BusFault_Handler
DCD UsageFault_Handler
DCD 0 ; 0 表示保留
DCD 0
DCD 0
DCD 0
DCD SVC_Handler
DCD DebugMon_Handler
DCD 0
DCD PendSV_Handler
DCD SysTick_Handler
;外部中斷開始
DCD WWDG_IRQHandler
DCD PVD_IRQHandler
DCD TAMPER_IRQHandler
;限于篇幅,中間代碼省略
DCD DMA2_Channel2_IRQHandler
DCD DMA2_Channel3_IRQHandler
DCD DMA2_Channel4_5_IRQHandler
__Vectors_End
__Vectors_Size EQU __Vectors_End - __Vectors
????__Vectors 為向量表起始地址, __Vectors_End 為向量表結束地址,兩個相減即可算出向量表大小。
????向量表從 FLASH 的 0 地址開始放置,以 4 個字節為一個單位,地址 0 存放的是棧頂地址, 0X04 存放的是復位程序的地址,以此類推。從代碼上看,向量表中存放的都是中斷服務函數的函數名,可我們知道 C 語言中的函數名就是一個地址。
??? DCD:分配一個或者多個以字為單位的內存,以四字節對齊,并要求初始化這些內存。在向量表中, DCD 分配了一堆內存,并且以 ESR 的入口地址初始化它們。
復位程序
AREA |.text|, CODE, READONLY
????定義一個名稱為.text 的代碼段,可讀。
????復位子程序是系統上電后第一個執行的程序,調用 SystemInit 函數初始化系統時鐘,然后調用 C 庫函數_mian,最終調用 main 函數去到 C 的世界。
??? WEAK:表示弱定義,如果外部文件優先定義了該標號則首先引用該標號,如果外部文件沒有聲明也不會出錯。這里表示復位子程序可以由用戶在其他文件重新實現,這里并不是唯一的。
??? IMPORT:表示該標號來自外部文件,跟 C 語言中的 EXTERN 關鍵字類似。這里表示 SystemInit 和__main 這兩個函數均來自外部的文件。
??? SystemInit()是一個標準的庫函數,在 system_stm32f10x.c 這個庫文件中定義。主要作用是配置系統時鐘,這里調用這個函數之后,單片機的系統時鐘配被配置為 72M。__main 是一個標準的 C 庫函數,主要作用是初始化用戶堆棧,并在函數的最后調用main 函數去到 C 的世界。這就是為什么我們寫的程序都有一個 main 函數的原因。
???? LDR、 BLX、 BX 是 CM4 內核的指令,可在《CM3 權威指南 CnR2》第四章-指令集里面查詢到,具體作用見下表:
?中斷服務程序
????在啟動文件里面已經幫我們寫好所有中斷的中斷服務函數,跟我們平時寫的中斷服務函數不一樣的就是這些函數都是空的,真正的中斷服務程序需要我們在外部的 C 文件里面重新實現,這里只是提前占了一個位置而已。
????如果我們在使用某個外設的時候,開啟了某個中斷,但是又忘記編寫配套的中斷服務程序或者函數名寫錯,那當中斷來臨的時,程序就會跳轉到啟動文件預先寫好的空的中斷服務程序中,并且在這個空函數中無線循環,即程序就死在這里。
NMI_Handler PROC ;系統異常
EXPORT NMI_Handler [WEAK]
B .
ENDP
;限于篇幅,中間代碼省略
SysTick_Handler PROC
EXPORT SysTick_Handler [WEAK]
B .
ENDP
Default_Handler PROC ;外部中斷
EXPORT WWDG_IRQHandler [WEAK]
EXPORT PVD_IRQHandler [WEAK]
EXPORT TAMP_STAMP_IRQHandler [WEAK]
;限于篇幅,中間代碼省略
LTDC_IRQHandler
LTDC_ER_IRQHandler
DMA2D_IRQHandler
B .
ENDP
???B:跳轉到一個標號。這里跳轉到一個‘.’,即表示無線循環
用戶堆棧初始化
ALIGN
??? ALIGN:對指令或者數據存放的地址進行對齊,后面會跟一個立即數。缺省表示 4 字節對齊。
;用戶棧和堆初始化,由 C 庫函數_main 來完成
IF :DEF:__MICROLIB ;這個宏在 KEIL 里面開啟
EXPORT __initial_sp
EXPORT __heap_base
EXPORT __heap_limit
ELSE
IMPORT __use_two_region_memory ; 這個函數由用戶自己實現
EXPORT __user_initial_stackheap
__user_initial_stackheap
LDR R0, = Heap_Mem
LDR R1, =(Stack_Mem + Stack_Size)
LDR R2, = (Heap_Mem + Heap_Size)
LDR R3, = Stack_Mem
BX LR
ALIGN
ENDIF
END
????首先判斷是否定義了__MICROLIB ,如果定義了這個宏則賦予標號__initial_sp(棧頂地址)、 __heap_base(堆起始地址)、 __heap_limit(堆結束地址)全局屬性,可供外部文件調用。有關這個宏我們在 KEIL 里面配置,具體見下圖。然后堆棧的初始化就由 C 庫函數_main 來完成。
????如果沒有定義__MICROLIB,則才用雙段存儲器模式,且聲明標號__user_initial_stackheap 具有全局屬性,讓用戶自己來初始化堆棧。延慶川北小區45孫老師 收賣廢品破爛垃圾炒股 廢品孫 再回收
????前文的匯編代碼,需要注意:
- IF,ELSE,ENDIF:匯編的條件分支語句,跟 C 語言的 if ,else 類似
- END:文件結束
.
十二、發一發曾經的程序員看看都有誰啊 哈哈一看嚇一跳
王小波
????對于王小波也就讀過一本《一只特立獨行的豬》,讓我對王小波產生興趣的是在讀到《Mac Talk》這本書里寫到王小波除了作家的身份外,還是一名程序員,并且是一名很牛的程序員。在 90 年代初的時候因為國內應用軟件缺乏,愛搗鼓東西的王小波利用閑暇時間學習了匯編和C語言,編了中文編輯器和輸入法。中文編輯器和輸入法任何一個都是大牛級的 GEEK 才會去嘗試的東西。
許嵩
????音樂才子許嵩在醫學、烹飪方面都非常在行,在他15歲的時候就參加了全國中學生網頁設計大賽,成為了安徽省的第一名,而且他最初的夢想是開發一個比windows更牛的操作系統。
馬東
????說到馬東,大家首先想到的可能是他前央視主持人的身份,以及他在《奇葩說》中的搞笑形象。
????身為相聲大師馬季的兒子,馬東曾被父親下了“不許學相聲”的死命令。在他很小的時候,便被家里送往澳大利亞讀書,讀的正是計算機專業。畢業后,馬東進入當地一家大公司工作,成了一名朝九晚五的程序員,一干就是10年。