Guia CNC Brasil - Tudo sobre CNC, Router, Laser, Torno e 3D Print
ELETRÔNICA / ELÉTRICA => Eletrônica Básica => Microcontroladores => Tópico iniciado por: Marcos Dornelas em 16 de Maio de 2012, 16:43
-
Boa Tarde pessoal,
volto aqui novamente,para dividir com vc's uma(s) duvida(s)...
Estou precisando de um microcontrolador que forneça 3 sinais PWM ao mesmo tempo e em diferentes pinos (obvio).
O microcontrolador 18F2331 possui ate 6 canais (3 "comuns" e 3 complementares).
Gostaria de saber como utilizar esses tres canais.
Um instrutor, me aconselhou a buscar as configurações na biblioteca deste microcontrolador no CCS,mas sao varias configurações e me perco nelas e sempre dão erro.Não sei qual Timer configurar,qual o precaler e outras coisas...
Ja utilizei um canal PWM do pic18F452.
Faço codigos em C no C18 e no CCS.
Grato pela atenção.
Marcos VRD.
-
Marcos, boa noite.
Se você já utilizou o PWM em algum PIC, neste que tem mais canais não será diferente, é igualzinho.
os comandos no CCS serão:
set_pwm1_duty ( valor3 )
set_pwm2_duty ( valor3 )
set_pwm3_duty ( valor3 )
Como a o recurso PWM está diretamente ligado ao timer2 então todos os canais terão a mesma frequência, mas cada canal tem o seu duty cicle diferentes, como mostrado acima.
Os canais complementares, se não me engano, quando são utilizados fornecem um sinal inverso ao canal principal ... mas é preciso ler direitinho no datasheet, pois eu já li mas não utilizei e posso ter me confundido.
Ok? qualquer coisa volta aí ...
-
Boa noite Marcos
Se você já tem o PIC 18F2331, não tem segredo, é como o Blackmore disse. Eu dei uma pesquisada rápida e vi que esse pic não é muito facil de achar. Caso não tenha o PIC, minha dica é usar 2 PIC com 2 canais de PWM(tendo 4 canais no total), o 16f877a por exemplo, que é facil de achar e barato. Ou então usar 3 PIC com 1 canal PWM, o 16f628a por exemplo. Em ambos os casos fazendo os PIC se comunicarem entre si.
Lembrando também pode usar o ci555 para gerar o sinal analógico ajustado por potenciômetro, daí o PIC só liga e desliga esse sinal.
São dicas que podem servir, ou não, depende da sua aplicação.
-
Muito Obrigado pessoal!
Mas Blackmore, então,
também incluo a biblioteca dos timers, e quanto a configuração do timer2,continua sendo a mesma?
-
também incluo a biblioteca dos timers, e quanto a configuração do timer2,continua sendo a mesma?
tudo igual ... só deve se atentar ao detalhe que a frequência do PWM será a mesma para todos os canais PWMs utilizados pois um único timer é amarrado ao pwm, e apenas os seus dutycicle serão manipuláveis.
Eu não quiz comentar antes para não lhe confundir, mas existe também uma forma de você fazer o PWM por software utilizando um timer e com isso você pode utilizar esta técnica para qualquer microcontrolador, mesmo os que não tenham o hardware interno para o PWM.
Mas esta é uma opção um pouco mais complexa caso você não tenha muito traquejo com os controladores.
-
Ok! Obrigado,vou programar agora mesmo...Ainda não fazer o pwm por software como voce disse,mas futuramente,sim gostaria de aprender. Os microcontroladores dominam o mundo...
Novamente,Obrigado
Marcos Dornelas!
-
E aí? conseguiu fazer o trabalho?
-
Cara, realmente não...
Não sei onde estou errando...tudo que eu faço o compilador não compila...
Fiz esse código aqui, bem simples,mas não compilou:
#include<18f2331.h>
#fuses xt,nowdt,nolvp
#byte portb=6
void main(){
setup_oscillator(OSC_8MHZ);
SETUP_CCP2( CCP_PWM_PLUS_3),
//SETUP_TIMER_2(INT_TIMER2|T2_DIV_BY_4),
SETUP_POWER_PWM(PWM_CLOCK_DIV_4),
SETUP_POWER_PWM_PIN S(PWM_BOTH_ON),
SET_TRIS_B((PIN_B0,PIN_B1));
set_pwm1_duty ( 250 );
set_pwm2_duty ( 100 );
//set_pwm3_duty( 50 ); //
}
O compilador vive dizendo que está faltando uma expressão e o set_pwm3_duty,não foi aceito...tem alguma sugestão!?
Obrigado!
-
em qual compilador vamos falar? C18 ou CCS?
-
o set_pwm3_duty,não foi aceito...
Não tem que tirar o "//" da frente do comando? ::) com ele o copilador ignora a linha...
-
Não tem que tirar o "//" da frente do comando? com ele o copilador ignora a linha...
não é apenas isso ... ele só não vai compilar aquela linha se antes nas instruções anteriores não houverem problemas.
Perguntei qual compilador será utilizado justamente por isso ... no primeiro post foi dito que ele faz códigos em CCS e C18 (ambos são linguagem C), mas pelo que entendo não está configurado direito ... por onde começamos? CCS ou C18?
-
Marcos,
Cara, realmente não...
Não sei onde estou errando...tudo que eu faço o compilador não compila...
Fiz esse código aqui, bem simples,mas não compilou:
O compilador vive dizendo que está faltando uma expressão e o set_pwm3_duty,não foi aceito...tem alguma sugestão!?
Poderia informar o compilador e copiar a(s) mensagem(ns) de erro mostrada(s).
-
Estou,usando o CCS. Sobre o comando set_pwm3_duty(valor), coloquei as duas barras,como comentário, justamente por acusar erros frequentemente.
Os erros que aparecem,sempre aparecem nos comandos setup_(...) em todos. Primeiramente ele diz que : Expect comma, (espere por virgulas) e outro erro constante eh : A numeric expression must appear here.
Obrigado!
-
Toda mensagem de erro é dada em uma linha especificamente ... ao mostrar o erro o compilador diz em que linha está o erro basta vc analisar e corrigir o erro.
por favor, copie e cole a lista de erros ... fica mais fácil ajudar, mas digo desde já que acredito ser problema com a configuração ...
-
Marcos,
Aproveitei um tempo livre, e resolvi entender porque vc não compila e não sei se devido ao meu compilador, mas eu não possuo as bibliotecas ... poderia enviá-las para mim?
envie para o meu e-mail, eng-aut no hotmail ponto com ... ok?
vamos ver pq essa bagaça não funciona.
Abraço!
-
Se voce simplesmente copiar e colar os erros ou der um "printscreen" na tela ajudaria...
-
Sim, imagem dos erros em anexo!
-
Conforme a mensagem, está faltando vírgulas nas linhas 18 e 19.
É necessário ler e entender com funcionam os comandos da bilbioteca CCS, eu uso o compilador da Microchip e não esse.
-
Pessoal,
Consegui utilizar apenas dois canais pwm, so falta aprender a utilizar o terceiro,porem reparem (na imagem em anexo) que os sinais não saem dos pinos do porte B, portes de saida pwm desse microcontrolador, eles saem do CCp1 e CCp2 no porte C. Alguém sabe o porque disso acontecer??
O codigo abaixo:
//#include "C:\PICC\testeccs\pwmvai.h"
#include<18f2331.h>
#byte portb=6
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF|ADC_TAD_MUL_0|ADC_WHEN_INT0|ADC_INT_EVERY_OTHER);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
// setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_4,511,1);
// setup_timer_3(T3_DIV_BY_4,255,1)
setup_ccp1(CCP_PWM_PLUS_3);
setup_ccp2(CCP_PWM_PLUS_3);
// SETUP_CCP2(CCP_USE_TIMER3);
// setup_power_pwm(PWM_CLOCK_DIV_4|PWM_FREE_RUN|PWM_UP_TRIGGER|PWM_DEAD_CLOCK_DIV_2);
//set_power_pwm1_duty(PWM_UPDATE_ENABLE);
//setup_power_pwm_pins(PWM_BOTH_ON);
setup_oscillator(OSC_8MHZ|OSC_NORMAL);
//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab
// TODO: USER CODE!!
SET_TRIS_B(PIN_B0|PIN_B1|PIN_B2|PIN_B3|PIN_B4|PIN_B5|PIN_B6|PIN_B7);
// OUTPUT_B(PIN_B0|PIN_B1|PIN_B2|PIN_B3|PIN_B4|PIN_B5|PIN_B6|PIN_B7);
set_pwm1_duty(51);
set_pwm2_duty(25);
// set_pwm3_duty(205);
}
tudo entre comentário // foi o que não funcionou.
Obrigado!
-
Dê uma lida no datasheet, capítulo 15, está tudo explicado lá.
-
Ok, obrigado...realment e o datasheet esclarece muitas coisas...
desisti do CCS, vou tentar programa no C18 mesmo, estou tentando configurar os registradores, já que não conheço as funções para este microcontrolador (PIC18F2331). Lendo o datasheet, me veio uma duvida:
O que seria o PWM TIME BASE? (Cap.17 pg. 184). Não entendi muito bem o que ele faz!
Desde já agradeço!
Obrigado
MVRD
-
Marcos,
Lendo o datasheet, me veio uma duvida:
O que seria o PWM TIME BASE? (Cap.17 pg. 184). Não entendi muito bem o que ele faz!
O PWM requer uma BASE DE TEMPO, um tipo de sinal de clock, que nesse caso, pode ser gerado de quatro maneiras diferentes:
The PWM time base can be configured for four different modes of operation:
• Free Running mode
• Single-shot mode
• Continuous Up/Down Count mode
• Continuous Up/Down Count mode with interrupts for double updates
Sugiro estudar o manual.
-
Muito obrigado...percebi isso assim que mandei a pergunta!
Obrigado!
MVRD