一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Arduino Due的三相正弦波發(fā)生器的解析

454398 ? 來源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2019-11-20 17:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

步驟1:生成正弦數(shù)據(jù)數(shù)組

由于實(shí)時(shí)計(jì)算對(duì)CPU的要求很高,因此需要一個(gè)正弦數(shù)據(jù)數(shù)組以獲得更好的性能

uint32_t sin768 [] PROGMEM = 。..。

而x = [0:5375]; y = 127 + 127 *(sin(2 * pi/5376/*或您希望根據(jù)要求使用一些#*))

步驟2:?jiǎn)⒂貌⑿休敵?/p>

與Uno不同,Due具有有限的參考。但是,要基于Arduino Uno生成三相正弦波,首先,由于其MCLK低(16MHz,而Due是84MHz),因此性能不佳,第二,它的GPIO有限,可以產(chǎn)生最大2相輸出,您需要額外的模擬電路產(chǎn)生第三相(C = -AB)。

啟用GPIO的步驟主要是基于SAM3X的try and trial +無用數(shù)據(jù)表

PIOC-》 PIO_PER = 0xFFFFFFFE ;//PIO控制器PIO使能寄存器(請(qǐng)參閱ATMEL SAM3X數(shù)據(jù)表的p656)和http://arduino.cc/zh-CN/Hacking/PinMappingSAM3X、Arduino Due引腳33-41和44-51已啟用

PIOC-》 PIO_OER = 0xFFFFFFFE;//PIO控制器輸出使能寄存器,請(qǐng)參見ATMEL SAM3X數(shù)據(jù)手冊(cè)p657-》 PIO_OSR = 0xFFFFFFFE;//PIO控制器輸出狀態(tài)寄存器,請(qǐng)參閱ATMEL SAM3X數(shù)據(jù)表的p658

PIOC-》 PIO_OWER = 0xFFFFFFFE;//PIO輸出寫使能寄存器,請(qǐng)參閱ATMEL SAM3X數(shù)據(jù)表的p670

//PIOA-》 PIO_PDR = 0x30000000;//作為保險(xiǎn)是可選的,似乎并不影響性能,數(shù)字引腳10連接到PC29和PA28,數(shù)字引腳4連接到PC29和PA28,此處禁用禁用PIOA#28&29

步驟3:?jiǎn)⒂弥袛?/p>

為最大程度地發(fā)揮其性能,CPU負(fù)載應(yīng)盡可能低。但是,由于CPU引腳和Due引腳之間的非1to1對(duì)應(yīng)關(guān)系,需要進(jìn)行位操作。

您可以進(jìn)一步優(yōu)化算法,但空間非常有限。

void TC7_Handler(void)

{TC_GetStatus(TC2,1);

t = t%樣本;//使用t%samples而不是‘if’來避免t的溢出

phaseAInc =(preset * t)%5376;//使用%5376避免數(shù)組索引溢出

phaseBInc =(phaseAInc + 1792)%5376;

phaseCInc =(phaseAInc + 3584)%5376;

p_A = sin768 [phaseAInc] 《《1;//參考PIOC:PC1至PC8,對(duì)應(yīng)的Arduino Due引腳:引腳33-40,因此向左移1位

p_B = sin768 [phaseBInc] 《《12;//參考PIOC:PC12至PC19,對(duì)應(yīng)的Arduino Due引腳:引腳51-44,因此左移12位

p_C = sin768 [phaseCInc];//C相輸出使用PIOC:PC21,PC22,PC23,PC24,PC25,PC26,PC28和PC29,對(duì)應(yīng)的Arduino Due引腳:數(shù)字引腳:分別為9,8,7,6,5,4,3,10

p_C2 =(p_C&B11000000)《《22;//這會(huì)生成PC28和PC29

p_C3 =(p_C&B00111111)《《21;//這會(huì)生成PC21-PC26

p_C = p_C2 | p_C3;//這會(huì)產(chǎn)生C相的并行輸出

p_A = p_A | p_B | p_C;//32位輸出= A相(8位)| B相| C相

PIOC-》 PIO_ODSR = p_A;//輸出寄存器= p_A

t ++; }

第4步:R/2R DAC

構(gòu)建3x8bit R/2R DAC,在Google上加載參考。

步驟5:完整代碼

#define _BV(x)(1 《《(x));

uint32_t sin768 [] PROGMEM =/* x = [0:5375 ]。 y = 127 + 127 *(sin(2 * pi/5376))*/

uint32_t p_A,p_B,p_C,p_C2,p_C3;//A相B相C值-盡管輸出僅8位,但p_A和p_B值將被操作以生成新的32位值,以應(yīng)對(duì)32位PIOC輸出

uint16_t phaseAInc,phaseBInc ,phaseCInc,freq,freqNew; uint32_t間隔; uint16_t個(gè)樣本,預(yù)設(shè); uint32_t t = 0;

void setup(){

//并行輸出PIOC設(shè)置:Arduino Due引腳33-40被用作A相輸出,而44-51引腳則用于A相B輸出

PIOC-》 PIO_PER = 0xFFFFFFFE;//PIO控制器PIO使能寄存器(請(qǐng)參閱ATMEL SAM3X數(shù)據(jù)表的p656)和http://arduino.cc/zh-CN/Hacking/PinMappingSAM3X、Arduino Due引腳33-41和44-51已啟用

PIOC-》 PIO_OER = 0xFFFFFFFE;//PIO控制器輸出使能寄存器,請(qǐng)參閱ATMEL SAM3X數(shù)據(jù)表的p657

PIOC-》 PIO_OSR = 0xFFFFFFFE;//PIO控制器輸出狀態(tài)寄存器,請(qǐng)參閱ATMEL SAM3X數(shù)據(jù)表的p658

PIOC-》 PIO_OWER = 0xFFFFFFFE;//PIO輸出寫使能寄存器,請(qǐng)參閱ATMEL SAM3X數(shù)據(jù)表的p670

//PIOA-》 PIO_PDR = 0x30000000;//作為保險(xiǎn),是可選的,似乎不影響性能,數(shù)字引腳10連接到PC29和PA28,數(shù)字引腳4連接到PC29和PA28,此處禁用禁用PIOA#28和29//定時(shí)器設(shè)置,請(qǐng)參閱http ://arduino.cc/en/Hacking/PinMappingSAM3X,

pmc_set_writeprotect(false);//禁用電源管理控制寄存器的寫保護(hù)

pmc_enable_periph_clk(ID_TC7);//啟用外設(shè)時(shí)鐘時(shí)間計(jì)數(shù)器7

TC_Configure(/*時(shí)鐘*/TC2,/*通道*/1,TC_CMR_WAVE | TC_CMR_WAVSEL_UP_RC | TC_CMR_TCCLKS_TIMER_CLOCK1);//TC時(shí)鐘42MHz(時(shí)鐘,通道,比較模式設(shè)置)TC_SetRC(TC2,1,interval); TC_Start(TC2,1);

//在計(jì)時(shí)器TC2-》 TC_CHANNEL [1]上啟用計(jì)時(shí)器中斷。TC_IER= TC_IER_CPCS;//IER =中斷允許寄存器TC2-》 TC_CHANNEL [1] .TC_IDR =?TC_IER_CPCS;//IDR =中斷禁止寄存器

NVIC_EnableIRQ(TC7_IRQn);//在嵌套向量中斷控制器freq = 60中啟用中斷;//將頻率初始化為60Hz預(yù)設(shè)= 21;//數(shù)組索引增加21個(gè)樣本= 256;//輸出樣本256/周期間隔= 42000000/(頻率*樣本);//中斷計(jì)數(shù)TC_SetRC(TC2,1,interval);//啟動(dòng)TC Serial.begin(9600);//出于測(cè)試目的}

void checkFreq()

{freqNew = 20000;

if(freq == freqNew){}其他

{freq = freqNew;

if(freq》 20000){freq = 20000;/*最大頻率20kHz */};

,如果(freq 《1){freq = 1;/*最低頻率1Hz */};

如果(freq》 999){preset = 384;樣本= 14;}//對(duì)于頻率》 = 1kHz,每個(gè)周期14樣本

否則(freq》 499){preset = 84;樣本= 64;}//對(duì)于500 《=頻率《1000Hz,每個(gè)周期64個(gè)樣本,否則(freq》 99){preset = 42; samples = 128;}//對(duì)于100Hz 《= frequency 《500Hz,128個(gè)采樣/周期

else {preset = 21;樣本= 256;};//對(duì)于頻率《100hz,每個(gè)周期256個(gè)采樣

間隔= 42000000/(freq * samples); t = 0; TC_SetRC(TC2,1,間隔); }}

void loop(){

checkFreq();延遲(100); }

void TC7_Handler(void)

{TC_GetStatus(TC2,1);

t = t%樣本;//使用t%samples引起t phase的溢出AInc =(preset * t)%5376;//使用%5376避免數(shù)組索引溢出

phaseBInc =(phaseAInc + 1792)%5376;

phaseCInc =(phaseAInc + 3584)%5376;

p_A = sin768 [phaseAInc] 《《1;//參考PIOC:PC1至PC8,對(duì)應(yīng)的Arduino Due引腳:引腳33-40,因此向左移1位

p_B = sin768 [phaseBInc] 《《12;//參考PIOC:PC12至PC19,對(duì)應(yīng)的Arduino Due引腳:引腳51-44,因此左移12位

p_C = sin768 [phaseCInc];//C相輸出使用PIOC:PC21,PC22,PC23,PC24,PC25,PC26,PC28和PC29,對(duì)應(yīng)的Arduino Due引腳:數(shù)字引腳:分別為9,8,7,6,5,4,3,10

p_C2 =(p_C&B11000000)《《22;//這會(huì)生成PC28和PC29

p_C3 =(p_C&B00111111)《《21;//這將生成PC21-PC26//Serial.println(p_C3,BIN); p_C = p_C2 | p_C3;//這會(huì)產(chǎn)生C相的并行輸出

p_A = p_A | p_B | p_C;//32位輸出= A相(8位)| B相| C相////Serial.println(p_A》》21,BIN);//PIOC-》 PIO_ODSR = 0x37E00000;

PIOC-》 PIO_ODSR = p_A;//輸出寄存器= p_A t ++; }
責(zé)任編輯:wv

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 發(fā)生器
    +關(guān)注

    關(guān)注

    4

    文章

    1405

    瀏覽量

    62861
  • Arduino
    +關(guān)注

    關(guān)注

    190

    文章

    6498

    瀏覽量

    192206
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    TI 正弦波發(fā)生器電路

    該文檔介紹了德州儀器的一款正弦波發(fā)生器電路,其設(shè)計(jì)目標(biāo)為實(shí)現(xiàn)8V/V的交流增益、10kHz的振蕩頻率,采用±2.5V電源供電;電路通過四通道運(yùn)放TLV9064緩沖各RC濾波級(jí)以生成低失真正弦波
    的頭像 發(fā)表于 06-23 14:23 ?1424次閱讀
    TI <b class='flag-5'>正弦波</b><b class='flag-5'>發(fā)生器</b>電路

    IGBT正弦波調(diào)光的工作原理和優(yōu)勢(shì)

    IGBT正弦波調(diào)光是一種用于調(diào)節(jié)燈光亮度的設(shè)備,其工作原理主要基于IGBT的開關(guān)特性和對(duì)正弦波信號(hào)的控制。
    的頭像 發(fā)表于 04-11 15:47 ?1197次閱讀
    IGBT<b class='flag-5'>正弦波</b>調(diào)光<b class='flag-5'>器</b>的工作原理和優(yōu)勢(shì)

    在AFE5851外接一個(gè)正弦波發(fā)生器遇到的問題求解

    圖1 我在AFE5851外接一個(gè)正弦波發(fā)生器,頻率設(shè)置為1MHZ,VPP為1V,按AFE5851的AD轉(zhuǎn)換時(shí)間來算,這個(gè)頻率已能滿足要求,可是我在用FPGA中嵌入式邏輯分析儀觀測(cè)這個(gè)正弦波的時(shí)候
    發(fā)表于 02-14 07:49

    用DSP28335后接DAC7724產(chǎn)生三相正弦波信號(hào),隨負(fù)載加重DAC7724的輸出受到干擾怎么解決?

    我用DSP28335后接DAC7724產(chǎn)生三相正弦波信號(hào),作為三相逆變器的電壓基準(zhǔn)。逆變器輕載的時(shí)候運(yùn)行正常,隨負(fù)載加重DAC7724的輸出受到干擾,出現(xiàn)一段負(fù)的最大值,如圖所示。B、C
    發(fā)表于 01-15 08:27

    AN-2199003:ADSP-21990:生成三相正弦波PWM模式

    電子發(fā)燒友網(wǎng)站提供《AN-2199003:ADSP-21990:生成三相正弦波PWM模式.pdf》資料免費(fèi)下載
    發(fā)表于 01-14 15:17 ?0次下載
    AN-2199003:ADSP-21990:生成<b class='flag-5'>三相</b><b class='flag-5'>正弦波</b>PWM模式

    ADS1254信號(hào)發(fā)生器輸出100Hz正弦波,顯示的波形中存在有規(guī)律的問題,怎么處理?

    ,將讀取的數(shù)據(jù)直接在LabVIEW上顯示,信號(hào)發(fā)生器輸出直接接到ADS1254的輸入端,幅度0.5V~1.5V,問題如下: 1、信號(hào)發(fā)生器輸出100Hz正弦波,顯示的波形中存在有規(guī)律的問題: 2、信號(hào)
    發(fā)表于 01-13 07:48

    MS37549/MS37545——三相無感正弦波 BLDC 驅(qū)動(dòng)

    MS37549 和 MS37545 是無感三相直流電機(jī)預(yù)驅(qū)芯片,采用正弦波驅(qū)動(dòng)方式,具有低噪聲及低震動(dòng)的特點(diǎn)。提供方案和FAE支持,歡迎大家來咨詢了解
    的頭像 發(fā)表于 11-07 11:07 ?1432次閱讀
    MS37549/MS37545——<b class='flag-5'>三相</b>無感<b class='flag-5'>正弦波</b> BLDC 驅(qū)動(dòng)

    rc橋式正弦波振蕩電路屬于什么反饋電路

    RC橋式正弦波振蕩電路是一種常見的電子振蕩電路,它利用電阻(R)和電容(C)元件構(gòu)成的網(wǎng)絡(luò)來產(chǎn)生穩(wěn)定的正弦波輸出。這種電路廣泛應(yīng)用于信號(hào)發(fā)生器、通信設(shè)備和測(cè)試儀器中。 1. 引言 在電子學(xué)中
    的頭像 發(fā)表于 10-09 17:02 ?1483次閱讀

    正弦波振蕩分類及特點(diǎn)

    選頻元件的振蕩。 分類 :根據(jù)電路結(jié)構(gòu)的不同,LC振蕩又可分為變壓耦合LC振蕩、電感點(diǎn)式振蕩
    的頭像 發(fā)表于 10-09 16:26 ?1292次閱讀

    正弦波產(chǎn)生電路有哪幾種

    : 1. RC正弦波振蕩 RC正弦波振蕩是一種利用電阻(R)和電容(C)元件構(gòu)建的振蕩。它能夠產(chǎn)生接近
    的頭像 發(fā)表于 10-09 16:24 ?1768次閱讀

    正弦波控制速度怎么解碼

    高效率和良好的動(dòng)態(tài)響應(yīng)。 1. 正弦波控制的基本原理 正弦波控制通過生成三相正弦波電壓來驅(qū)動(dòng)
    的頭像 發(fā)表于 09-30 15:02 ?2170次閱讀

    用LM324做了一個(gè)RC震蕩正弦波發(fā)生器,使用單電源供電時(shí)波形完全是雜亂的 ,怎么解決?

    用LM324做了一個(gè)RC震蕩正弦波發(fā)生器為什么我使用雙電源供電(+15v-15v)可以產(chǎn)生正弦波 ,當(dāng)使用單電源(+12v)供電時(shí)波形完全是雜亂的請(qǐng)教如果用單電源供電應(yīng)該如何對(duì)電路進(jìn)行處理?謝謝
    發(fā)表于 09-10 07:12

    為什么用函數(shù)發(fā)生器輸出的正弦波在示波器上進(jìn)行FFT顯示的頻譜中還有高次諧波?

    為什么用函數(shù)發(fā)生器輸出的正弦波在示波器上進(jìn)行FFT顯示的頻譜中還有高次諧波?請(qǐng)幫忙解答,謝謝!
    發(fā)表于 08-29 06:16

    用tina-ti仿真文氏正弦波發(fā)生器沒有成功是哪里出了問題?

    大家好,我用tina-ti仿真文氏正弦波發(fā)生器沒有成功,電路圖如下。我實(shí)際搭了電路是有交流輸出的,只是正弦波不標(biāo)準(zhǔn),請(qǐng)問是哪里出了問題?
    發(fā)表于 08-21 08:14

    TINA軟件函數(shù)發(fā)生器產(chǎn)生正弦波,頻率達(dá)到1MEG后,在提升就會(huì)報(bào)錯(cuò)怎么解決?

    TINA軟件函數(shù)發(fā)生器產(chǎn)生正弦波,頻率達(dá)到1MEG后,在提升就會(huì)報(bào)錯(cuò):0Hz-超出范圍!
    發(fā)表于 08-15 06:43