Imprecisão de tempo de delay no STM32 ou pino incorreto?

Meu post importado de outro forum.

Um salve a todos do forum.
Estou fazendo testes com 3 micro processadores, o Arduino nano, STM 32 e o ESP 32.
Tive problemas com leitura de controle de fluidos e achei os resultados um pouco estranhos, por isso resolvi fazer testes utilizando um osciloscópio.
A principio resolvi fazer um simples teste com a função delayMicroseconds com pinout high de 1.2 ms em cada um dos três. 
Os Arduino (UNO e NANO), ESP32 Wroom estavam precisos com a leitura do osciloscópio mas o STM32 precisou de um fator de correção para diminuir o tempo que estava acima de 1.2 ms.
Estaria eu utilizando um pino errado (PB5) para executar esta função?
Segue abaixo o exemplo do código utilizado no arduino ide 

// ################# Definicao de constantes
#define FUEL PB5 // output DO PULSO
// ################# Declaracao de variaveis
float PULSO = 1.2 ; // TEMPO DE DURAÇÃO DO PULSO EM MS a ser convertido em microsegundos
float FATOR = 0.85; // fator de correção de 0,85 para ajustar o tempo lido no osciloscópio
float PULSOM = PULSO * 1000 * FATOR ; // TEMPO ESTADO HIGH

do
{
digitalWrite(FUEL, HIGH);
delayMicroseconds(PULSOM);
digitalWrite(FUEL, LOW);
delay(500); // TEMPO DE ESTADO LOW
}
while (1 == 1);

###############################################################################

Exibições: 1142

Responder esta

Respostas a este tópico

Bom dia Carlos, 

Acho que esta havendo um mal entendido. 

Você informou RC interno . Eu entendi que você estava usando o clock interno RC . 

Na verdade para o clock do seu STM32 deve usar um cristal. 

Qual a frequencia do cristal (clock) da sua placa. Qual é a sua placa? envie o link por favor. 

Como eu já havia informado, essas placas chinesas usam cristais baratos e de baixa qualidade. A frequência do clock pode ter desvios expressivos. 

Você chegou a medir a frequência do clock (cristal) com osciloscópio?

Todos os circuitos de temporização do Micro-controlador dependem do clock (cristal). 

Se a frequência do cristal estiver errada, todos os timers terão o mesmo erro. 

Bom dia CB,

segue resultado do STM-32 e do arduino mini.

RV

O teste do STM32 foi efetuado com o fator de correção = 1 ?

[ ]´s

Neste gráfico não, mas fiz com fator 1 e mediu 2200 useg

RV

10% de erro para mais.

Ou é erro do compilador Arduíno IDE para STM_32, ou é cristal ou você tem um STM32 que veio do mesmo lote que o meu rs...

Obrigado pelos testes.

Qual seria o próximo passo?

Notificar algum desenvolvedor do Arduino ou da STM?

Vendo o cristal oscilador dele com osciloscópio de um ciclo a cada 0,12 useg,

o que resulta em +- 8,333 MHz.

RV

Putz, Cristal de 8,0 MHz oscilando a 8,333 MHz. 

Tô falando !

Cristal barato e impreciso. 

A placa de vocês é essa ?

isso ai.

Testei o seu sketch para nano, no ESP8266, mudando os port para 4 e 5.

O resultado foi : tempo do pulso 2,004 μseg.

O ESP8266  tem um cristal muito fera de 26 MHz, que fica dentro do modulo revestido pela blindagem.

2004 total. Erro de 4 em 2000  = 2%%

RV

Mas se a frequência do cristal for maior que a indicada, isso significa que timer interno ficou ligeiramente mais rápido e partindo deste pensamento, o delay do pulso deveria ser menor que 2 ms e não o inverso dos testes que ficou 10% mais lento.

Então imagino que possa ocorrer algum problema no compilador.

Existe outro compilador para STM32 que não seja o Arduíno IDE para testar?

Bom dia , 

Você esta usando essa definição de placa STM32 na Arduino IDE ? Qual a versão da Arduino IDE ? (recomendo que atualize para a mais nova versão 1.8.7:

A versão é a mesma, só o Arduíno ide que uso é 1.8.5

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço