汽車雨刷馬達規格(windshield wiper)

額定電壓 DC12V 

負載19.6kgf.cm 

低速: 電流 4A max.轉速 43±5 RPM 

高速: 電流 6A max.轉速 66±6 RPM 

馬達 轉速的公 式:

N=K*[E/(Φ*Z)]
N:表轉速 K:表常數 E:表馬達實際作用電壓
Φ:表磁場強度 Z:表電樞線圈導線數 由以上公式得知,雙速複聯式電磁式雨刷馬達是藉磁場強弱變化,而有高低速之分,當
磁場愈強時,則為低速,當磁場弱時,則為高速

 

 雨刷系統

一、概述
現今汽車的擋風玻璃為弧形,需要強而有力的雨刷,才可刮除擺動面積中的雨水或積雪,
故現多用電動雨刷(electric windshield wiper)。
雨刷的設計的重點有四:
1.馬達的旋轉運動變為雨刷的來回擺動。
2.雨刷靜止時,每次都能在玻璃邊緣,不妨礙駕駛者的視線。
3.可隨需求調整變速。
4.若左右兩個雨刷片同時刷動時,應避免碰。

 

雨刷機構包括了一個電動馬達,一個蝸齒輪減速機,一組連桿,和最重要的雨刷片。 雨刷的動力來源是一個電動雨刷馬達,電動馬達通常轉速很高,扭力卻不太夠,因此輸出軸上裝了一個蝸齒輪減速機。蝸齒輪是一種特別型式的齒輪,體積不大,卻可以產生很大的減速比,可以把雨刷的扭力放大50倍,同時可以把馬達轉速減小五十分之一,經過蝸齒輪減速之後再帶動連桿往復運動。 

 

雨刷馬達電路控制上有一個感測器,用來感測雨刷是否回復到底部位置,所以當您把雨刷關閉時,感測器感測到雨刷回到底部位置,馬達的電流才被切斷,同時雨刷設定在間歇刷動時,也要靠這個感測器感測到雨刷在底部時切斷雨刷馬達電源。

 

二、雨刷電路的工作情形
1.雨刷電路的概述
(1)雨刷電路由雨刷馬達、靜止開關(parking switch)、傳動機構及雨刷片等組成。
(2)雨刷馬達可分為電磁線圈式或永久磁鐵式馬達,旋轉時由電樞軸上的蝸桿帶動蝸齒輪,經減速齒輪而傳動搖臂及連桿組,而使雨刷片來回擺動。
(3)永久磁鐵式雨刷馬達空轉時耗用電流約在4A以下,其電路需經點火開關,採搭鐵控制,在雨刷靜位時皆會產生電樞制動。

 

三、雨刷系統各部機件構造、功用與工作情形
1.傳動機構
(1)功用:
減速齒輪:增大減速比,並將轉動方向改變90°。
連桿機構:將旋轉運動變為雨刷片的搖擺運動。
(2)構造:如下圖
減速齒輪:由馬達驅動的蝸桿、蝸齒輪所組成,蝸齒輪上一凸輪片,作為靜位開
關。 連桿機構:由數個連桿所組成,如圖8-4。
(3)工作情形:
減速齒輪:利用蝸桿與蝸齒輪的齒輪比,再一次的減速,增大扭力,減速比 = 蝸桿轉速/蝸
齒輪轉速。
連桿機構:將雨刷馬達動力傳至蝸齒輪後面連桿組的滑動接頭,滑動接頭使連桿組變為直線 的運動,再經連桿組使雨刷片產生擺動。

 

 四. 靜位開關(parking switch)-控制馬達的正反轉
(1)功用:可於馬達開關關閉後,若雨刷片不在於固定位置時,使雨刷馬達仍可運轉,直至雨 刷片於固定位置後停止,故雨刷片靜止時,每次都能在玻璃邊緣,不妨礙駕駛者的視線,如下圖,其雨刷片固定的位置又可稱為靜位位置。
(2)構造:靜位開關包含蝸齒輪上一只凸輪及接點。
(3)工作情形:如下圖
 動作A:雨刷馬達經開關作用時,不論蝸齒輪上的凸輪在任何位置,皆不產生任何作用,馬達仍可作正常運轉。
   電路流程:⊕→磁場線圈→電樞→雨刷開關3→雨刷開關1→Θ

  動作B:在雨刷開關關掉後,若雨刷片不在正常停止的位置時,馬達可經雨刷開關接至蝸齒輪上的接點搭鐵,繼續轉動,直至雨刷馬達於 靜止位置才停止。
   電路流程:⊕→磁場線圈→電樞→雨刷開關3→雨刷開關2→靜位開關c、b→Θ

 動作C:雨刷開關關掉時,若雨刷片於靜位位置則馬達立即停止,可防止馬達慣性繼續運轉, 靜位開關上的接點接合,使電樞及磁場線圈成封閉迴路,產生電氣制動,馬達立即停止。
   電路流程:電樞→磁場線圈→靜位開關a、c→雨刷開關2→雨刷開關3→電樞

 動作D:電氣制動的原理:若電樞繼續慣性運轉時,電樞切割磁力線,產生發電(發電機原理),磁場線圈會有相反的電流,而相反的電流再度流入電樞中,電樞產生相反的扭力 旋轉(電動機原理),即立刻停止運轉。

#--------------------------------

五. 雨刷系統種類及工作情形

註: 有些圖形及說明要參考下面的文章

請參考http://www.tyai.tyc.edu.tw/am/mtkao/file/car/e/car-e13.pdf 

A.雙速複聯式電磁式雨刷馬達電路的構造
(1)馬達構造,如下圖:
電樞、數個磁場線圈、蝸桿、蝸齒輪、凸輪片等。
電樞與磁場線圈採複聯式,有兩組線圈,一組與電樞串聯,另一組與電樞並聯。
凸輪片裝於蝸齒輪上,若雨刷片不在靜位時,則使二個接觸滑點片接通,雨刷片在靜位時,則使二個接觸滑點片不接通

(2)工作情形:

 ┌→並聯磁場線圈(L2)→搭鐵
電瓶⊕極→點火開關→雨刷開關┤
└→串聯磁場線圈(L1)→電樞→搭鐵
當雨刷開關拉出在第二段時,為高速運轉:

電瓶⊕極→點火開關→雨刷開關→串聯磁場線圈(L1)→電樞→搭鐵
當雨刷開關推至底關掉時:
若雨刷片不在靜位時,雨刷馬達仍需運轉,直到雨刷片於靜位位置為止:

┌→雨刷開關→並聯磁場線圈(L2)→搭鐵
電瓶⊕極→點火開關→凸輪板二接點┤
└→馬達串聯線圈(L1)→電樞→搭鐵
若雨刷片已在靜位位置時,雨刷馬達需作電氣制動,防止繼續慣性運轉:

┌→雨刷開關→並聯磁場線圈(L2)→電樞
電樞→┤
└→串聯磁場線圈(L1)→雨刷開關→並聯磁場線圈(L2)→電樞


B.永久磁鐵式雨刷馬達電路的構造
 

永久磁鐵式雨刷馬達電路的構造與工作情形
(1)構造:將雙速複聯式電磁式雨刷馬達的電磁線圈改為永久磁鐵,但與電樞接觸的電刷有三 只,分別為火線電刷、低速用電刷、高速用電刷,於蝸齒輪面設計有靜位開關用的接面板及三只接點開關。
(2)優點:
外殼薄,重量輕,體積小,不需磁場線圈。
簡單化、故障率小,無磁場線圈造成的故障。
沒有磁場線圈鐵芯渦電流的產生,故馬達運轉時不易發熱。
電氣制動效果較為確實。
(3)工作情形:

永久磁鐵式雨刷馬達三電刷,根據馬達轉速公式,低速用電刷與火線兩電刷差180°,則
電樞的電流導通導線數較多,高速用電刷與火線兩電刷差120°,則電樞的電流導通導 線數較少,如圖8-16。
小型車現皆採用永久磁鐵式,其蝸桿與蝸齒輪的減速比約為90~100:1,而作90°的
方向動力輸出。
當雨刷開關置於低速運轉時:
電路流程: 電瓶⊕極→點火開關→雨刷馬達B線頭→馬達電刷1→電樞→電刷2→雨刷開關11線頭
→雨刷開關16線頭→搭鐵
當雨刷開關置於高速運轉時:
電路流程:
電瓶⊕極→點火開關→雨刷馬達B線頭→馬達電刷1→電樞→電刷3→雨刷開關12線頭
→雨刷開關16線頭→搭鐵
當雨刷開關關掉時:
若雨刷片不在靜位位置時,雨刷馬達仍需運轉,直到雨刷片於靜位位置為止,此時靜 位開關中的B線頭與C接觸板搭鐵相通時,電路流程為:
電瓶⊕極→點火開關→雨刷馬達B線頭→馬達電刷1→電樞→電刷2→雨刷開關11線頭
→雨刷開關13線頭→靜位開關B、C線頭→搭鐵
若雨刷片已在靜位位置時,雨刷馬達需作電氣制動,防止繼續慣性運轉,此時靜位開 關中的B線頭與A線頭經另一接觸板而相通,電路流程為:
電樞→電刷1→靜位開關A線頭、B線頭→雨刷開關13線頭→雨刷開關11線頭→電刷2→ 電樞,產生相反的電流而產生制動剎車
 

C:永久磁鐵式雨刷馬達附間歇式雨刷電路
(1)構造:由一間歇控制器所控制,主要是利用電容器的充放電的作用,達到間歇的功用,如 圖8-18。
圖 8-18 開關位於間歇的位置時
(3)工作情形: 發火開關 ON,雨刷開關 OFF 時,如圖 8-19
當雨刷開關 OFF,雨刷馬達位於自動停止位置,靜止開關(S1)之內部接點 f 與 d 端
接通,使間歇器中的電容器充電,當充滿電後即不再通電了。
電路流程:
電瓶⊕→發火開關→S2內 fd→3 線頭→電容器 C1→電阻→4 線頭→Θ

雨刷開關剛置於間歇( INT )位置時,如圖 8-20
雨刷馬達以低速運轉,雨刷需先行作動一次。
電路流程:
電瓶⊕→發火開關→INT(上)→1 線頭→Q1射極、基極→P 點→電阻→4 線頭→Θ
↘集極→線圈 L→4 線頭→Θ,(b、c 接通)
電瓶⊕→發火開關→馬達→INT(下)→2 線頭→bc 接點→4 線頭→Θ,馬達低速運

#------------------  

雨刷馬達控制電路

Ford 雨刷馬達控制電路

利用ic-555-做一個雨刷無段控制器

 

六. 汽車雨刷馬達DIY應用

(1) clown rocking chair prop using wiper motor

(2)Boxbot gets power from windshield wiper motors and jump-start battery

(3)Robotic arm using wiper motor

(4)Restoring the wiper motor powered forklift toy

(5)Forklift toy payloader bucket

(6)Demo of 12v Power Supply Powering a Wper Motor with a Motor Controller

(7)How to use a wiper motor to steer a trolling motor?

(8)Helm Controls(*)

(9)Robot Prototype 2 chassis

(10)MIGHWAR | Let's Make Robots!

(11)The All Terrain Vehicle, a >30kg iron colossus(*)

video:https://youtu.be/y1bJCd2R2lc

(12)http://www.robotshop.com/letsmakerobots/simple-outdoor-test-platform-sensors

(13)Mini Tugboat  with trolling motor and wiper motor servo  

Mini Tugboat with trolling motor and wiper motor servo的影片

 (14)4G Controlled car - Home made wiper servo

      

(15)Release Actuator - Heavy Duty Wiper Motor Release Mechanism

  

(16)First Attempt at Motorizing the MountainBeest

 

(17)Super Servo  

 

 (18)Wiper Motor Running Axworthy Wheel Test

 

(19)Power Chair motor for Robotics

 

(20)DIY Segway - Drivetrain Testing

 

參考資料:

<1>曾教授與古董保時捷的分享和汽車學教室(包括電動座椅、電動車窗、汽車雨刷系統實例)

<2>雨刷科技?科技雨刷!

 

 

 

 

 

 

 

 

文章標籤

stanley 發表在 痞客邦 留言(0) 人氣()

優點: 體積小,成本低。

(1)Transformerless Power Supply

  需要 Voltage dropping capacitor or X-rated capacitor and hava capacitor table

(2)How to Make Transformer-less AC to DC Converter Circuit 

 

 

 

 

 

stanley 發表在 痞客邦 留言(0) 人氣()

 

(1) AJAX 筆記

 

(1) jQuery 程式碼由 $ (或jQuery) 開始 → 後面會接著圓刮號「()」→ 而圓刮號裡面的參數是你想叫 jQuery 幫你找什麼
(2) ('#元素名') → 接著是你想叫 jQuery 執行什麼動作 (或處理事件)。例如:$('#el').click(function() {   });

JQuery 有三種存取元素方式:

tag selector

在 jQuery 中

$('a'); // 取得頁面中所有的 <a> 標籤元素

id selector

在 jQuery 中

$('#el'); // 取得 id 為 el 的元素

class selector

在 jQuery 中

$('.item'); // 取得 class name 為 item 的所有元素

 

jQuery 對於 HTML Tag 屬性的操作 (Attributes)

 

取得選取到的元素之屬性值:

 

.attr(attributeName)

 

例如,取得第一個連結的 title 值:

 

$('a').attr('title');

 

Value - Getter/Setter

 

val,一個很常用到的方法,用來取得和設定表單元素的 value 值:

 

.val() // get
.val(value) // set

 

jQuery 對於樣式的操作 (CSS)

取得第一個匹配到的元素之樣式:

.css(propertyName)

例如,取得第一個段落的字體顏色:

$('p').css('color'); 

 

 

jQuery 事件處理 (Events)

所有段落觸發 click 事件時,將背景顏色改為藍色:

$('p').click(function() {
  $(this).css('background-color', 'blue');
});

事件處理函數中的 this 為被觸發的「DOM元素」,而非 jQuery 物件。

jQuery 的 event object

對於所有的 jQuery event handler,你都能傳入一個參數作為 event 物件,如下例:

$(document).click(function(event) {
  alert(event.pageX);
});
 

jQuery 效果 (Effects)

基本的 (Basics)

.show([duration] [, complete])

.hide([duration] [, complete])

參考文章:

http://www.fooish.com/jquery/

 

(2) JS 筆記

 

(3) HTML 筆記

HTTP 請求方法(GET 與 POST)

GET

 傳遞參數(name=value)都在 URL 中,任何人都可見
  • 適用於資訊獲取(查詢結果)
  • 使用 URL 傳遞參數(name=value)
  • 對所發送資訊的數量有限制,一般在 2,000 個字串

POST

 傳遞參數(name=value)不可見
  • 適用於修改伺服器上的資料
  • 所有傳遞的參數(name=value)將被嵌入 HTTP 的請求主體(body)
  • 對所發送資訊的數量無限制
文章標籤

stanley 發表在 痞客邦 留言(0) 人氣()

AJAX 範例

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>  
    <TITLE>HIV REVIEW System</TITLE>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />   
    <title> ref </title>  
    <link rel="stylesheet" type="text/css" href="kktext.css" media="screen" />
    <! ------- must care the path --------------------------------------------!>
    <script type="text/javascript" src="./js/jquery-1.9.1.js"></script>
    <script type="text/javascript" src="./js/jquery-ui-1.10.3.custom.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"> </script>
    <! --we can check using the google crome debug tools -------------------------!>

    <script type="text/javascript">
     function nothing() { 
      alert("查無任何資料,請重新查詢");
      window.location.href = "..\\1090.php";
     }
    </script>

$(document).ready(function () {

$('#btn').click(function (){

$.ajax({

url: 'hello.php',

cache: false,

dataType: 'html',

type:'GET',

data: { name: $('#name').val()},

error: function(xhr) {

alert('Ajax request 發生錯誤');

},

success: function(response) {

$('#msg').html(response);

$('#msg').fadeIn();}

});

});

$('#clean').click(function(){

$('#msg').html("");

// document.getElementById('msg').innerHTML = "";

}); 

function btnAjax(para,row) {         
       $.ajax({
                   type: "post",
                   url: "db1092.php?hosp_id="+para,
                   dataType:"text",
                   async: false,
                   cache: false,
                   contentType: "application/json; charset=big5",
                   success: function(response) {                 
                   response = "Data Saved!"
                   alert(response);
                   $("#msg").css({'color':'red','font-size':'40px'});                 
                   $(btnConRow).attr( "disabled",true );                  
                 }
        });           
   }    


  </head>

<Body>
     <input type ="button" value="submit" onClick="nothing"></input> <br>
     <div id='msg' style="text-align:center;font-size:20px;">       
     </div>
</Body>


</html> 


 

stanley 發表在 痞客邦 留言(0) 人氣()

How to Run Your ESP8266 for Years on a Battery

stanley 發表在 痞客邦 留言(0) 人氣()

2017.07.13 星期四

(1)100W to 5000W adaptable
(2)使用16F628A or 16F628 IC, 需要燒錄設備 
(3)
使用BC547*2, TIP122*2, 2N3773*2 電晶體

(1)詳細理論基礎介紹
(2)IR2110 MOSFET 
(3)Bubba Oscillator Circuit

(1)Inverter 100W 12VDC to 220V by IC 4047 – IRF540
(2)
100W Square wave Inverter by CD4047, LM358,2SC1061,2N3055
(3)
Inverter 100W by IC 4047 + 2N3055 with PCB
(4)
Mini car inverter 60watts using CD4047 and BD249

(1)using the IC 4047 and a couple IC 555 + 557

(1)using the IC 4047,555 * 3 + 4066 * 3

(1)Arduino NANO + L293D + IRF3205(55V 110A,18元)->modified sine waveform
https://create.arduino.cc/projecthub/user534361260/make-your-own-power-inverter-using-arduino-666cf9
(2)As the inverter output power is 600VA and it is 75% efficient so the input current at full load comes out to be 75Amp approx. (using ohm's law).

(7)Convert square wave Inverters to sine wave Inverter(not easy,cost)


(8)
Arduino SPWM Generator Circuit (easier)
   Arduino Pure Sine Wave Inverter Circuit(Arduino SPWM code)

 

(9)Arduino Power Inverter Circuits
      Arduino + IRF9630 * 2 + IRF630 * 2 + 4N37 * 2  => square wave pulses
      A H bridge to drive transformer

(10)SG3525 Pure Sinewave Inverter Circuit(***)
    SG3525(控制板145元,IC21元) + 555 + BC547 + BC557

(11)How to modify the PWM frequency on the arduino-part1(fast PWM and Timer 0)

              How to modify the PWM frequency on the arduino-part2(Timer 1 and phase correct PWM mode)

         How to generate a sine wave from arduino or atmega 328 (Arduino code)

(12)SG3525 Full Bridge Inverter Circuit

(13)single phase pure sine wave inverter using arduino
         MOSFT driver IR2112 * 2  & Uno  & MOSEFT 2N702 * 4 (Ardino code must be purchased)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

文章標籤

stanley 發表在 痞客邦 留言(0) 人氣()

2017.07.12

         要寫出比較複雜或功能性的程式,總是要多著墨一下在處理器的中斷處理機制,除非你的程式很簡單只是單一程式或只做簡單地LED控制,那可以不用學習中斷處理機制,否則你會發現中斷處理能幫忙你解決很多程式碼。

Interrupt handlers(中斷處理) - 也被做中斷服務常式(ISR)或定義成callback functions。它們的概念是當某一事件發生時去做一些事,這些事件可能是計時器觸發或某個pin脚位電壓改變。這些事件也可能發生在程式執行時的任何點。

中斷處理程式碼撰寫技巧

  • (1)中斷服務常式盡可能短及簡單。
  • (2)中斷服務常式內不能使用記憶體分配的功能。
  • (3)中斷服務常式需要返回多個bytes值時,使用事先分配好的bytearray資料型態傳送,如在主程式及中斷服務常式要分享多個整數值時使用array資料型態傳送。
  • (4)主程式及中斷服務常式要存取資料時,優先考慮先在主程式中先暫停中斷功能,存取資料後再恢復中斷(也就是臨界區段的處理方式(Critical section),它是指一個存取共用資源(例如:共用裝置或是共用記憶體)的程式片段,而這些共用資源有無法同時被多個執行緒存取的特性)。
  • (5)中斷服務常式要分配一個emergency exception buffer去處理ISR中的錯誤。例如
    import micropython
    micropython.alloc_emergency_exception_buf(100)

 中斷處理程式範例

def callback(p):
     print('pin change', p)

下面設定兩個pin脚為輸入

from machine import Pin
p0 = Pin(0, Pin.IN)
p2 = Pin(2, Pin.IN)

下面設定兩個pin脚何時被觸發

p0.irq(trigger=Pin.IRQ_FALLING, handler=callback)
p2.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=callback)

接脚0被觸發當接脚0的電位從高電位變為低電位時啓動 callback
接脚2被觸發當接脚2的電位從高電位變為低電位時或從低電位變為高電位時啓動 callback

#------------------------
下面為時間器物件
的中斷服務常式範例
每一個計時器由記數器組,而計數器以固定的頻率做計數(通常以HZ為單位)。當計數器計數到設定的時間時即觸發一個事件,而我們設定事件使用callback的方式就可以呼叫我們定義的函數。

資料來源: http://docs.micropython.org/en/latest/wipy/wipy/tutorial/timer.html

#----------------------

Example1: 使用固定頻率觸發一個LED

from machine import Timer
from machine import Pin
led = Pin('GP16', mode=Pin.OUT)                  # enable GP16 as output to drive the LED
tim = Timer(3)                                   # create a timer object using timer 3
tim.init(mode=Timer.PERIODIC)                    # initialize it in periodic mode
tim_ch = tim.channel(Timer.A, freq=5)            # configure channel A at a frequency of 5Hz
tim_ch.irq(handler=lambda t:led.toggle(), trigger=Timer.TIMEOUT)        # toggle a LED on every cycle of the timer

Example using named function for the callback:

from machine import Timer
from machine import Pin
tim = Timer(1, mode=Timer.PERIODIC, width=32)
tim_a = tim.channel(Timer.A | Timer.B, freq=1)   # 1 Hz frequency requires a 32 bit timer

led = Pin('GP16', mode=Pin.OUT) # enable GP16 as output to drive the LED

def tick(timer):                # we will receive the timer object when being called
    global led
    led.toggle()                # toggle the LED

tim_a.irq(handler=tick, trigger=Timer.TIMEOUT)         # create the interrupt

Further examples:

from machine import Timer
tim1 = Timer(1, mode=Timer.ONE_SHOT)                               # initialize it in one shot mode
tim2 = Timer(2, mode=Timer.PWM)                                    # initialize it in PWM mode
tim1_ch = tim1.channel(Timer.A, freq=10, polarity=Timer.POSITIVE)  # start the event counter with a frequency of 10Hz and triggered by positive edges
tim2_ch = tim2.channel(Timer.B, freq=10000, duty_cycle=5000)       # start the PWM on channel B with a 50% duty cycle
tim2_ch.freq(20)                                                   # set the frequency (can also get)
tim2_ch.duty_cycle(3010)                                           # set the duty cycle to 30.1% (can also get)
tim2_ch.duty_cycle(3020, Timer.NEGATIVE)                           # set the duty cycle to 30.2% and change the polarity to negative
tim2_ch.period(2000000)          

#----------------------

Example3: ESP32 MicroPython: External interrupts

import machine
 
interruptCounter = 0
totalInterruptsCounter = 0
 
def callback(pin):
  global interruptCounter
  interruptCounter = interruptCounter+1
 
p25 = machine.Pin(25, machine.Pin.IN, machine.Pin.PULL_UP)
 
# use its pull up resistor, which will guarantee that it will be in a known state (VCC) when no electrical signal is applied. 
 
p25.irq(trigger=machine.Pin.IRQ_FALLING, handler=callback)
 
# interrupt should be triggered when a falling edge is detected in the input signal connected to the pin. 
 
while True:
 
  if interruptCounter>0:
 
    state = machine.disable_irq()
    interruptCounter = interruptCounter-1
    machine.enable_irq(state)
 
    totalInterruptsCounter = totalInterruptsCounter+1
    print("Interrupt has occurred:" + str(totalInterruptsCounter))

 

註: GPIO 輸入腳最好用 2K~10K 上拉電阻接至 3.3V (使用 2K 對雜訊抑制力較佳), 不過 GPIO 腳內部都有內建上拉電阻, 可以透過軟體設定開啟 

#-----偵測RSSI值的MicroPython程式-------

import network

from machine import Timer 

wlan = network.WLAN(network.STA_IF) 

def connectAP(ssid, pwd):

    if not wlan.isconnected():

        wlan.active(True)

        wlan.connect(ssid, pwd)        

        while not wlan.isconnected():

            pass 

    print('network config:', wlan.ifconfig()) 

connectAP("無線網路AP名稱", "無線網路密碼") 

# 每2秒顯示信號強度

tim = Timer(-1)

tim.init(period=2000, mode=Timer.PERIODIC,
callback=lambda t:print('RSSI:', wlan.status('rssi'))) 

try:
    while True:
        pass

except:

    tim.deinit()
    print('bye!')

 

 

參考資料: MicroPython: Interrupts with ESP32 and ESP8266

偵測ESP8266的Wi-Fi RSSI(接收信號強度)的Arduino和MicroPython程式

 

 

 

 

 

 

文章標籤

stanley 發表在 痞客邦 留言(0) 人氣()

2017.07.10 星期一

    在研究或使用MCU時很多文章都會談論到記憶體管理機制,但我找了很多資料,發現為什麼ESP8266的使用者或文章很少提到ES8266內部的記憶體使用結構,可能大家都偏重在應用面很多少會去管系統面的東西,反正程式可以執行,結果正確就好,何必去管它記憶體如何分配,程式如何消耗。或許這不是一個很值得研究的議題,但我是資工背景所以個人卻對這塊黑盒子有點興趣及好奇,所以做些研究記錄。至於各位看倌有没有興趣,我是不知道,但說不定這篇文章可以幫助我們對ESP8266的操控能有些了解。
要探討記憶體的使用,我們總要複習一下記憶體位址的表示方式
假如
ESP8266的記憶體體內量為512K Bytes=4194304 bits 則可用的記憶體範圍利使用16進示則從0x000000~0x3FFFFF。

ESP8266的記憶體體內量為1M Bytes=  8388608 bits 則可用的記憶體範圍利使用16進示則從0x000000~0x7FFFFF。
ESP8266的記憶體體內量為4M Bytes= 33554432 bits 則可用的記憶體範圍利使用16進示則從0x000000~0x1FFFFFF。
ESP8266的記憶體體內量為8M Bytes= 67108864 bits 則可用的記憶體範圍利使用16進示則從0x000000~0x3FFFFFF。

所以假如我們買的是ESP-12E或F有4MBytes的記憶體空間,則在進行燒錄作業時要指定作業系統及程式要放在什麼區域。例如我們作業系統通常會從0x000000開始存放,而當晶片開機或Reset時,晶片則從記憶區0x000000開始載入作業系統程式直到控制權移轉給使用者為止。
一個ESP8266應用程式是由二部份映像檔組成,而這二個檔案是被儲存在flash memory內,第一部份位址儲存在0x0000且內容包括boot code(指令RAM碼,RAM資料),而這個檔案最大為64KB。
而第二部份包含ROM code(指令ROM碼及唯讀資料),這二個部份最大的不同在於第一個映像檔在開機期間會從flash 放入晶片內的RAM,而在第二部份內的常式會在需要時才從第二個映像檔載入至RAM指令區的快取記憶體內或直接到flash memory讀取唯讀資料。

因為不同的firmware有不同的記憶體規劃方式,底下為一個ESP8266 Memory Map for 512K Flash Chip 的例子,

位址 大小 描述
0x000000 
0x010000 (64K)
Application boot image
0x010000
0x001000 (4K)
Basic Persistent memory
0x011000
0x06b000 (428K)
Application ROM code/data
0x07c000
0x004000 (16K)
ESP8266 system parameters

 雖然大部份ESP8266晶片最都有512KB的flash memory ,但是其他大容量的晶片例如1MB, 2MB, 4MB or 8MB都有類似的記憶體架構,而前面三個區域的位址是固定的,只有第四個區域大小會晶片容量不同而不同。另外Basic Persistent memory和ESP8266 system parameters 可以被應用程式使用。而Application ROM code/data的其他空的區域可以任意被使用,例如SPIFFS (SPI Flash File System)。

我們再回顧且對應一下規格書上所寫的文件。

  • Architecture: Xtensa lx106
  • CPU frequency: 80MHz overclockable to 160MHz
  • Total RAM available: 96KB (part of it reserved for system)
  • BootROM: 64KB
  • Internal FlashROM: None
  • External FlashROM: code and data, via SPI Flash. Normal sizes 512KB-4MB.
  • GPIO: 16 + 1 (GPIOs are multiplexed with other functions, including external FlashROM, UART, deep sleep wake-up, etc.)
  • UART: One RX/TX UART (no hardware handshaking), one TX-only UART.
  • SPI: 2 SPI interfaces (one used for FlashROM).
  • I2C: No native external I2C (bitbang implementation available on any pins).
  • I2S: 1.
  • Programming: using BootROM bootloader from UART. Due to external FlashROM and always-available BootROM bootloader, ESP8266 is not brickable.

 

 

回ESP8266文件主目錄

 

 參考資料

https://www.zbasic.net/doc/ZBasicESP8266/ZBasicESP826661.html

 

文章標籤

stanley 發表在 痞客邦 留言(0) 人氣()

以下為ESP8266 文件目錄

(1)ESP8266晶片內部主要功能介紹

(2)ESP8266晶片家族比較

(3)ESP8266工作模式及電氣特性

(4)ESP8266應用模式

(5)EP8266電源與供電問題

(6)ESP8266硬體線路連接

(7)ESP8266韌體更新及開發模式介紹

(8)ESP8266開發版通電測試及Hello World

(9)ESDP8266編輯器 

(10)ESP8266 記憶體分配及管理

(11)ESP8266應用範例 

 

 

 

 

文章標籤

stanley 發表在 痞客邦 留言(0) 人氣()

ESP8266 As a Microcontroller

ESP8266 As Arduino

Programming ESP8266 Using Arduino IDE

Connecting ESP8266 With Raspberry PI Using Python

ESP8266 WiFi Module for Dummies

DIY WIFI RC Car With ESP8266 and Arduino IDE

How to Build a ESP8266 Web Server

WIFI Battery Monitor System - ESP8266

Easy ESP8266 WiFi Debugging With Python

ESP8266 & IFTTT Autobot Notification System

Programming the ESP8266-12E Using Arduino Software/IDE

Configure STA_IF interface of ESP8266 (MycroPython firmware) to connect with WIFI network automatically on boot

Boot Scripts

 

回ESP8266文件主目錄

 

 

 

 

 

 

 

 

 

stanley 發表在 痞客邦 留言(0) 人氣()

Close

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

reload

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼