[STM32] Utilisez la conversion numérique-analogique DAC pour obtenir une forme d'onde d'amour

[STM32] Utilisez la conversion numérique-analogique DAC pour obtenir une forme d'onde d'amour


Préface

En raison de la nécessité d'utiliser un oscilloscope pour détecter la forme d'onde souhaitée dans des travaux récents, je me demande si je peux utiliser l'oscilloscope pour afficher la forme d'onde d'amour.
Après avoir vérifié les données, l'oscilloscope peut non seulement afficher la forme d'onde d'amour, mais aussi chanter et danser (recherche par mot-clé oscilloscope + Bad Apple à la station B).
Ce qui suit décrit l'une des méthodes utilisant la fonction de conversion numérique-analogique du DAC STM32 pour afficher la forme d'onde d'amour.


1. Présentation du CAD

Le module de conversion numérique / analogique (DAC) est un convertisseur numérique / analogique d'entrée et de sortie numérique 12 bits. Le DAC peut être configuré en mode 8 bits ou 12 bits, et il peut également être utilisé avec un contrôleur DMA. Un convertisseur numérique-analogique typique convertit un signal numérique représentant un certain rapport de tension en un signal analogique. Pour plus de détails, reportez-vous au «Manuel de référence chinois STM32 V10» -Chapitre 12 Conversion numérique-analogique DAC.

Deux, processus de configuration

Pas beaucoup de bêtises, il suffit de poster le code.

Le code dac.c est le suivant (exemple):

#include "dac.h"

void Dac1_Init(void)
{
    
    
	GPIO_InitTypeDef GPIO_InitStructure;
	DAC_InitTypeDef DAC_InitStructure;
	/*使能时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	DAC_InitStructure.DAC_Trigger= DAC_Trigger_None; //不使用触发功能
	DAC_InitStructure.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生
	DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;
	DAC_InitStructure.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;//关DAC1输出缓存
	DAC_Init(DAC_Channel_1,&DAC_InitStructure);  //初始化 DAC 通道 1
	
	DAC_Cmd(DAC_Channel_1,ENABLE);//使能 DAC1
	DAC_SetChannel1Data(DAC_Align_12b_R,0);//12位右对齐,设置DAC初始值
}
 
//设置通道 1 输出电压
//vol:0~3300,代表 0~3.3V
void Dac1_Set_Vol(u16 vol)
{
    
    
	float temp = vol;
	temp /= 1000;
	temp = temp * 4096 / 3.3;
	DAC_SetChannel1Data(DAC_Align_12b_R,temp);//12位右对齐设置DAC值
}

Le code dac.h est le suivant (exemple):

#ifndef _DAC_H_
#define _DAC_H_
#include "stm32f10x.h"

void Dac1_Init(void);
void Dac1_Set_Vol(u16 vol);

#endif

Le code main.c est le suivant (exemple):

#include "math.h"
#include "dac.h"	
#include "delay.h"

int main()
{
    
       
	u8 t = 0;
	double Fx1,Fx2,Fx3,Fx4,x = 1.8165;
	Dac1_Init();
	Delay_Init();
	while(1)
	{
    
    
		Fx1 = pow(x,0.6666);
		Fx2 = sqrt(3.3 - pow(x,2));
		Fx3 = sin(31.41592 * x);
		Fx4 = (Fx1 + 0.9 * Fx2 * Fx3) * 900;
		Dac1_Set_Vol(Fx4 + 1100);//DAC输出函数
		if(t == 0)
		{
    
    
			x = x - 0.001;
		}
		else
		{
    
    
			x = x + 0.001;
		}
		if(x <= 0) t = 1;
		if(x == 1.8165)
		{
    
    
			t = 0;
			delay_ms(1000);
		}
	}
}

Trois, l'effet final

Affichage de l'oscilloscope:
Insérez la description de l'image ici

Pour résumer

Lorsque l'oscilloscope commence à montrer de l'amour, est-il temps de laisser l'oscilloscope battre une mauvaise pomme? ?
La fonction d'amour fait référence au maître UP de la station B: n'oubliez pas le MCU cœur d'origine.
Adresse vidéo: vidéo de la station B

Mon petit blanc, ne vaporisez pas si vous ne l'aimez pas!

Je suppose que tu aimes

Origine blog.csdn.net/qq_45562084/article/details/112430940
conseillé
Classement