91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

【GD32L233C-START】DAC輸出(正弦波、鋸齒波、方波)

西安樂(lè)拓精益 ? 2022-07-11 09:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.介紹
GD32L233C采用的是一款M23的內(nèi)核。這個(gè)芯片據(jù)說(shuō)功耗非常的低,低到什么程度呢?等后面我們?cè)龠M(jìn)行測(cè)試,今天我們主要來(lái)測(cè)試GD32L233C-STARTDAC,既然要測(cè)試DAC,示波器是不可少的,這個(gè)實(shí)驗(yàn)在家做,然而LZ家里并沒(méi)有示波器,不過(guò)最近看到一款好東西,LOTO虛擬示波器,看過(guò)這款示波器的參數(shù),還不錯(cuò)。所以入手了一款,測(cè)量芯片輸出的DAC應(yīng)該沒(méi)什么問(wèn)題,接下來(lái)開(kāi)始測(cè)試吧。
2.設(shè)計(jì)
首先需要輸出讓芯片輸出DAC,而且還需要輸出波形,這個(gè)稍微費(fèi)點(diǎn)功夫,之前在GD32L233C-START移植了RTThread,現(xiàn)在在這個(gè)代碼的基礎(chǔ)上添加DAC的輸出程序,這個(gè)程序移植了其他網(wǎng)友的,代碼我也貼出來(lái),經(jīng)過(guò)測(cè)試,代碼沒(méi)有啥問(wèn)題:
比較麻煩的是正弦波的代碼:

const float sinus_I_quarter[91] =
{
0.0000, 0.0175, 0.0349, 0.0523, 0.0698, 0.0872, 0.1045, 0.1219, 0.1392, 0.1564, // 00 .. 09
0.1736, 0.1908, 0.2079, 0.2250, 0.2419, 0.2588, 0.2756, 0.2924, 0.3090, 0.3256, // 10 .. 19
0.3420, 0.3584, 0.3746, 0.3907, 0.4067, 0.4226, 0.4384, 0.4540, 0.4695, 0.4848, // 20 .. 29
0.5000, 0.5150, 0.5299, 0.5446, 0.5592, 0.5736, 0.5878, 0.6018, 0.6157, 0.6293, // 30 .. 39
0.6428, 0.6561, 0.6691, 0.6820, 0.6947, 0.7071, 0.7193, 0.7314, 0.7431, 0.7547, // 40 .. 49
0.7660, 0.7771, 0.7880, 0.7986, 0.8090, 0.8192, 0.8290, 0.8387, 0.8480, 0.8572, // 50 .. 59
0.8660, 0.8746, 0.8829, 0.8910, 0.8988, 0.9063, 0.9135, 0.9205, 0.9272, 0.9336, // 60 .. 69
0.9397, 0.9455, 0.9511, 0.9563, 0.9613, 0.9659, 0.9703, 0.9744, 0.9781, 0.9816, // 70 .. 79
0.9848, 0.9877, 0.9903, 0.9925, 0.9945, 0.9962, 0.9976, 0.9986, 0.9994, 0.9998, // 80 .. 89
1.0000 // 90
};

#define CIRCLE_QUARTER_1 1
#define CIRCLE_QUARTER_2 2
#define CIRCLE_QUARTER_3 3
#define CIRCLE_QUARTER_4 4
float sinus_lookup (unsigned int angle)
{
float sin_value;
unsigned int circle_quarter;
// correct angles outside the accepted angle range into 0 .. 359
if (angle > 359u)
angle = angle % 360u;
circle_quarter = 1 + (angle / 90u);
switch (circle_quarter)
{
case CIRCLE_QUARTER_1: // 00 .. 89
sin_value = sinus_I_quarter[angle];
break;
case CIRCLE_QUARTER_2: // 90 .. 179
sin_value = sinus_I_quarter[180 - angle];
break;
case CIRCLE_QUARTER_3: // 180 .. 269
sin_value = -sinus_I_quarter[angle - 180];
break;
case CIRCLE_QUARTER_4: // 270 .. 359
sin_value = -sinus_I_quarter[360 - angle];
break;
}
return sin_value;
}

void plot_sin(uint32_t f, uint32_t delta_f)
{
/* 定時(shí)周期為T(mén)=1/delta_f, f=1/(pMax*T) */
static uint32_t point = 0;
uint32_t pMAX = delta_f/f;
uint32_t value = 0;
if (point++ > pMAX) point = 0;
value = (uint32_t)((sinus_lookup(360*point/pMAX)+1)*10000)*2047/10000;
dac_software_trigger_enable();
dac_data_set(DAC_ALIGN_12B_R, value);
}

接下來(lái)是鋸齒波和方波的代碼,這兩個(gè)代碼比較簡(jiǎn)單:

void plot_triangle(uint32_t f, uint32_t delta_f)
{
/* 定時(shí)周期為T(mén)=1/delta_f, f=1/(pMax*T) */
static uint32_t point = 0;
uint32_t pMAX = delta_f/f;
uint32_t pMAX2 = pMAX/2;
uint32_t value = 0;
if (++point > pMAX) point = 0;
if (point < pMAX2)
{
value = point * 4095 / pMAX2;
}
else
{
value = (pMAX - point) * 4095 / pMAX2;
}
dac_software_trigger_enable();
dac_data_set(DAC_ALIGN_12B_R, value);
}
void plot_square(uint32_t f, uint32_t delta_f)
{
/* 定時(shí)周期為T(mén)=1/delta_f, f=1/(pMax*T) */
static uint32_t point = 0;
uint32_t pMAX = delta_f/f;
uint32_t pMAX2 = pMAX/2;
uint32_t value = 0;
if (++point > pMAX) point = 0;
if (point < pMAX2)
{
value = 0;
}
else
{
value = 0xFFF;
}
dac_software_trigger_enable();
dac_data_set(DAC_ALIGN_12B_R, value);
}

最后需要開(kāi)啟一個(gè)定時(shí)器,還有DAC的初始化:

void timerx_init(uint32_t timer_periph, uint16_t period, uint16_t prescaler)
{
/* TIMER1 configuration: input capture mode -------------------
the external signal is connected to TIMER1 CH0 pin (PA0)
the rising edge is used as active edge
the TIMER1 CH0CV is used to compute the frequency value
------------------------------------------------------------ */
timer_parameter_struct timer_initpara;
timer_ic_parameter_struct timer_icinitpara;

/* enable the peripherals clock */
rcu_periph_clock_enable(RCU_TIMER2);

/* deinit a TIMER */
timer_deinit(timer_periph);
/* initialize TIMER init parameter struct */
timer_struct_para_init(&timer_initpara);
/* TIMER1 configuration */
timer_initpara.prescaler = prescaler;
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
timer_initpara.counterdirection = TIMER_COUNTER_UP;
timer_initpara.period = period;
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
timer_init(timer_periph, &timer_initpara);

/* TIMER1 CH0 input capture configuration */
timer_icinitpara.icpolarity= TIMER_IC_POLARITY_RISING;
timer_icinitpara.icselection = TIMER_IC_SELECTION_DIRECTTI;
timer_icinitpara.icprescaler = TIMER_IC_PSC_DIV1;
timer_icinitpara.icfilter = 0x00;
timer_input_capture_config(timer_periph, TIMER_CH_0, &timer_icinitpara);

/* auto-reload preload enable */
timer_auto_reload_shadow_enable(timer_periph);
/* clear channel 0 interrupt bit */
timer_interrupt_flag_clear(timer_periph, TIMER_INT_CH0);
/* channel 0 interrupt enable */
timer_interrupt_enable(timer_periph, TIMER_INT_CH0);

/* enable a TIMER */
timer_enable(timer_periph);
}

#define DAC_WAVE_TEST

void timer2_init(void)
{
timer_deinit(TIMER2);
rcu_periph_clock_enable(RCU_TIMER2);
#ifdef DAC_WAVE_TEST
timerx_init(TIMER2, 639, 9);// 100KHz 0.1ms
#endif
timer_interrupt_enable(TIMER2, TIMER_INT_UP);
nvic_irq_enable(TIMER2_IRQn, 3);
}

void TIMER2_IRQHandler(void)
{
#ifdef DAC_WAVE_TEST
plot_sin(100, 10000); //正弦波
//plot_triangle(1, 10000);//鋸齒波
//plot_square(1, 10000); //方波
#endif
timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_UP);
}

void dac1_init(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_DAC);
gpio_mode_set(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_4);
dac_deinit();
/* software trigger */
dac_trigger_enable();
dac_trigger_source_config(DAC_TRIGGER_SOFTWARE);
/* no noise wave */
dac_wave_mode_config(DAC_WAVE_DISABLE);
/* noise wave - triangle */
//dac_wave_mode_config(DAC_WAVE_MODE_TRIANGLE);
//dac_triangle_noise_config(DAC_TRIANGLE_AMPLITUDE_4095);
/* noise wave - lfsr */
//dac_wave_mode_config(DAC_WAVE_MODE_LFSR);
//dac_lfsr_noise_config(DAC_LFSR_BITS11_0);
dac_output_buffer_enable();
/* enable DAC and set data */
dac_enable();
dac_software_trigger_enable();
dac_data_set(DAC_ALIGN_12B_R, 0);
}

這樣就可以輸出正弦波、鋸齒波和方波了。
3.波形測(cè)量
接下來(lái)我們來(lái)看一下輸出的波形是否符合要求,首先需要將【GD32L233C-START】開(kāi)發(fā)板連接LOTO示波器,分別連接GND和PA4管教,連接效果圖如下圖1所示。

pYYBAGLLgA-ALleqAAEijK3TbPg311.png

圖1


然后讓DAC輸出正弦波,看一下波形如何。

poYBAGLLgA-ACO87AACyN65vJzA238.png

圖2


從上圖2中可以看到,一個(gè)周期大約在10ms,所以正弦波的周期為100Hz,輸出還是聽(tīng)精準(zhǔn)的。
然后輸出鋸齒波看看波形如何。

poYBAGLLgA-AP8vpAACyQLQS5Hk395.png

圖3


從上圖3可以得出,鋸齒波的波形頻率為1Hz。
最后我們來(lái)看看方波的波形圖如何。

pYYBAGLLgA-AUNobAACvY54PfmY014.png

圖4


從上圖4可以看到,方波的波形頻率為1Hz。
從上面波形可以得出,【GD32L233C-START】的定時(shí)器比較精準(zhǔn),DAC的輸出值也比較穩(wěn)定,性能還是不錯(cuò)的!
4.總結(jié)
剛?cè)胧值腖OTO示波器還不錯(cuò),測(cè)量的精度挺高的,不過(guò)還有好多設(shè)置沒(méi)弄明白,等后續(xù)多琢磨琢磨。做電子的示波器是必不可少的,我先替你們測(cè)試測(cè)試這個(gè)示波器如何。
GD32L233C是新出來(lái)的芯片,整體功能還需要多進(jìn)行測(cè)試,它最突出的低功耗后續(xù)要好好測(cè)量一下,這次就先到這里了。

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

    關(guān)注

    113

    文章

    7075

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    基于STM32F103驅(qū)動(dòng)AD9833模塊 DDS信號(hào)發(fā)生器輸出正弦波/三角/方波可編程信號(hào)

    AD9833是一款低功耗可編程波形發(fā)生器,能輸出正弦波、三角方波,頻率范圍為1Hz-9MHz,采用SPI串行通信。具有28位頻率寄存器和12位相位寄存器,可通過(guò)公式計(jì)算
    的頭像 發(fā)表于 01-10 10:30 ?2115次閱讀
    基于STM32F103驅(qū)動(dòng)AD9833模塊 DDS信號(hào)發(fā)生器<b class='flag-5'>輸出</b><b class='flag-5'>正弦波</b>/三角<b class='flag-5'>波</b>/<b class='flag-5'>方波</b>可編程信號(hào)

    晶振的輸出波形:TTL、CMOS、LVPECL、LVDS和正弦波

    晶振(XO)輸出波形(Output Type)是與封裝尺寸一樣重要的一個(gè)技術(shù)指標(biāo),這些輸出波形可簡(jiǎn)單歸為兩種:正弦波、方波。
    的頭像 發(fā)表于 11-21 15:37 ?1.1w次閱讀
    晶振的<b class='flag-5'>輸出</b>波形:TTL、CMOS、LVPECL、LVDS和<b class='flag-5'>正弦波</b>

    普源DG1022Z信號(hào)發(fā)生器正弦波頻率調(diào)節(jié)指南

    普源DG1022Z信號(hào)發(fā)生器作為一款高性能的雙通道波形發(fā)生器,可靈活輸出正弦波、方波、三角等多種波形,廣泛應(yīng)用于電子測(cè)試、科研實(shí)驗(yàn)及教學(xué)場(chǎng)景。本文將詳細(xì)介紹如何通過(guò)該設(shè)備生成并調(diào)節(jié)
    的頭像 發(fā)表于 10-14 16:53 ?798次閱讀
    普源DG1022Z信號(hào)發(fā)生器<b class='flag-5'>正弦波</b>頻率調(diào)節(jié)指南

    經(jīng)典1000W純正弦波逆變器原理圖資料

    經(jīng)典1000W純正弦波逆變器原理圖
    發(fā)表于 10-11 15:32 ?21次下載

    信號(hào)發(fā)生器產(chǎn)生正弦波的頻率精準(zhǔn)調(diào)節(jié)方法

    與相位累加器。 特點(diǎn):頻率分辨率高(可達(dá)微赫茲級(jí))、相位連續(xù)、易于程控,適用于精密測(cè)試場(chǎng)景。 2. 高速數(shù)模轉(zhuǎn)換(DAC)與濾波 將離散的數(shù)字信號(hào)轉(zhuǎn)換為模擬波形,通過(guò)低通濾波器平滑輸出正弦波。 關(guān)鍵參數(shù):
    的頭像 發(fā)表于 08-27 17:49 ?1016次閱讀
    信號(hào)發(fā)生器產(chǎn)生<b class='flag-5'>正弦波</b>的頻率精準(zhǔn)調(diào)節(jié)方法

    正弦波逆變器的工作原理與控制方式

    介紹了采用Boost PWM DC/DC變換器的正弦波逆變器的工作原理與控制方式,這是一種新型的正弦波逆變器。 純分享帖,點(diǎn)擊下方附件免費(fèi)獲取完整資料~~~ 內(nèi)容有幫助可以關(guān)注、點(diǎn)贊、評(píng)論支持一下
    發(fā)表于 07-23 13:22

    磁性元件變革:告別正弦波激勵(lì)源,擁抱方波

    扮演著極為重要的角色,它貫穿于整個(gè)磁特性研究的諸多環(huán)節(jié)。 本文將結(jié)合福州大學(xué)汪晶慧教授的公開(kāi)演講內(nèi)容,深入剖析以正弦波為標(biāo)準(zhǔn)時(shí)在測(cè)量與計(jì)算過(guò)程中遭遇的重重挑戰(zhàn),同時(shí)詳細(xì)闡述引入方波作為標(biāo)準(zhǔn)后為解決這些難題所帶
    的頭像 發(fā)表于 07-10 15:25 ?785次閱讀
    磁性元件變革:告別<b class='flag-5'>正弦波</b>激勵(lì)源,擁抱<b class='flag-5'>方波</b>

    無(wú)刷直流電機(jī)方波正弦波復(fù)合驅(qū)動(dòng)器設(shè)計(jì)

    摘要:針對(duì)無(wú)刷直流電機(jī)方波驅(qū)動(dòng)出力大,正弦波驅(qū)動(dòng)轉(zhuǎn)矩脈動(dòng)和噪聲小的特點(diǎn),設(shè)計(jì)了基于霍耳傳感器信號(hào)的無(wú)刷直流電機(jī)方波正弦波復(fù)合驅(qū)動(dòng)器。在不改動(dòng)硬件電路的前提下,利用軟件編程實(shí)現(xiàn)了無(wú)刷直
    發(fā)表于 06-27 16:39

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

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

    第二十六章 DAC——輸出正弦波

    本文介紹了W55MH32的DAC模塊,其可配置8位或12位分辨率。兩通道。詳解功能框圖、參考電壓等,還通過(guò)實(shí)驗(yàn)展示用定時(shí)器觸發(fā)、DMA傳輸實(shí)現(xiàn)雙聲道正弦波輸出,配置含GPIO、DAC
    的頭像 發(fā)表于 06-20 14:06 ?1291次閱讀
    第二十六章 <b class='flag-5'>DAC</b>——<b class='flag-5'>輸出</b><b class='flag-5'>正弦波</b>

    實(shí)用電源——正弦波逆變器

    資料全面詳細(xì)地介紹了正弦波逆變器技術(shù),闡述正弦波逆變器發(fā)展過(guò)程中各階段典型逆變方式的工作原理,以及典型逆變器的工作過(guò)程。 主要內(nèi)容包括:多重疊加式逆變器,如電壓型電流型逆變器的多重疊加,PWM
    發(fā)表于 06-11 16:19

    基于C51單片機(jī)使用DAC0832生成正弦波

    請(qǐng)問(wèn)各位為什么并沒(méi)有正弦波輸出呢?問(wèn)題出在哪里呢?為什么連一點(diǎn)波形都沒(méi)有呢,已經(jīng)試著調(diào)各個(gè)xy軸了,一點(diǎn)波形都沒(méi)有
    發(fā)表于 04-22 15:29

    正弦波經(jīng)運(yùn)放后變成三角是什么原因?不像是壓擺率的問(wèn)題

    本帖最后由 王小佳6565 于 2025-4-18 09:36 編輯 正弦波經(jīng)運(yùn)放后變成三角了,如圖是我的電路圖,我測(cè)量的是C2兩端的電壓,我算了我的壓擺率需求2*π*100hz*10v
    發(fā)表于 04-17 20:29

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

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

    直流無(wú)刷電機(jī)SPWM正弦波控制原理(可下載)

    等問(wèn)題,在一些對(duì)噪聲有要求的應(yīng)用領(lǐng)域存在局限性。針對(duì)這些應(yīng)用,采用正弦波控制 可以很好的解決這個(gè)問(wèn)題二、直流無(wú)刷電機(jī)的正弦波控制簡(jiǎn)介直流無(wú)刷電機(jī)的正弦波控制即通過(guò)
    發(fā)表于 03-28 14:19 ?7次下載