Generador de onda senoidal 3 fases basado en Arduino Due (5 / 5 paso)

Paso 5: Código completo

#define _BV(x) (1 << (x));
sin768 de uint32_t [] PROGMEM = / * x = [0:5375]; y = 127+127*(sin(2*pi/5376)) * /

p_A uint32_t p_B, p_C, p_C2, p_C3; fase A fase valor de fase C B--aunque salida son 8bits, p_A y p_B valor será utilizado para generar un nuevo valor de 32 bits para cop con 32 bits salida PIOC

uint16_t phaseAInc, phaseBInc, phaseCInc, freq, freqNew; intervalo de uint32_t; uint16_t muestras, preestablecido; t de uint32_t = 0;

void setup() {}

URL de salida instalación PIOC: Arduino Due pin33-40 se emplea como fase A la salida al pin trabajo 44-51 para la salida de la fase B

PIOC -> PIO_PER = 0xFFFFFFFE; Controlador de PIO PIO habilitar registro (consulte p656 de ATMEL SAM3X hoja de datos) y http://arduino.cc/en/Hacking/PinMappingSAM3X, pin Arduino Due se habilitaron 33-41 y 44-51

PIOC -> PIO_OER = 0xFFFFFFFE; PIO control salida activar registro, consulte p657 de ATMEL SAM3X hoja de datos

PIOC -> PIO_OSR = 0xFFFFFFFE; Estado de la salida del controlador PIO registro, consulte p658 de ATMEL SAM3X hoja de datos

PIOC -> PIO_OWER = 0xFFFFFFFE; PIO salida escriba habilitar registro, consulte p670 de ATMEL SAM3X hoja de datos

PIOA -> PIO_PDR = 0x30000000; opcional como seguro, no parecen afectar al rendimiento, pin digital 10 Conecte a PC29 y PA28, pin digital 4 conectarse ambos PC29 y PA28, aquí para desactivar desactivar PIOA #28 y 29 de //timer de configuración, consulte el http://arduino.cc/en/Hacking/PinMappingSAM3X,

pmc_set_writeprotect(false); deshabilitar protección contra escritura de registros de Control de gestión de energía

pmc_enable_periph_clk(ID_TC7); activar el contador de tiempo de reloj periférico 7

TC_Configure (/ * reloj * / TC2, / * canal * / 1, TC_CMR_WAVE | TC_CMR_WAVSEL_UP_RC | TC_CMR_TCCLKS_TIMER_CLOCK1); TC del reloj 42MHz (reloj, canal, modo de comparar) TC_SetRC (TC2, 1, intervalo); TC_Start (TC2, 1);

habilitar interrupciones de temporizador del temporizador TC2 -> TC_CHANNEL [1]. TC_IER = TC_IER_CPCS; IER = interrupción habilitar registro TC2 -> TC_CHANNEL [1]. TC_IDR = ~ TC_IER_CPCS; IDR = registro de deshabilitar interrupciones

NVIC_EnableIRQ(TC7_IRQn); Habilitar la interrupción en el anidado vector interrupción regulador freq = 60; Inicialice la frecuencia como preajuste de 60Hz = 21; array, aumento del índice de 21 muestras = 256; intervalo de 256/ciclo de muestras de salida = 42000000/(freq*samples); interrupción cuenta TC_SetRC (TC2, 1, intervalo); iniciar Serial.begin(9600) de TC; para propósito de prueba}

void checkFreq()

{freqNew = 20000;

Si (freq == freqNew) {} else

{freq = freqNew;

Si (freq > 20000) {freq = 20000; / * máximo de frecuencia 20 kHz * /};

Si (freq < 1) {freq = 1; / * min frecuencia 1 Hz * /};

Si (freq > 999) {preset = 384; muestras = 14;} //for frecuencia > = 1kHz, 14 muestras para cada ciclo

else if (freq > 499) {preset = 84; muestras = 64;} //for 500 < = frecuencia < 1000Hz, 64 muestras para cada otro ciclo si (freq > 99) {preset = 42; muestras = 128;} //for 100Hz < = frecuencia < 500Hz, 128 muestras/ciclo

Else {preset = 21; muestras = 256;}; para frecuencia < 100hz, 256 muestras por ciclo

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

void loop() {}

checkFreq(); Delay(100); }

void TC7_Handler(void)

{TC_GetStatus(TC2,1);

t = muestras de % t; t % muestras avoild desbordamiento de phaseAInc t = (preset * t) % 5376; utilizar % 5376 para evitar desbordamiento de índice de matriz

phaseBInc = (phaseAInc + 1792) % 5376;

phaseCInc = (phaseAInc + 3584) % 5376;

p_A = sin768 [phaseAInc] << 1; Consulte PIOC: PC1 al PC8, pin Arduino Due correspondiente: pin 33-40, por lo tanto cambio izquierda de 1 dígito

p_B = sin768 [phaseBInc] << 12; Consulte PIOC: PC12 a PC19, pin Arduino Due correspondiente: pin 51-44, por lo tanto cambio izquierda 12 dígitos

p_C = sin768 [phaseCInc]; fase C salida empleado PIOC: PC21 PC22, PC23, PC24, PC25, PC26, PC28 y PC29, pin Arduino Due correspondiente: pin digital: 9,8,7,6,5,4,3,10, respectivamente

p_C2 = (p_C & B11000000) << 22; Esto genera PC28 y PC29

p_C3 = (p_C & B00111111) << 21; Esto genera PC26 PC21 / / Serial.println(p_C3,BIN); p_C = p_C2|p_C3; Esto genera salida en paralelo de fase C

p_A = p_A|p_B|p_C; salida de 32 bits = fase A (8 bits) |phase B|phase C //Serial.println (p_A >> 21, BIN); PIOC -> PIO_ODSR = 0x37E00000;

PIOC -> PIO_ODSR = p_A; registro de salida = p_A t ++; }

Artículos Relacionados

Generador de onda sinusoidal simple con Mini Pro

Generador de onda sinusoidal simple con Mini Pro

Este instructable muestra cómo para:1. programar Arduino Pro Mini (ATMega328P) con placa de Arduino Uno sin quitar el chip ATMega2. generar una onda senoidal pura con frecuencia fija y componentes mínimos.Descargo de responsabilidad: Código utilizado
0-40 Mhz, generador de onda sinusoidal para $25.

0-40 Mhz, generador de onda sinusoidal para $25.

Recientemente algunas placas muy baratos ($4-6) han ido llegando de china que contiene un chip conocido como el AD9850 que es un generador de onda sinusoidal de síntesis Digital directa.Con sólo 4 cables de control podemos controlar la Junta a través
Cómo hacer un generador de onda de sifón

Cómo hacer un generador de onda de sifón

por favor este Instructable y sígueme si te gusta todo :)Hice este proyecto con una persona que conocí en una pasantía de ciencia en la Fundación para la difusión del conocimiento científico. (Saad Ahmed)Por favor, como esta página:http://www.Faceboo
¿Generador de onda cuadrada de DIY

¿Generador de onda cuadrada de DIY

alguna vez se preguntó cómo un sintetizador analógico realmente genera el sonido? Con algunos componentes básicos y un IC de 7555, le mostraremos cómo hacer su propio generador de onda cuadrada, lo que permite crear synths pequeños pero poderoso y ve
Caja de medida de distancia basados en Arduino

Caja de medida de distancia basados en Arduino

Hola, en este proyecto les mostraré cómo construir su propia caja de medidor de distancia con Arduino uno y un sensor ultrasónico.Antes de comenzar, asegúrese de que usted tiene:Arduino unoSensor ultrasonido HC-SR04LCD 16 x 2Página oficial: http://ww
Directa Digital sintetizador basado en Arduino llano

Directa Digital sintetizador basado en Arduino llano

Microcontrolador se significa para controlar cosas y no para generar periódicosseñales - para esto proponen que usaríamos un hardware dedicado - algo así como Atmega328 y AD9850.Por otro lado esto podría ser un proyecto interesante - no muy útil, per
Visualizador de espectro de bi-color LED matriz Audio basados en Arduino

Visualizador de espectro de bi-color LED matriz Audio basados en Arduino

Después de que surgió con el kit del módulo de controlador de matriz de LED de Bi-color, hemos estado buscando de proyectos interesantes para trabajar con él.Está interesado en algunos de los proyectos que hemos puesto en instructables con este kit d
Basados en Arduino robot radar IR

Basados en Arduino robot radar IR

el prototipo de robot en este Instructable es mi segunda basados en Arduino "slumbot" que es un robot autónomo. Se adjunta junto con restos y artículos para el hogar. El robot "ve" con un IR análisis detector girada por un servo. Ve iz
Basados en Arduino casero elegante IOT sistema

Basados en Arduino casero elegante IOT sistema

Hola, soy Michalis Vasilakis de Ardumotive.com y en esta guía de Instructables te mostraré cómo usted puede hacer fácilmente su propio sistema de casa inteligente basado en Arduino uno y un módulo de Ethernet (o protector).Usted podrá utilizar este s
Alarma de sombra basado en Arduino

Alarma de sombra basado en Arduino

Alarmas de sombra se utilizan generalmente para la protección contra el robo. Una alarma de sombra es un dispositivo que emite una alarma cuando una sombra cae sobre ella. Se describe aquí es un simple circuito de una alarma de sombra basado en ardui
Sistema de seguridad basado en Arduino PIR Motion Sensor

Sistema de seguridad basado en Arduino PIR Motion Sensor

Este proyecto hará nuestro sistema de seguridad basado en Arduino con sensor de movimiento.Cuando el sistema detecta alarma nos avisará por entrar en circuito.http://make.robimek.com/Motion-Security-System-with-Arduino/Paso 1: materiales: Sensor de m
ABCUR - regulador de uso de computadora basado en Arduino

ABCUR - regulador de uso de computadora basado en Arduino

¿Recuerda aquel momento cuando estabas tan absorto en el trabajo en su computadora que completamente perdido noción del tiempo?¿Recuerdo que tenía un dolor de cabeza y calambres en el momento en que se levantó?Recuerde preguntar a ti mismo en cuanto
Basados en Arduino RGB Matrix LED probador

Basados en Arduino RGB Matrix LED probador

Este es un proyecto muy simple de Arduino que controlan el Panel de matriz de 16 x 32 RGB LED mediante un cable IDC de 16pin. El Arduino será continuamente enviando 5 sets colores (rojo, verde, azul, blanco, negro) en el Panel de matriz de LED que pe
Juego de Tetris de matriz de LED bicolor basados en Arduino

Juego de Tetris de matriz de LED bicolor basados en Arduino

Uno de la electrónica DIY kit jolliFactory vino para arriba con es el Kit del módulo de Bi-color LED matriz conductor. Este módulo está diseñado para ser capaz de cadena así que usted puede encadenar los módulos juntos al número de módulos que necesa