精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>Arduino Nano控制浮動和旋轉地球儀

Arduino Nano控制浮動和旋轉地球儀

2022-11-11 | zip | 0.10 MB | 次下載 | 2積分

資料介紹

描述

項目目標

該項目的目標很明確:通過磁懸浮并由 Arduino Nano 控制,使物體漂浮。

但也有一些要求。

首先,我想要一個具有一定大小和重量的物體,以一種非常穩定的方式漂浮(沒有抖動、沒有振蕩……)。

此外,安全性也是一個問題(主磁鐵的額定電壓為 24 伏和 25 瓦,會產生相當多的熱量)。

最后但并非最不重要的一點是:最終結果必須是“不錯的”,在我的客廳中贏得一席之地!

我終于想出了一個地球儀,它不僅可以漂浮,而且還以固定的速度旋轉,由兩個數控 LED 燈條照亮。

磁懸浮原理

實現磁懸浮的一種方法是將電磁體放置在包含非常強磁體的物體(在本例中為地球球)上方。通過不斷地測量物體的垂直位置,我們可以改變電磁鐵對物體磁鐵施加的磁力,從而使物體保持在原位。這與在高速公路上駕駛汽車的方式非常相似:通過不斷測量汽車是向左還是向右漂移,駕駛員只需進行小幅修正就可以留在他/她的車道上。這種機制稱為“控制系統”。

不深入細節,困難的是這個磁懸浮控制系統根本不是一個“線性”系統。例如,施加到電磁體的電流與施加的力(在地球的磁鐵上)之間的關系是二次的。此外,這個力隨著電磁鐵和磁鐵之間的距離而變化(這似乎是合乎邏輯的)。而這種關系也是二次的!

這意味著用于保持全球位置穩定的“參數”(我們稍后會討論)至關重要。改變地球的重量、磁鐵、電磁鐵、傳感器的位置……可能會導致地球高度不穩定,并且您將很難找到正確的參數(這將是反復試驗,我恐怕)再次獲得穩定運行。事實上,這種非線性也使得應用數學方法來計算這些參數變得更加困難。

因此,如果您想自己構建它,請提一個建議:嘗試獲得與我使用的相同的起重電磁鐵和相同的永磁體,并瞄準大約 140 克的地球重量(包括磁鐵)。

地球升降控制系統

那么它是怎樣工作的 ?好吧,我將嘗試以一種簡單的方式進行解釋——同時,請留意下圖。

首先,我們需要確定地球的垂直位置。該位置由霍爾效應傳感器測量,這是一種微型設備,可測量磁場強度(由安裝在地球內部的磁鐵產生),并將其轉換為電壓。如果地球更靠近傳感器,磁場強度會增加,輸出電壓會發生變化。在我們的例子中,由于磁鐵的北極和南極以及霍爾效應傳感器的定位方式,這個電壓會降低。如果地球遠離傳感器,電壓將再次增加。因此,傳感器有效地將位置轉換為電壓!

這個(小)電壓(通常在工作點介于 100 和 300 毫伏之間,具體取決于設置)由 Opamp IC8B 放大(參見示意圖),然后由 Arduino ADC 轉換為 10 位數。歡迎來到數字世界!(考慮到 10 位 Arduino ADC 分辨率,Opamp IC8B 的放大是必要的步驟,以更好地捕捉微小的變化)

請注意,從控制系統的角度來看,ADC 轉換可以被視為第二個“放大”步驟:ADC 將輸入電壓縮放為 0 到 1023 之間的數字。將此數字視為(縮放)電壓。

下一步,程序將從所需位置(稱為“設定點”)中減去該數字(表示位置,但以毫伏表示),該位置也應以毫伏表示并適當縮放(我們只能減去以相同單位表示的值)。

減法為我們提供了與所需地球位置的偏差(我們稱之為“誤差信號”,因為當沒有偏差時它為零)。該偏差(再次)以毫伏表示。

pYYBAGNsY-WAdbMyAADb_3C-Amk278.png
帶有“真正的三項”控制器的地球升降控制系統
?

暫時忘記圖中的“積分器”和“微分器”框(我稍后會談到):我們有第三個放大步驟,這次是以數字方式執行的。放大系數(“增益”)作為常數存儲在 Arduino 程序中。

請注意,從運算放大器 IC8B 的輸入開始的總增益是所描述的三個放大步驟的乘積——這些步驟發生在模擬世界還是數字世界根本不相關!這個增益非常重要,因為更高的增益使得相同的(小)控制器輸入(這里:位置偏差)產生更高的輸出(這里:具有更高占空比的脈沖 - 我們會談到)。想象一下這個總收益會非常小:不會發生很多事情,對吧?更一般地說,增益太低或太高,系統都有變得高度不穩定的風險,所以我們需要謹慎選擇。

無論如何,然后將放大的誤差信號饋送到 Arduino Nano Timer 1 以生成具有特定占空比(脈沖寬度調制)的脈沖:如果它為零,則占空比也將為零。如果為 999,則占空比為 100%。脈沖持續時間固定為恰好一毫秒。請參閱下面的示波器屏幕截圖(藍色通道)。

產生的脈沖將確定電磁鐵的“開啟”時間(使用功率晶體管 Q1 - 我們現在回到模擬世界)在那一毫秒內。這將增加或減少該毫秒內電磁體施加在地球磁鐵上的“平均”力,結果地球的位置將發生變化。

poYBAGNsY-6ALF14AAG20IKUXaI736.png
隨時間變化的地球垂直位置和磁鐵占空比
?

正如您可能已經猜到的那樣,整個過程每毫秒重復一次(中斷驅動)。每個周期都通過讀取 ADC 輸出來開始,以獲得霍爾傳感器電壓。如果地球處于穩定的浮動位置,該電壓將接近設定點電壓(在本例中:大約 1000 毫伏,是霍爾效應傳感器輸出的 10 倍)。與任何控制系統一樣,這個電壓會有一點波動:如果它不會波動,我們就不需要控制器。查看示波器屏幕截圖(黃色通道)并驗證地球每毫秒下降到地面大約 500 微秒,然后再次向上移動到電磁體(示波器上的“向上”實際上是“向下”,反之亦然。對此感到抱歉)。

那么這些積分器和微分器盒呢?出色地...

  • 將誤差信號相對于時間進行微分并將該項添加到誤差信號中可以對快速變化的地球位置做出更快的反應(對于較慢變化的地球位置,該項的影響會更小)。微分器時間常數 Τd(也是 Arduino 程序中的一個參數)控制該項的權重。它是所有參數中最關鍵的:必須仔細選擇才能獲得穩定性!
  • 為什么我們要整合誤差信號(相對于時間)?好吧,想象一下系統處于靜止狀態并且實際的地球位置對應于設定點:這將誤差信號以及 PWM 輸出(占空比為零的脈沖)和電磁體施加在地球上的力降低到零。但這種情況是不可能的: 由于地球的重量,它需要一個反作用力。因此,地球的靜止位置將略低于設定點指示的位置(這給我們留下了非零誤差信號,因此,非零 PWM 信號和反作用力)。這稱為“靜態錯誤”。現在,如果我們對剩余的誤差信號進行積分,控制器(PWM)輸出將緩慢增加,地球位置將接近所需位置,誤差信號將變為零,積分將停止......恰好當地球在我們想要的位置它是。正如您已經猜到的那樣,積分器時間常數 Τi 是 Arduino 程序中的另一個參數。它不如 Τd 重要。

結論:這里有 4 個參數很重要。設定點、增益、積分時間常數和微分時間常數。您會發現這些常量在 Arduino 程序中定義。

為什么采樣時間是 1 毫秒?為什么不是 10 毫秒?在自由落體中,最初處于靜止狀態的物體將在 1 毫秒內下降約 5 微米。在 10 毫秒內,這將增加到 0.5 毫米 (x 100)。人眼所感知的情況并不完全穩定,從控制系統的角度來看,保持系統穩定可能要困難得多。這就回答了!

電磁鐵總成

這個組件包含我們需要的一切,除了用于地球旋轉的線圈和 LED 燈帶。

電磁鐵非常強大,會產生相當多的熱量。為了確保一切安全,在其頂部放置了一個相當大的散熱器。此外,溫度傳感器固定在散熱器上。它將用于連續控制溫度。

散熱器上方是一塊木板(用于將組件“懸掛”在木燈籠中,無需任何螺母或螺栓)。就在下方,注意鋁制角型材以將木板固定到位。螺紋墊片將板與散熱器底部連接起來。

在散熱器下方,使用相同的孔(當然,您必須鉆孔),我們有另一組螺紋墊片到達有機玻璃板,固定我們用于垂直位置測量的傳感器(霍爾效應傳感器)。

?
?
?
poYBAGNsY_SAS_YjAACulhON6NY582.png
?
1 / 2 ?電磁鐵組件:側視圖
?

有機玻璃尺寸為 90 x 105 毫米。后邊緣從霍爾效應傳感器(電磁體中心)位置延伸 67 毫米。請注意,最后一個維度很重要,因為這是將保持球形旋轉霍爾效應傳感器的 3D 組件連接到有機玻璃的位置。我們稍后會討論這個。

此外,您必須切割有機玻璃板并在其中鉆孔。首先仔細測量并制作一些草圖,將證明是一個很大的幫助!

重要提示:確保墊片(以及有機玻璃下方的螺栓)沒有磁性

升降霍爾效應傳感器

有幾種方法可以準確測量地球儀和電磁鐵之間的距離——更準確地說,測量期望位置(“設定點”)和實際位置之間的偏差。一種常見的方法是在球體的一側使用光源,在另一側使用光檢測器。但在我們的案例中,如前所述,我們使用霍爾效應傳感器測量磁場強度(取決于地球位置)并將其轉換為電壓。

實際上,這個傳感器不會參照電磁鐵來控制地球儀的位置,而是參照傳感器本身。但是因為這個傳感器是固定位置的,這最終會確定設定點:地球相對于電磁鐵的位置。

?
?
?
poYBAGNsY_eAH9s2AAFV2mJKmkk863.png
?
1 / 2 ?升降霍爾傳感器:水平位置
?

如前所述,電磁鐵和傳感器(或有機玻璃板)之間的垂直距離至關重要。

配合我使用的電磁鐵(高度40mm),有機玻璃板距離散熱片58mm(可以通過堆疊15mm和40mm螺紋墊片,中間加一個螺母)。這在電磁鐵和霍爾傳感器之間產生了 18 毫米的“間隙”。

您可能會問一個問題:電磁鐵的磁場不會影響傳感器讀數嗎?嗯,是的......但這不是問題,因為當我們讀出傳感器值(每毫秒)時,電磁鐵始終處于相同('ON')狀態(您可以通過查看示波器屏幕截圖來驗證這一點, 以上)。所以,它的屬性是不變的,可以被丟棄。

這個霍爾效應傳感器需要正好放置在磁鐵中心點的下方。如果沒有,您將在系統中引入振蕩,您的地球將開始在水平方向“擺動”,這是電磁體無法控制的。您將必須弄清楚如何確定該位置。在視覺上進行操作時,請考慮一種稱為“視差”的東西。建議:一旦你確定了那個點,就在有機玻璃的底部放一個小點。這將幫助您定位霍爾傳感器。

pYYBAGNsZASAVw1oAAOy47FRe3Q356.png
電磁鐵總成:仰視圖
?

霍爾效應傳感器放置在一個帶有精密觸點的插座中,粘在有機玻璃板上(我使用的是 Loctite 強力膠)。由于傳感器引線未焊接,因此可以輕松微調傳感器位置。假設我們使用的是 SS 495A 傳感器,沖壓面必須朝下(Arduino 程序假定它)。

粘合容器時,確保有機玻璃板清潔干燥。稍后我們將處理 PCB 連接。

溫度感應器

溫度傳感器連續測量散熱器溫度:當它超過設定的閾值時,磁鐵和線圈將被關閉。

您需要安裝傳感器,使其與散熱器有良好的機械接觸。如何做到這一點在很大程度上取決于所使用的散熱器。

poYBAGNsZAaAMkS0AAF69Dpj5HQ821.png
溫度傳感器安裝
?

稍后我們將處理 PCB 連接。

全球

我找到了一個地球儀用作存錢罐。這樣做的好處是底部有一個很大的開口(缺點也是有一個投入錢的槽)。在這種情況下,我們將使用這個開口在內部放置一個強永磁體(釹,20 x 20 x 20 毫米),靠近地球的地理北極。我用雙面膠帶來做到這一點。你需要一些整容技能和良好的思維來完成這項工作,而不必打開(并可能損壞)地球,但是......這是可能的。

pYYBAGNsZAmAD-geAABj16C6YP0060.png
地球起重磁鐵
?

確保將磁鐵的北極朝上放置(一個立方體有六個面,所以你必須做一些實驗)。請注意不要在這里犯錯:如果將磁鐵倒置,您將無法使其工作!最好是用指南針來確定磁鐵的北極:磁鐵的北極吸引指南針的南極:這是指向地球地理南方向的指針(這看起來很奇怪,但是地球的磁北位置很近到地球的地理南方,反之亦然)。

稍后,如果施加在地球磁鐵上的力被證明是排斥而不是吸引,您將不得不反轉電磁線。但現在不要擔心。

但我們也希望地球旋轉,對吧?這將需要在地球內部放置兩個額外的(較小的)磁鐵。這些也是釹類型。再說一次,我很幸運……我使用的地球儀是由兩半塑料制成,有一個內邊框(紅色)用于將它們粘合在一起(我猜)。這個邊界是放置這兩個磁鐵的理想位置:一個在格林威治子午線,另一個……當然在對面(反子午線)。請注意,我使用了雙面膠帶。

pYYBAGNsZAuAYbZyAABRZrIBV2I579.png
地球旋轉磁鐵
?

重要提示:將磁鐵定位在格林威治子午線,北極朝上,另一個北極朝下。磁鐵會產生一個(非常小的)扭矩,讓地球保持旋轉——但這會在以后發生。

地球旋轉線圈

為了產生地球旋轉扭矩,我們需要一個旋轉磁場。放置在地球下方的六個線圈將用于此目的。

你必須自己制作這些線圈,用空線軸(我在互聯網上找到這些)和 500 匝漆包銅線(直徑 0.28 毫米)。假設您使用的線圈與我的相似,這將產生大約 20 歐姆的線圈電阻,這很好。

線圈由帶有六個旋鈕的 3D 打印蜘蛛固定到位,與線軸的中心孔緊密配合。蜘蛛本身通過兩個螺絲固定在有機玻璃板上。

?
?
?
poYBAGNsZA6ALGSNAAFTG0Xfstk273.png
?
1 / 2 ?地球旋轉線圈:頂視圖
?

一個兩針接頭焊接到每個線圈上,這些接頭都連接到一個更大的 15 針插座(帶有 3 個未使用的針),粘在中間的蜘蛛上。

線圈從 1 到 6 編號(查看圖片“地球旋轉線圈,在燈籠中”),線圈端子標記為 A 和 B。

如果從頂部向下看線圈,繞組方向(從第一圈到最后一圈)為順時針方向,我們將端子 A 定義為銅繞組第一圈的起點(靠近線軸中心)和端子B作為最后一匝銅繞組的末端。

如果繞線方向是逆時針方向,那么我們將第一圈的起點指定為終端 B,將最后一圈的終點指定為終端 A。

線圈將成 3 對一起工作:線圈 1 和 4、2 和 5、3 和 6。因此,我們將 2 針接頭(線圈端子)連接到插座,如圖所示“地球旋轉線圈:關閉-連接,頂視圖',下面。如您所見,線圈“B”端子對于每個線圈對都是簡單互連的。線圈“A”端子的插座引腳焊接到扁平電纜(6 線)上。

在扁平電纜的另一端,我們稍后將焊接一個插座。暫時預見充足的電纜長度。

當然,有機玻璃板必須切割成所需的尺寸,具體取決于您使用的燈籠。參見圖片“地球旋轉線圈,在燈籠中”。

?
?
?
pYYBAGNsZBWACLGfAANZ-AvrP40513.png
?
1 / 2 ?地球旋轉線圈,在燈籠中
?

如果一切都正確連接,在任何給定時刻,三個相鄰線圈的垂直磁場方向將與其他三個線圈的磁場方向相反。每隔一段時間,這個磁場就會逆時針旋轉 60 度(從頂部看線圈)。這將在地球的兩側磁鐵上產生扭矩。此外,這種輪換將與 Arduino 程序的預期同步。因此,仔細遵循連接說明非常重要。

為了獲得更好的視覺效果,線圈位于兩個地球旋轉磁鐵下方約 130 毫米處。由于我們不需要太大的扭矩,即使有這個距離,我們也能夠保持地球旋轉。

poYBAGNsZBmADR3DAAGpgHIbJEw950.png
地球垂直位置
?

地球旋轉傳感器組件

該組件由六個 3D 打印部件組成。其目的是定位球形旋轉霍爾效應傳感器,使其可以拾取安裝在球形內部的 2 個球形旋轉磁鐵的通道。因此,它允許霍爾傳感器水平移動(通過向前或向后移動“垂直連接器”部分)和垂直移動(通過在其插槽中向上或向下滑動“霍爾傳感器外殼”)。就位后,兩個螺母將霍爾效應傳感器牢牢固定在位。

poYBAGNsZByAF-omAAF7YiifuPA290.png
地球旋轉傳感器組件 - 3D 零件(來自 STL 文件)
?

霍爾傳感器本身放置在“霍爾傳感器外殼”下端的小管內。一個精密接觸的插座粘在它的背面(我使用 Loctite 強力膠)來接收三個霍爾傳感器引線。

由于傳感器引線未焊接,因此可以輕松微調傳感器位置。假設我們使用的是 SS 495A 傳感器,標記的一面必須朝上(Arduino 程序假定它)。

?
?
?
poYBAGNsZCCAZ3eTAADzO86sar0387.png
?
1 / 2 ?地球旋轉傳感器相對于通過磁鐵的位置
?

安裝霍爾效應傳感器是一項簡單的任務:只需將 3 根引線彎曲成 90° 位置,將傳感器滑入小管內(從后向前),然后使用鑷子將 3 根傳感器引線精確地放入插座中- 聯系人。

地球自轉控制系統

如前所述,地球下方的旋轉線圈將對地球施加微小的扭矩(因為地球內部安裝了兩個小磁鐵)。這個扭矩是如此之小,以至于如果兩個速度(磁場和地球)相距不太遠,它只會使地球的旋轉與(“鎖定”)旋轉磁場(由六個線圈引起)同步。

作為旁注,我們也有地球磁場試圖將地球變成指南針,這當然無濟于事:事實上,如果關閉線圈,地球將始終定位自己,使其兩個磁鐵指向地球的磁北極和南極。旋轉磁鐵的磁極朝上和朝下的事實并不能阻止這一點,因為地球磁場線不水平延伸 - 在大多數地理區域,它們具有垂直分量!

無論如何 - 我們需要某種類型的控制系統 - 但沒有像前面描述的升降控制系統(它基于純控制理論)。

首先,控制器需要了解地球的旋轉速度。我們不會直接測量這個速度(盡管有方法可以做到這一點),但我們會測量每個地球自轉的時間。正如您已經猜到的那樣,旋轉霍爾傳感器提供此輸入。它只檢測到“格林威治反子午線”磁鐵的通過 - 另一個旋轉磁鐵(在格林威治子午線)安靜地通過。

poYBAGNsZCOAGI72AAF3V_fzeAs546.png
格林威治磁鐵通道:脈沖整形
?

運算放大器 IC8A 和 IC8D 周圍的電路將旋轉霍爾傳感器作為輸入(示波器屏幕截圖 - 藍色通道)并提供脈沖(黃色通道),然后由施密特觸發器 (IC8C) 進一步整形。施密特觸發器輸出(未顯示)由 Arduino Nano 采樣并用作控制器輸入。

如果當前地球旋轉速度太低(低于所需速度),則旋轉磁場速度將設置為略高于當前地球旋轉速度的速度(反之亦然)。這個過程在地球每轉一圈時重復,直到地球旋轉速度達到所需旋轉速度附近的一個小范圍。在該頻帶內,控制系統被關閉,旋轉磁場速度被固定為所需的旋轉速度,一勞永逸。地球旋轉現在“鎖定”或“同步”旋轉磁場。

此處描述的控制系統只有在旋轉磁場的相位設置正確(參考旋轉地球儀)的情況下才能工作。該程序會解決這個問題,但這需要線圈的正確接線以及線圈在水平面上相對于霍爾傳感器的位置的正確相對定位(參見圖片'地球旋轉線圈,燈籠')。

LED燈條

因為在黑暗中漂浮和旋轉的地球儀并沒有多大吸引力,所以添加了兩條數字 LED 燈條作為最后的觸感。每個 RGB LED 都是單獨可控的,只需要四根線:接地、5 伏、數據和時鐘

這些 LED 燈條按“米”出售,您可以輕松地將它們切割成所需的長度。在這種情況下,每個 LED 燈條包含 8 個 LED。我使用的類型在背面也有一個非常方便的膠帶,可以很容易地定位 LED 燈條并將它們固定到位(可能你還需要一些小木軌)。

時鐘線稍后將連接在一起,數據線也將連接在一起(我們將向兩個 LED 燈條發送相同的數據)。現在,只需將足夠長度的 4 線扁平電纜焊接到每個 LED 燈條的輸入側(數據流由箭頭清楚地指示,如圖所示)。作為應力消除和保持扁平電纜就位,最簡單的方法是將它們粘在燈籠上。稍后我們將處理這兩條扁平電纜的另一端。

poYBAGNsZDWANLrxAAYsn0hL4_k985.png
上下燈帶
?

重要提示:為了保持低電流消耗,16 個 LED 中只有 8 個會被使用,甚至不會處于全功率狀態。這足以獲得漂亮的視覺效果。如果每個 RGB LED(額定電流為 60 mA)將同時打開并以全功率打開,這將消耗近 1 安培的電流。我們將使用其中的一小部分。

注意:為 LED 燈帶供電的 l293D 半橋的最大額定電流為 600 mA。

對 Arduino Nano 進行編程

現在是對 Arduino Nano 進行編程的好時機。

下載并編譯代碼,通過 USB 將 Nano 連接到計算機并為 Nano 編程。目前為止就這樣了。

印刷電路板

兩層 PCB 承載所有電子設備,除了傳感器、電磁鐵、線圈和 LED 燈條。PCB 的設計非常謹慎,試圖遵循良好的做法,例如充分利用電源層和盡可能多地分離模擬和數字組件區域(最大限度地減少呈現給模擬電路的數字邏輯引入的噪聲 - 特別是電路的穩定性)浮球將取決于小于 0.5 毫伏的信號變化)。

poYBAGNsZD2AK8ryAARLWB2mWC8050.png
PCB頂面
?

該板包含許多額外的連接器,可提供大部分 Arduino Nano 引腳以及一些其他信號。這有助于使用該板進行超出本項目范圍的原型設計活動。

CAD 部分提供了訂購此 PCB 所需的文件(“Gerber 文件”)。

以下不是對 PCB 原理圖的完整解釋。它只是為了讓您對董事會的工作方式有所了解。

  • 該板使用 Arduino Nano端口 D(6 位寬)作為數據總線它提供線圈、LED、LED 燈條、可選 LCD 等數據,并讀取開關和按鈕狀態。
  • IC10 將 3 位地址(由 Arduino端口 B 位 0、4 和 5 提供)解碼為 8 條 I/O 選擇線。其中四個選擇線將選擇 IC2 觸發器以將數據寫入(以控制線圈)、IC3 觸發器(以控制 LED 等)、IC4 緩沖器(以讀取開關和按鈕)或 LED 燈條。未使用的選擇線連接到擴展連接器 (SV5)。請注意,(可選)LCD 芯片選擇直接連接到 Arduino Nano 引腳(檢查代碼),因為它是通過 LiquidCrystal 庫訪問的,該庫當然不使用解碼器芯片來選擇 LCD。
  • IC5 和 IC6 各包含 4 個半橋,通常用于控制電機等。我們使用 IC5 和 IC6 的一半來驅動六個線圈。IC6 剩下的兩個半橋用于給 LED 燈條供電(它們不直接連接到 Vcc),并讓軟件控制紅色 LED。
  • 運算放大器 IC9A 和 IC9D 形成某種“硬件看門狗”。如果軟件未能定期將其輸入的信號從高電平切換到低電平,反之亦然,其輸出將變為低電平,發出錯誤信號,有效地關閉電磁鐵、線圈和 LED 燈帶,并打開紅色 LED。
  • Opamp IC8B 將升降霍爾傳感器放大 10 倍。重要提示:通過將電阻器 R10 和 R12 的值從 100K 更改為 150K,您可以將放大倍數增加到 15(這提供了更高的 ADC 精度)。如果這樣做,則必須相應地更改 Arduino 程序中相應的#define 語句。這表明程序需要調整一些常數(例如數字增益)。
#define highAnalogGain 1                                    // 0: analog gain is 10,          1: analog gain is 15 (defined by resistors R9 to R12)
  • 運算放大器 IC8A、C 和 D 用于對來自旋轉霍爾傳感器的信號進行整形。
  • 運算放大器 IC9B 用作反相器,IC9C 根本不使用。

元件放置

零件在下圖、電路板本身和所附示意圖上清楚地標明。首先放置所有電阻器、二極管和小電容器。然后焊接 IC 插座(Arduino Nano 的母頭),如果必須更換芯片,這將為您省去很多麻煩。完成所有這些后,放置并焊接剩余的組件。不要放置實際的芯片。順便說一句,由于功耗低,我使用了 74HCT... 邏輯芯片,但 74LS... 芯片也可以工作(IC1 到 4,IC10)。

poYBAGNsZECAJS4CAAG7vfR1gw8686.png
主地球儀板:元件放置
?

最后要安裝的部分是 VMA404 降壓轉換器它垂直安裝,組件朝外,如下圖所示。端子清楚地標在主板和降壓轉換器板上,因此您不會弄錯。In- 和 Out- 指的是 GND 輸入和輸出,In+ 是指 24 伏輸入,而 Out+ 顯然是指轉換器輸出的電壓。使用堅固的空線進行連接,以確保適當的剛性。

暫時不要連接端子 Out+。首先,插入外部 24 伏墻壁電源,調整轉換器的微調電位器以獲得 7 伏的輸出電壓,然后再次斷開外部電源。此電壓設置將確保電路板正常運行,而不會消耗過多的功率。

此時,也連接端子 Out+,重新連接外部電源并使用萬用表或示波器運行一些測試,以驗證您是否獲得了預期的 5 伏電壓,如圖所示。

pYYBAGNsZEOAMMa-AAB9MTBm5bU590.png
降壓轉換器板安裝
?

如果此測試成功,您現在可以放置所有芯片,包括 Arduino Nano。

暫時不要將 PCB 物理連接到電磁鐵組件(使用墊片)——如果出現問題并且您需要進行故障排除,這將為您節省一些時間。

PCB連接器

我們需要連接三個傳感器(溫度和兩個霍爾效應傳感器)、電磁鐵、線圈和 LED 燈條(當然,我們還需要電源)。

  • 電源由插入 PCB 直流連接器的外部 24 伏墻壁電源適配器供電。首先檢查極性是個好主意:將 24 伏 (+) 傳送到中心引腳。
  • 電磁鐵:您將不得不(稍后)進行實驗以確定兩條電線的極性。如果施加的力是排斥而不是吸引......你需要切換電線。
  • 線圈:將 10 針接頭連接器焊接到之前連接到線圈的 6 線扁平電纜(留出 4 個端子)。首先,將圖中“地球旋轉線圈:連接特寫,頂視圖”(在“地球旋轉線圈”部分)中的信號名稱與下圖中相同的信號名稱匹配,以了解哪根線連接到哪個插頭引腳. 這些信號被標記為“COILPAIRn-x”,n = 0 到 2,x = A 或 B。
  • LED燈條:PCB LED燈條連接器有5個引腳。最靠近直流電源插孔的針腳 1 提供 5 伏電壓。引腳 2 和引腳 3 是兩條數據線。引腳 4 提供時鐘信號,引腳 5 為 GND。使用匹配的接頭連接器將來自兩個 LED 燈條的扁平電纜連接到 PCB 連接器(分別將 GND、5 伏、數據和時鐘線連接在一起)。注意:作為替代方案,您可以決定將兩個 LED 燈條的數據信號分開,將兩條數據線分別連接到連接器引腳 2 和 3。目前,這些引腳提供相同的數據,但這將允許分別控制兩個 LED 燈條(當然,通過更改程序)。
pYYBAGNsZEyAQNrgAANVijyxF5c476.png
PCB 連接器 (1)
?
  • 傳感器連接器(示意圖:J3、J4 和 J5)每個都需要接地、5 伏和傳感器信號輸出線連接到相同的相應連接器引腳(見下圖)。因此,如果您稍后在將傳感器連接到 PCB 時出錯,則不會發生任何故障(但您的電路板當然無法正常工作)。我建議不要使用升降霍爾傳感器的連接器(連接器 J3),但是將電線直接焊接到板上,不要使它們比需要的長,因為測量的電壓變化很小(小于 0.5 毫伏)。注意:傳感器引腳排列與相應的連接器引腳不同。檢查傳感器的數據表!
poYBAGNsZFCAFvzyAAFdO-vhLCs299.png
PCB 連接器 (2)
?

測試和調整

當然,我只能給你一些一般性的指導方針,但我建議使用這個路線圖進行測試:

  • 測試 1:驗證與 PC 上的串行監視器的通信(通過 USB)。確保所有 DIP 開關都處于關閉位置,并驗證串行監視器的波特率是否與 Arduino 程序設置的波特率相對應(標準 1000000 波特 - 最好不要更改)。插入 USB 電纜(您不需要為 PCB 板通電,也不需要進行任何其他連接)并驗證 Arduino 是否響應以“Type + or - to change”開頭的消息顯示參數,E 編輯值,..." 重置后。
  • 設置:在串行監視器中,鍵入“A”+ ENTER。Arduino 將響應參數和值列表。檢查旋轉時間設置('rot time')是否為 12 秒,垂直地球位置('vert pos')設置為 1000 毫伏(或 1500 毫伏,如果您將模擬增益更改為 15 - 請參閱“PCB”部分)。如果不是,請參閱“串行通信”部分來設置這些值。
  • 測試 2:對于這個測試,暫時忘記地球旋轉和 LED 燈條。只需連接溫度傳感器(如果不連接,電路板將檢測到“高溫”并且不允許為電磁鐵供電)。連接起重霍爾傳感器和電磁線。打開。您應該看到綠色 PCB LED 閃爍。等待 5 秒鐘。藍色 PCB LED 應該開始閃爍(關于 LED 顏色和含義的完整解釋將在后面給出)。現在,沿著升降霍爾傳感器(和電磁鐵)的方向緩慢向上移動地球(帶有大起重磁鐵),直到它接觸到有機玻璃板。然后將其從傳感器上向下移動。這使電磁鐵和升降控制系統成為可能。讓地球再次靠近磁鐵,您現在應該觀察到電磁鐵和起重磁鐵之間的吸引力。如果觀察到排斥力,則需要切換兩根電磁鐵的線。
  • 測試 3:嘗試將地球“懸掛”到位(程序在下一節中解釋)。
  • 測試4:斷電,同時連接旋轉霍爾效應傳感器,上電。再次將地球儀懸掛到位并稍微轉動(逆時針)。將示波器連接到 IC8A 引腳 9(施密特觸發器輸入),并驗證您看到的波形看起來像上一節中“格林威治磁鐵通道:脈沖整形”圖中的黃色波形。如果不是,則嘗試通過調整旋轉霍爾傳感器的水平和垂直位置來獲得此波形(松開兩個螺母 - 參見“3D 組裝”部分)。
  • 調整施密特觸發器輸出:將示波器通道 2 連接到 IC8C 引腳 8(施密特觸發器輸出)。通過調整微調電位器 R8,將輸入閾值電壓(示波器通道 1)設置為 0.8 伏(或多或少)。假設您給地球的旋轉速度在 10 到 15 秒之間,這應該會在 180° 子午線每次通過旋轉霍爾傳感器時產生 0.5 到 1 秒之間的脈沖。
  • 測試5:斷電,接好線圈,上電。再次將地球儀懸掛到位并稍微轉動(逆時針)。旋轉控制系統現在應該啟動。大約 30 秒后,PCB LED 應該熄滅,表示已獲得設定的旋轉速度。
  • 測試 6:現在,連接 LED 燈條。然后,使用串行監視器命令(在下一節中解釋)設置 LED 燈條循環 5(循環通過所有顏色)和 LED 燈條時序 1(最快)。驗證 LED 燈條是否正常工作(請記住,并非所有 LED 都已使用)。

有關如何處理地球儀、狀態 LED 和串行通信的更多詳細信息,請參閱下一節。

定位地球儀

當您啟動系統時,您可以立即將地球儀“懸掛”在適當的位置(電磁鐵下方約 35 毫米,或固定升降霍爾傳感器的有機玻璃板下方約 15 毫米):只需觀察安裝在印刷電路板。如果它呈穩定的綠色亮起,則表明您處于正確的高度。如果它閃爍(綠色),你要么太高要么太低。它需要一些練習(不過不要太多),但應該相當容易。

一旦地球漂浮,稍微轉動(逆時針)并等待......取決于你給它的初始旋轉速度(這不是關鍵),一段時間后,地球將達到其設定的旋轉時間(標準 12 秒)。

狀態指示燈

LED 熄滅:地球處于浮動狀態,并且地球旋轉已鎖定(與線圈產生的旋轉磁場同步)。

LED 亮起(綠色或藍色):

  • 綠色 LED 閃爍約。每秒 4 次:地球不在狹窄的“浮動”范圍內。在定位地球儀時,使用它來指導您確定地球儀和電磁鐵之間的正確距離。
  • 綠色 LED 持續亮起:地球處于浮動狀態,但尚未檢測到格林威治位置同步(格林威治反子午線磁體通過)。旋轉線圈關閉。
  • 綠色 LED 快速閃爍(大約每秒 16 次):地球在浮動;正在進行第一次旋轉時間測量。旋轉線圈關閉。
  • 藍色 LED 持續亮起,但閃爍更亮(綠色):地球處于浮動狀態,但地球旋轉尚未鎖定。綠色閃爍表示旋轉磁場的方向正在改變。藍色閃爍表示格林威治磁鐵當前正在通過旋轉霍爾傳感器

LED 呈藍色閃爍:起重磁鐵和線圈當前因錯誤情況而關閉。連續 1 秒閃爍的次數(隨后是停頓)指示導致錯誤情況的原因:

  • 1 次閃爍:地球掉落超過 5 秒(地球可能掉落或被拿走,或上電后未檢測到地球)。
  • 閃爍 2 次:粘性地球儀:地球儀位置過高超過 5 秒(地球儀可能粘在有機玻璃板上)。
  • 閃爍 3 次:在過去的幾分鐘內,起重磁鐵的平均占空比高于 80%(這種情況極不可能發生,但因為這關系到安全......)。
  • 閃爍 4 次:平滑后的溫度讀數高于 65° 攝氏度。

要再次啟用該系統,請將地球儀靠近裝有升降傳感器的有機玻璃板(向上移動),然后再次將其從有機玻璃板上移開(向下移動)。LED 現在將再次變為綠色,您將有(再次)5 秒時間將地球儀帶回其浮動位置。

LED 為紅色:如果由于故障或程序錯誤,程序停止在運算放大器 IC9A 和 IC9D 周圍的電路輸入端產生脈沖(充當硬件看門狗),起重磁鐵和線圈將被禁用,LED 將轉動紅色的。

串行通訊

通過 USB 使用 Arduino 串行監視器(或其他正確配置的“終端”軟件),您可以打印某些信息并更改一些設置。

可以打印以下信息(“參數”):

  • 當前選擇的旋轉時間(設置
  • 實際旋轉時間
  • 自轉時間同步誤差:累計地球自轉時間誤差(鎖定時)
  • “全球旋轉鎖定”時間。地球旋轉未鎖定時重置
  • “地球漂浮”時間。地球不浮動時重置
  • 溫度(攝氏度)
  • 起重磁鐵平均占空比 (%)
  • 地球垂直位置:以毫伏為單位的參考(設定點)(設置)。請注意,設定點值是指 ADC 讀取的值,因此它們被縮放為 10(或 15 - 參見 PCB 部分)乘以霍爾傳感器輸出垂直位置
  • ADC 讀取的以毫伏為單位的球體垂直位置誤差絕對值的平滑平均值
  • 積分項的當前值,由全球升降控制器計算
  • 旋轉磁場和旋轉地球之間的平均相位(??鎖定時)。可用于校準旋轉磁場與地球儀之間的相位,由地球儀旋轉控制器在獲得鎖定之前設置
  • “ADC 轉換完成”ISR 例程的平均持續時間(以微秒為單位)(平滑)
  • 平均處理器負載(平滑)

此外,每個狀態變化都會被打印出來(例如,達到了選定的旋轉時間)。

pYYBAGNsZFKARi67AACaCc5JxfE019.png
串行監視器:'A'(顯示全部)命令輸出
?

使用以下命令打印參數及其值或更改設置(不需要發送“回車”,盡管您可能必須按 Enter 將命令發送到 Arduino,具體取決于您使用的終端軟件)。

  • '+' 或 '-' : 打印下一個或上一個參數。在編輯模式下:從列表中選擇下一個或上一個參數值。
  • 'E':編輯當前參數。在編輯模式下:結束編輯并將當前選擇的參數值保存在 EEPROM 存儲器中。只對改變旋轉時間和微調地球垂直位置有效,對其他參數無效。
  • 'C':取消編輯而不保存。不處于編輯模式時沒有功能。
  • 'S' 開始或停止顯示實時值。這將開始或停止定期將當前所選參數的實際值打印到串行監視器(例如完成最后一次地球旋轉所花費的時間)。不適用于設置。
  • 'A':一次打印所有參數,以及當前的燈帶設置。
poYBAGNsZFaAW5gmAAD1GgMBJC4301.png
串行監視器:狀態和命令示例
?

附加命令:

  • '?':打印可用命令(幫助)。
  • 'T':打印時間戳(自上次重置以來的毫秒數 - 實時時鐘不可用)。
  • 'LC0' to 'LC5':選擇一個燈帶周期。0 = 關閉,1 = 恒定亮度白色,2 = 恒定亮度洋紅色,3 = 恒定亮度藍色,4 = 白色和藍色之間的漸變,5 = 所有顏色之間的平滑循環(從藍色到青色、綠色、黃色、紅色、洋紅色,又是藍色,...)。選擇存儲在 EEPROM 存儲器中。
  • 'LT1' to 'LT4':改變燈帶循環時間。1 = 最快(分鐘),4 = 最慢(小時)。請注意,時間與所有 LED 燈條循環類型無關。選擇存儲在 EEPROM 存儲器中。
  • “R0”和“R1”:(階躍)響應。應用階躍變化 ('R1') 或不應用步驟('R0')到地球垂直位置參考(設定點),然后將測量的響應(實際地球垂直位置)和控制器輸出(PWM 占空比)發送到串行監視器,在那里可以記錄它以在 excel 等中進行評估。應用的步長(僅“R1”命令)以 100 個 ADC 步長增加垂直位置設定值。在霍爾傳感器輸出處以毫伏表示:100 ADC 步 *(5000 毫伏/1023 ADC 步)/10 = 49 毫伏(如果模擬增益設置為 10 - 請參閱“PCB”部分)。Arduino 開始將數據發送到串行監視器,在應用步驟前 1 秒(“R1”命令)并繼續發送數據 20 秒。每毫秒發送一行包含三個值的行,這些值用分號分隔。值 1:毫秒(1 到 20000)值 2:
poYBAGNsZFuAJqrvAAGPzf5Tnmw631.png
記錄階躍響應(提取)和 Excel 階躍響應圖表 - 模擬增益為 15
?

關于使用“R0”和“R1”命令的一些注意事項

  • 'Rn' 命令需要高波特率:程序設置的波特率為 1000000,所以這應該不是問題。
  • 積分項的值(參見“地球升降控制系統”部分),包括在“Rn”輸出(第一毫秒)開始處的額外精度數字(參見“Arduino Nano 代碼”部分),打印到串行監視器為這允許基于記錄的霍爾效應傳感器值(在 ADC 步驟中)在 excel 中“重放”控制器計算,驗證在 excel 中計算的控制器輸出與記錄的控制器輸出是否相同。
  • 發送階躍響應數據結束后,地球儀的垂直位置會慢慢恢復到原來的設置。
  • 顯示實時值時不要使用此命令(請參閱“S”命令)

使用硬件按鈕和 LCD

可以將 4 個按鈕(“+”、“-”、“E”和“C”)直接連接到 Spinning Globe 板 PCB,以及 16 x 2 字符、Arduino 兼容的 LCD 顯示屏。

這允許您查看相同的實時值并更改與使用串行監視器相同的設置。

LCD 在頂行顯示狀態信息(例如“E! drop globe”),在底行顯示當前選擇的參數(參見“串行通信”部分)。

請注意,不能使用硬件按鈕更改 LED 燈條設置。它們也不顯示在 LCD 上。

連接(“接通”觸點)按鈕:使用連接器 SV2。

  • “-”按鈕:將一個引腳連接到信號“SW0”(SV2 引腳 2),另一個引腳連接到 GND
  • “+”按鈕:將一個引腳連接到信號“SW1”(SV2 引腳 4),另一個引腳連接到 GND
  • “E”按鈕:將一個引腳連接到信號“SW2”(SV2 引腳 6),另一個引腳連接到 GND
  • “C”按鈕:將一個引腳連接到信號“SW3”(SV2 引腳 8),另一個引腳連接到 GND

按下這些按鈕與使用串行監視器(或其他終端軟件)發送等效命令的效果相同。

重要提示:確保 DIP 開關 2 至 5 都處于關閉位置。這些開關分別連接到信號“SW3”到“SW0”,與這 4 個按鈕并聯。將開關設置在 ON 位置會將相應的信號連接到 GND,使相應的按鈕無法操作。此外,如果這些開關之一在復位或上電后立即處于 ON 位置,則系統進入編程模式(見進一步)。

連接 LCD:使用通用連接器 SV5 連接基于 Hitachi LCD 控制器的可選 2 x 16 字符 LCD。

  • 使用 4 位總線將數據發送到 LCD
  • LCD 在只寫模式下工作:將 LCD 讀/寫引腳接地
  • 將 LCD 數據位 4 到 7 引腳連接到信號“D4(PD4)”到“D7(PD7)”(Arduino 端口 D 位 4 到 7,參見示意圖)
  • 將 LCD RS寄存器選擇)引腳連接到信號“D3(PD3)”(端口 D 位 3)
  • 將 LCD 使能引腳連接到信號“PB2”(Arduino 端口 B 位 2)
  • 正確連接電源、LCD 對比度和背光 LED 引腳(使用 LCD 數據表中指定的電阻器 - PCB 上未提供電阻器)
poYBAGNsZGiAfrClAAGMwVDR2wo354.png
可選的 2 x 16 字符 LCD,連接到 PCB 連接器 SV5
?

使用 DIP 開關更改設置(程序模式)

無需使用串行監視器或按鈕/LCD,即可設置地球旋轉時間、微調地球垂直位置設定點或設置 LED 燈條周期和時間。

進入和退出程序模式的步驟:

1.電源關閉時,使用 DIP 開關 2 至 5(信號 'SW3' 至 'SW0')指示要更改的設置,如下所述。不要使用任何其他開關設置。請注意,當前未使用 DIP 開關 1(信號“SW4”)。

  • ON ON ON ON:更改燈帶設置
  • ON ON ON OFF:設置旋轉時間
  • ON ON OFF ON:微調地球垂直位置參考

2.開機。然后,當電源打開時,如下所示設置 DIP 開關。

=> 如果初始開關設置為ON ON ON ON:設置ledstrip周期和時序,如下:

  • ON ON ON ON:關閉燈帶
  • ON ON ON OFF:恒定亮度白色
  • ON ON OFF ON:恒定亮度洋紅色
  • ON ON OFF OFF:恒定亮度藍色
  • ON OFF (T1) (T0):在白色和藍色之間漸變
  • OF ON (T1) (T0):在所有顏色(藍色、青色、綠色、黃色、紅色、洋紅色、藍色...)之間循環
  • 其他開關設置不影響最后設置的燈帶周期和時序

(T1) (T0) 設置燈帶時序:

  • ON ON:計時1(最快)
  • ON OFF:定時2
  • OFF ON:定時 3
  • OFF OFF:定時4(最慢)

=> 如果初始開關設置為ON ON ON OFF:設置地球旋轉時間,如下:

  • ON ON ON ON:地球旋轉關閉(“指南針”行為)
  • ON ON ON OFF:12秒
  • ON ON OFF ON: 9 秒
  • ON ON OFF OFF:7.5秒
  • 開 關 開 6 秒
  • ON OFF ON OFF:4.5秒
  • 開 關 關 開:3 秒
  • 開關關關:2.4秒
  • 其他開關設置:地球旋轉關閉

=> 如果初始開關設置為ON ON OFF ON:微調球體垂直位置設定值(以毫伏為單位),如下所示:

  • 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毫伏
  • 其他開關設置:1000毫伏

請注意,設定點值是指 ADC 讀取的值,縮放為設置垂直位置的霍爾傳感器輸出的 10 倍。如果您將模擬增益更改為 15(參見“PCB”部分),設置的值將分別為 1500、1800、2100、2400 和 2700 毫伏。

3.關機。然后,在電源關閉時,再次將開關 2 至 5 設置為“關閉”。所需設置已存儲(在 EEPROM 存儲器中)。

4.再次開機。

Arduino納米代碼

該程序有很好的文檔記錄,因此我將在此處保持簡短。

該程序專為速度而設計。特別是,中斷服務程序 (ISR) 不使用浮點數。這意味著,例如,起重控制器的計算是使用(長)整數完成的,通過添加額外的“二進制分數”數字并在計算結束時刪除它們來提高準確性(將值向左或向右移動多個位) .

注意:因此,必須注意,如果特定常量發生更改,則不會出現下溢或下溢的情況。

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)

此外,由于除法比乘法花費的時間長得多(沒有處理器指令用于除法),所以 ISR 中沒有。示例:將一個值除以一個常量“5”可以通過將該值乘以一個整數常量“51”(51 = 1/5 * 2^8)然后右移 8 位來執行。

這導致平均處理器負載約為 20%,這是由程序測量的,并且可以使用串行監視器進行驗證。

主循環

主循環很短(一切都發生在許多專用程序中),但清楚地顯示了一般結構。

  • 如果事件或用戶命令可用,則將對其進行處理。如果不是,程序繼續。事件由中斷服務程序生成。用戶命令由串行接口或(可選)硬件按鈕組裝而成。
  • 開關狀態(在 ISR 中讀取和去抖動)用于在需要時調整設置。
  • 數據(如果有)被發送到串行接口和可選的 LCD。
  • 如果 LED 燈條亮度需要改變(由特定的“LED 燈條”事件的發生表示),串行數據將被發送到 LED 燈條。
  • 只要無事可做,控制就會停留在空閑循環中。如果仍有要處理的事件(事件隊列不為空)、鍵緩沖區不為空或發生中斷(“定時器 1 溢出”或“ADC 完成中斷”),則空閑循環將退出。
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“數據總線”(參見“PCB 硬件”部分)向硬件傳輸/從硬件傳輸的所有數據都是從 ISR 內部寫入或讀取的,因為無論如何這都會很快,但有兩個例外:

1. LED 燈條數據通過同一端口 D 數據總線串行發送,這需要幾毫秒(每次需要刷新 LED 燈條時發送 400 位) - 這將停止 ISR 執行。因此,主程序循環負責發送 LED 燈條數據。該程序確保在發送 LED 燈條數據被使用同一數據總線發送或接收數據的 ISR 中斷時不會發生“沖突”。

2. 可選的 LCD 也使用相同的數據總線,并且也是從主程序循環中寫入的,因為使用了標準的 LiquidCrystal 庫,它不知道 PCB 上使用的硬件地址解碼邏輯。

定時器 1 溢出中斷

  • 每毫秒執行一次
  • 提供時基(定時器 0 未被程序使用,但未被禁用)
  • 重置硬件看門狗
  • 啟動升降霍爾傳感器 ADC 轉換并啟用“ADC 完成”中斷
  • polls 地球儀旋轉霍爾效應傳感器
  • 讀取和消除開關/按鈕的抖動,并為按下/釋放的按鈕生成鍵碼(如果已連接)

ADC 完成中斷

  • 有時每毫秒執行兩次:在提升霍爾傳感器 ADC 轉換完成時(每毫秒)和等溫度傳感器 ADC 轉換完成時(每 128 毫秒)
  • 讀取轉換后的 ADC 值。如果這是一個提升霍爾傳感器值,則繼續。如果是溫度傳感器轉換,存儲溫度并退出
  • 執行與提升控制、旋轉控制、安全性相關的計算
  • 設置定時器 1 寄存器控制電磁鐵 (PWM) 的脈沖占空比
  • 輸出線圈、LED 等的數據。
  • 計算 LED 燈條亮度級別。注意串口數據會在主程序循環中發送到led燈條(因為比較耗時)
  • 使用“事件”向主循環發送信息:數據存儲在動態內存中,指示事件的性質(例如,地球的旋轉速度現在已獲得設定值)以及一些額外的信息。主循環將處理事件并再次從動態內存中刪除它們(參見類“MyEvents”)
  • 每 128 毫秒:啟動溫度 ADC 轉換(這將觸發一秒鐘但非常短的 ISR 發生)

就是這樣,伙計們

我試圖使說明盡可能詳細。但是,我意識到完整性是非常難以實現的,如果不是不可能的話。

我希望這個項目對一些人來說是一個學習的機會,對另一些人來說會很有趣。

成功 !


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1開關電源設計原理手冊
  2. 1.83 MB   |  4次下載  |  免費
  3. 2PL4807單節鋰離子電池充電器中文手冊
  4. 1.36 MB   |  2次下載  |  免費
  5. 3智能小車proteus仿真+C源程序
  6. 0.02 MB   |  1次下載  |  免費
  7. 4FS5080E 5V升壓充電兩串鋰電池充電管理IC中文手冊
  8. 8.45 MB   |  1次下載  |  免費
  9. 5HT2120兩節鋰電池保護板電路
  10. 0.22 MB   |  1次下載  |  免費
  11. 6TMR技術在電流傳感器中的應用
  12. 616.47 KB  |  1次下載  |  免費
  13. 7OPAx320x精密CMOS運算放大器
  14. 2.22MB   |  1次下載  |  免費
  15. 8BQ77207EVM用戶指南
  16. 865.23KB   |  1次下載  |  免費

本月

  1. 1XL4015+LM358恒壓恒流電路圖
  2. 0.38 MB   |  155次下載  |  1 積分
  3. 2PCB布線和布局電路設計規則
  4. 0.40 MB   |  46次下載  |  免費
  5. 3GB/T4706.1-2024 家用和類似用途電器的安全第1部分:通用要求
  6. 7.43 MB   |  14次下載  |  1 積分
  7. 4智能門鎖原理圖
  8. 0.39 MB   |  13次下載  |  免費
  9. 5JESD79-5C_v1.30-2024 內存技術規范
  10. 2.71 MB   |  10次下載  |  免費
  11. 6elmo直線電機驅動調試細則
  12. 4.76 MB   |  9次下載  |  6 積分
  13. 7WIFI智能音箱原理圖完整版
  14. 0.09 MB   |  7次下載  |  10 積分
  15. 8PC1013三合一快充數據線充電芯片介紹
  16. 1.03 MB   |  7次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935115次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420061次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233084次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191367次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183333次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81581次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73806次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65985次下載  |  10 積分