資料介紹
描述
項(xiàng)目目標(biāo)
該項(xiàng)目的目標(biāo)很明確:通過磁懸浮并由 Arduino Nano 控制,使物體漂浮。
但也有一些要求。
首先,我想要一個(gè)具有一定大小和重量的物體,以一種非常穩(wěn)定的方式漂?。]有抖動(dòng)、沒有振蕩……)。
此外,安全性也是一個(gè)問題(主磁鐵的額定電壓為 24 伏和 25 瓦,會(huì)產(chǎn)生相當(dāng)多的熱量)。
最后但并非最不重要的一點(diǎn)是:最終結(jié)果必須是“不錯(cuò)的”,在我的客廳中贏得一席之地!
我終于想出了一個(gè)地球儀,它不僅可以漂浮,而且還以固定的速度旋轉(zhuǎn),由兩個(gè)數(shù)控 LED 燈條照亮。
磁懸浮原理
實(shí)現(xiàn)磁懸浮的一種方法是將電磁體放置在包含非常強(qiáng)磁體的物體(在本例中為地球球)上方。通過不斷地測量物體的垂直位置,我們可以改變電磁鐵對物體磁鐵施加的磁力,從而使物體保持在原位。這與在高速公路上駕駛汽車的方式非常相似:通過不斷測量汽車是向左還是向右漂移,駕駛員只需進(jìn)行小幅修正就可以留在他/她的車道上。這種機(jī)制稱為“控制系統(tǒng)”。
不深入細(xì)節(jié),困難的是這個(gè)磁懸浮控制系統(tǒng)根本不是一個(gè)“線性”系統(tǒng)。例如,施加到電磁體的電流與施加的力(在地球的磁鐵上)之間的關(guān)系是二次的。此外,這個(gè)力隨著電磁鐵和磁鐵之間的距離而變化(這似乎是合乎邏輯的)。而這種關(guān)系也是二次的!
這意味著用于保持全球位置穩(wěn)定的“參數(shù)”(我們稍后會(huì)討論)至關(guān)重要。改變地球的重量、磁鐵、電磁鐵、傳感器的位置……可能會(huì)導(dǎo)致地球高度不穩(wěn)定,并且您將很難找到正確的參數(shù)(這將是反復(fù)試驗(yàn),我恐怕)再次獲得穩(wěn)定運(yùn)行。事實(shí)上,這種非線性也使得應(yīng)用數(shù)學(xué)方法來計(jì)算這些參數(shù)變得更加困難。
因此,如果您想自己構(gòu)建它,請?zhí)嵋粋€(gè)建議:嘗試獲得與我使用的相同的起重電磁鐵和相同的永磁體,并瞄準(zhǔn)大約 140 克的地球重量(包括磁鐵)。
地球升降控制系統(tǒng)
那么它是怎樣工作的 ?好吧,我將嘗試以一種簡單的方式進(jìn)行解釋——同時(shí),請留意下圖。
首先,我們需要確定地球的垂直位置。該位置由霍爾效應(yīng)傳感器測量,這是一種微型設(shè)備,可測量磁場強(qiáng)度(由安裝在地球內(nèi)部的磁鐵產(chǎn)生),并將其轉(zhuǎn)換為電壓。如果地球更靠近傳感器,磁場強(qiáng)度會(huì)增加,輸出電壓會(huì)發(fā)生變化。在我們的例子中,由于磁鐵的北極和南極以及霍爾效應(yīng)傳感器的定位方式,這個(gè)電壓會(huì)降低。如果地球遠(yuǎn)離傳感器,電壓將再次增加。因此,傳感器有效地將位置轉(zhuǎn)換為電壓!
這個(gè)(?。╇妷海ㄍǔT诠ぷ鼽c(diǎn)介于 100 和 300 毫伏之間,具體取決于設(shè)置)由 Opamp IC8B 放大(參見示意圖),然后由 Arduino ADC 轉(zhuǎn)換為 10 位數(shù)。歡迎來到數(shù)字世界!(考慮到 10 位 Arduino ADC 分辨率,Opamp IC8B 的放大是必要的步驟,以更好地捕捉微小的變化)
請注意,從控制系統(tǒng)的角度來看,ADC 轉(zhuǎn)換可以被視為第二個(gè)“放大”步驟:ADC 將輸入電壓縮放為 0 到 1023 之間的數(shù)字。將此數(shù)字視為(縮放)電壓。
下一步,程序?qū)乃栉恢茫ǚQ為“設(shè)定點(diǎn)”)中減去該數(shù)字(表示位置,但以毫伏表示),該位置也應(yīng)以毫伏表示并適當(dāng)縮放(我們只能減去以相同單位表示的值)。
減法為我們提供了與所需地球位置的偏差(我們稱之為“誤差信號(hào)”,因?yàn)楫?dāng)沒有偏差時(shí)它為零)。該偏差(再次)以毫伏表示。
暫時(shí)忘記圖中的“積分器”和“微分器”框(我稍后會(huì)談到):我們有第三個(gè)放大步驟,這次是以數(shù)字方式執(zhí)行的。放大系數(shù)(“增益”)作為常數(shù)存儲(chǔ)在 Arduino 程序中。
請注意,從運(yùn)算放大器 IC8B 的輸入開始的總增益是所描述的三個(gè)放大步驟的乘積——這些步驟發(fā)生在模擬世界還是數(shù)字世界根本不相關(guān)!這個(gè)增益非常重要,因?yàn)楦叩脑鲆媸沟孟嗤模ㄐ。┛刂破鬏斎耄ㄟ@里:位置偏差)產(chǎn)生更高的輸出(這里:具有更高占空比的脈沖 - 我們會(huì)談到)。想象一下這個(gè)總收益會(huì)非常?。翰粫?huì)發(fā)生很多事情,對吧?更一般地說,增益太低或太高,系統(tǒng)都有變得高度不穩(wěn)定的風(fēng)險(xiǎn),所以我們需要謹(jǐn)慎選擇。
無論如何,然后將放大的誤差信號(hào)饋送到 Arduino Nano Timer 1 以生成具有特定占空比(脈沖寬度調(diào)制)的脈沖:如果它為零,則占空比也將為零。如果為 999,則占空比為 100%。脈沖持續(xù)時(shí)間固定為恰好一毫秒。請參閱下面的示波器屏幕截圖(藍(lán)色通道)。
產(chǎn)生的脈沖將確定電磁鐵的“開啟”時(shí)間(使用功率晶體管 Q1 - 我們現(xiàn)在回到模擬世界)在那一毫秒內(nèi)。這將增加或減少該毫秒內(nèi)電磁體施加在地球磁鐵上的“平均”力,結(jié)果地球的位置將發(fā)生變化。
正如您可能已經(jīng)猜到的那樣,整個(gè)過程每毫秒重復(fù)一次(中斷驅(qū)動(dòng))。每個(gè)周期都通過讀取 ADC 輸出來開始,以獲得霍爾傳感器電壓。如果地球處于穩(wěn)定的浮動(dòng)位置,該電壓將接近設(shè)定點(diǎn)電壓(在本例中:大約 1000 毫伏,是霍爾效應(yīng)傳感器輸出的 10 倍)。與任何控制系統(tǒng)一樣,這個(gè)電壓會(huì)有一點(diǎn)波動(dòng):如果它不會(huì)波動(dòng),我們就不需要控制器。查看示波器屏幕截圖(黃色通道)并驗(yàn)證地球每毫秒下降到地面大約 500 微秒,然后再次向上移動(dòng)到電磁體(示波器上的“向上”實(shí)際上是“向下”,反之亦然。對此感到抱歉)。
那么這些積分器和微分器盒呢?出色地...
- 將誤差信號(hào)相對于時(shí)間進(jìn)行微分并將該項(xiàng)添加到誤差信號(hào)中可以對快速變化的地球位置做出更快的反應(yīng)(對于較慢變化的地球位置,該項(xiàng)的影響會(huì)更?。?。微分器時(shí)間常數(shù) Τd(也是 Arduino 程序中的一個(gè)參數(shù))控制該項(xiàng)的權(quán)重。它是所有參數(shù)中最關(guān)鍵的:必須仔細(xì)選擇才能獲得穩(wěn)定性!
- 為什么我們要整合誤差信號(hào)(相對于時(shí)間)?好吧,想象一下系統(tǒng)處于靜止?fàn)顟B(tài)并且實(shí)際的地球位置對應(yīng)于設(shè)定點(diǎn):這將誤差信號(hào)以及 PWM 輸出(占空比為零的脈沖)和電磁體施加在地球上的力降低到零。但這種情況是不可能的: 由于地球的重量,它需要一個(gè)反作用力。因此,地球的靜止位置將略低于設(shè)定點(diǎn)指示的位置(這給我們留下了非零誤差信號(hào),因此,非零 PWM 信號(hào)和反作用力)。這稱為“靜態(tài)錯(cuò)誤”。現(xiàn)在,如果我們對剩余的誤差信號(hào)進(jìn)行積分,控制器(PWM)輸出將緩慢增加,地球位置將接近所需位置,誤差信號(hào)將變?yōu)榱?,積分將停止......恰好當(dāng)?shù)厍蛟谖覀兿胍奈恢盟恰?/font>正如您已經(jīng)猜到的那樣,積分器時(shí)間常數(shù) Τi 是 Arduino 程序中的另一個(gè)參數(shù)。它不如 Τd 重要。
結(jié)論:這里有 4 個(gè)參數(shù)很重要。設(shè)定點(diǎn)、增益、積分時(shí)間常數(shù)和微分時(shí)間常數(shù)。您會(huì)發(fā)現(xiàn)這些常量在 Arduino 程序中定義。
為什么采樣時(shí)間是 1 毫秒?為什么不是 10 毫秒?在自由落體中,最初處于靜止?fàn)顟B(tài)的物體將在 1 毫秒內(nèi)下降約 5 微米。在 10 毫秒內(nèi),這將增加到 0.5 毫米 (x 100)。人眼所感知的情況并不完全穩(wěn)定,從控制系統(tǒng)的角度來看,保持系統(tǒng)穩(wěn)定可能要困難得多。這就回答了!
電磁鐵總成
這個(gè)組件包含我們需要的一切,除了用于地球旋轉(zhuǎn)的線圈和 LED 燈帶。
電磁鐵非常強(qiáng)大,會(huì)產(chǎn)生相當(dāng)多的熱量。為了確保一切安全,在其頂部放置了一個(gè)相當(dāng)大的散熱器。此外,溫度傳感器固定在散熱器上。它將用于連續(xù)控制溫度。
散熱器上方是一塊木板(用于將組件“懸掛”在木燈籠中,無需任何螺母或螺栓)。就在下方,注意鋁制角型材以將木板固定到位。螺紋墊片將板與散熱器底部連接起來。
在散熱器下方,使用相同的孔(當(dāng)然,您必須鉆孔),我們有另一組螺紋墊片到達(dá)有機(jī)玻璃板,固定我們用于垂直位置測量的傳感器(霍爾效應(yīng)傳感器)。
有機(jī)玻璃尺寸為 90 x 105 毫米。后邊緣從霍爾效應(yīng)傳感器(電磁體中心)位置延伸 67 毫米。請注意,最后一個(gè)維度很重要,因?yàn)檫@是將保持球形旋轉(zhuǎn)霍爾效應(yīng)傳感器的 3D 組件連接到有機(jī)玻璃的位置。我們稍后會(huì)討論這個(gè)。
此外,您必須切割有機(jī)玻璃板并在其中鉆孔。首先仔細(xì)測量并制作一些草圖,將證明是一個(gè)很大的幫助!
重要提示:確保墊片(以及有機(jī)玻璃下方的螺栓)沒有磁性。
升降霍爾效應(yīng)傳感器
有幾種方法可以準(zhǔn)確測量地球儀和電磁鐵之間的距離——更準(zhǔn)確地說,測量期望位置(“設(shè)定點(diǎn)”)和實(shí)際位置之間的偏差。一種常見的方法是在球體的一側(cè)使用光源,在另一側(cè)使用光檢測器。但在我們的案例中,如前所述,我們使用霍爾效應(yīng)傳感器測量磁場強(qiáng)度(取決于地球位置)并將其轉(zhuǎn)換為電壓。
實(shí)際上,這個(gè)傳感器不會(huì)參照電磁鐵來控制地球儀的位置,而是參照傳感器本身。但是因?yàn)檫@個(gè)傳感器是固定位置的,這最終會(huì)確定設(shè)定點(diǎn):地球相對于電磁鐵的位置。
如前所述,電磁鐵和傳感器(或有機(jī)玻璃板)之間的垂直距離至關(guān)重要。
配合我使用的電磁鐵(高度40mm),有機(jī)玻璃板距離散熱片58mm(可以通過堆疊15mm和40mm螺紋墊片,中間加一個(gè)螺母)。這在電磁鐵和霍爾傳感器之間產(chǎn)生了 18 毫米的“間隙”。
您可能會(huì)問一個(gè)問題:電磁鐵的磁場不會(huì)影響傳感器讀數(shù)嗎?嗯,是的......但這不是問題,因?yàn)楫?dāng)我們讀出傳感器值(每毫秒)時(shí),電磁鐵始終處于相同('ON')狀態(tài)(您可以通過查看示波器屏幕截圖來驗(yàn)證這一點(diǎn), 以上)。所以,它的屬性是不變的,可以被丟棄。
這個(gè)霍爾效應(yīng)傳感器需要正好放置在磁鐵中心點(diǎn)的下方。如果沒有,您將在系統(tǒng)中引入振蕩,您的地球?qū)㈤_始在水平方向“擺動(dòng)”,這是電磁體無法控制的。您將必須弄清楚如何確定該位置。在視覺上進(jìn)行操作時(shí),請考慮一種稱為“視差”的東西。建議:一旦你確定了那個(gè)點(diǎn),就在有機(jī)玻璃的底部放一個(gè)小點(diǎn)。這將幫助您定位霍爾傳感器。
霍爾效應(yīng)傳感器放置在一個(gè)帶有精密觸點(diǎn)的插座中,粘在有機(jī)玻璃板上(我使用的是 Loctite 強(qiáng)力膠)。由于傳感器引線未焊接,因此可以輕松微調(diào)傳感器位置。假設(shè)我們使用的是 SS 495A 傳感器,沖壓面必須朝下(Arduino 程序假定它)。
粘合容器時(shí),確保有機(jī)玻璃板清潔干燥。稍后我們將處理 PCB 連接。
溫度感應(yīng)器
溫度傳感器連續(xù)測量散熱器溫度:當(dāng)它超過設(shè)定的閾值時(shí),磁鐵和線圈將被關(guān)閉。
您需要安裝傳感器,使其與散熱器有良好的機(jī)械接觸。如何做到這一點(diǎn)在很大程度上取決于所使用的散熱器。
稍后我們將處理 PCB 連接。
全球
我找到了一個(gè)地球儀用作存錢罐。這樣做的好處是底部有一個(gè)很大的開口(缺點(diǎn)也是有一個(gè)投入錢的槽)。在這種情況下,我們將使用這個(gè)開口在內(nèi)部放置一個(gè)強(qiáng)永磁體(釹,20 x 20 x 20 毫米),靠近地球的地理北極。我用雙面膠帶來做到這一點(diǎn)。你需要一些整容技能和良好的思維來完成這項(xiàng)工作,而不必打開(并可能損壞)地球,但是......這是可能的。
確保將磁鐵的北極朝上放置(一個(gè)立方體有六個(gè)面,所以你必須做一些實(shí)驗(yàn))。請注意不要在這里犯錯(cuò):如果將磁鐵倒置,您將無法使其工作!最好是用指南針來確定磁鐵的北極:磁鐵的北極吸引指南針的南極:這是指向地球地理南方向的指針(這看起來很奇怪,但是地球的磁北位置很近到地球的地理南方,反之亦然)。
稍后,如果施加在地球磁鐵上的力被證明是排斥而不是吸引,您將不得不反轉(zhuǎn)電磁線。但現(xiàn)在不要擔(dān)心。
但我們也希望地球旋轉(zhuǎn),對吧?這將需要在地球內(nèi)部放置兩個(gè)額外的(較小的)磁鐵。這些也是釹類型。再說一次,我很幸運(yùn)……我使用的地球儀是由兩半塑料制成,有一個(gè)內(nèi)邊框(紅色)用于將它們粘合在一起(我猜)。這個(gè)邊界是放置這兩個(gè)磁鐵的理想位置:一個(gè)在格林威治子午線,另一個(gè)……當(dāng)然在對面(反子午線)。請注意,我使用了雙面膠帶。
重要提示:將磁鐵定位在格林威治子午線,北極朝上,另一個(gè)北極朝下。磁鐵會(huì)產(chǎn)生一個(gè)(非常小的)扭矩,讓地球保持旋轉(zhuǎn)——但這會(huì)在以后發(fā)生。
地球旋轉(zhuǎn)線圈
為了產(chǎn)生地球旋轉(zhuǎn)扭矩,我們需要一個(gè)旋轉(zhuǎn)磁場。放置在地球下方的六個(gè)線圈將用于此目的。
你必須自己制作這些線圈,用空線軸(我在互聯(lián)網(wǎng)上找到這些)和 500 匝漆包銅線(直徑 0.28 毫米)。假設(shè)您使用的線圈與我的相似,這將產(chǎn)生大約 20 歐姆的線圈電阻,這很好。
線圈由帶有六個(gè)旋鈕的 3D 打印蜘蛛固定到位,與線軸的中心孔緊密配合。蜘蛛本身通過兩個(gè)螺絲固定在有機(jī)玻璃板上。
一個(gè)兩針接頭焊接到每個(gè)線圈上,這些接頭都連接到一個(gè)更大的 15 針插座(帶有 3 個(gè)未使用的針),粘在中間的蜘蛛上。
線圈從 1 到 6 編號(hào)(查看圖片“地球旋轉(zhuǎn)線圈,在燈籠中”),線圈端子標(biāo)記為 A 和 B。
如果從頂部向下看線圈,繞組方向(從第一圈到最后一圈)為順時(shí)針方向,我們將端子 A 定義為銅繞組第一圈的起點(diǎn)(靠近線軸中心)和端子B作為最后一匝銅繞組的末端。
如果繞線方向是逆時(shí)針方向,那么我們將第一圈的起點(diǎn)指定為終端 B,將最后一圈的終點(diǎn)指定為終端 A。
線圈將成 3 對一起工作:線圈 1 和 4、2 和 5、3 和 6。因此,我們將 2 針接頭(線圈端子)連接到插座,如圖所示“地球旋轉(zhuǎn)線圈:關(guān)閉-連接,頂視圖',下面。如您所見,線圈“B”端子對于每個(gè)線圈對都是簡單互連的。線圈“A”端子的插座引腳焊接到扁平電纜(6 線)上。
在扁平電纜的另一端,我們稍后將焊接一個(gè)插座。暫時(shí)預(yù)見充足的電纜長度。
當(dāng)然,有機(jī)玻璃板必須切割成所需的尺寸,具體取決于您使用的燈籠。參見圖片“地球旋轉(zhuǎn)線圈,在燈籠中”。
如果一切都正確連接,在任何給定時(shí)刻,三個(gè)相鄰線圈的垂直磁場方向?qū)⑴c其他三個(gè)線圈的磁場方向相反。每隔一段時(shí)間,這個(gè)磁場就會(huì)逆時(shí)針旋轉(zhuǎn) 60 度(從頂部看線圈)。這將在地球的兩側(cè)磁鐵上產(chǎn)生扭矩。此外,這種輪換將與 Arduino 程序的預(yù)期同步。因此,仔細(xì)遵循連接說明非常重要。
為了獲得更好的視覺效果,線圈位于兩個(gè)地球旋轉(zhuǎn)磁鐵下方約 130 毫米處。由于我們不需要太大的扭矩,即使有這個(gè)距離,我們也能夠保持地球旋轉(zhuǎn)。
地球旋轉(zhuǎn)傳感器組件
該組件由六個(gè) 3D 打印部件組成。其目的是定位球形旋轉(zhuǎn)霍爾效應(yīng)傳感器,使其可以拾取安裝在球形內(nèi)部的 2 個(gè)球形旋轉(zhuǎn)磁鐵的通道。因此,它允許霍爾傳感器水平移動(dòng)(通過向前或向后移動(dòng)“垂直連接器”部分)和垂直移動(dòng)(通過在其插槽中向上或向下滑動(dòng)“霍爾傳感器外殼”)。就位后,兩個(gè)螺母將霍爾效應(yīng)傳感器牢牢固定在位。
霍爾傳感器本身放置在“霍爾傳感器外殼”下端的小管內(nèi)。一個(gè)精密接觸的插座粘在它的背面(我使用 Loctite 強(qiáng)力膠)來接收三個(gè)霍爾傳感器引線。
由于傳感器引線未焊接,因此可以輕松微調(diào)傳感器位置。假設(shè)我們使用的是 SS 495A 傳感器,標(biāo)記的一面必須朝上(Arduino 程序假定它)。
安裝霍爾效應(yīng)傳感器是一項(xiàng)簡單的任務(wù):只需將 3 根引線彎曲成 90° 位置,將傳感器滑入小管內(nèi)(從后向前),然后使用鑷子將 3 根傳感器引線精確地放入插座中- 聯(lián)系人。
地球自轉(zhuǎn)控制系統(tǒng)
如前所述,地球下方的旋轉(zhuǎn)線圈將對地球施加微小的扭矩(因?yàn)榈厍騼?nèi)部安裝了兩個(gè)小磁鐵)。這個(gè)扭矩是如此之小,以至于如果兩個(gè)速度(磁場和地球)相距不太遠(yuǎn),它只會(huì)使地球的旋轉(zhuǎn)與(“鎖定”)旋轉(zhuǎn)磁場(由六個(gè)線圈引起)同步。
作為旁注,我們也有地球磁場試圖將地球變成指南針,這當(dāng)然無濟(jì)于事:事實(shí)上,如果關(guān)閉線圈,地球?qū)⑹冀K定位自己,使其兩個(gè)磁鐵指向地球的磁北極和南極。旋轉(zhuǎn)磁鐵的磁極朝上和朝下的事實(shí)并不能阻止這一點(diǎn),因?yàn)榈厍虼艌鼍€不水平延伸 - 在大多數(shù)地理區(qū)域,它們具有垂直分量!
無論如何 - 我們需要某種類型的控制系統(tǒng) - 但沒有像前面描述的升降控制系統(tǒng)(它基于純控制理論)。
首先,控制器需要了解地球的旋轉(zhuǎn)速度。我們不會(huì)直接測量這個(gè)速度(盡管有方法可以做到這一點(diǎn)),但我們會(huì)測量每個(gè)地球自轉(zhuǎn)的時(shí)間。正如您已經(jīng)猜到的那樣,旋轉(zhuǎn)霍爾傳感器提供此輸入。它只檢測到“格林威治反子午線”磁鐵的通過 - 另一個(gè)旋轉(zhuǎn)磁鐵(在格林威治子午線)安靜地通過。
運(yùn)算放大器 IC8A 和 IC8D 周圍的電路將旋轉(zhuǎn)霍爾傳感器作為輸入(示波器屏幕截圖 - 藍(lán)色通道)并提供脈沖(黃色通道),然后由施密特觸發(fā)器 (IC8C) 進(jìn)一步整形。施密特觸發(fā)器輸出(未顯示)由 Arduino Nano 采樣并用作控制器輸入。
如果當(dāng)前地球旋轉(zhuǎn)速度太低(低于所需速度),則旋轉(zhuǎn)磁場速度將設(shè)置為略高于當(dāng)前地球旋轉(zhuǎn)速度的速度(反之亦然)。這個(gè)過程在地球每轉(zhuǎn)一圈時(shí)重復(fù),直到地球旋轉(zhuǎn)速度達(dá)到所需旋轉(zhuǎn)速度附近的一個(gè)小范圍。在該頻帶內(nèi),控制系統(tǒng)被關(guān)閉,旋轉(zhuǎn)磁場速度被固定為所需的旋轉(zhuǎn)速度,一勞永逸。地球旋轉(zhuǎn)現(xiàn)在“鎖定”或“同步”旋轉(zhuǎn)磁場。
此處描述的控制系統(tǒng)只有在旋轉(zhuǎn)磁場的相位設(shè)置正確(參考旋轉(zhuǎn)地球儀)的情況下才能工作。該程序會(huì)解決這個(gè)問題,但這需要線圈的正確接線以及線圈在水平面上相對于霍爾傳感器的位置的正確相對定位(參見圖片'地球旋轉(zhuǎn)線圈,燈籠')。
LED燈條
因?yàn)樵诤诎抵衅『托D(zhuǎn)的地球儀并沒有多大吸引力,所以添加了兩條數(shù)字 LED 燈條作為最后的觸感。每個(gè) RGB LED 都是單獨(dú)可控的,只需要四根線:接地、5 伏、數(shù)據(jù)和時(shí)鐘。
這些 LED 燈條按“米”出售,您可以輕松地將它們切割成所需的長度。在這種情況下,每個(gè) LED 燈條包含 8 個(gè) LED。我使用的類型在背面也有一個(gè)非常方便的膠帶,可以很容易地定位 LED 燈條并將它們固定到位(可能你還需要一些小木軌)。
時(shí)鐘線稍后將連接在一起,數(shù)據(jù)線也將連接在一起(我們將向兩個(gè) LED 燈條發(fā)送相同的數(shù)據(jù))。現(xiàn)在,只需將足夠長度的 4 線扁平電纜焊接到每個(gè) LED 燈條的輸入側(cè)(數(shù)據(jù)流由箭頭清楚地指示,如圖所示)。作為應(yīng)力消除和保持扁平電纜就位,最簡單的方法是將它們粘在燈籠上。稍后我們將處理這兩條扁平電纜的另一端。
重要提示:為了保持低電流消耗,16 個(gè) LED 中只有 8 個(gè)會(huì)被使用,甚至不會(huì)處于全功率狀態(tài)。這足以獲得漂亮的視覺效果。如果每個(gè) RGB LED(額定電流為 60 mA)將同時(shí)打開并以全功率打開,這將消耗近 1 安培的電流。我們將使用其中的一小部分。
注意:為 LED 燈帶供電的 l293D 半橋的最大額定電流為 600 mA。
對 Arduino Nano 進(jìn)行編程
現(xiàn)在是對 Arduino Nano 進(jìn)行編程的好時(shí)機(jī)。
下載并編譯代碼,通過 USB 將 Nano 連接到計(jì)算機(jī)并為 Nano 編程。目前為止就這樣了。
印刷電路板
兩層 PCB 承載所有電子設(shè)備,除了傳感器、電磁鐵、線圈和 LED 燈條。PCB 的設(shè)計(jì)非常謹(jǐn)慎,試圖遵循良好的做法,例如充分利用電源層和盡可能多地分離模擬和數(shù)字組件區(qū)域(最大限度地減少呈現(xiàn)給模擬電路的數(shù)字邏輯引入的噪聲 - 特別是電路的穩(wěn)定性)浮球?qū)⑷Q于小于 0.5 毫伏的信號(hào)變化)。
該板包含許多額外的連接器,可提供大部分 Arduino Nano 引腳以及一些其他信號(hào)。這有助于使用該板進(jìn)行超出本項(xiàng)目范圍的原型設(shè)計(jì)活動(dòng)。
CAD 部分提供了訂購此 PCB 所需的文件(“Gerber 文件”)。
以下不是對 PCB 原理圖的完整解釋。它只是為了讓您對董事會(huì)的工作方式有所了解。
- 該板使用 Arduino Nano端口 D(6 位寬)作為數(shù)據(jù)總線。它提供線圈、LED、LED 燈條、可選 LCD 等數(shù)據(jù),并讀取開關(guān)和按鈕狀態(tài)。
- IC10 將 3 位地址(由 Arduino端口 B 位 0、4 和 5 提供)解碼為 8 條 I/O 選擇線。其中四個(gè)選擇線將選擇 IC2 觸發(fā)器以將數(shù)據(jù)寫入(以控制線圈)、IC3 觸發(fā)器(以控制 LED 等)、IC4 緩沖器(以讀取開關(guān)和按鈕)或 LED 燈條。未使用的選擇線連接到擴(kuò)展連接器 (SV5)。請注意,(可選)LCD 芯片選擇直接連接到 Arduino Nano 引腳(檢查代碼),因?yàn)樗峭ㄟ^ LiquidCrystal 庫訪問的,該庫當(dāng)然不使用解碼器芯片來選擇 LCD。
- IC5 和 IC6 各包含 4 個(gè)半橋,通常用于控制電機(jī)等。我們使用 IC5 和 IC6 的一半來驅(qū)動(dòng)六個(gè)線圈。IC6 剩下的兩個(gè)半橋用于給 LED 燈條供電(它們不直接連接到 Vcc),并讓軟件控制紅色 LED。
- 運(yùn)算放大器 IC9A 和 IC9D 形成某種“硬件看門狗”。如果軟件未能定期將其輸入的信號(hào)從高電平切換到低電平,反之亦然,其輸出將變?yōu)榈碗娖剑l(fā)出錯(cuò)誤信號(hào),有效地關(guān)閉電磁鐵、線圈和 LED 燈帶,并打開紅色 LED。
- Opamp IC8B 將升降霍爾傳感器放大 10 倍。重要提示:通過將電阻器 R10 和 R12 的值從 100K 更改為 150K,您可以將放大倍數(shù)增加到 15(這提供了更高的 ADC 精度)。如果這樣做,則必須相應(yīng)地更改 Arduino 程序中相應(yīng)的#define 語句。這表明程序需要調(diào)整一些常數(shù)(例如數(shù)字增益)。
#define highAnalogGain 1 // 0: analog gain is 10, 1: analog gain is 15 (defined by resistors R9 to R12)
- 運(yùn)算放大器 IC8A、C 和 D 用于對來自旋轉(zhuǎn)霍爾傳感器的信號(hào)進(jìn)行整形。
- 運(yùn)算放大器 IC9B 用作反相器,IC9C 根本不使用。
元件放置
零件在下圖、電路板本身和所附示意圖上清楚地標(biāo)明。首先放置所有電阻器、二極管和小電容器。然后焊接 IC 插座(Arduino Nano 的母頭),如果必須更換芯片,這將為您省去很多麻煩。完成所有這些后,放置并焊接剩余的組件。不要放置實(shí)際的芯片。順便說一句,由于功耗低,我使用了 74HCT... 邏輯芯片,但 74LS... 芯片也可以工作(IC1 到 4,IC10)。
最后要安裝的部分是 VMA404 降壓轉(zhuǎn)換器。它垂直安裝,組件朝外,如下圖所示。端子清楚地標(biāo)在主板和降壓轉(zhuǎn)換器板上,因此您不會(huì)弄錯(cuò)。In- 和 Out- 指的是 GND 輸入和輸出,In+ 是指 24 伏輸入,而 Out+ 顯然是指轉(zhuǎn)換器輸出的電壓。使用堅(jiān)固的空線進(jìn)行連接,以確保適當(dāng)?shù)膭傂浴?/font>
暫時(shí)不要連接端子 Out+。首先,插入外部 24 伏墻壁電源,調(diào)整轉(zhuǎn)換器的微調(diào)電位器以獲得 7 伏的輸出電壓,然后再次斷開外部電源。此電壓設(shè)置將確保電路板正常運(yùn)行,而不會(huì)消耗過多的功率。
此時(shí),也連接端子 Out+,重新連接外部電源并使用萬用表或示波器運(yùn)行一些測試,以驗(yàn)證您是否獲得了預(yù)期的 5 伏電壓,如圖所示。
如果此測試成功,您現(xiàn)在可以放置所有芯片,包括 Arduino Nano。
暫時(shí)不要將 PCB 物理連接到電磁鐵組件(使用墊片)——如果出現(xiàn)問題并且您需要進(jìn)行故障排除,這將為您節(jié)省一些時(shí)間。
PCB連接器
我們需要連接三個(gè)傳感器(溫度和兩個(gè)霍爾效應(yīng)傳感器)、電磁鐵、線圈和 LED 燈條(當(dāng)然,我們還需要電源)。
- 電源由插入 PCB 直流連接器的外部 24 伏墻壁電源適配器供電。首先檢查極性是個(gè)好主意:將 24 伏 (+) 傳送到中心引腳。
- 電磁鐵:您將不得不(稍后)進(jìn)行實(shí)驗(yàn)以確定兩條電線的極性。如果施加的力是排斥而不是吸引......你需要切換電線。
- 線圈:將 10 針接頭連接器焊接到之前連接到線圈的 6 線扁平電纜(留出 4 個(gè)端子)。首先,將圖中“地球旋轉(zhuǎn)線圈:連接特寫,頂視圖”(在“地球旋轉(zhuǎn)線圈”部分)中的信號(hào)名稱與下圖中相同的信號(hào)名稱匹配,以了解哪根線連接到哪個(gè)插頭引腳. 這些信號(hào)被標(biāo)記為“COILPAIRn-x”,n = 0 到 2,x = A 或 B。
- LED燈條:PCB LED燈條連接器有5個(gè)引腳。最靠近直流電源插孔的針腳 1 提供 5 伏電壓。引腳 2 和引腳 3 是兩條數(shù)據(jù)線。引腳 4 提供時(shí)鐘信號(hào),引腳 5 為 GND。使用匹配的接頭連接器將來自兩個(gè) LED 燈條的扁平電纜連接到 PCB 連接器(分別將 GND、5 伏、數(shù)據(jù)和時(shí)鐘線連接在一起)。注意:作為替代方案,您可以決定將兩個(gè) LED 燈條的數(shù)據(jù)信號(hào)分開,將兩條數(shù)據(jù)線分別連接到連接器引腳 2 和 3。目前,這些引腳提供相同的數(shù)據(jù),但這將允許分別控制兩個(gè) LED 燈條(當(dāng)然,通過更改程序)。
- 傳感器連接器(示意圖:J3、J4 和 J5)每個(gè)都需要接地、5 伏和傳感器信號(hào)輸出線連接到相同的相應(yīng)連接器引腳(見下圖)。因此,如果您稍后在將傳感器連接到 PCB 時(shí)出錯(cuò),則不會(huì)發(fā)生任何故障(但您的電路板當(dāng)然無法正常工作)。我建議不要使用升降霍爾傳感器的連接器(連接器 J3),但是將電線直接焊接到板上,不要使它們比需要的長,因?yàn)闇y量的電壓變化很?。ㄐ∮?0.5 毫伏)。注意:傳感器引腳排列與相應(yīng)的連接器引腳不同。檢查傳感器的數(shù)據(jù)表!
測試和調(diào)整
當(dāng)然,我只能給你一些一般性的指導(dǎo)方針,但我建議使用這個(gè)路線圖進(jìn)行測試:
- 測試 1:驗(yàn)證與 PC 上的串行監(jiān)視器的通信(通過 USB)。確保所有 DIP 開關(guān)都處于關(guān)閉位置,并驗(yàn)證串行監(jiān)視器的波特率是否與 Arduino 程序設(shè)置的波特率相對應(yīng)(標(biāo)準(zhǔn) 1000000 波特 - 最好不要更改)。插入 USB 電纜(您不需要為 PCB 板通電,也不需要進(jìn)行任何其他連接)并驗(yàn)證 Arduino 是否響應(yīng)以“Type + or - to change”開頭的消息顯示參數(shù),E 編輯值,..." 重置后。
- 設(shè)置:在串行監(jiān)視器中,鍵入“A”+ ENTER。Arduino 將響應(yīng)參數(shù)和值列表。檢查旋轉(zhuǎn)時(shí)間設(shè)置('rot time')是否為 12 秒,垂直地球位置('vert pos')設(shè)置為 1000 毫伏(或 1500 毫伏,如果您將模擬增益更改為 15 - 請參閱“PCB”部分)。如果不是,請參閱“串行通信”部分來設(shè)置這些值。
- 測試 2:對于這個(gè)測試,暫時(shí)忘記地球旋轉(zhuǎn)和 LED 燈條。只需連接溫度傳感器(如果不連接,電路板將檢測到“高溫”并且不允許為電磁鐵供電)。連接起重霍爾傳感器和電磁線。打開。您應(yīng)該看到綠色 PCB LED 閃爍。等待 5 秒鐘。藍(lán)色 PCB LED 應(yīng)該開始閃爍(關(guān)于 LED 顏色和含義的完整解釋將在后面給出)。現(xiàn)在,沿著升降霍爾傳感器(和電磁鐵)的方向緩慢向上移動(dòng)地球(帶有大起重磁鐵),直到它接觸到有機(jī)玻璃板。然后將其從傳感器上向下移動(dòng)。這使電磁鐵和升降控制系統(tǒng)成為可能。讓地球再次靠近磁鐵,您現(xiàn)在應(yīng)該觀察到電磁鐵和起重磁鐵之間的吸引力。如果觀察到排斥力,則需要切換兩根電磁鐵的線。
- 測試 3:嘗試將地球“懸掛”到位(程序在下一節(jié)中解釋)。
- 測試4:斷電,同時(shí)連接旋轉(zhuǎn)霍爾效應(yīng)傳感器,上電。再次將地球儀懸掛到位并稍微轉(zhuǎn)動(dòng)(逆時(shí)針)。將示波器連接到 IC8A 引腳 9(施密特觸發(fā)器輸入),并驗(yàn)證您看到的波形看起來像上一節(jié)中“格林威治磁鐵通道:脈沖整形”圖中的黃色波形。如果不是,則嘗試通過調(diào)整旋轉(zhuǎn)霍爾傳感器的水平和垂直位置來獲得此波形(松開兩個(gè)螺母 - 參見“3D 組裝”部分)。
- 調(diào)整施密特觸發(fā)器輸出:將示波器通道 2 連接到 IC8C 引腳 8(施密特觸發(fā)器輸出)。通過調(diào)整微調(diào)電位器 R8,將輸入閾值電壓(示波器通道 1)設(shè)置為 0.8 伏(或多或少)。假設(shè)您給地球的旋轉(zhuǎn)速度在 10 到 15 秒之間,這應(yīng)該會(huì)在 180° 子午線每次通過旋轉(zhuǎn)霍爾傳感器時(shí)產(chǎn)生 0.5 到 1 秒之間的脈沖。
- 測試5:斷電,接好線圈,上電。再次將地球儀懸掛到位并稍微轉(zhuǎn)動(dòng)(逆時(shí)針)。旋轉(zhuǎn)控制系統(tǒng)現(xiàn)在應(yīng)該啟動(dòng)。大約 30 秒后,PCB LED 應(yīng)該熄滅,表示已獲得設(shè)定的旋轉(zhuǎn)速度。
- 測試 6:現(xiàn)在,連接 LED 燈條。然后,使用串行監(jiān)視器命令(在下一節(jié)中解釋)設(shè)置 LED 燈條循環(huán) 5(循環(huán)通過所有顏色)和 LED 燈條時(shí)序 1(最快)。驗(yàn)證 LED 燈條是否正常工作(請記住,并非所有 LED 都已使用)。
有關(guān)如何處理地球儀、狀態(tài) LED 和串行通信的更多詳細(xì)信息,請參閱下一節(jié)。
定位地球儀
當(dāng)您啟動(dòng)系統(tǒng)時(shí),您可以立即將地球儀“懸掛”在適當(dāng)?shù)奈恢茫姶盆F下方約 35 毫米,或固定升降霍爾傳感器的有機(jī)玻璃板下方約 15 毫米):只需觀察安裝在印刷電路板。如果它呈穩(wěn)定的綠色亮起,則表明您處于正確的高度。如果它閃爍(綠色),你要么太高要么太低。它需要一些練習(xí)(不過不要太多),但應(yīng)該相當(dāng)容易。
一旦地球漂浮,稍微轉(zhuǎn)動(dòng)(逆時(shí)針)并等待......取決于你給它的初始旋轉(zhuǎn)速度(這不是關(guān)鍵),一段時(shí)間后,地球?qū)⑦_(dá)到其設(shè)定的旋轉(zhuǎn)時(shí)間(標(biāo)準(zhǔn) 12 秒)。
狀態(tài)指示燈
LED 熄滅:地球處于浮動(dòng)狀態(tài),并且地球旋轉(zhuǎn)已鎖定(與線圈產(chǎn)生的旋轉(zhuǎn)磁場同步)。
LED 亮起(綠色或藍(lán)色):
- 綠色 LED 閃爍約。每秒 4 次:地球不在狹窄的“浮動(dòng)”范圍內(nèi)。在定位地球儀時(shí),使用它來指導(dǎo)您確定地球儀和電磁鐵之間的正確距離。
- 綠色 LED 持續(xù)亮起:地球處于浮動(dòng)狀態(tài),但尚未檢測到格林威治位置同步(格林威治反子午線磁體通過)。旋轉(zhuǎn)線圈關(guān)閉。
- 綠色 LED 快速閃爍(大約每秒 16 次):地球在浮動(dòng);正在進(jìn)行第一次旋轉(zhuǎn)時(shí)間測量。旋轉(zhuǎn)線圈關(guān)閉。
- 藍(lán)色 LED 持續(xù)亮起,但閃爍更亮(綠色):地球處于浮動(dòng)狀態(tài),但地球旋轉(zhuǎn)尚未鎖定。綠色閃爍表示旋轉(zhuǎn)磁場的方向正在改變。藍(lán)色閃爍表示格林威治磁鐵當(dāng)前正在通過旋轉(zhuǎn)霍爾傳感器。
LED 呈藍(lán)色閃爍:起重磁鐵和線圈當(dāng)前因錯(cuò)誤情況而關(guān)閉。連續(xù) 1 秒閃爍的次數(shù)(隨后是停頓)指示導(dǎo)致錯(cuò)誤情況的原因:
- 1 次閃爍:地球掉落超過 5 秒(地球可能掉落或被拿走,或上電后未檢測到地球)。
- 閃爍 2 次:粘性地球儀:地球儀位置過高超過 5 秒(地球儀可能粘在有機(jī)玻璃板上)。
- 閃爍 3 次:在過去的幾分鐘內(nèi),起重磁鐵的平均占空比高于 80%(這種情況極不可能發(fā)生,但因?yàn)檫@關(guān)系到安全......)。
- 閃爍 4 次:平滑后的溫度讀數(shù)高于 65° 攝氏度。
要再次啟用該系統(tǒng),請將地球儀靠近裝有升降傳感器的有機(jī)玻璃板(向上移動(dòng)),然后再次將其從有機(jī)玻璃板上移開(向下移動(dòng))。LED 現(xiàn)在將再次變?yōu)榫G色,您將有(再次)5 秒時(shí)間將地球儀帶回其浮動(dòng)位置。
LED 為紅色:如果由于故障或程序錯(cuò)誤,程序停止在運(yùn)算放大器 IC9A 和 IC9D 周圍的電路輸入端產(chǎn)生脈沖(充當(dāng)硬件看門狗),起重磁鐵和線圈將被禁用,LED 將轉(zhuǎn)動(dòng)紅色的。
串行通訊
通過 USB 使用 Arduino 串行監(jiān)視器(或其他正確配置的“終端”軟件),您可以打印某些信息并更改一些設(shè)置。
可以打印以下信息(“參數(shù)”):
- 當(dāng)前選擇的旋轉(zhuǎn)時(shí)間(設(shè)置)
- 實(shí)際旋轉(zhuǎn)時(shí)間
- 自轉(zhuǎn)時(shí)間同步誤差:累計(jì)地球自轉(zhuǎn)時(shí)間誤差(鎖定時(shí))
- “全球旋轉(zhuǎn)鎖定”時(shí)間。地球旋轉(zhuǎn)未鎖定時(shí)重置
- “地球漂浮”時(shí)間。地球不浮動(dòng)時(shí)重置
- 溫度(攝氏度)
- 起重磁鐵平均占空比 (%)
- 地球垂直位置:以毫伏為單位的參考(設(shè)定點(diǎn))(設(shè)置)。請注意,設(shè)定點(diǎn)值是指 ADC 讀取的值,因此它們被縮放為 10(或 15 - 參見 PCB 部分)乘以霍爾傳感器輸出垂直位置
- ADC 讀取的以毫伏為單位的球體垂直位置誤差絕對值的平滑平均值
- 積分項(xiàng)的當(dāng)前值,由全球升降控制器計(jì)算
- 旋轉(zhuǎn)磁場和旋轉(zhuǎn)地球之間的平均相位(??鎖定時(shí))。可用于校準(zhǔn)旋轉(zhuǎn)磁場與地球儀之間的相位,由地球儀旋轉(zhuǎn)控制器在獲得鎖定之前設(shè)置
- “ADC 轉(zhuǎn)換完成”ISR 例程的平均持續(xù)時(shí)間(以微秒為單位)(平滑)
- 平均處理器負(fù)載(平滑)
此外,每個(gè)狀態(tài)變化都會(huì)被打印出來(例如,達(dá)到了選定的旋轉(zhuǎn)時(shí)間)。
使用以下命令打印參數(shù)及其值或更改設(shè)置(不需要發(fā)送“回車”,盡管您可能必須按 Enter 將命令發(fā)送到 Arduino,具體取決于您使用的終端軟件)。
- '+' 或 '-' : 打印下一個(gè)或上一個(gè)參數(shù)。在編輯模式下:從列表中選擇下一個(gè)或上一個(gè)參數(shù)值。
- 'E':編輯當(dāng)前參數(shù)。在編輯模式下:結(jié)束編輯并將當(dāng)前選擇的參數(shù)值保存在 EEPROM 存儲(chǔ)器中。只對改變旋轉(zhuǎn)時(shí)間和微調(diào)地球垂直位置有效,對其他參數(shù)無效。
- 'C':取消編輯而不保存。不處于編輯模式時(shí)沒有功能。
- 'S' 開始或停止顯示實(shí)時(shí)值。這將開始或停止定期將當(dāng)前所選參數(shù)的實(shí)際值打印到串行監(jiān)視器(例如完成最后一次地球旋轉(zhuǎn)所花費(fèi)的時(shí)間)。不適用于設(shè)置。
- 'A':一次打印所有參數(shù),以及當(dāng)前的燈帶設(shè)置。
附加命令:
- '?':打印可用命令(幫助)。
- 'T':打印時(shí)間戳(自上次重置以來的毫秒數(shù) - 實(shí)時(shí)時(shí)鐘不可用)。
- 'LC0' to 'LC5':選擇一個(gè)燈帶周期。0 = 關(guān)閉,1 = 恒定亮度白色,2 = 恒定亮度洋紅色,3 = 恒定亮度藍(lán)色,4 = 白色和藍(lán)色之間的漸變,5 = 所有顏色之間的平滑循環(huán)(從藍(lán)色到青色、綠色、黃色、紅色、洋紅色,又是藍(lán)色,...)。選擇存儲(chǔ)在 EEPROM 存儲(chǔ)器中。
- 'LT1' to 'LT4':改變燈帶循環(huán)時(shí)間。1 = 最快(分鐘),4 = 最慢(小時(shí))。請注意,時(shí)間與所有 LED 燈條循環(huán)類型無關(guān)。選擇存儲(chǔ)在 EEPROM 存儲(chǔ)器中。
- “R0”和“R1”:(階躍)響應(yīng)。應(yīng)用階躍變化 ('R1') 或不應(yīng)用步驟('R0')到地球垂直位置參考(設(shè)定點(diǎn)),然后將測量的響應(yīng)(實(shí)際地球垂直位置)和控制器輸出(PWM 占空比)發(fā)送到串行監(jiān)視器,在那里可以記錄它以在 excel 等中進(jìn)行評估。應(yīng)用的步長(僅“R1”命令)以 100 個(gè) ADC 步長增加垂直位置設(shè)定值。在霍爾傳感器輸出處以毫伏表示:100 ADC 步 *(5000 毫伏/1023 ADC 步)/10 = 49 毫伏(如果模擬增益設(shè)置為 10 - 請參閱“PCB”部分)。Arduino 開始將數(shù)據(jù)發(fā)送到串行監(jiān)視器,在應(yīng)用步驟前 1 秒(“R1”命令)并繼續(xù)發(fā)送數(shù)據(jù) 20 秒。每毫秒發(fā)送一行包含三個(gè)值的行,這些值用分號(hào)分隔。值 1:毫秒(1 到 20000)值 2:
關(guān)于使用“R0”和“R1”命令的一些注意事項(xiàng):
- 'Rn' 命令需要高波特率:程序設(shè)置的波特率為 1000000,所以這應(yīng)該不是問題。
- 積分項(xiàng)的值(參見“地球升降控制系統(tǒng)”部分),包括在“Rn”輸出(第一毫秒)開始處的額外精度數(shù)字(參見“Arduino Nano 代碼”部分),打印到串行監(jiān)視器為這允許基于記錄的霍爾效應(yīng)傳感器值(在 ADC 步驟中)在 excel 中“重放”控制器計(jì)算,驗(yàn)證在 excel 中計(jì)算的控制器輸出與記錄的控制器輸出是否相同。
- 發(fā)送階躍響應(yīng)數(shù)據(jù)結(jié)束后,地球儀的垂直位置會(huì)慢慢恢復(fù)到原來的設(shè)置。
- 顯示實(shí)時(shí)值時(shí)不要使用此命令(請參閱“S”命令)
使用硬件按鈕和 LCD
可以將 4 個(gè)按鈕(“+”、“-”、“E”和“C”)直接連接到 Spinning Globe 板 PCB,以及 16 x 2 字符、Arduino 兼容的 LCD 顯示屏。
這允許您查看相同的實(shí)時(shí)值并更改與使用串行監(jiān)視器相同的設(shè)置。
LCD 在頂行顯示狀態(tài)信息(例如“E! drop globe”),在底行顯示當(dāng)前選擇的參數(shù)(參見“串行通信”部分)。
請注意,不能使用硬件按鈕更改 LED 燈條設(shè)置。它們也不顯示在 LCD 上。
連接(“接通”觸點(diǎn))按鈕:使用連接器 SV2。
- “-”按鈕:將一個(gè)引腳連接到信號(hào)“SW0”(SV2 引腳 2),另一個(gè)引腳連接到 GND
- “+”按鈕:將一個(gè)引腳連接到信號(hào)“SW1”(SV2 引腳 4),另一個(gè)引腳連接到 GND
- “E”按鈕:將一個(gè)引腳連接到信號(hào)“SW2”(SV2 引腳 6),另一個(gè)引腳連接到 GND
- “C”按鈕:將一個(gè)引腳連接到信號(hào)“SW3”(SV2 引腳 8),另一個(gè)引腳連接到 GND
按下這些按鈕與使用串行監(jiān)視器(或其他終端軟件)發(fā)送等效命令的效果相同。
重要提示:確保 DIP 開關(guān) 2 至 5 都處于關(guān)閉位置。這些開關(guān)分別連接到信號(hào)“SW3”到“SW0”,與這 4 個(gè)按鈕并聯(lián)。將開關(guān)設(shè)置在 ON 位置會(huì)將相應(yīng)的信號(hào)連接到 GND,使相應(yīng)的按鈕無法操作。此外,如果這些開關(guān)之一在復(fù)位或上電后立即處于 ON 位置,則系統(tǒng)進(jìn)入編程模式(見進(jìn)一步)。
連接 LCD:使用通用連接器 SV5 連接基于 Hitachi LCD 控制器的可選 2 x 16 字符 LCD。
- 使用 4 位總線將數(shù)據(jù)發(fā)送到 LCD
- LCD 在只寫模式下工作:將 LCD 讀/寫引腳接地
- 將 LCD 數(shù)據(jù)位 4 到 7 引腳連接到信號(hào)“D4(PD4)”到“D7(PD7)”(Arduino 端口 D 位 4 到 7,參見示意圖)
- 將 LCD RS(寄存器選擇)引腳連接到信號(hào)“D3(PD3)”(端口 D 位 3)
- 將 LCD 使能引腳連接到信號(hào)“PB2”(Arduino 端口 B 位 2)
- 正確連接電源、LCD 對比度和背光 LED 引腳(使用 LCD 數(shù)據(jù)表中指定的電阻器 - PCB 上未提供電阻器)
使用 DIP 開關(guān)更改設(shè)置(程序模式)
無需使用串行監(jiān)視器或按鈕/LCD,即可設(shè)置地球旋轉(zhuǎn)時(shí)間、微調(diào)地球垂直位置設(shè)定點(diǎn)或設(shè)置 LED 燈條周期和時(shí)間。
進(jìn)入和退出程序模式的步驟:
1.電源關(guān)閉時(shí),使用 DIP 開關(guān) 2 至 5(信號(hào) 'SW3' 至 'SW0')指示要更改的設(shè)置,如下所述。不要使用任何其他開關(guān)設(shè)置。請注意,當(dāng)前未使用 DIP 開關(guān) 1(信號(hào)“SW4”)。
- ON ON ON ON:更改燈帶設(shè)置
- ON ON ON OFF:設(shè)置旋轉(zhuǎn)時(shí)間
- ON ON OFF ON:微調(diào)地球垂直位置參考
2.開機(jī)。然后,當(dāng)電源打開時(shí),如下所示設(shè)置 DIP 開關(guān)。
=> 如果初始開關(guān)設(shè)置為ON ON ON ON:設(shè)置ledstrip周期和時(shí)序,如下:
- ON ON ON ON:關(guān)閉燈帶
- ON ON ON OFF:恒定亮度白色
- ON ON OFF ON:恒定亮度洋紅色
- ON ON OFF OFF:恒定亮度藍(lán)色
- ON OFF (T1) (T0):在白色和藍(lán)色之間漸變
- OF ON (T1) (T0):在所有顏色(藍(lán)色、青色、綠色、黃色、紅色、洋紅色、藍(lán)色...)之間循環(huán)
- 其他開關(guān)設(shè)置不影響最后設(shè)置的燈帶周期和時(shí)序
(T1) (T0) 設(shè)置燈帶時(shí)序:
- ON ON:計(jì)時(shí)1(最快)
- ON OFF:定時(shí)2
- OFF ON:定時(shí) 3
- OFF OFF:定時(shí)4(最慢)
=> 如果初始開關(guān)設(shè)置為ON ON ON OFF:設(shè)置地球旋轉(zhuǎn)時(shí)間,如下:
- ON ON ON ON:地球旋轉(zhuǎn)關(guān)閉(“指南針”行為)
- ON ON ON OFF:12秒
- ON ON OFF ON: 9 秒
- ON ON OFF OFF:7.5秒
- 開 關(guān) 開 6 秒
- ON OFF ON OFF:4.5秒
- 開 關(guān) 關(guān) 開:3 秒
- 開關(guān)關(guān)關(guān):2.4秒
- 其他開關(guān)設(shè)置:地球旋轉(zhuǎn)關(guān)閉
=> 如果初始開關(guān)設(shè)置為ON ON OFF ON:微調(diào)球體垂直位置設(shè)定值(以毫伏為單位),如下所示:
- ON ON ON ON: 1000 毫伏
- ON ON ON OFF:1200毫伏
- ON ON OFF ON:1400毫伏
- ON ON OFF OFF:1600毫伏
- ON OFF ON ON:1800毫伏
- 其他開關(guān)設(shè)置:1000毫伏
請注意,設(shè)定點(diǎn)值是指 ADC 讀取的值,縮放為設(shè)置垂直位置的霍爾傳感器輸出的 10 倍。如果您將模擬增益更改為 15(參見“PCB”部分),設(shè)置的值將分別為 1500、1800、2100、2400 和 2700 毫伏。
3.關(guān)機(jī)。然后,在電源關(guān)閉時(shí),再次將開關(guān) 2 至 5 設(shè)置為“關(guān)閉”。所需設(shè)置已存儲(chǔ)(在 EEPROM 存儲(chǔ)器中)。
4.再次開機(jī)。
Arduino納米代碼
該程序有很好的文檔記錄,因此我將在此處保持簡短。
該程序?qū)樗俣榷O(shè)計(jì)。特別是,中斷服務(wù)程序 (ISR) 不使用浮點(diǎn)數(shù)。這意味著,例如,起重控制器的計(jì)算是使用(長)整數(shù)完成的,通過添加額外的“二進(jìn)制分?jǐn)?shù)”數(shù)字并在計(jì)算結(jié)束時(shí)刪除它們來提高準(zhǔn)確性(將值向左或向右移動(dòng)多個(gè)位) .
注意:因此,必須注意,如果特定常量發(fā)生更改,則不會(huì)出現(xiàn)下溢或下溢的情況。
constexpr int PIDcalculation_BinaryFractionDigits{ 14 }; // added accuracy (binary fraction digits) in PID controller calculations
constexpr int gain_BinaryFractionDigits{ 8 }; // added TTTgain accuracy (binary fraction digits) because of small TTTgain
constexpr int TTTintFactor_BinaryFractionDigits{ 18 }; // added TTTintFactor accuracy (binary fraction digits) because of small TTTintFactor
constexpr int TTTdifFactor_BinaryFractionDigits{ 3 }; // added TTTdifFactor accuracy (binary fraction digits) because of small TTTdifFactor
constexpr int PIDcalc_preliminaryDivisionDigits{ 4 }; // to prevent overflow after multiplication (factor 1/2: keep 1 extra bit for safety)
此外,由于除法比乘法花費(fèi)的時(shí)間長得多(沒有處理器指令用于除法),所以 ISR 中沒有。示例:將一個(gè)值除以一個(gè)常量“5”可以通過將該值乘以一個(gè)整數(shù)常量“51”(51 = 1/5 * 2^8)然后右移 8 位來執(zhí)行。
這導(dǎo)致平均處理器負(fù)載約為 20%,這是由程序測量的,并且可以使用串行監(jiān)視器進(jìn)行驗(yàn)證。
主循環(huán)
主循環(huán)很短(一切都發(fā)生在許多專用程序中),但清楚地顯示了一般結(jié)構(gòu)。
- 如果事件或用戶命令可用,則將對其進(jìn)行處理。如果不是,程序繼續(xù)。事件由中斷服務(wù)程序生成。用戶命令由串行接口或(可選)硬件按鈕組裝而成。
- 開關(guān)狀態(tài)(在 ISR 中讀取和去抖動(dòng))用于在需要時(shí)調(diào)整設(shè)置。
- 數(shù)據(jù)(如果有)被發(fā)送到串行接口和可選的 LCD。
- 如果 LED 燈條亮度需要改變(由特定的“LED 燈條”事件的發(fā)生表示),串行數(shù)據(jù)將被發(fā)送到 LED 燈條。
- 只要無事可做,控制就會(huì)停留在空閑循環(huán)中。如果仍有要處理的事件(事件隊(duì)列不為空)、鍵緩沖區(qū)不為空或發(fā)生中斷(“定時(shí)器 1 溢出”或“ADC 完成中斷”),則空閑循環(huán)將退出。
void loop()
{
getEventOrUserCommand(); // get ONE event or assembled user command if available
processEvent(); // process event, if available
processCommand(); // process command, if available
checkSwitches(); // if SW3 to SW0 to be interpreted as switches only
writeStatus(); // print status to Serial (and LCD if connected)
writeParamLabelAndValue(); // print label and value to Serial (and LCD)
writeLedStrip(); // write led strip data
myEvents.removeOldestChunk(ISRevent != eNoEvent); // remove event from queue
wdt_reset(); // reset watchdog timer
resetHWwatchDog = true; // allow ISR to reset hardware watchdog
idleLoop(); // return if still something to do or ISR occurred
}
注意:作為一般原則,通過 Arduino Nano 端口 D“數(shù)據(jù)總線”(參見“PCB 硬件”部分)向硬件傳輸/從硬件傳輸?shù)乃袛?shù)據(jù)都是從 ISR 內(nèi)部寫入或讀取的,因?yàn)闊o論如何這都會(huì)很快,但有兩個(gè)例外:
1. LED 燈條數(shù)據(jù)通過同一端口 D 數(shù)據(jù)總線串行發(fā)送,這需要幾毫秒(每次需要刷新 LED 燈條時(shí)發(fā)送 400 位) - 這將停止 ISR 執(zhí)行。因此,主程序循環(huán)負(fù)責(zé)發(fā)送 LED 燈條數(shù)據(jù)。該程序確保在發(fā)送 LED 燈條數(shù)據(jù)被使用同一數(shù)據(jù)總線發(fā)送或接收數(shù)據(jù)的 ISR 中斷時(shí)不會(huì)發(fā)生“沖突”。
2. 可選的 LCD 也使用相同的數(shù)據(jù)總線,并且也是從主程序循環(huán)中寫入的,因?yàn)槭褂昧藰?biāo)準(zhǔn)的 LiquidCrystal 庫,它不知道 PCB 上使用的硬件地址解碼邏輯。
定時(shí)器 1 溢出中斷
- 每毫秒執(zhí)行一次
- 提供時(shí)基(定時(shí)器 0 未被程序使用,但未被禁用)
- 重置硬件看門狗
- 啟動(dòng)升降霍爾傳感器 ADC 轉(zhuǎn)換并啟用“ADC 完成”中斷
- polls 地球儀旋轉(zhuǎn)霍爾效應(yīng)傳感器
- 讀取和消除開關(guān)/按鈕的抖動(dòng),并為按下/釋放的按鈕生成鍵碼(如果已連接)
ADC 完成中斷
- 有時(shí)每毫秒執(zhí)行兩次:在提升霍爾傳感器 ADC 轉(zhuǎn)換完成時(shí)(每毫秒)和等溫度傳感器 ADC 轉(zhuǎn)換完成時(shí)(每 128 毫秒)
- 讀取轉(zhuǎn)換后的 ADC 值。如果這是一個(gè)提升霍爾傳感器值,則繼續(xù)。如果是溫度傳感器轉(zhuǎn)換,存儲(chǔ)溫度并退出
- 執(zhí)行與提升控制、旋轉(zhuǎn)控制、安全性相關(guān)的計(jì)算
- 設(shè)置定時(shí)器 1 寄存器控制電磁鐵 (PWM) 的脈沖占空比
- 輸出線圈、LED 等的數(shù)據(jù)。
- 計(jì)算 LED 燈條亮度級別。注意串口數(shù)據(jù)會(huì)在主程序循環(huán)中發(fā)送到led燈條(因?yàn)楸容^耗時(shí))
- 使用“事件”向主循環(huán)發(fā)送信息:數(shù)據(jù)存儲(chǔ)在動(dòng)態(tài)內(nèi)存中,指示事件的性質(zhì)(例如,地球的旋轉(zhuǎn)速度現(xiàn)在已獲得設(shè)定值)以及一些額外的信息。主循環(huán)將處理事件并再次從動(dòng)態(tài)內(nèi)存中刪除它們(參見類“MyEvents”)
- 每 128 毫秒:啟動(dòng)溫度 ADC 轉(zhuǎn)換(這將觸發(fā)一秒鐘但非常短的 ISR 發(fā)生)
就是這樣,伙計(jì)們
我試圖使說明盡可能詳細(xì)。但是,我意識(shí)到完整性是非常難以實(shí)現(xiàn)的,如果不是不可能的話。
我希望這個(gè)項(xiàng)目對一些人來說是一個(gè)學(xué)習(xí)的機(jī)會(huì),對另一些人來說會(huì)很有趣。
成功 !
- Arduino Nano漂亮禮服
- Arduino Nano控制的激光測量
- Arduino地球儀開源
- 基于Arduino Nano R3的UHF天線旋轉(zhuǎn)器 0次下載
- 使用Arduino Nano和傳感器制成的數(shù)字測距儀
- 我自己的Arduino Nano微控制器板
- 使用Arduino Nano的PIR運(yùn)動(dòng)控制繼電器
- Arduino NANO v3.3微控制器
- arduino nano作為控制器的仿生手
- 測試比較四種Arduino Nano全新型號(hào)的數(shù)據(jù)詳細(xì)說明 25次下載
- Arduino Nano Rev3.2電路原理圖免費(fèi)下載 46次下載
- 地球儀加濕器主板原理圖免費(fèi)下載 44次下載
- Arduino Nano電路原理圖免費(fèi)下載 280次下載
- 多功能旋轉(zhuǎn)LED顯示器系統(tǒng)框圖、硬件選型 2次下載
- Arduino nano (AD)PCB自制 0次下載
- 帶Arduino的旋轉(zhuǎn)編碼器設(shè)計(jì) 旋轉(zhuǎn)編碼器的工作原理和特點(diǎn) 1047次閱讀
- 什么是浮動(dòng)輸入和開漏輸出 816次閱讀
- Arduino提供的PWM控制功能入門(1) 1932次閱讀
- 如何使用Python和PinPong庫控制Arduino 718次閱讀
- 基于Arduino的機(jī)器學(xué)習(xí)開發(fā) 1.7w次閱讀
- 當(dāng)Arduino遇上樹莓派:Nano RP2040連接板 6472次閱讀
- 如何使用Arduino Nano控制紅綠燈 5001次閱讀
- 如何從網(wǎng)頁控制arduino? 3836次閱讀
- dfrobot Arduino Nano控制板介紹 5611次閱讀
- dfrobotBeetle控制器簡介 2068次閱讀
- dfrobotDreamer NanoV4.0控制器 1244次閱讀
- dfrobotDFRduino Nano 3.0控制器介紹 2484次閱讀
- 光纖陀螺儀與旋轉(zhuǎn)式陀螺儀的工作原理解析 7946次閱讀
- arduino如何控制舵機(jī)及詳細(xì)步驟 16.3w次閱讀
- 基于Arduino開發(fā)環(huán)境的光電編碼器檢測儀設(shè)計(jì)方案 7257次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評論
查看更多