色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

基于Arduino Due的三相正弦波發生器的解析

454398 ? 來源:網絡整理 ? 作者:網絡整理 ? 2019-11-20 17:36 ? 次閱讀

步驟1:生成正弦數據數組

由于實時計算對CPU的要求很高,因此需要一個正弦數據數組以獲得更好的性能

uint32_t sin768 [] PROGMEM = 。..。

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

步驟2:啟用并行輸出

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

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

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

PIOC-》 PIO_OER = 0xFFFFFFFE;//PIO控制器輸出使能寄存器,請參見ATMEL SAM3X數據手冊p657-》 PIO_OSR = 0xFFFFFFFE;//PIO控制器輸出狀態寄存器,請參閱ATMEL SAM3X數據表的p658

PIOC-》 PIO_OWER = 0xFFFFFFFE;//PIO輸出寫使能寄存器,請參閱ATMEL SAM3X數據表的p670

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

步驟3:啟用中斷

為最大程度地發揮其性能,CPU負載應盡可能低。但是,由于CPU引腳和Due引腳之間的非1to1對應關系,需要進行位操作。

您可以進一步優化算法,但空間非常有限。

void TC7_Handler(void)

{TC_GetStatus(TC2,1);

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

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

phaseBInc =(phaseAInc + 1792)%5376;

phaseCInc =(phaseAInc + 3584)%5376;

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

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

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

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

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

p_C = p_C2 | p_C3;//這會產生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

構建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位值,以應對32位PIOC輸出

uint16_t phaseAInc,phaseBInc ,phaseCInc,freq,freqNew; uint32_t間隔; uint16_t個樣本,預設; uint32_t t = 0;

void setup(){

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

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

PIOC-》 PIO_OER = 0xFFFFFFFE;//PIO控制器輸出使能寄存器,請參閱ATMEL SAM3X數據表的p657

PIOC-》 PIO_OSR = 0xFFFFFFFE;//PIO控制器輸出狀態寄存器,請參閱ATMEL SAM3X數據表的p658

PIOC-》 PIO_OWER = 0xFFFFFFFE;//PIO輸出寫使能寄存器,請參閱ATMEL SAM3X數據表的p670

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

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

pmc_enable_periph_clk(ID_TC7);//啟用外設時鐘時間計數器7

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

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

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

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;}//對于頻率》 = 1kHz,每個周期14樣本

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

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

間隔= 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避免數組索引溢出

phaseBInc =(phaseAInc + 1792)%5376;

phaseCInc =(phaseAInc + 3584)%5376;

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

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

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

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

p_C3 =(p_C&B00111111)《《21;//這將生成PC21-PC26//Serial.println(p_C3,BIN); p_C = p_C2 | p_C3;//這會產生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 ++; }
責任編輯:wv

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 發生器
    +關注

    關注

    4

    文章

    1368

    瀏覽量

    61677
  • Arduino
    +關注

    關注

    188

    文章

    6468

    瀏覽量

    186956
收藏 人收藏

    評論

    相關推薦

    MS37549/MS37545——三相無感正弦波 BLDC 驅動

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

    正弦波控制速度怎么解碼

    高效率和良好的動態響應。 1. 正弦波控制的基本原理 正弦波控制通過生成三相正弦波電壓來驅動
    的頭像 發表于 09-30 15:02 ?652次閱讀

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

    用LM324做了一個RC震蕩正弦波發生器為什么我使用雙電源供電(+15v-15v)可以產生正弦波 ,當使用單電源(+12v)供電時波形完全是雜亂的請教如果用單電源供電應該如何對電路進行處理?謝謝
    發表于 09-10 07:12

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

    大家好,我用tina-ti仿真文氏正弦波發生器沒有成功,電路圖如下。我實際搭了電路是有交流輸出的,只是正弦波不標準,請問是哪里出了問題?
    發表于 08-21 08:14

    數字信號發生器能夠提供哪些波形信號

    數字信號發生器(Digital Signal Generator,簡稱DSG)是一種能夠產生各種波形信號的電子設備。它廣泛應用于通信、電子測量、自動控制等領域。本文將詳細介紹數字信號發生器能夠提供
    的頭像 發表于 06-03 14:12 ?1189次閱讀

    信號發生器頻率怎么調

    信號發生器的類型 在調整信號發生器的頻率之前,首先需要了解所使用的信號發生器的類型。常見的信號發生器類型包括: 正弦波
    的頭像 發表于 06-03 11:06 ?1787次閱讀

    信號發生器的使用方法 信號發生器的幅值是有效值嗎

    表示方式以及相關概念。 一、信號發生器的分類 函數信號發生器 :產生正弦波、方波、等基本波形。 任意波形
    的頭像 發表于 06-03 10:56 ?2925次閱讀

    為什么我這個濾波濾不出來正弦波 而是

    本人新手一位 用FilterPro設計了一個低通濾波,想要把方波濾為正弦波 但是為什么濾出來的是呀 而且哪位大神可以告訴我Mulitisim的信號
    發表于 05-09 17:13

    信號發生器有哪些用途

    信號發生器是通信與電子測試中不可或缺的工具。它可以產生各種波形(如正弦波、方波、等)和頻率的信號,用于測試電子設備的性能、調試電路、校準儀器等。
    的頭像 發表于 05-07 15:27 ?1727次閱讀

    函數信號發生器一般能產生什么信號

    ,包括正弦波、方波、、鋸齒、脈沖以及任意波形。通過調整儀器上的參數,可以控制信號的頻率、振幅、相位以及其他特征。以下是函數信號
    的頭像 發表于 02-23 14:28 ?1158次閱讀

    深入了解信號發生器類型及特點

    信號發生器是一種能夠產生多種波形,如、方波、正弦波等波形的電路。
    的頭像 發表于 02-07 10:42 ?895次閱讀
    深入了解信號<b class='flag-5'>發生器</b>類型及特點

    使用TC275的載波發生器,載波發生器輸出的正弦波發生相位移動的原因?

    我們在使用TC275的載波發生器(29.9.1 Carrier Signal Generation)時遇到了一些問題,我們發現載波發生器輸出的正弦波(配置頻率為16KHZ)會發生相位移
    發表于 02-04 08:59

    正弦波和方波晶振能否互相替代?

    和應用。 一、正弦波晶振 正弦波晶振產生的是連續且平滑的正弦波形狀。它可以通過正弦波發生器來實現,通常基于RC或LC振蕩電路。
    的頭像 發表于 01-31 09:11 ?1198次閱讀

    方波 正弦波 信號是如何產生的?

    方波、正弦波信號的產生方式各有不同,下面分別進行詳細闡述
    的頭像 發表于 01-29 17:27 ?6937次閱讀

    正弦波逆變器和修正弦波逆變器的區別

    正弦波逆變器和修正弦波逆變器的區別 純正弦波逆變器和修正正弦波逆變器是兩種常見的逆變器類型,它們在輸出電流波形和電氣性能方面存在差異。下面詳細介紹這兩種逆變器的區別。 純
    的頭像 發表于 01-23 14:58 ?7401次閱讀
    主站蜘蛛池模板: 夜色伊甸园| 亚洲欧美强伦一区二区另类| 色AV色婷婷97人妻久久久| 日本高清不卡码无码v亚洲| 色裕插插插影视| 午夜无码片在线观看影院| 亚洲精品色情婷婷在线播放 | 久久视热频国只有精品 | 国产午夜理论片YY8840Y| 九九大香尹人视频免费| 老头操美女| 日本一区不卡在线播放视频免费| 撕烂衣服扒开胸罩揉爆胸| 亚洲精品久久国产高清| 最近在线视频观看2018免费| 波多野结衣网站www| 国产精品路线1路线2路线| 久久久久久亚洲精品影院| 欧美在线看费视频在线| 忘忧草在线影院WWW日本动漫| 夜夜精品视频一区二区| bl被教练啪到哭H玉势| 国产久青青青青在线观看| 久久深夜视频| 色尼姑久久超碰在线| 亚洲中文字幕永久在线| YELLOW视频直播在线观看高清 | xxx日本hd| 护士被老头边摸边吃奶的视频| 蜜芽最新域名解析网站| 婷婷激情综合色五月久久竹菊影视| 一本之道高清在线观看免费| 啊…嗯啊好深男男高h文| 国自产精品手机在线视频| 女人十八毛片水真多啊| 亚洲AV色香蕉一区二区9255| 97国产视频| 国产久久热99视频| 漂亮的保姆3中文版完整版 | 中国老太婆xxxxx| 国产传媒麻豆剧精品AV|