Low Frequency osciladores so bastante comuns em pedais de efeitos, e so usados para modular tudo do coro para atrasar a pedais tremolo . H uma grande variedade de LFO projeta l fora baseado em op-amp ou transistor desenhos tradicionais, mas eles so muito limitante. Ao limitar, quero dizer que voc implement-las e obter um LFO muito tradicional, ele rampas para cima e para baixo . Claro que voc tem controles de profundidade e velocidade para variar o LFO, mas ainda um assunto puramente up / down. Se voc quiser comear a fantasia e adicionar sequenciamento ou outras formas de onda mais interessantes, voc precisa criar, depurar e construir circuitos com muito mais componentes. No me interpretem mal - h uma srie de fantsticos circuitos LFO l fora, mas eu encontrei-me procura de algo diferente. Enquanto eu refletia sobre o projeto para um verdadeiramente flexvel LFO / sequenciador, lembrei-me do trabalho que fiz no Console Punk Arduino , um microcontrolador baseado tom seqenciador. Gostei muito desse projeto porque ele me permitiu usar minhas habilidades de programao (que superam minhas habilidades muitas vezes incompetentes eletrnicos). Eu poderia escrever cdigo, test-lo, ajust-lo, modific-lo, tudo com o computador. Essa experincia levou a uma abordagem diferente para um projeto LFO: um controlado por um microcontrolador. Aqui est o que eu queria realizar: LFO ajustvel Padro, com controles de velocidade e profundidade
Onda senoidal e sada de onda quadrada
Sada de valores aleatrios
Controle Sequencer, ou seja, selecionar valores especficos para vrias etapas e t-lo de reproduo
Controle do usurio em tempo real sobre diversos parmetros
Experimentao com compsitos e bastardizations do acima.
Anncios do OnlineBrowserAdvertisingOpes de anncios The Big Picture O microcontrolador (MCU) responsvel pelo envio de tenses variveis ao longo do tempo (tal como a altura dos tons tradicional) a um efeito que pode ser modulado por uma tenso, ou um vaso de um efeito analgico tradicional, que pode ser substitudo com um optoisolator / vactrol. Aqui est um diagrama de blocos:
1. esquerda, podemos escrever um cdigo que diz o MCU para tenses de sada com base nas variveis do programa. Temos tambm o MCU ler vrios potes e switches conectados a ele. Isso nos d o controle em tempo real sobre os parmetros de nosso programa de LFO.
2. Uma vez que o programa est pronto, ns envi-lo para o MCU. Se compila e executa corretamente, estamos prontos para passar para a prxima etapa. Se no, vamos voltarpara o computador e depurar o problema.
3. A MCU envia ento uma srie de tenses para a entrada do efeito anlogo. Podemos fazer isso diretamente com uma tenso de controle, ou ter a MCU dirigir um optoisolator / vactrol para agir como um potencimetro.
4. A partir da, a guitarra conecta o efeito e, em seguida, um amplificador e estamos prontos para ouvir os resultados. Uma nota importante: Se voc novo para MCUs, voc pode ter a impresso de que um laptop ou desktop computador sempre tem que ser parte da equao. Em outras palavras, voc no poderia fazer um pedal de efeito real, porque voc sempre tem que carrinho em torno de seu laptop. No verdade! O computador onde voc escreve, testar e afinar seu cdigo. Depois de ter baixado o cdigo para o MCU, pode desligar o laptop, furar o MCU em um gabinete, juntamente com as tomadas e interruptores tradicionais, e nunca mais ter de voltar a ligar o computador. Mesmo que o MCU perde energia, ele vai manter a sua programao. Ento, ter MCUs como parte de um projeto pedais / pedal muito vivel. Digite o Arduino, Stage Left Como eu j tinha um conhecimento bsico de programao do microcontrolador Arduino, escolher que para o motor LFO era simples. Eu tenho algumas placas Arduino no bin partes, ento vamos embora. Aqui esto algumas das coisas bsicas sobre o Arduino que o tornam um ajuste muito bom com este projeto: Bastante baixo custo : Voc pode obter uma placa de desenvolvimento completo para menos de 40 dlares.
Fcil de programa: O Ardunio inclui um muito simples software editor de desenvolvimento e uma linguagem Java- like simplificada
Open Source : Ao contrrio de sistemas proprietrios fechados, o Arduino open-source. Voc no est preso a um nico fornecedor ou tecnologia. H toneladas de peas padro da indstria que voc pode interagir com, e pelo menos quatro fontes diferentes para Arduino ou placas Arduino compatveis.
Muita I / 'O, analgica in / out portos, e digitais de entrada / sada portas, j no conselho.
Saiba mais sobre Arduino Claro, voc pode usar qualquer MCU, e existem centenas de variaes para escolher. Google o tema e voc vai encontrar uma vida de aprendizado e diverso pela frente. MCU Interface com o mundo fsico Lembre-se o objetivo do projeto de "controle do usurio em tempo real sobre diversos parmetros"? Bem, em um tradicional programa de computador , voc teria uma tela e um teclado e um mouse, e interagir com o programa eo computador atravs de coisas como menus e barras de rolagem, etc. Mas ns queremos uma interface baseada em hardware. Por isso, queremos definir parmetros com as coisas que gostamos de ver em pedais: potes e switches. Felizmente, MCUs fazer esta incrivelmente simples. Nossa MCU tem um conjunto de analgico para digital conversores (ADCs). Eles experimentar uma tenso analgica e transform-lo em um valor digital que o nosso programa pode ler. Lendo um Switch O exemplo mais bsico um switch:
Aqui um timo tutorial sobre como trabalhar com Switches no Arduino. Ler um potencimetro Pots so fceis tambm. Basta conectar o pot-se como um divisor de tenso e ter sua sada ir para um dos ADCs no MCU. Como voc virar o pote, voc variar a tenso indo para o ADC, e seu programa simplesmente l esse valor:
Para implementar um divisor de tenso com Arduino, conecte lug 1 para o solo, lug 2-1 das entradas analgicas, e lug 3 a 5 VDC + pino. Em seguida, use uma nica linha de cdigo simples para ler o valor atual, conforme mostrado no exemplo de cdigo. A combinao de dispositivos interminvel. Voc pode substituir vasos com resistores dependentes de luz, ou um joystick ou um localizador de alcance ultra-snica. Do mesmo modo, os comutadores pode ser substitudo com outros controladores, nem interfaces com outros microcontroladores ou computadores. Essa uma das belezas de usar um MCU - h muitas maneiras fceis de interagir com o mundo fsico. Tudo sobre PWM A fim de criar um LFO vivel, um dos requisitos fundamentais a seguinte: Eu preciso ter a MCU enviar uma tenso contnua varivel, que varia ao longo do tempo . Mas o MCU tradicionalmente um dispositivo binrio / digital. Ele no suporta nativamente uma gama analgico continuamente varivel, como tenso. Ento, eu estou afundado certo? No afundado em tudo: PWM para o resgate. O Arduino, juntamente com a maioria dos MCUs, permite a sada uma tenso varivel. Ele faz isso atravs do uso de largura de pulso modulao. Eu seria louco de tentar explicar PWM em detalhes aqui, dado o nmero de excelentes artigos na web , mas basta dizer, o MCU utiliza uma srie de muito rigor espaados on / off pulsos para simular uma sada analgica. Uso oanalogWrite () funo para emitir um valor de 0 a 255. Um valor de 0 significa 0 volts na sada LFO, e 255 significa que uma sada da tenso de alimentao completa (5 volts no caso de o Arduino) para o sada LFO. Aqui est um grande grfico, roubado da wikipedia, que mostra como uma sada PWM pode simular uma forma de onda analgica :
A coisa interessante sobre PWM que ele no faz as curvas suaves de sada analgica de tipo linear. de ligar / desligar em intervalos especficos. Mas podemos obter curvas suavizadas de PWM, percorrendo valores em um loop: / / Hard sada on / off analogWrite (outPin, 255); / / Hard on (heh, entendeu?) delay (100); analogWrite (outPin, 0); / / Hard off delay (100) / / Uma abordagem mais suave for (contador = 0; counter <= 255, o contador + = 1) / / rampa at { analogWrite (outPin, contador); } for (contador = 255; counter <= 0; contra-= 1) / / rampa { analogWrite (outPin, contador); } O primeiro trecho bate a sada em, faz uma pausa, e ento bate a sada fora. O segundo um pouco mais sutil, ele gradualmente rampas a tenso acima de 0 a 255, e depois, gradualmente, rampas de volta para baixo. Ambos os tipos de modulao de sada so teis, e eu vou usar tanto no cdigo para o meu LFO. Para ter uma idia melhor de como PWM tenta aproximar / curvas analgicos-y lineares, ver as formas de onda mostradas na tabela de modos abaixo. Vamos falar em Cdigo O corao de fazer este trabalho esquema louco a programao: escrever cdigo para dizer ao MCU o que fazer. Queremos que o MCU para: Inicializar corretamente quando ele ligado
Continuamente digitalizar os controles ligados a ele (panelas e switches)
Modificar seu comportamento com base nos controles
Sada de tenses para o pedal de efeitos. Para criar o LFO mais flexvel, eu decidi criar diferentes modos de LFO. Cada ia utilizar um algoritmo diferente para modular o LFO de uma maneira diferente. Aqui est o que eu vim acima com. Cada modo explicado junto com um trecho de cdigo e uma imagem da forma de onda. Modo Forma de Onda Chopper modo The Chopper um disco on / off onda de sada. Eu simplesmente virar o LFO full on, aguarde o perodo de tempo especificado pelo potencimetro taxa, gire o LFO completo, espere novamente e repita. O cdigo simplificado parece com isso:
Pique suave Ao modificar o algoritmo de Chopper, eu posso fazer o chop um pouco mais suave. Eu fao isso adicionando ramp up / rampa valores para suavizar a sada um pouco.
Aleatrio Random modo utiliza a funo Arduino aleatrio () para gerar um nmero aleatrio. Note que eu tento normalizar esses valores um pouco, eu no quero um monte de valores "full-off/zero" l dentro. Lembre-se de obter a funo Aleatrio para fazer um trabalho razovel, bem, aleatoriedade, voc precisa chamar o Randomize function () no incio do seu cdigo. No meu caso, eu definir o valor da semente da tenso de entrada de uma entrada analgica no utilizado - a teoria de que no vai haver algum tipo de rudo em que a porta no utilizado, e no faria to bom quanto qualquer uma semente.
/ / Modo aleatrio, obter um nmero aleatrio entre os limiares int randNumber = random (RAND_LOW_THRESHOLD, RAND_HIGH_THRESHOLD); analogWrite (PIN_PWMOUT, randNumber); atraso (tempo / 2); analogWrite (PIN_PWMOUT, 255 - randNumber); atraso (tempo / 2) ;
Frequncia Este modo uma variao sobre o modo aleatrio, e realmente parece muito mais agradvel se voc estiver procurando por um 'sample e hold' tipo de sequncia. Como o modo Aleatrio, que gera nmeros aleatrios, mas ao invs de apenas mandar esse nmero aleatrio como um valor de tenso de sada, ele envia-lo para Paul Badger funo FrequOut muito cool 's (), que usa PWM para gerar freqncias de udio na porta de sada.
int randNumber = random (ajustar, ajustar * 4); freqout (randNumber, tempo); CheckControls ();
Ajustvel ajustvel diverso: como modo de freqncia, ele usa a funo FREQOUT (), mas em vez de tenses aleatrias, ele usa um pote para controlar a frequncia real.
int fixo = analogRead (PIN_MODETWEAK); freqout (fixo, tempo / 2); freqout (1024-fixados, tempo / 2);
Usurio Sequence Qual seria o ponto de um dispositivo baseado no MCU sem um modo de sequenciador legal.Neste modo, voc pode especificar o nmero de passos e, em seguida, conecte um valor especfico em qualquer um desses passos. Em seguida, os LFO percorre os seus valores, no muito diferente dos circuitos sequenciador usados em sintetizadores analgicos.
? Pendente
Ver o cdigo-fonte O Filtro / Efeito Wah Claro, um LFO por si s intil a menos que seja realmente controlar alguma coisa. Como mencionado anteriormente, voc pode usar este LFO para controlar todos os tipos de coisas.Para os meus propsitos com o Filtro Digital Sequenced Wah, eu queria um circuito que iria se comportar bem como um wah e como um tremolo pseudo. Acontece que o Colorsound Indutor-less design de Wah, com alguns ajustes, funciona muito bem. Meus modificaes no circuito incluem: a adio de um tampo JFET na frente do circuito (Q1, etc)
condensadores de acoplamento maiores (C2 e C3)
Uma gama comutvel para os capacitores de ressonncia (SW2, C6A, C6B)
Uma ressonncia sintonizvel, com a adio de um pote (VR4)
Substitua o pote wah com um vactrol VTL5C9 Uma nota importante: Os esquemas e arte PCB so preliminares e no verificadas neste momento.
Esquema - Clique na imagem para uma verso maior Juntando tudo: Interface MCU at Effect
VTL5C9 Datasheet As duas formas gerais para a interface do LFO a um circuito esto a utilizar diretamente a tenso de sada LFO (ala Conntrol tenso), ou para usar um optoisolator para substituir um potencimetro existente no circuito. Desde que eu estou usando um circuito que j tem um pot para controlar o wah, a escolha de uma optoisolater fcil. Eu passei por uma variedade de optoisolators commerical, o uso de dispositivos PerkinElmer VACTROL. O que eu liquidada em a VTL59C. Ele tinha o melhor tempo de resposta e melhor curva global para o meu circuito especfico. Para domar um pouco do barulho vindo do MCU antes de atingir o vactrol, coloquei em um filtro simples que consiste em R4 e C5. O Vactrol tambm teve um efeito colateral inesperado - sua latncia ajudou suavizar as speras passos / picos da sada PWM. Apenas para fins de exibio Desde que eu tenho controles de taxa, modo e modo de ajuste, com certeza seria bom ter o pedal de mostrar o que o qu. Eu poderia usar indicadores LED tradicionais, mas que faria underkill srio desde que eu tenho um MCU que suporta uma porta de sada de srie minha disposio. Tudo que eu preciso agora um dispositivo que tem uma entrada serial. Sparkfun Eletrnica cuida dessa parte para mim. Eles oferecem uma variedade de painis de LCD, mas o legal que eles adicionar uma placa de entrada serial pequeno, chamado de SerLCD.Este add-on placa elimina o tedioso trabalho para obter um display LCD de interface paralela ao trabalho. Em vez de toda a misria, eu simplesmente ligar trs fios do LCD para o Arduino e escrever um pouco de cdigo.
Grandes LCDs de SparkFun Para ligar o LCD, eu passar os fios a 5VDC +, cho, e TX de srie:
O cdigo de acesso ao LCD um pouco complicado, principalmente porque a documentao projetado para uso MCU genrica, no especificamente para o Arduino. H tambm uma outra questo que me fez puxar meu cabelo para os dias: a srie in / out no Arduino compartilhada com a porta USB. Ento, quando voc carregar o seu programa a partir do computador para o Arduino, o cdigo objeto abandonada na porta de srie tambm. Isto significa que todos os dados binrio aleatrio est sendo despejado no LCD como carregado para o microprocessador. Isso pode deixar o seu LCD em um confuso, e muitas vezes mortos, Estado. Para contornar esse problema, voc tem duas escolhas. 1) Lembre-se sempre de desligar fios RX do conselho SerLCD do porto Arduino TX antes de carregar um programa. Isso fcil, mas eu garanto que voc vai se esquea de faz-lo todas as vezes, e isso significa que voc vai Farkle a placa LCD, assim como eu fiz mil vezes. Uma melhor abordagem envolve a re-inicializao do LCD cada vez que seu Ardunio inicia. Aqui est o cdigo de arranque eu uso: / / ******************************************* / / STUFF LCD / / beavis udio / mar 2008 / controle / LCD constantes # define SERLCD_CMD 0xfe # define SERLCD_XCMD 0x7C / / dezembro 124 # define SERLCD_CTRLK 0x0B # define SERLCD_CTRLM 0x0D # define SERLCD_CTRLJ 0x0A # define SERLCD_CLEAR 0 01 # define SERLCD_MOVE1_R 0 14 # define SERLCD_MOVE1_L 0 10 # define SERLCD_SCROLL_R 0 1C # define SERLCD_SCROLL_L 0 18 # define SERLCD_DISP_ON 0 0C # define SERLCD_DISP_OFF 0 08 # define SERLCD_UNDERLINE_CURSOR_ON 0 0E # define SERLCD_UNDERLINE_CURSOR_OFF 0 0C # define SERLCD_BLINKING_CURSOR_ON 0 0D # define SERLCD_BLINKING_CURSOR_OFF 0 0C # define SERLCD_SET_CURSOR_POS 0 80 # define SERLCD_CURSOR_OFF 0 0C LCD_Clear void () { Serial.print (254, BYTE); Serial.print (1, BYTE); } / * LCD_SetBacklight - ajustar o brilho da luz de fundo int Bright - 128 = mais baixo, 157 = mais brilhante * / LCD_SetBacklight void (int brilhante) { / / LCD espera valores entre 128 e 157 int valor = brilhante + 127; Serial.print (SERLCD_XCMD, BYTE); Serial.print (valor, BYTE); } LCD_Init void () { Serial.begin (9600); Serial.print (SERLCD_XCMD, BYTE); Serial.print (SERLCD_CTRLM, BYTE); delay (300); LCD_Clear (); / / Configure a mensagem de inicializao, esta s precisa ser / / brilhou uma vez / * Serial.print ("beavis Digital"); Serial.print (254, BYTE); Serial.print (192, BYTE); Serial.print ("DSWF 1.0"); srie. print (SERLCD_XCMD, BYTE); Serial.print (SERLCD_CTRLJ, BYTE); * / LCD_SetBacklight (30); } LCD_Newline void () { Serial.print (254, BYTE); Serial.print (192, BYTE); }
Note-se que mesmo com esse cdigo start-up, voc pode precisar de realmente desligar e ligar em sua placa Arduino (desligue a energia para a placa, esperar dez segundos, reconecte o poder) para obter o LCD para funcionar corretamente. Lidar com rudo Como eu estava desenvolvendo este circuito, foi tranqila como um rato. No LFO sangrar-thru, no hum ou outro dissabor. Mas isso foi porque o MCU eo filtro Wah estavam cada um em sua prpria fonte de alimentao. O ran MCU da potncia fornecida pelo cabo USB ligado ao computador eo Wah foi alimentado pela placa de ensaio alimentado. Todo mundo estava feliz. Como eu comecei a trabalhar para terminar as coisas, uma tarefa foi executada a coisa toda fora de uma nica fonte de alimentao. Depois de ligar isso, fiquei chocado: era incrivelmente barulhenta: vrias frequncias diferentes de zumbido, e um sinal de PWM extremamente audvel sangramento atravs de. Depois de algumas consultas com os orculos de DIYStompboxes.com, eu adicionar um monte de filtragem da fonte de alimentao. No esquema, voc ver 100 resistores ohm polvilhado por toda parte, juntamente com uma tampa grande 470uf. Estes todos contriburam muito para conseguir o rudo e sangrar-thru para nveis administrveis. Ele ainda no est morto em silncio, mas eu acredito que uma vez que recebo tudo isso em um PCB e em um gabinete aterrado, ele vai fazer muito bem. Ok, chega tolices. Vamos Construir o Damn Thing Ento, eu tinha este construdo e espalhados por uma mesa inteira: laptop, cabo de interface USB, MCU, placa de ensaio para MCU, fonte de alimentao, cabos para placa de ensaio principal, placa de ensaio principal, tomadas de sada, etc Foi divertido, mas no seria realmente apto na minha pedaleira.
Ento, como faz-lo em um pedal? Uma palavra: planejamento. Fiz os mockups no Visio, ea medida de cada componente, descobri como ele iria se encaixar em uma caixa, e depois construiu alguns modelos de papel para testar tudo. O resultado final um gabinete Hammond 1790NS para segurar tudo. Aqui est o layout at o momento.
PCB para o lado analgico da casa feita e pronta para teste.
Ainda Lotes resta a fazer At o momento, ainda h muitas coisas para fazer. Precisa gravar uma PCB para o wah filtro, faa o recinto, e construir tudo. Claro, os obrigatrios vdeo / clips ter que acontecer com.Enquanto isso, espero que a cobertura aqui pelo menos um pouco interessante. Concluso e reas de Estudo O material discutido aqui somente arranha a superfcie. Entre a capacidade de um MCU de gerar uma srie aparentemente infinita de opes de sada, e o nmero de analgico e digital efeitos que pode ser modulado por isso, tambm no parece ser um terreno frtil aqui para experimentao. Se voc quiser saber mais sobre alguns dos temas e tecnologias apresentadas aqui, confira o seguinte: Arduino Site Oficial: Saiba mais sobre o hardware e software Arduino V l Bare Bones Board, uma grande Arduino clone de baixo custo V l Sparkfun: nice loja online de toneladas de MCUs, perifricos e monitores V l LadyAda: mais grandes projetos Arduino V l Arduino cobertura no Blog Marca V l Informaes Vactrol da PerkinElmer V l Outra fonte potencial de LCDs de srie V l Micro-controlador frum DIY em electro-music.com V l