應(yīng)廣單片機(jī)(PADAUK) 微控制器的特點(diǎn)
分析應(yīng)廣單片機(jī)(PADAUK)芯片的模型范圍,可以識(shí)別以下特征:
各種外殼中的微控制器,從SOT 23-6 u(PMS150,4個(gè)輸入/輸出端口)到SOP28(PFC460,到26個(gè)委托/輸出端口),值得注意的是,對(duì)于同一微控制器,船體有各種版本;
程序的內(nèi)存容量從512到4096個(gè)字,RAM從64到256字節(jié)的量;
時(shí)鐘速度高達(dá)16 MHz(來(lái)自內(nèi)部時(shí)鐘發(fā)生器),大多數(shù)處理器命令在一個(gè)時(shí)鐘中執(zhí)行;
微控制器缺乏硬件接口(UART,I2C,SPI等),內(nèi)置在IDE代碼生成器中,以用軟件實(shí)現(xiàn)它們;
有具有閃存(MPT)和一次可編程(OTP)的模型;
一些微控制器配備了所謂的“程序處理器陣列”(FPSPA),關(guān)于它是什么以及如何使用它,我們將在下面討論。
制造商的官方網(wǎng)站有英文和中文所有控制器型號(hào)的文檔。全功能的FPPA IDE開(kāi)發(fā)環(huán)境可供下載(我們稍后將討論安裝并與之配合)。程序可以寫在經(jīng)典的匯編上,但制造商還提供了C語(yǔ)言的變體 - Mini.C,我認(rèn)為這非常有趣。
為實(shí)驗(yàn)開(kāi)發(fā)了調(diào)試費(fèi)。微控制器PFC161的文檔說(shuō),微控制器支持架構(gòu)內(nèi)編程模式。為此,使用了五條程序員線:ICPCK、LASPA、VDD、GND和ICVPP。它們分別連接到微控制器的引腳:PA3、PA6、VDD、GND 和 PA5。
符號(hào)“星”可以指電阻器和電容器。它們用于將程序信號(hào)的導(dǎo)線與外圍電路隔離。電阻應(yīng)約為10 kO,如果使用容量,則應(yīng)約為220 pF。
使用電壓限制編程(低伏編程),而:
- 不要在電壓小于5.0 V的電壓下連接VDD和GND穩(wěn)定器,程序員本身為可編程MK供電,因此懸掛在飲食上的所有東西都不應(yīng)消耗超過(guò)20mA;
- 不連接容量超過(guò)500μF的容量在VDD和GND之間;
- PA3、PA5 和 PA6 編程線不應(yīng)用于為任何負(fù)載供電。
一般來(lái)說(shuō),這樣的要求是相當(dāng)可以理解的。以防萬(wàn)一添加一個(gè)DIP開(kāi)關(guān),將編程中使用的微控制器線與電路板的其余部分?jǐn)嚅_(kāi)。
事實(shí)證明,這是一種綁帶微控制器的方案:
XS5(IDC-6)連接器實(shí)際上用于連接到程序員。在板上還增加了一對(duì)用于負(fù)載切換的H橋(目標(biāo)費(fèi)用中的微控制器將控制雙極步進(jìn)器)。
這是一個(gè)如此美麗的模型:
這就是實(shí)施:
信號(hào)和電源路徑,厚度為0.25毫米,僅用于測(cè)試LUT技術(shù)的能力。有趣的是,獲得了微型接觸指定(在印刷電路板的形式上很高)。起初我以為它們會(huì)在轉(zhuǎn)移圖紙或蝕刻時(shí)消失得無(wú)影無(wú)蹤,但沒(méi)有,保存!符號(hào)線的厚度為0.07毫米。
組裝和檢查調(diào)試板后,您可以繼續(xù)創(chuàng)建項(xiàng)目并編寫固件
FPPA IDE 中的第一個(gè)項(xiàng)目
如上所述,開(kāi)發(fā)環(huán)境完全免費(fèi),可在制造商的官方網(wǎng)站上下載
下載并拆包存檔后,它將擁有唯一的exe文件。我們開(kāi)始它,并觀看安裝的驚人程序的工作,這不會(huì)問(wèn)你絕對(duì)沒(méi)有什么,但只會(huì)報(bào)告成功安裝。幾個(gè)圖標(biāo)將出現(xiàn)在桌子上。
FPPA IDE是開(kāi)發(fā)環(huán)境。Writer 是與程序員一起工作的實(shí)用工具,它也可以從 IDE 獲得。
啟動(dòng)IDE。最后一個(gè)項(xiàng)目或文件打開(kāi),如果我們第一次運(yùn)行,應(yīng)用程序注意也可以從頂部面板獲得。以下是處理器命令上的文檔,mini.C編程語(yǔ)言的描述,代碼生成器的描述。
一切看起來(lái)熟悉和標(biāo)準(zhǔn)。在文件管理器的左側(cè),在編譯器消息的底部,在代碼編輯器窗口的中央部分。頂部面板上有一個(gè)工具包。
創(chuàng)建項(xiàng)目: 文件 / 新項(xiàng)目
我們?cè)O(shè)置項(xiàng)目名稱,在指定地點(diǎn)將創(chuàng)建一個(gè)文件夾,其名稱為項(xiàng)目。選擇一個(gè)系列和一個(gè)微控制器模型。其余的設(shè)置還沒(méi)有觸及,我們稍后會(huì)處理。單擊確定并查看生成的項(xiàng)目。
現(xiàn)在,您可以將我們的微控制器連接到前面板。由于我們將對(duì)內(nèi)部程序進(jìn)行編程,因此您需要一根連接調(diào)試板上的連接器和程序員前面板上的夾緊面板的導(dǎo)線。我們將制作另一個(gè)適配器,連接適當(dāng)?shù)囊_,在調(diào)試板上到程序化器的連接器。在程序員的屏幕上將有一個(gè)銘文“IC ready”,這意味著微控制器已準(zhǔn)備好固件。
在"寫入器"窗口中,按軟件本身的自動(dòng)程序圖標(biāo)或程序按鈕。加載固件的程序?qū)㈤_(kāi)始。之后,在屏幕上,我們將看到一個(gè)關(guān)于成功操作的消息。
現(xiàn)在,您可以斷開(kāi)程序員并連接調(diào)試板的電源。
事實(shí)是問(wèn)題所在,我們的固件什么也不做。
Mini.C 上的編程
首先,我嘗試實(shí)現(xiàn)一個(gè)簡(jiǎn)單的算法,使用位于PCB上的驅(qū)動(dòng)程序來(lái)控制步進(jìn)電機(jī)。通過(guò)點(diǎn)擊其中一個(gè)按鈕,它應(yīng)該在給定的步驟上向一個(gè)方向旋轉(zhuǎn),通過(guò)按下另一個(gè)按鈕 - 在相反的方向上采取相同數(shù)量的步驟。由于我在C上為大多數(shù)項(xiàng)目編寫固件,因此對(duì)于這些控制器,我選擇了Mini.C,希望它更容易習(xí)慣它。
關(guān)于這種語(yǔ)言和編譯器的特性,該怎么說(shuō)呢?的確,語(yǔ)法作為C語(yǔ)言。編譯器不支持將參數(shù)轉(zhuǎn)移到函數(shù)。此外,該函數(shù)不能返回值。但有跡象和全球變量。
這里的數(shù)據(jù)類型在名稱上有些不同,但一般來(lái)說(shuō),它們的含義與經(jīng)典的SI相同。不支持浮點(diǎn)計(jì)算。所有算術(shù)都只是整數(shù)。
開(kāi)發(fā)環(huán)境不喜歡評(píng)論中的西里爾字母。不,你可以正式寫評(píng)論。編譯時(shí),他不會(huì)給出一個(gè)錯(cuò)誤。但是,出于某種原因,當(dāng)保存文件并重新打開(kāi)時(shí),一些字符會(huì)更改為問(wèn)號(hào)。好吧,這很好,但是!當(dāng)你嘗試執(zhí)行編譯器時(shí),回收器會(huì)掛起,介質(zhì)會(huì)飛出。我痛苦了很久,不明白是什么原因。錯(cuò)誤是浮動(dòng)的。也就是說(shuō),包含包含西里爾語(yǔ)注釋的新創(chuàng)建文件可以是“重新組裝”,并且沒(méi)有重新打開(kāi)。奇跡......
#include "extern.h"
// H橋引腳
#define AP 7
#define AN 5
#define BP 3
#define BN 6
// 電機(jī)工作模式
#define STOP 0
#define FORWRD 1
#define BACKWARD 2
#define DEADTIME 30
#define PHASE_DEL 3000
BYTE motorDirection = STOP;
BYTE stepperPhase[10];
WORD pntStart, pntEND, phaseCounter;
WORD delCounter;
WORD delValue = 0;
WORD stepCounter = 0;
void delay_tick (void) {
while(delValue > 0) {
delValue -= 1;
nop;
}
}
void FPPA0 (void)
{
.ADJUST_IC SYSCLK=IHRC/8, Init_RAM;
//電機(jī)步進(jìn)相位
stepperPhase[1] = (0< stepperPhase[2] = (0< stepperPhase[3] = (0< stepperPhase[4] = (0< stepperPhase[5] = (0< stepperPhase[6] = (1< stepperPhase[7] = (1< stepperPhase[8] = (1<
// 之前的stepperPhase[phaseCounter]
// поэтому используем указатели
pntStart =&stepperPhase[0];
pntEND=&stepperPhase[9];
相位計(jì)數(shù)器 = pntStart+1;
刪除計(jì)數(shù)器 = 1;
PA = 0b00000000; // AP強(qiáng)烈建議您在進(jìn)行配置更改之前清除端口數(shù)據(jù)寄存器。
PAC = 0b11101000;
PB = 0b00000000;
PBC = 0b00000000;
同時(shí)(1)
{
// 按鈕控制
如果(PA.4 == 0)
{
電機(jī)方向 = FORWRD;
步數(shù)計(jì)數(shù)器 = 50;
}
如果(PB.0 == 0)
{
電機(jī)方向=向后;
stepCounter = 50;
}
while(stepCounter > 0)
{
if(motorDirection == FORWRD)
{
phaseCounter += 1;
delCounter += 1;
}
else if(motorDirection == BACKWARD)
{
phaseCounter -= 1;
delCounter -=1;
}
// 相位控制
if(phaseCounter == pntStart)
{
phaseCounter = pntEND - 1;
}
else if(phaseCounter == pntEND)
{
phaseCounter = pntStart + 1;
}
// 延時(shí)控制
if(delCounter == 0)
{
delCounter = 2;
}
else if(delCounter == 3)
{
delCounter = 1;
}
// 當(dāng)前步驟在引腳上發(fā)送
PA = (PA & 0b00010111) | (*相位計(jì)數(shù)器);
/* 為避免使PA.4數(shù)據(jù)寄存器的值混亂,
* 首先閱讀內(nèi)容,
* 應(yīng)用掩碼,然后才插入當(dāng)前引擎階段
*/
delValue = PHASE_DEL;
if(delCounter == 1)
{
delValue = 死區(qū)時(shí)間;
}
延遲滴答();
/* 是的,這里可以不用手寫功能,
* 只需使用命令 .DELAY 4000
*(同樣不能傳遞變量),
* 但我想知道它是如何工作的
*/
步數(shù)計(jì)數(shù)器 -=1;
}
// 禁用步進(jìn)器
電機(jī)方向=停止;
PA = (PA & 0b00010111);
}
}
void Interrupt (void)
{
pushaf;
if (Intrq.T16)
{ // T16 觸發(fā)
// 用戶可以添加代碼
Intrq.T16 = 0;
//...
}
popaf;
}
結(jié)論
最后能說(shuō)什么。在遇到應(yīng)廣單片機(jī)(PADAUK)生態(tài)系統(tǒng)后,我留下了愉快的印象。以低成本的微控制器 - 不是那么糟糕的事情。如果我們與其他8個(gè)金庫(kù)微控制器(如Tiny13或Tiny10或PIC10)進(jìn)行比較,這些微控制器在更廣泛的方面是無(wú)與倫比的,那么PFC161在性能上都不遜色于這些同志,也不遜于這些同志的程序的內(nèi)存量,也不遜色于外圍的豐富性。但它在價(jià)格上獲勝,甚至具有可重寫內(nèi)存的模型。此外,源代碼可以很容易地在PMS152下移植(帶有OTP內(nèi)存),基于它的產(chǎn)品已經(jīng)可以復(fù)制(前提是您不需要特定的外圍,例如觸摸按鈕控制器)。
當(dāng)然,也有特點(diǎn)。我得買一個(gè)專有的程序員。好,或者收集自己的,好是一個(gè)開(kāi)放的項(xiàng)目。開(kāi)發(fā)環(huán)境和Mini.C編譯器,當(dāng)然,具有...
很快,我將嘗試將我的項(xiàng)目轉(zhuǎn)移到這些微控制器上,我將看到這將會(huì)發(fā)生什么,并分享工作的結(jié)果
如需更詳細(xì)的電路原理圖或代碼示例, 若對(duì)以上說(shuō)明有不清楚之處或仍有其他疑問(wèn) 請(qǐng)與 逐高電子技術(shù)方案開(kāi)發(fā)部 sales11@zicoic.com 0755-88364040 聯(lián)絡(luò) 獲取官方開(kāi)發(fā)包。