STM32F ADC/PWM 12 bits

Software e Hardware para uC STM

Moderadores: aluis-rcastro, 51

Re: STM32F ADC/PWM 12 bits

Mensagempor carlos25 » 10 Nov 2021 09:11

carlos25
 
Mensagens: 1
Registrado em: 10 Nov 2021 09:08
Localização: chile

Re: STM32F ADC/PWM 12 bits

Mensagempor vtrx » 12 Mar 2022 17:21

Estou voltando aqui para mais 'aulas'...
Seguindo a mesma orientação,qual é a frequência PWM desta rotina(STM32F103)?

Código: Selecionar todos
    /* Step 1: Initialize TIM2 for PWM  */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
   
    TIM_TimeBaseInitStruct.TIM_Prescaler = 0;   
    TIM_TimeBaseInitStruct.TIM_Period = 255-1;   
    TIM2->CCR1 = 128;                                                                  // set the output compare value which determines the duty cycle      
    TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);
    TIM_Cmd(TIM2, ENABLE);

    /* Step 2: Initialize PWM  */
    TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;   
    TIM_OCInitStruct.TIM_Pulse = 0;
    TIM_OC1Init(TIM2, &TIM_OCInitStruct);


A resolução do circuito tem que ser de 8 bits pois os valores tem que estar entre 0 e 255.
Para aumentar ou reduzir a frequência PWM,mas mantendo os valores entre 0 e 255,como devo proceder?
Avatar do usuário
vtrx
Dword
 
Mensagens: 2172
Registrado em: 20 Abr 2008 21:01

Re: STM32F ADC/PWM 12 bits

Mensagempor Guri » 05 Abr 2022 01:06

eletroinf escreveu:Pelo jeito que tu descreveu esse pipoco me faz acreditar que é um detalhe na configuração do PWM. Teria de ver com o osciloscópio ou salvar os valores do duty e visualizar.

Pra usar somente 8 bit, faz um RRF quando lê o valor do ADC, e tá resolvido, algo tipo:

valor_8_bit = ADC_RES >>4;

considerando ADC_RES como sendo o registrador com o resultado da conversão AD, de 12 bit.


Este PIPOCO, provavelmente deva ser o valor de entrada ser maior que a saída, tipo, o buffer de entrada esta em 2048, e o buffer de saida do PWM esta em fixado no máximo em 2047, esta havendo overflon sobre o buffer de saída.
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 447
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: STM32F ADC/PWM 12 bits

Mensagempor Guri » 05 Abr 2022 01:15

Na minha humilde opnião, a melhor resolução seria 16 bits, mas como neste caso específico utilizando PWM como DAC de saída, eu creio que com 72mhz, a melhor resolução será em 10bits PWM. O ideal seria apartir de 12 bits, o som seria mais agradável e com muito menos ruido de quantização.

Eu faria a conversão em 12bits no ADC, e utilizaria um DAC comercial do tipo r2r, salvo engano é o c.i. MCP4921 da microchip. Utilize a SPI para isso.
Outra opção também barata e mais rápida é você fazer uma rede R2R de 12bits, diretamente nos i/os do ARM.

Lembre-se de que você esta trabalhando com variáveis de 16bits, e procure utilizar um vetor de offset, eu particularmente utilizaria 0xff, mas pode ser qualquer outro vetor, até 50% da resolução máxima do DAC.

Jà utilizei os três formatos de DAC, PWM e Rede resistiva. O que melhor se fez, foi o DAC e/ou Rede resistiva. Há sim ia me esquecendo, utilize números positivos ou seja unsignet (0~4095) no caso. Então terá que concatenar os 12 bits de entrada, lembre-se, eles estão divididos em bytes, low e hig. Após concatenar, eu jogaria esses dados do ADC na RAM, separaria uma área de amostragem em RAM, depois o céu é o limite :D . Salvo engano, esses dados concatenados na RAM, podem ser direcionados diretamente para o DAC duma vez só, lendo os vetores de indexação na RAM. Nesta brincadeira, você já conseguiu um retardo interessante entre o sinal de entrada / saída em tempo real, uma frequencia de amostragem interessante seria em 22050hz e sobraria bastante tempo para processar outras coisas (isso com um clock de 72mhz). Outros recursos, como controle de volume e realimentação do sinal, tudo feito no âmbito digital, daria alguns efeitos interessantes, desde eco até chorus, já um reverber decente, teria que lançar mão de outros recursos "DSP" por exemplo, eu acho.
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 447
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: STM32F ADC/PWM 12 bits

Mensagempor eletroinf » 05 Abr 2022 07:51

Ao invés de usar um DAC externo, não seria melhor usar a versão do stm32f103 com DAC (12 bit)?
"De cada um segundo sua capacidade a cada um segundo sua necessidade."
Avatar do usuário
eletroinf
Word
 
Mensagens: 905
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS

Re: STM32F ADC/PWM 12 bits

Mensagempor Guri » 05 Abr 2022 12:35

eletroinf escreveu:Ao invés de usar um DAC externo, não seria melhor usar a versão do stm32f103 com DAC (12 bit)?



Sim, sim, ótima ideia "eletroinf", todo meu respeito e admiração. Eu propus utilizar um dac R2R ou externo, em se trantando do F103 bluepill. Outra boa sugestão seria o STM32F030 ou 051, bem mais barato, se bem que barato hoje em dia tá dificil :D

Saindo ou não um pouquinho fora do tema: Qual é a frequencia ideal de configuração do oscilador do ADC, afim de estabelecer a correta descarga do capacitor interno de "sample hold"?

É interessante entender muito bem o ADC destes ARMs da ST em específico. Eles oscilam demais e suponho eu na minha humilde opnião que seja culpa do oscilador mal calculado do ADC, frequencia muito alta, além do limite de descarga do cap interno, aí embrulha toda a leitura.
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 447
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Anterior

Voltar para STMicroelectronics

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes

cron

x